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

Pi Packages

pi 可以幫助您建立 pi 套件。要求它捆綁您的擴充功能、技能、prompt templates或主題。

Pi 打包捆綁擴充、技能、prompt templates 和主題,以便您可以透過 npm 或 git 分享它們。套件可以在 pi 鍵下的 package.json 中宣告資源,或使用常規目錄。

目錄

安裝和管理

安全性: Pi 軟體包以完全系統存取權限運作。 Extensions執行任意程式碼,技能可以指示模型執行任何操作,包括運行可執行檔。在安裝第三方軟體包之前檢查原始程式碼。

pi install npm:@foo/bar@1.0.0
pi install git:github.com/user/repo@v1
pi install https://github.com/user/repo  # raw URLs work too
pi install /absolute/path/to/package
pi install ./relative/path/to/package

pi remove npm:@foo/bar
pi list                     # show installed packages from settings
pi update                   # update pi only
pi update --all             # update pi, update packages, and reconcile pinned git refs
pi update --extensions      # update packages and reconcile pinned git refs only
pi update --models          # refresh model catalogs only
pi update --self            # update pi only
pi update --self --force    # reinstall pi even if current
pi update npm:@foo/bar      # update one package
pi update --extension npm:@foo/bar

這些指令管理 pi 套件,pi update 可以更新 pi CLI 安裝。要卸載 pi 本身,請參閱 Quickstart

預設情況下,installremove 寫入使用者設定 (~/.pi/agent/settings.json)。請使用 -l 寫入項目設定 (.pi/settings.json)。專案設定可以與您的團隊共享,並且在專案受信任後,pi 會在啟動時自動安裝任何缺少的軟體包。

要試用某個套件而不安裝它,請使用 --extension-e。這將安裝到僅用於目前運行的臨時目錄:

pi -e npm:@foo/bar
pi -e git:github.com/user/repo

包來源

Pi 在設定和pi install 中接受三種來源類型。

npm

npm:@scope/pkg@1.2.3
npm:pkg
  • 版本化規格由軟體包更新固定和跳過(pi update --extensionspi update --all)。
  • 用戶安裝位於 ~/.pi/agent/npm/ 下。
  • 項目安裝量低於 .pi/npm/
  • settings.json 中的 npmCommand 設定為將 npm 套件尋找和安裝操作固定到特定的包裝器指令,例如 miseasdf

例子:

{
  "npmCommand": ["mise", "exec", "node@20", "--", "npm"]
}

git

