Pi 的配置、擴充、平台設定和 API 參考。

主題

pi 可以建立主題。要求它為您的設定建立一個。

主題是定義 TUI 顏色的 JSON 檔案。

目錄

地點

Pi 從以下位置載入主題:

  • 內建:darklight
  • 全球:~/.pi/agent/themes/*.json
  • 項目:.pi/themes/*.json(僅在專案信任後)
  • 包:themes/目錄或package.json中的pi.themes條目
  • 設定:themes包含檔案或目錄的陣列
  • CLI: --theme <path>(可重複)

使用 --no-themes 禁用發現。

選擇主題

透過 /settingssettings.json 選擇主題:

{
  "theme": "my-theme"
}

首次運作時,pi 會偵測您的終端背景並預設為 darklight

建立自訂主題

  1. 建立主題檔案:
mkdir -p ~/.pi/agent/themes
vim ~/.pi/agent/themes/my-theme.json
  1. 使用所有必需的顏色定義主題(參見Color Tokens):
{
  "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
  "name": "my-theme",
  "vars": {
    "primary": "#00aaff",
    "secondary": 242
  },
  "colors": {
    "accent": "primary",
    "border": "primary",
    "borderAccent": "#00ffff",
    "borderMuted": "secondary",
    "success": "#00ff00",
    "error": "#ff0000",
    "warning": "#ffff00",
    "muted": "secondary",
    "dim": 240,
    "text": "",
    "thinkingText": "secondary",
    "selectedBg": "#2d2d30",
    "scrollbarThumb": "#555566",
    "userMessageBg": "#2d2d30",
    "userMessageText": "",
    "customMessageBg": "#2d2d30",
    "customMessageText": "",
    "customMessageLabel": "primary",
    "toolPendingBg": "#1e1e2e",
    "toolSuccessBg": "#1e2e1e",
    "toolErrorBg": "#2e1e1e",
    "toolTitle": "primary",
    "toolOutput": "",
    "mdHeading": "#ffaa00",
    "mdLink": "primary",
    "mdLinkUrl": "secondary",
    "mdCode": "#00ffff",
    "mdCodeBlock": "",
    "mdCodeBlockBorder": "secondary",
    "mdQuote": "secondary",
    "mdQuoteBorder": "secondary",
    "mdHr": "secondary",
    "mdListBullet": "#00ffff",
    "toolDiffAdded": "#00ff00",
    "toolDiffRemoved": "#ff0000",
    "toolDiffContext": "secondary",
    "syntaxComment": "secondary",
    "syntaxKeyword": "primary",
    "syntaxFunction": "#00aaff",
    "syntaxVariable": "#ffaa00",
    "syntaxString": "#00ff00",
    "syntaxNumber": "#ff00ff",
    "syntaxType": "#00aaff",
    "syntaxOperator": "primary",
    "syntaxPunctuation": "secondary",
    "thinkingOff": "secondary",
    "thinkingMinimal": "primary",
    "thinkingLow": "#00aaff",
    "thinkingMedium": "#00ffff",
    "thinkingHigh": "#ff00ff",
    "thinkingXhigh": "#ff0000",
    "thinkingMax": "#ff0088",
    "bashMode": "#ffaa00"
  }
}
  1. 透過/settings選擇主題。

熱重載: 當您編輯目前活動的自訂主題檔案時,pi 會自動重新載入它以獲得即時視覺回饋。

主題格式

{
  "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
  "name": "my-theme",
  "vars": {
    "blue": "#0066cc",
    "gray": 242
  },
  "colors": {
    "accent": "blue",
    "muted": "gray",
    "text": "",
    ...
  }
}
  • name 是必需的,必須是唯一的,且不能包含/
  • vars 是可選的。在這裡定義可重複使用的顏色,然後在colors中引用它們。
  • colors 必須定義所有 51 個必需的標記。 thinkingMax 是可選的,並回落到 thinkingXhighscrollbarThumb 是可選的,並回落到 selectedBg

$schema 欄位支援編輯器自動完成和驗證。

顏色標記

每個主題必須定義所有 51 個必需的顏色標記。 thinkingMaxscrollbarThumb是可選的,以兼容現有主題;省略時,它們分別使用 thinkingXhighselectedBg

核心 UI(11 種顏色)

代幣 目的
accent 主要強調(標誌、所選項目、遊標)
border 正常邊框
borderAccent 突出顯示的邊框
borderMuted 微妙的邊界(編輯)
success 成功狀態
error 錯誤狀態
warning 警告狀態
muted 次要文本
dim 第三級文本
text 預設文字(通常為""
thinkingText 思維區塊文本

背景和內容(11 個必需,1 個可選)

代幣 目的
selectedBg 選定的線條背景
scrollbarThumb 全螢幕滾動條拇指背景;可選,回落至 selectedBg
userMessageBg 用戶留言背景
userMessageText 使用者訊息文字
customMessageBg 分機訊息背景
customMessageText 擴展訊息文本
customMessageLabel 擴展訊息標籤
toolPendingBg 工具箱(待定)
toolSuccessBg 工具箱(成功)
toolErrorBg 工具箱(錯誤)
toolTitle 工具標題
toolOutput 工具輸出文字

Markdown(10種顏色)

代幣 目的
mdHeading 標題
mdLink 連結文字
mdLinkUrl 連結網址
mdCode 內聯程式碼
mdCodeBlock 程式碼區塊內容
mdCodeBlockBorder 代碼塊圍欄
mdQuote 區塊引用文本
mdQuoteBorder 區塊引用邊框
mdHr 水平尺
mdListBullet 列出項目符號

工具差異(3 種顏色)

代幣 目的
toolDiffAdded 已新增線路
toolDiffRemoved 刪除的行
toolDiffContext 上下文線

語法反白(9 種顏色)

代幣 目的
syntaxComment 評論
syntaxKeyword 關鍵字
syntaxFunction 函數名稱
syntaxVariable 變數
syntaxString 弦樂
syntaxNumber 數位
syntaxType 類型
syntaxOperator 營運商
syntaxPunctuation 標點

思維層次邊界(6 個必需,1 個可選)

編輯器邊框顏色表示思考層次(視覺層次從微妙到突出):

代幣 目的
thinkingOff 思考
thinkingMinimal 最少的思考
thinkingLow 低思維
thinkingMedium 中等思維
thinkingHigh 高思想
thinkingXhigh 超高思維
thinkingMax 最大限度的思考;可選,回落到 thinkingXhigh

重擊模式(1 種顏色)

代幣 目的
bashMode bash 模式下的編輯器邊框(! 前綴)

HTML 匯出(可選)

export 部分控制 /export HTML 輸出的顏色。如果省略,則顏色源自 userMessageBg

{
  "export": {
    "pageBg": "#18181e",
    "cardBg": "#1e1e24",
    "infoBg": "#3c3728"
  }
}

顏色值

支援四種格式:

格式 例子 描述
十六進位 "#ff0000" 6 位元十六進位 RGB
256色 39 xterm 256 色盤索引 (0-255)
多變的 "primary" 引用 vars 條目
預設 "" 終端的預設顏色

256 調色板

  • 0-15:基本 ANSI 顏色(取決於終端)
  • 16-231:6×6×6 RGB 立方體(16 + 36×R + 6×G + B,其中 R、G、B 為 0-5)
  • 232-255:灰階漸變

終端相容性

Pi 使用 24 位元 RGB 顏色。大多數現代終端機都支援此功能(iTerm2、Kitty、WezTerm、Windows Terminal、VS Code)。對於僅支援 256 色的舊終端,pi 會回落到最接近的近似值。

檢查真彩色支援:

echo $COLORTERM  # Should output "truecolor" or "24bit"

尖端

深色終端: 使用明亮、飽和且對比較高的顏色。

燈終端: 使用較暗、柔和的顏色和較低的對比。

色彩和諧: 從基礎調色板(Nord、Gruvbox、Tokyo Night)開始,在 vars 中定義它,並一致地引用。

測試: 使用不同的訊息類型、工具狀態、Markdown 內容和長換行文字檢查您的主題。

VS Code:terminal.integrated.minimumContrastRatio 設為 1 以獲得準確的顏色。

範例

查看內建主題: