[{"data":1,"prerenderedAt":529},["ShallowReactive",2],{"search-de":3,"content-de-developer\u002Fplugin-operations":4,"surround-de-\u002Fdeveloper\u002Fplugin-operations":520},[],{"id":5,"title":6,"body":7,"description":512,"extension":513,"meta":514,"navigation":515,"path":516,"seo":517,"stem":518,"__hash__":519},"content_de\u002F3.developer\u002F44.plugin-operations.md","Plugins installieren & betreiben",{"type":8,"value":9,"toc":493},"minimark",[10,19,24,27,142,150,154,157,164,185,193,200,204,211,226,229,233,237,258,262,269,302,314,318,377,380,384,458,464,475,479,489],[11,12,13,14,18],"p",{},"Dies ist die Betreiberseite der Plattform. Die Plugin-Administration erfordert die Capability ",[15,16,17],"code",{},"organization:manage"," — ausschließlich Workspace-Owner und -Admins.",[20,21,23],"h2",{"id":22},"ein-gebündeltes-plugin-installieren-tier-1","Ein gebündeltes Plugin installieren (Tier 1)",[11,25,26],{},"Gebündelte Plugins werden zur Build-Zeit komponiert; die Installation ist deshalb eine Code-Änderung und keine Aktion im Dashboard.",[28,29,30,35,55,59,87,98,102,117,131,135],"steps",{},[31,32,34],"h3",{"id":33},"das-paket-installieren","Das Paket installieren",[11,36,37,38,42,43,46,47,50,51,54],{},"Fügen Sie es als ",[39,40,41],"strong",{},"direkte Root-Abhängigkeit"," (",[15,44,45],{},"dependencies"," oder ",[15,48,49],{},"optionalDependencies",") aus der npm-Registry hinzu. Die Codegen prüft die Identität des installierten Pakets, den Integritätseintrag in ",[15,52,53],{},"bun.lock"," und das Realpath-Containment. Aliase, git-\u002FURL-\u002Ffile-\u002FWorkspace-Quellen und externe Symlinks schlagen fail-closed fehl.",[31,56,58],{"id":57},"es-registrieren","Es registrieren",[60,61,66],"pre",{"className":62,"code":63,"language":64,"meta":65,"style":65},"language-sh shiki shiki-themes github-light github-dark-dimmed","bun packages\u002Fplugin-cli\u002Fsrc\u002Findex.ts add @vendor\u002Fowlat-plugin-example\n","sh","",[15,67,68],{"__ignoreMap":65},[69,70,73,77,81,84],"span",{"class":71,"line":72},"line",1,[69,74,76],{"class":75},"sOLd2","bun",[69,78,80],{"class":79},"s-HuK"," packages\u002Fplugin-cli\u002Fsrc\u002Findex.ts",[69,82,83],{"class":79}," add",[69,85,86],{"class":79}," @vendor\u002Fowlat-plugin-example\n",[11,88,89,90,93,94,97],{},"Das bearbeitet die eingecheckte ",[15,91,92],{},"plugins.config.ts"," und gibt das Capability-Diff aus, das die Änderung einführt. Führen Sie es zunächst mit ",[15,95,96],{},"--dry-run"," aus, um das Diff und die vorgeschlagene Datei ohne Schreibvorgang zu prüfen.",[31,99,101],{"id":100},"die-komposition-neu-generieren","Die Komposition neu generieren",[60,103,105],{"className":62,"code":104,"language":64,"meta":65,"style":65},"bun run plugins:codegen\n",[15,106,107],{"__ignoreMap":65},[69,108,109,111,114],{"class":71,"line":72},[69,110,76],{"class":75},[69,112,113],{"class":79}," run",[69,115,116],{"class":79}," plugins:codegen\n",[11,118,119,120,122,123,126,127,130],{},"Committen Sie ",[15,121,92],{}," ",[39,124,125],{},"und"," die generierten Kompositionsdateien in derselben Änderung. Die CI führt ",[15,128,129],{},"bun run plugins:check"," aus, was fehlschlägt, wenn die generierte Ausgabe veraltet oder ungültig ist.",[31,132,134],{"id":133},"neu-bauen-und-deployen","Neu bauen und deployen",[11,136,137,138,141],{},"Das Plugin existiert nun im Deployment. Sein Feature-Flag steht auf dem im Manifest deklarierten Standardwert — normalerweise ",[15,139,140],{},"false"," — und es ist keine Capability gewährt, es läuft also noch nichts.",[143,144,147],"callout",{"title":145,"type":146},"Prüfen Sie das Capability-Diff vor dem Deployment","warning",[11,148,149],{},"Das Diff ist die Prüffläche für die Sicherheitsbetrachtung eines gebündelten Plugins: Es ist die vollständige Liste der Host-Operationen, die das Paket jemals anfordern kann. Gebündelter Code läuft mit demselben Vertrauen wie Ihr eigener deployter Code — lesen Sie das Diff, nicht nur die README.",[20,151,153],{"id":152},"aktivieren-und-gewähren","Aktivieren und gewähren",[11,155,156],{},"Einstellungen → Plugins listet jedes registrierte Plugin mit seinem Zustand, seinen Capabilities und seinen erforderlichen Umgebungsvariablen auf.",[11,158,159,160,163],{},"Das Aktivieren eines gebündelten Plugins ist eine ",[39,161,162],{},"explizite Einwilligungshandlung",":",[165,166,167,175,182],"ul",{},[168,169,170,171,174],"li",{},"Im Deployment muss jeder ",[15,172,173],{},"flag.requiredEnvVars","-Wert vorhanden sein. Andernfalls schlägt die Aktivierung mit der Liste der fehlenden Variablen fehl.",[168,176,177,178,181],{},"Die Aktivierungsanfrage muss ",[39,179,180],{},"jede"," im Manifest deklarierte Capability freigeben — nicht mehr, nicht weniger, keine Duplikate. Eine teilweise oder unbekannte Freigabe wird abgelehnt.",[168,183,184],{},"Das Deaktivieren des Plugins löscht seinen Grant-Datensatz vollständig.",[11,186,187,188,192],{},"So sieht „Grants können das Manifest nur einschränken“ in Tier 1 in der Praxis aus: Der Betreiber kann entweder dem vollständigen deklarierten Satz zustimmen oder das Plugin ausgeschaltet lassen. Connected Apps (Tier 2) sind das Tier, in dem pro App eine ",[189,190,191],"em",{},"Teilmenge"," des Manifests gewährt wird.",[11,194,195,196,199],{},"Sowohl der Flag-Zustand als auch der Grant-Datensatz werden innerhalb der Transaktion jedes Aufrufers frisch gelesen — ",[39,197,198],{},"das Deaktivieren eines Plugins oder das Widerrufen einer Grant wirkt daher schon bei der nächsten Operation",": kein Redeploy, kein Cache, den man abwarten müsste.",[20,201,203],{"id":202},"konfigurieren","Konfigurieren",[11,205,206,207,210],{},"Deklariert das Plugin ein ",[15,208,209],{},"settingsSchema",", rendert seine Detailseite ein generisches Formular: String-, Number-, Boolean- und Select-Felder mit den deklarierten Labels, Beschreibungen, Standardwerten und Grenzen. Der Host validiert die Eingaben serverseitig gegen das Schema.",[11,212,213,214,217,218,221,222,225],{},"Ein ",[15,215,216],{},"secret","-Feld ist ",[39,219,220],{},"nicht"," Teil des Formulars. Owlat speichert keine Plugin-Credentials: Das Feld benennt eine Umgebungsvariable mit ",[15,223,224],{},"PLUGIN_","-Präfix, die Sie im Deployment setzen, und die Seite zeigt nur den Namen dieser Variable und ob sie vorhanden ist. Ein Speichern, das einen Wert für einen Secret-Key mitführt, wird abgelehnt. „Auf Standardwerte zurücksetzen“ setzt gespeicherte Werte auf die Schema-Standardwerte zurück.",[11,227,228],{},"Wird ein Plugin aus dem Build entfernt, während Einstellungszeilen bestehen bleiben, bietet die Indexseite für diese verwaiste ID „Plugin-Einstellungen löschen“ an.",[20,230,232],{"id":231},"die-tiers-betreiben","Die Tiers betreiben",[31,234,236],{"id":235},"tier-2-connected-apps","Tier 2 — Connected Apps",[11,238,239,240,243,244,247,248,251,252,257],{},"Werden aus dem Dashboard registriert; kein Rebuild. Jede App ist an eine Plugin-ID gebunden, fordert eine Teilmenge der von diesem Plugin deklarierten Capabilities an und hält ein verschlüsseltes Shared Secret, mit dem Hooks signiert werden. Die Status sind ",[15,241,242],{},"enabled",", ",[15,245,246],{},"disabled"," und ",[15,249,250],{},"revoked"," (terminal). Siehe ",[253,254,256],"a",{"href":255},"\u002Fdeveloper\u002Fplugin-connected-apps","Connected Apps",".",[31,259,261],{"id":260},"tier-3-gesandboxte-jobs","Tier 3 — gesandboxte Jobs",[11,263,264,265,268],{},"Der Code-Worker behält das ruhende Plugin-Job-Polling-Protokoll, aber es wird weder ein Host-Enqueue-Adapter noch eine Betreiber-Job-UI ausgeliefert. Das Profil ",[15,266,267],{},"plugin-tasks"," ist deshalb heute keine nutzbare Plugin-Fläche:",[60,270,272],{"className":62,"code":271,"language":64,"meta":65,"style":65},"COMPOSE_PROFILES=plugin-tasks docker compose up -d code-worker\n",[15,273,274],{"__ignoreMap":65},[69,275,276,280,284,286,289,292,295,299],{"class":71,"line":72},[69,277,279],{"class":278},"sYgZi","COMPOSE_PROFILES",[69,281,283],{"class":282},"s7YZ4","=",[69,285,267],{"class":79},[69,287,288],{"class":75}," docker",[69,290,291],{"class":79}," compose",[69,293,294],{"class":79}," up",[69,296,298],{"class":297},"sviXB"," -d",[69,300,301],{"class":79}," code-worker\n",[11,303,304,305,308,309,313],{},"Derselbe Container bedient unter dem Profil ",[15,306,307],{},"inbox-codetasks"," aktiv die Coding-Agent-Queue. Siehe ",[253,310,312],{"href":311},"\u002Fdeveloper\u002Fplugin-sandboxed-jobs","Gesandboxte Jobs"," für den reservierten Tier-3-Vertrag.",[20,315,317],{"id":316},"überwachen","Überwachen",[319,320,321,334],"table",{},[322,323,324],"thead",{},[325,326,327,331],"tr",{},[328,329,330],"th",{},"Fläche",[328,332,333],{},"Was sie zeigt",[335,336,337,353,361,369],"tbody",{},[325,338,339,343],{},[340,341,342],"td",{},"Audit-Log",[340,344,345,346,247,349,352],{},"Jede gehostete Plugin-Operation, attribuiert mit ",[15,347,348],{},"organizationId",[15,350,351],{},"pluginId",", mit ausschließlich festen Operations- und Ergebniscodes",[325,354,355,358],{},[340,356,357],{},"Hook-Zustellprotokolle",[340,359,360],{},"Auflösungen signierter Hooks je App und Art: versucht oder nicht, welche Seite gewonnen hat, der feste Fallback-Grund und die Netzwerkdauer. 30 Tage aufbewahrt",[325,362,363,366],{},[340,364,365],{},"Webhook-Zustellprotokolle",[340,367,368],{},"Ausgehende Webhook-Zustellungen, einschließlich von Plugins veröffentlichter Events",[325,370,371,374],{},[340,372,373],{},"Plugin-Task-Liste",[340,375,376],{},"Jüngste Tier-3-Jobs mit Status, Versuchen und Zeiten",[11,378,379],{},"Keine dieser Flächen enthält Payloads, Prompts, generierten Text, Mail-Inhalte, Secrets oder Signaturen — die Schwärzung ist strukturell, sodass kein Lesepfad sie preisgeben kann.",[20,381,383],{"id":382},"widerrufen-und-entfernen","Widerrufen und entfernen",[319,385,386,399],{},[322,387,388],{},[325,389,390,393,396],{},[328,391,392],{},"Ziel",[328,394,395],{},"Aktion",[328,397,398],{},"Wirkt",[335,400,401,412,423,433,444],{},[325,402,403,406,409],{},[340,404,405],{},"Ein gebündeltes Plugin stoppen und seine Autorität entziehen",[340,407,408],{},"Sein Feature-Flag deaktivieren — dies löscht auch seinen Grant-Datensatz",[340,410,411],{},"Bei der nächsten Operation",[325,413,414,417,420],{},[340,415,416],{},"Eine Connected App sofort stoppen",[340,418,419],{},"Sie deaktivieren",[340,421,422],{},"Beim nächsten Hook-Aufruf oder API-Request",[325,424,425,428,431],{},[340,426,427],{},"Eine Connected App dauerhaft stilllegen",[340,429,430],{},"Sie widerrufen (terminal)",[340,432,422],{},[325,434,435,438,441],{},[340,436,437],{},"Einen plugin-gebundenen API-Key widerrufen",[340,439,440],{},"Den Key widerrufen oder das Plugin deaktivieren, an das er gebunden ist",[340,442,443],{},"Beim nächsten Request — der effektive Scope-Satz wird pro Request neu abgeleitet",[325,445,446,449,455],{},[340,447,448],{},"Ein gebündeltes Plugin entfernen",[340,450,451,454],{},[15,452,453],{},"owlat-plugins remove \u003Cpackage>",", neu generieren, neu bauen, deployen",[340,456,457],{},"Nach dem Redeploy",[11,459,460,461,463],{},"Das Entfernen des Pakets aus ",[15,462,92],{}," entfernt auch seine Convex-Komponentenregistrierung. Plugin-Storage-Zeilen und Einstellungen überdauern das Entfernen; nutzen Sie „Plugin-Einstellungen löschen“ im Plugin-Index, um die verwaisten Einstellungen zu bereinigen.",[143,465,468],{"title":466,"type":467},"Reihenfolge bei der Incident-Response","danger",[11,469,470,471,474],{},"Verhält sich ein Plugin auffällig, ",[39,472,473],{},"deaktivieren Sie zuerst das Flag"," — das wirkt sofort und braucht kein Deployment. Untersuchen Sie erst danach und entfernen Sie das Paket im Anschluss. Beginnen Sie nicht mit einem Rebuild: Das ist der langsamste Hebel, den Sie haben.",[20,476,478],{"id":477},"deployments-ohne-plugins","Deployments ohne Plugins",[11,480,481,482,484,485,488],{},"Die Null-Plugin-Komposition ist ein gültiges No-op-Deployment. Eine ",[15,483,92],{}," mit leerem ",[15,486,487],{},"bundledPluginPackages","-Array erzeugt eine Komposition ohne Plugins, und jede Registry fällt auf ihre eingebauten Mitglieder mit ursprünglicher Reihenfolge, ursprünglichen Standardwerten und ursprünglicher Fehlersemantik zurück.",[490,491,492],"style",{},"html pre.shiki code .sOLd2, html code.shiki .sOLd2{--shiki-default:#6F42C1;--shiki-dark:#F69D50}html pre.shiki code .s-HuK, html code.shiki .s-HuK{--shiki-default:#032F62;--shiki-dark:#96D0FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sYgZi, html code.shiki .sYgZi{--shiki-default:#24292E;--shiki-dark:#ADBAC7}html pre.shiki code .s7YZ4, html code.shiki .s7YZ4{--shiki-default:#D73A49;--shiki-dark:#F47067}html pre.shiki code .sviXB, html code.shiki .sviXB{--shiki-default:#005CC5;--shiki-dark:#6CB6FF}",{"title":65,"searchDepth":494,"depth":494,"links":495},2,[496,503,504,505,509,510,511],{"id":22,"depth":494,"text":23,"children":497},[498,500,501,502],{"id":33,"depth":499,"text":34},3,{"id":57,"depth":499,"text":58},{"id":100,"depth":499,"text":101},{"id":133,"depth":499,"text":134},{"id":152,"depth":494,"text":153},{"id":202,"depth":494,"text":203},{"id":231,"depth":494,"text":232,"children":506},[507,508],{"id":235,"depth":499,"text":236},{"id":260,"depth":499,"text":261},{"id":316,"depth":494,"text":317},{"id":382,"depth":494,"text":383},{"id":477,"depth":494,"text":478},"Der Betreiber-Lebenszyklus: installieren, aktivieren, gewähren, konfigurieren, überwachen, widerrufen und entfernen.","md",{},true,"\u002Fdeveloper\u002Fplugin-operations",{"title":6,"description":512},"3.developer\u002F44.plugin-operations","rXx_THF6Qo_hxQEXXZQmKdQQMi81GrTnsy2pkJVDdd8",[521,525],{"title":522,"path":523,"stem":524,"children":-1},"Capabilities, Grants & Vertrauen","\u002Fdeveloper\u002Fplugin-capabilities","3.developer\u002F43.plugin-capabilities",{"title":526,"path":527,"stem":528,"children":-1},"Die owlat-plugins-CLI","\u002Fdeveloper\u002Fplugin-cli","3.developer\u002F45.plugin-cli",1786915109439]