Pi Packages
pi 可以幫助您建立 pi 套件。要求它捆綁您的擴充功能、技能、prompt templates或主題。
Pi 打包捆綁擴充、技能、prompt templates 和主題,以便您可以透過 npm 或 git 分享它們。套件可以在 pi 鍵下的 package.json 中宣告資源,或使用常規目錄。
目錄
- Install and Manage
- Package Sources
- Creating a Pi Package
- Package Structure
- Dependencies
- Package Filtering
- Enable and Disable Resources
- Scope and Deduplication
安裝和管理
安全性: 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。
預設情況下,install 和 remove 寫入使用者設定 (~/.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 --extensions、pi update --all)。 - 用戶安裝位於
~/.pi/agent/npm/下。 - 項目安裝量低於
.pi/npm/。 - 將
settings.json中的npmCommand設定為將 npm 套件尋找和安裝操作固定到特定的包裝器指令,例如mise或asdf。
例子:
{
"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/repo和git@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 --extensions和pi 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 的包。新增 video 或 image 欄位以顯示預覽:
{
"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-tui、typebox。
其他 pi 軟體包必須捆綁在您的 tarball 中。將它們加入到dependencies和bundledDependencies,然後透過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:解析的絕對路徑