Pi Packages
pi может помочь вам создавать пакеты pi. Попросите его объединить ваши расширения, навыки, prompt templates или темы.
В пакеты Pi входят расширения, навыки, prompt templates и темы, поэтому вы можете поделиться ими через npm или git. Пакет может объявлять ресурсы в package.json по ключу pi или использовать обычные каталоги.
Оглавление
- 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/. - Установите
npmCommandвsettings.json, чтобы привязать операции поиска и установки пакета npm к определенной команде оболочки, напримерmiseилиasdf.
Пример:
{
"npmCommand": ["mise", "exec", "node@20", "--", "npm"]
}мерзавец
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. - Поддерживаются URL-адреса HTTPS и SSH.
- URL-адреса SSH автоматически используют настроенные вами ключи 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 сбрасывает и очищает клон, а затем запускает
npm install, еслиpackage.jsonсуществует.
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и.jsskills/рекурсивно находит папкиSKILL.mdи загружает файлы верхнего уровня.mdкак навыкиprompts/загружает.mdфайлыthemes/загружает.jsonфайлы
Зависимости
Сторонние зависимости времени выполнения относятся к dependencies в package.json. Зависимости, которые не регистрируют расширения, навыки, 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 должны быть включены в ваш архив. Добавьте их в 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-адрес репозитория без ссылки
- локальный: разрешен абсолютный путь