Plugins sind in der Beta. Verhalten und Konfiguration können sich in zukünftigen Releases ändern.
/<plugin>:<skill>-Slash-Befehle verfügbar, und es kann automatisch andere Plugins einbinden, von denen es abhängt.
Ein Plugin ist einfach eine Quelle, die Folgendes enthält:
skills/-Verzeichnis enthält normale Skills — Plugins bringen kein neues Skill-
Format mit. Das Format von SKILL.md wird unter Skills erstellen beschrieben.
Ein Plugin installieren
owner/repo, eine Git-URL oder ein lokaler Pfad möglich:
-y / --yes, um die
Abfrage zu überspringen.
Plugins werden auf Nutzer-Ebene installiert und sind in all Ihren
Projekten verfügbar.
Plugins verwalten
devin plugins install ./my-plugin → skills/<name>/SKILL.md bearbeiten → Änderungen
werden in der nächsten Sitzung übernommen, kein update erforderlich.
Das Manifest
.devin-plugin/plugin.json beschreibt das Plugin. Nur name ist erforderlich; der Wert
muss unter den installierten Plugins eindeutig sein (er bildet den Namespace /<name>:…).
name, version, description, author
({ name, email }), homepage, repository, license und keywords.
Ein Eintrag für eine Abhängigkeit ist eine Quelle – entweder eine Kurzschreibweise als String oder ein Objekt:
"owner/repo"→ GitHub"https://…","git@…","ssh://…"→ git-URL{ "source": "github", "repo": "owner/repo" }{ "source": "url", "url": "https://gitlab.com/team/plugin.git" }
owner/repo, die HTTPS-URL, die .git
URL, die SSH-Form) verweisen auf dieselbe Plugin-Identität.
Abhängigkeiten und Governance
requiredPlugins
optionalPlugins
forbiddenPlugins
- Eine exakte Plugin-Identität, geschrieben als
owner/repo, eine Git-URL oder ein lokaler Pfad. - Ein Glob-Muster — jeder Eintrag, der
*enthält. Das*steht für eine beliebige Folge von Zeichen, einschließlich/. Muster werden zuerst in die kanonische Identitätsform normalisiert, sodassacme/*zuhttps://github.com/acme/*wird (alle GitHub-Repos vonacme),*/secretsauf ein Repo namenssecretsunter einem beliebigen Owner passt undhttps://gitlab.com/acme/*auf jedes Repo unter diesem Pfad passt. - Das einzelne
"*", das auf jedes andere Plugin passt (ein unumgehbarer Lockdown).
- Verbote haben Vorrang. Ein Plugin wird blockiert, wenn irgendein installiertes Plugin es verbietet (über seine
exakte Identität, ein passendes Glob-Muster oder
"*"). - Selbst-Ausnahme. Die eigenen
requiredPlugins,optionalPluginsund das Plugin selbst sind von seiner eigenen Verbotsliste ausgenommen. Also bedeutetforbiddenPlugins: ["*"]zusammen mitoptionalPlugins: [B, C]„erlaube mich selbst, B und C; verbiete alles andere.“ - Keine pluginübergreifende erneute Freigabe. Die Erlaubnislisten eines Plugins können nicht erneut erlauben,
was ein anderes Plugin verbietet. Ein installiertes Plugin mit
forbiddenPlugins: ["*"]ist ein unumgehbarer Lockdown. - Standardmäßig offen. Wenn kein installiertes Plugin irgendetwas verbietet, wird nichts blockiert.
- Bei der Installation — die Installation eines blockierten Plugins (oder eines, dessen erforderliche Plugins nicht erfüllt werden können oder dessen Name mit einem installierten Plugin kollidiert) wird verweigert.
- Beim Laden — wenn ein Plugin nach der Installation blockiert wird (zum Beispiel, wenn später ein verbietendes Plugin installiert wird), bleibt es auf dem Datenträger, aber seine Skills werden beim Start der Sitzung übersprungen, mit einer Warnung, die das Plugin nennt, das es verbietet.
