Erweiterungen (Schnittstelle v0)¶
Instabil. Abgeleitet nur aus dem, was die erste Erweiterung, deciwa, braucht; sie ändert sich mit der nächsten Erweiterung. Kein Marketplace, keine Sandbox: Eine Erweiterung läuft mit vollem Node-Zugriff im Hauptprozess, deshalb lädt monsterbrain nur Ordner, die in seinen Einstellungen stehen (Settings → Extensions, gespeichert in settings.json).
"extensions": [
{ "path": "/home/daniel/workspace/deciwa/packages/monsterbrain", "options": { "enginePath": "…" } }
]
options wird der Erweiterung unverändert übergeben; "enabled": false behält einen Eintrag, ohne ihn zu laden. Änderungen gelten nach einem Neustart (Restart to apply).
Manifest¶
Der Ordner der Erweiterung hat eine package.json mit einem Feld monsterbrain:
"monsterbrain": {
"id": "deciwa", "name": "deciwa", "api": 0,
"main": "dist/main.cjs",
"view": "dist/view.js",
"frame": "dist/frame.js"
}
Teil |
Läuft in |
Geladen |
|---|---|---|
|
Hauptprozess (Node, CommonJS) |
|
|
dem Fenster |
als Skript von |
|
gerenderten HTML-Seiten (Frames mit Sandbox) |
wird der Seite hinzugefügt, wenn monsterbrain sie zeigt ( |
api muss zur Schnittstellenversion passen (EXTENSION_API in src/shared/extensions.ts); andere Versionen lehnt monsterbrain ab.
Erweiterungspunkte¶
Punkt |
Hauptprozess ( |
Fenster ( |
|---|---|---|
Hintergrundprozess |
|
– |
Aufrufe und Events |
|
|
Einbinden in Ansichten |
– |
|
Abschnitt im Panel |
– |
|
Toolbar |
– |
|
Markierungen |
|
im Baum, in der Änderungsansicht und in Suchergebnissen angezeigt |
Befehle |
– |
|
MCP-Tools |
|
– |
Agent-Aktionen |
|
– |
Konzepte |
|
– |
Außerdem auf ctx: root(), open(path, {tab, highlight, newTab}), state(), log(), options, path.
Ansichten¶
mountView(v) bekommt jede gerenderte Markdown-Ansicht und jede Code-Ansicht (Quelltext mit Zeilennummern):
Feld |
|
|---|---|
|
Dateipfad relativ zum offenen Ordner |
|
die Dateiart: |
|
|
|
die Git-Revision der Seite |
|
|
|
der Inhalt. |
|
das Element, in dem der Inhalt scrollt ( |
Eine Ansicht wird neu eingebunden, wenn sich ihr Inhalt ändert. Tasten, die eine Erweiterung selbst behandelt, sollten preventDefault() aufrufen; monsterbrain ignoriert sie dann.
HTML-Seiten¶
HTML-Dateien werden in einem Frame mit sandbox="allow-scripts allow-popups" gezeigt. monsterbrain markiert jedes Start-Tag mit data-line (die Zeile, in der es beginnt, ab 0 gezählt) und setzt vor die Skripte des Frames eine Brücke: window.mbx.path (der Pfad der Seite), window.mbx.call(id, method, …args) und window.mbx.on(id, event, cb) – vom Fenster an den Hauptteil der Erweiterung weitergereicht. Jedes Skript der Seite kann solche Aufrufe senden, deshalb erreichen sie nur Handler, die mit ctx.handle(method, fn, { frames: true }) registriert sind. Nur Seiten des Arbeitsverzeichnisses bekommen die Skripte, nicht die alte Seite eines Diffs.