Pi Packages
pi kann Ihnen beim Erstellen von Pi-Paketen helfen. Bitten Sie es, Ihre Erweiterungen, Fähigkeiten, prompt templates oder Themen zu bündeln.
Pi-Pakete bündeln Erweiterungen, Fähigkeiten, prompt templates und Themen, sodass Sie sie über npm oder Git teilen können. Ein Paket kann Ressourcen in package.json unter dem Schlüssel pi deklarieren oder herkömmliche Verzeichnisse verwenden.
Inhaltsverzeichnis
- Install and Manage
- Package Sources
- Creating a Pi Package
- Package Structure
- Dependencies
- Package Filtering
- Enable and Disable Resources
- Scope and Deduplication
Installieren und verwalten
Sicherheit: Pi Pakete werden mit vollem Systemzugriff ausgeführt. Extensions Führen Sie beliebigen Code aus, und Fähigkeiten können das Modell anweisen, jede Aktion auszuführen, einschließlich der Ausführung ausführbarer Dateien. Überprüfen Sie den Quellcode, bevor Sie Pakete von Drittanbietern installieren.
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/barDiese Befehle verwalten Pi-Pakete und pi update kann die Pi CLI-Installation aktualisieren. Informationen zur Deinstallation von Pi selbst finden Sie unter Quickstart.
Standardmäßig schreiben install und remove in die Benutzereinstellungen (~/.pi/agent/settings.json). Verwenden Sie stattdessen -l, um in die Projekteinstellungen (.pi/settings.json) zu schreiben. Projekteinstellungen können mit Ihrem Team geteilt werden und pi installiert alle fehlenden Pakete automatisch beim Start, nachdem das Projekt vertrauenswürdig ist.
Um ein Paket auszuprobieren, ohne es zu installieren, verwenden Sie --extension oder -e. Dadurch wird nur für die aktuelle Ausführung ein temporäres Verzeichnis installiert:
pi -e npm:@foo/bar
pi -e git:github.com/user/repoPaketquellen
Pi akzeptiert drei Quellentypen in den Einstellungen und pi install.
npm
npm:@scope/pkg@1.2.3
npm:pkg- Versionierte Spezifikationen werden von Paketaktualisierungen angeheftet und übersprungen (
pi update --extensions,pi update --all). - Benutzerinstallationen gehen unter
~/.pi/agent/npm/. - Projektinstallationen gehen unter
.pi/npm/. - Setzen Sie
npmCommandinsettings.json, um npm Paketsuch- und Installationsvorgänge an einen bestimmten Wrapper-Befehl wiemiseoderasdfanzuheften.
Beispiel:
{
"npmCommand": ["mise", "exec", "node@20", "--", "npm"]
}Idiot
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- Ohne das Präfix
git:werden nur Protokoll-URLs akzeptiert (https://,http://,ssh://,git://). - Mit dem Präfix
git:werden Kurzformate akzeptiert, einschließlichgithub.com/user/repoundgit@github.com:user/repo. - HTTPS- und SSH-URLs werden beide unterstützt.
- SSH URLs verwenden automatisch Ihre konfigurierten SSH Schlüssel (respektiert
~/.ssh/config). - Für nicht interaktive Ausführungen (z. B. CI) können Sie
GIT_TERMINAL_PROMPT=0festlegen, um Anmeldeaufforderungen zu deaktivieren, undGIT_SSH_COMMAND(z. B.ssh -o BatchMode=yes -o ConnectTimeout=5) festlegen, um schnell fehlzuschlagen. - Refs sind angeheftete Tags oder Commits.
pi update --extensionsundpi update --allverschieben sie nicht auf neuere Referenzen, aber sie gleichen einen vorhandenen Klon mit der konfigurierten Referenz ab. - Verwenden Sie
pi install git:host/user/repo@new-ref, um Einstellungen zu aktualisieren und ein vorhandenes Paket in eine neue angeheftete Referenz zu verschieben. - Geklont auf
~/.pi/agent/git/<host>/<path>(global) oder.pi/git/<host>/<path>(Projekt). - Wenn der Abgleich den Checkout ändert, setzt pi den Klon zurück und bereinigt ihn und führt dann
npm installaus, wennpackage.jsonvorhanden ist.
SSH Beispiele:
# 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.0Lokale Pfade
/absolute/path/to/package
./relative/path/to/packageLokale Pfade verweisen auf Dateien oder Verzeichnisse auf der Festplatte und werden ohne Kopieren zu den Einstellungen hinzugefügt. Relative Pfade werden anhand der Einstellungsdatei aufgelöst, in der sie erscheinen. Wenn es sich bei dem Pfad um eine Datei handelt, wird sie als einzelne Erweiterung geladen. Wenn es sich um ein Verzeichnis handelt, lädt pi Ressourcen mithilfe von Paketregeln.
Erstellen eines Pi-Pakets
Fügen Sie ein pi-Manifest zu package.json hinzu oder verwenden Sie herkömmliche Verzeichnisse. Fügen Sie zur besseren Auffindbarkeit das Schlüsselwort pi-package ein.
{
"name": "my-package",
"keywords": ["pi-package"],
"pi": {
"extensions": ["./extensions"],
"skills": ["./skills"],
"prompts": ["./prompts"],
"themes": ["./themes"]
}
}Pfade sind relativ zum Paketstamm. Arrays unterstützen Glob-Muster und !exclusions.
Galerie-Metadaten
Die package gallery zeigt Pakete an, die mit pi-package markiert sind. Fügen Sie video oder image Felder hinzu, um eine Vorschau anzuzeigen:
{
"name": "my-package",
"keywords": ["pi-package"],
"pi": {
"extensions": ["./extensions"],
"video": "https://example.com/demo.mp4",
"image": "https://example.com/screenshot.png"
}
}- Video: Nur MP4. Auf dem Desktop erfolgt die automatische Wiedergabe beim Schweben. Durch Klicken wird ein Vollbild-Player geöffnet.
- Bild: PNG, JPEG, GIF oder WebP. Wird als statische Vorschau angezeigt.
Wenn beides eingestellt ist, hat Video Vorrang.
Paketstruktur
Kongressverzeichnisse
Wenn kein pi-Manifest vorhanden ist, erkennt pi automatisch Ressourcen aus diesen Verzeichnissen:
extensions/lädt.tsund.jsDateienskills/findet rekursivSKILL.mdOrdner und lädt.mdDateien der obersten Ebene als Fertigkeitenprompts/lädt.mdDateienthemes/lädt.jsonDateien
Abhängigkeiten
Laufzeitabhängigkeiten von Drittanbietern gehören in dependencies in package.json. Abhängigkeiten, die keine Erweiterungen, Fähigkeiten, prompt templates oder Themen registrieren, gehören ebenfalls zu dependencies. Wenn pi ein Paket von npm oder Git installiert, führt es npm install aus, sodass diese Abhängigkeiten automatisch installiert werden.
Pi bündelt Kernpakete für Erweiterungen und Fertigkeiten. Wenn Sie eines davon importieren, listen Sie es in peerDependencies mit einem "*"-Bereich auf und bündeln Sie es nicht: @earendil-works/pi-ai, @earendil-works/pi-agent-core, @earendil-works/pi-coding-agent, @earendil-works/pi-tui, typebox.
Andere Pi-Pakete müssen in Ihrem Tarball gebündelt sein. Fügen Sie sie zu dependencies und bundledDependencies hinzu und verweisen Sie dann über node_modules/-Pfade auf ihre Ressourcen. Pi lädt Pakete mit separaten Modulstämmen, sodass separate Installationen nicht kollidieren oder Module gemeinsam nutzen.
Beispiel:
{
"dependencies": {
"shitty-extensions": "^1.0.1"
},
"bundledDependencies": ["shitty-extensions"],
"pi": {
"extensions": ["extensions", "node_modules/shitty-extensions/extensions"],
"skills": ["skills", "node_modules/shitty-extensions/skills"]
}
}Paketfilterung
Filtern Sie mithilfe des Objektformulars in den Einstellungen, was ein Paket lädt:
{
"packages": [
"npm:simple-pkg",
{
"source": "npm:my-package",
"extensions": ["extensions/*.ts", "!extensions/legacy.ts"],
"skills": [],
"prompts": ["prompts/review.md"],
"themes": ["+themes/legacy.json"]
}
]
}+path und -path sind genaue Pfade relativ zum Paketstamm.
- Lassen Sie einen Schlüssel weg, um alles dieses Typs zu laden.
- Verwenden Sie
[], um nichts von diesem Typ zu laden. !patternschließt Übereinstimmungen aus.+pathForce – beinhaltet einen genauen Pfad.-patherzwingt den Ausschluss eines genauen Pfads.- Filterebene über dem Manifest. Sie schränken ein, was bereits erlaubt ist.
Ressourcen aktivieren und deaktivieren
Verwenden Sie pi config, um Erweiterungen, Fähigkeiten, prompt templates und Themes aus installierten Paketen und lokalen Verzeichnissen zu aktivieren oder zu deaktivieren. pi config startet in den globalen Einstellungen (~/.pi/agent/settings.json); Drücken Sie die Tabulatortaste, um zwischen dem globalen und dem projektlokalen Modus zu wechseln. Verwenden Sie pi config -l, um in Projektüberschreibungen (.pi/settings.json) mit abgeblendeten geerbten globalen Ressourcen zu beginnen.
Umfang und Deduplizierung
Pakete können sowohl in globalen als auch in Projekteinstellungen angezeigt werden. Wenn in beiden das gleiche Paket vorkommt, gewinnt der Projekteintrag, es sei denn, der Projekteintrag hat autoload: false. In diesem Fall wird es als Delta über den globalen Eintrag angewendet. Die Identität wird bestimmt durch:
- npm: Paketname
- git: Repository-URL ohne Referenz
- local: aufgelöster absoluter Pfad