git:github.com/user/repo@v1
git:git@github.com:user/repo@v1
https://github.com/user/repo@v1
ssh://git@github.com/user/repo@v1
  • 如果沒有 git: 前綴,則僅接受協定 URL(https://http://ssh://git://)。
  • 使用git:前綴,接受簡寫格式,包括github.com/user/repogit@github.com:user/repo
  • HTTPS 和 SSH URL 皆受支援。
  • SSH URL 自動使用您設定的 SSH 鍵(尊重 ~/.ssh/config)。
  • 對於非互動式運行(例如 CI),您可以設定 GIT_TERMINAL_PROMPT=0 以停用憑證提示,並設定 GIT_SSH_COMMAND(例如 ssh -o BatchMode=yes -o ConnectTimeout=5)以快速失敗。
  • 參考文獻是固定標籤或提交。 pi update --extensionspi update --all 不會將它們移動到較新的引用,但它們確實會將現有克隆與配置的引用進行協調。
  • 使用 pi install git:host/user/repo@new-ref 更新設定並將現有套件移至新的固定引用。
  • 克隆到 ~/.pi/agent/git/<host>/<path>(全域)或 .pi/git/<host>/<path>(項目)。
  • 當協調更改結帳時,pi 會重設並清理克隆,然後如果 package.json 存在則運行 npm install

SSH 範例:

# git@host:path shorthand (requires git: prefix)
pi install git:git@github.com:user/repo

# ssh:// protocol format
pi install ssh://git@github.com/user/repo

# With version ref
pi install git:git@github.com:user/repo@v1.0.0

本地路徑

/absolute/path/to/package
./relative/path/to/package

本機路徑指向磁碟上的檔案或目錄,且無需複製即可新增至設定。相對路徑根據它們出現的設定檔進行解析。如果路徑是文件,它將作為單一副檔名載入。如果是目錄,pi使用套件規則載入資源。

創建 Pi 包

pi 清單新增至 package.json 或使用常規目錄。包含 pi-package 關鍵字以提高可發現性。

{
  "name": "my-package",
  "keywords": ["pi-package"],
  "pi": {
    "extensions": ["./extensions"],
    "skills": ["./skills"],
    "prompts": ["./prompts"],
    "themes": ["./themes"]
  }
}

路徑是相對於包根的。數組支援 glob 模式和 !exclusions

圖庫元數據

package gallery 顯示標示 pi-package 的包。新增 videoimage 欄位以顯示預覽:

{
  "name": "my-package",
  "keywords": ["pi-package"],
  "pi": {
    "extensions": ["./extensions"],
    "video": "https://example.com/demo.mp4",
    "image": "https://example.com/screenshot.png"
  }
}
  • 影片:僅限 MP4。在桌面上,懸停時會自動播放。點擊將開啟全螢幕播放器。
  • 圖片:PNG、JPEG、GIF 或 WebP。顯示為靜態預覽。

如果兩者均設置,則影片優先。

封裝結構

會議目錄

如果不存在 pi 清單,pi 會自動從這些目錄中發現資源:

  • extensions/ 載入 .ts.js 文件
  • skills/遞歸查找SKILL.md資料夾並載入頂級.md文件作為技能
  • prompts/ 載入 .md 文件
  • themes/ 載入 .json 文件

依賴關係

第三方運作時依賴項屬於 package.json 中的 dependencies。不註冊擴充、技能、prompt templates或主題的依賴項也屬於dependencies。當 pi 從 npm 或 git 安裝軟體包時,它會運行 npm install,因此這些依賴項會自動安裝。

Pi 捆綁擴充和技能的核心包。如果您匯入其中任何一個,請在 peerDependencies 中以 "*" 範圍列出它們,並且不要捆綁它們:@earendil-works/pi-ai@earendil-works/pi-agent-core@earendil-works/pi-coding-agent@earendil-works/pi-tuitypebox

其他 pi 軟體包必須捆綁在您的 tarball 中。將它們加入到dependenciesbundledDependencies,然後透過node_modules/路徑引用它們的資源。 Pi 載入具有單獨模組根的套件,因此單獨安裝不會衝突或共用模組。

例子:

{
  "dependencies": {
    "shitty-extensions": "^1.0.1"
  },
  "bundledDependencies": ["shitty-extensions"],
  "pi": {
    "extensions": ["extensions", "node_modules/shitty-extensions/extensions"],
    "skills": ["skills", "node_modules/shitty-extensions/skills"]
  }
}

包過濾

使用設定中的物件形式過濾套件載入的內容:

{
  "packages": [
    "npm:simple-pkg",
    {
      "source": "npm:my-package",
      "extensions": ["extensions/*.ts", "!extensions/legacy.ts"],
      "skills": [],
      "prompts": ["prompts/review.md"],
      "themes": ["+themes/legacy.json"]
    }
  ]
}

+path-path 是相對於包根的精確路徑。

  • 省略一個鍵即可載入所有該類型。
  • 使用 [] 不載入該類型。
  • !pattern 排除匹配項。
  • +path力-包括精確路徑。
  • -path 強制排除精確路徑。
  • 清單頂部的過濾層。他們縮小了已經允許的範圍。

啟用和停用資源

使用 pi config 啟用或停用已安裝軟體包和本機目錄中的擴充功能、技能、prompt templates 和主題。 pi config 在全域設定中啟動(~/.pi/agent/settings.json);按 Tab 鍵可在全域模式和專案本地模式之間切換。使用 pi config -l 在專案覆蓋 (.pi/settings.json) 中啟動,繼承的全域資源變暗。

範圍和重複資料刪除

包可以出現在全域和項目設定中。如果相同的套件出現在兩者中,則專案條目獲勝,除非專案條目具有 autoload: false,在這種情況下,它將作為全域條目的增量應用。身份由以下因素決定:

  • npm:包名
  • git:不帶引用的儲存庫 URL
  • local:解析的絕對路徑