Manifest-Referenz
Jedes Mini-Programm, Addon und Plugin benötigt eine manifest.json-Datei, die die Metadaten, Berechtigungen und Einstiegspunkte der Erweiterung beschreibt. Das Manifest folgt dem Manifest v2 Schema.
Minimales Beispiel
Das einfachste gültige Manifest für ein Mini-Programm:
{
"name": "my-app",
"version": "1.0.0",
"abi": 1,
"type": "mini-program",
"entry": "index.html",
"base_url": "https://cdn.example.com/my-app/"
}
Vollständiges Beispiel
Ein vollständiges Manifest mit allen häufig verwendeten Feldern:
{
"name": "word-counter",
"version": "1.2.0",
"abi": 1,
"type": "mini-program",
"title": "Wortzähler",
"description": "Zählen Sie Wörter in Ihrem Chat-Verlauf nach Rolle und visualisieren Sie Trends",
"icon": "https://cdn.example.com/word-counter/icon.png",
"author": {
"name": "Max Entwickler",
"url": "https://maxdev.com"
},
"entry": "index.html",
"base_url": "https://cdn.example.com/word-counter/",
"permissions": ["storage", "chat:read", "ui:toast"],
"keywords": ["statistik", "werkzeug", "wortzahl"],
"license": "MIT",
"repository": "https://github.com/maxdev/word-counter",
"min_platform_version": "1.0.0"
}
Feld-Referenz
Erforderliche Felder
name
Eindeutiger Paketname. Wird als interner Bezeichner für Speicherisolation, Installationsprüfungen und Registry-Lookups verwendet.
| Eigenschaft | Wert |
|---|---|
| Typ | string |
| Muster | ^[a-z0-9-]+$ (nur Kleinbuchstaben, Ziffern, Bindestriche) |
| Max. Länge | 64 Zeichen |
| Erforderlich | Ja |
"name": "word-counter"
Der Name muss innerhalb der Registry global eindeutig sein. Wählen Sie einen beschreibenden Namen. Sie können ihn nach der Veröffentlichung nicht ändern, ohne einen neuen Paketeintrag zu erstellen.
version
Semantische Versionszeichenfolge. Muss dem semver-Format folgen.
| Eigenschaft | Wert |
|---|---|
| Typ | string |
| Muster | ^\d+\.\d+\.\d+ (major.minor.patch, optionales Prerelease) |
| Erforderlich | Ja |
"version": "1.0.0"
Wenn Sie Ihre App in der Registry aktualisieren, erhöhen Sie die Version sowohl im Manifest als auch im registry/packages.json-Eintrag.
Stark empfohlene Felder
abi
ABI-Version (Application Binary Interface), die dieses Manifest anspricht. Muss 1 für die aktuelle Plattform sein.
| Eigenschaft | Wert |
|---|---|
| Typ | integer |
| Konstante | 1 |
| Erforderlich | Technisch optional, aber stark empfohlen |
"abi": 1
Die Plattform lehnt Manifeste mit anderen abi-Werten als 1 ab. Wenn weggelassen, geht die Plattform von ABI 1 aus, aber explizite Deklaration wird für Vorwärtskompatibilität bevorzugt.
type
Erweiterungstyp. Bestimmt die Laufzeitumgebung und verfügbaren Funktionen.
| Eigenschaft | Wert |
|---|---|
| Typ | string |
| Enum | "plugin", "addon", "mini-program" |
| Standard | "plugin" |
"type": "mini-program"
| Typ | Laufzeit | UI-Oberfläche | Anforderungen |
|---|---|---|---|
plugin | WASM (Kernel-Slots 4-7) | Keine (nur Hooks) | wasm + wasm_sha256 |
addon | WASM oder JS | Benannte UI-Slots | wasm oder entry |
mini-program | Sandboxed iframe (null origin) | Volles Panel (ersetzt Chat) | entry + base_url |
entry
Pfad zur Entry-HTML-Datei, relativ zu base_url.
| Eigenschaft | Wert |
|---|---|
| Typ | string |
| Erforderlich | Ja für Mini-Programme und HTML-Addons |
"entry": "index.html"
Die Plattform ruft {base_url}{entry} zur Installationszeit ab und cacht das HTML für Offline-Nutzung.
base_url
Basis-URL zur Auflösung der Entry-Datei und relativer Asset-Pfade (Bilder, Scripts, Stylesheets).
| Eigenschaft | Wert |
|---|---|
| Typ | string (URI) |
| Erforderlich | Ja für Mini-Programme |
"base_url": "https://cdn.example.com/word-counter/"
Ein <base href="{base_url}">-Tag wird in den iframe injiziert, damit relative Pfade in Ihrem HTML korrekt aufgelöst werden.
Für .ais-Bundles, die per Datei-Upload installiert wurden, wird base_url automatisch auf local:// gesetzt, da alle Assets inline sind.
Optionale Metadaten-Felder
title
Menschenlesbarer Anzeigename, der im App Store und Berechtigungsdialog gezeigt wird. Wenn weggelassen, wird name verwendet.
| Eigenschaft | Wert |
|---|---|
| Typ | string |
"title": "Wortzähler"
description
Kurze Beschreibung für den Store-Eintrag und den Berechtigungsdialog.
| Eigenschaft | Wert |
|---|---|
| Typ | string |
| Max. Länge | 256 Zeichen |
"description": "Zählen Sie Wörter in Ihrem Chat-Verlauf nach Rolle und visualisieren Sie Trends"
icon
URL zu einem quadratischen Icon-Bild. Empfohlene Größe: 128x128 PNG. Angezeigt im Apps-Grid und Store-Eintrag.
| Eigenschaft | Wert |
|---|---|
| Typ | string (URI) |
"icon": "https://cdn.example.com/word-counter/icon.png"
Verwenden Sie ein quadratisches PNG mit 128x128 Pixeln mit transparentem oder dunklem Hintergrund, um zum dunklen Theme der Plattform zu passen. SVG wird ebenfalls akzeptiert.
author
Autoreninformation.
| Eigenschaft | Wert |
|---|---|
| Typ | object |
| Eigenschaften | name (string, max 100), url (string, URI) |
"author": {
"name": "Max Entwickler",
"url": "https://maxdev.com"
}
license
SPDX-Lizenzkennung.
| Eigenschaft | Wert |
|---|---|
| Typ | string |
"license": "MIT"
repository
Quellcode-Repository-URL.
| Eigenschaft | Wert |
|---|---|
| Typ | string (URI) |
"repository": "https://github.com/maxdev/word-counter"
keywords
Suchbegriffe für die Auffindbarkeit im App Store.
| Eigenschaft | Wert |
|---|---|
| Typ | string[] |
| Max. Items | 10 |
| Max. pro Keyword | 32 Zeichen |
"keywords": ["statistik", "werkzeug", "wortzahl"]
min_platform_version
Minimale AISCouncil Plattform-Version, die zum Ausführen dieser Erweiterung erforderlich ist.
| Eigenschaft | Wert |
|---|---|
| Typ | string (semver) |
"min_platform_version": "1.0.0"
Berechtigungen
permissions
Array von Berechtigungszeichenfolgen, die die Erweiterung anfordert. Der Benutzer muss diese zur Installationszeit genehmigen.
| Eigenschaft | Wert |
|---|---|
| Typ | string[] |
| Eindeutige Items | Ja |
"permissions": ["storage", "chat:read", "ui:toast"]
Verfügbare Berechtigungen
| Berechtigung | Beschreibung | Auto-genehmigt? |
|---|---|---|
storage | Pro-App isolierter Schlüssel-Wert-Speicher | Ja (immer erlaubt) |
chat:read | Chat-Verlauf lesen und neue Nachrichten abonnieren | Nein |
chat:write | Nachrichten als Benutzer senden (löst KI-Antworten aus) | Nein |
config:read | Aktive Bot-Konfiguration lesen (Anbieter, Modell, System-Prompt) | Nein |
config:write | Aktive Bot-Konfiguration ändern | Nein |
auth:read | Benutzerinfo lesen (Name, E-Mail, Profilbild) und Abonnement-Level | Nein |
ui:toast | Toast-Benachrichtigungen in der Plattform-UI anzeigen | Nein |
ui:modal | Bestätigungsdialoge anzeigen | Nein |
hooks:action | Hook-Events registrieren und feuern | Nein |
hooks:filter | Filter-Hooks registrieren | Nein |
network:fetch | Proxied Netzwerkrequests durch die Plattform machen (zukünftig) | Nein |
secrets:sync | API-Schlüssel für Gerät-zu-Gerät-Übertragung lesen und schreiben | Nein |
pages:publish | Webseiten auf bcz.co veröffentlichen | Nein |
Fordern Sie nur die Berechtigungen an, die Ihre App tatsächlich benötigt. Jede zusätzliche Berechtigung erhöht die Installationshürde – Benutzer genehmigen eher Apps mit weniger Berechtigungen.
Plugin-spezifische Felder
Diese Felder werden von Plugins und WASM-Addons verwendet, nicht von Mini-Programmen.
wasm
URL zur WASM-Binärdatei.
| Eigenschaft | Wert |
|---|---|
| Typ | string (URI) |
| Erforderlich | Für Plugins |
"wasm": "https://cdn.example.com/my-plugin/plugin.wasm"
wasm_sha256
SHA-256 Hex-Digest der WASM-Binärdatei zur Integritätsprüfung.
| Eigenschaft | Wert |
|---|---|
| Typ | string |
| Muster | ^[0-9a-f]{64}$ |
| Erforderlich | Für Plugins |
"wasm_sha256": "a1b2c3d4e5f6..."
segment_size
WASM-Modul-Speichersegmentgröße in Bytes.
| Eigenschaft | Wert |
|---|---|
| Typ | integer |
| Minimum | 0 |
"segment_size": 4194304
Erweiterte Felder
pages
Zusätzliche Seitenpfade für Multi-Page-Mini-Programme.
| Eigenschaft | Wert |
|---|---|
| Typ | string[] |
"pages": ["settings.html", "about.html"]
hooks
Hook-Registrierungen für Plugins und Addons. Jeder Hook hat einen Namen und optionale Priorität.
| Eigenschaft | Wert |
|---|---|
| Typ | object[] |
"hooks": [
{ "name": "chat:before-send", "priority": 50 },
{ "name": "message:filter", "priority": 100 }
]
Hook-Namen müssen ^[a-z][a-z0-9_.:-]*$ entsprechen und maximal 128 Zeichen lang sein. Die Priorität reicht von 0 (frühestens) bis 999 (spätestens), Standard ist 100.
settings
Benutzerkonfigurierbare Einstellungen, die in der Plattform-Einstellungs-UI erscheinen.
| Eigenschaft | Wert |
|---|---|
| Typ | object (Schlüssel sind Einstellungsnamen, Werte sind Einstellungsdefinitionen) |
"settings": {
"theme": {
"type": "select",
"label": "Farbdesign",
"default": "dark",
"options": [
{ "value": "dark", "label": "Dunkel" },
{ "value": "light", "label": "Hell" }
]
},
"maxMessages": {
"type": "number",
"label": "Max. zu analysierende Nachrichten",
"default": 500,
"description": "Begrenzen Sie die Anzahl der geladenen Chat-Nachrichten"
},
"autoRefresh": {
"type": "boolean",
"label": "Auto-Aktualisierung beim Öffnen",
"default": true
}
}
Einstellungstypen: string, number, boolean, select.
mcp_tools
MCP (Model Context Protocol) Werkzeugdeklarationen, die von dieser Erweiterung bereitgestellt werden.
| Eigenschaft | Wert |
|---|---|
| Typ | object[] |
"mcp_tools": [
{
"name": "count-words",
"description": "Wörter im angegebenen Text zählen",
"inputSchema": {
"type": "object",
"properties": {
"text": { "type": "string" }
},
"required": ["text"]
}
}
]
Typ-spezifische Anforderungen
| Feld | Plugin | Addon | Mini-Programm |
|---|---|---|---|
name | Erforderlich | Erforderlich | Erforderlich |
version | Erforderlich | Erforderlich | Erforderlich |
type | "plugin" | "addon" | "mini-program" |
wasm | Erforderlich | Erforderlich wenn kein entry | Nicht verwendet |
wasm_sha256 | Erforderlich | Erforderlich wenn wasm verwendet | Nicht verwendet |
entry | Nicht verwendet | Erforderlich wenn kein wasm | Erforderlich |
base_url | Nicht verwendet | Optional | Erforderlich |
Validierung
Verwenden Sie das integrierte Validierungsskript, um Ihr Manifest vor der Veröffentlichung zu prüfen:
# Eine einzelne Manifest-Datei validieren
python3 registry/validate.py manifest path/to/manifest.json
Der Validator prüft:
- Erforderliche Felder sind vorhanden
nameentspricht dem Muster^[a-z0-9-]+$und ist maximal 64 Zeichenversionist gültiges semverabiist1(falls vorhanden)typeist einer vonplugin,addon,mini-program- Berechtigungen stammen aus der zulässigen Menge
- Typ-spezifische erforderliche Felder sind vorhanden (z.B.
entryfür Mini-Programme) - Keine unbekannten Felder (Schema ist strikt mit
additionalProperties: false)
Das JSON Schema ist unter registry/manifest-schema.json veröffentlicht. Sie können es mit jedem JSON Schema Validator für IDE-Integration oder CI-Pipelines verwenden.
Schema-Referenz
Das Manifest-Schema ist als JSON Schema (Draft 2020-12) definiert und verfügbar unter:
https://aiscouncil.net/schema/manifest/v2
Referenzieren Sie es in Ihrem Manifest für Editor-Autocompletion:
{
"$schema": "https://aiscouncil.net/schema/manifest/v2",
"name": "my-app",
"version": "1.0.0"
}
Die meisten Editoren (VS Code, JetBrains, etc.) bieten Autocompletion und Validierung, wenn das $schema-Feld vorhanden ist.