Zum Hauptinhalt springen

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.

EigenschaftWert
Typstring
Muster^[a-z0-9-]+$ (nur Kleinbuchstaben, Ziffern, Bindestriche)
Max. Länge64 Zeichen
ErforderlichJa
"name": "word-counter"
Vorsicht

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.

EigenschaftWert
Typstring
Muster^\d+\.\d+\.\d+ (major.minor.patch, optionales Prerelease)
ErforderlichJa
"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.

EigenschaftWert
Typinteger
Konstante1
ErforderlichTechnisch 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.

EigenschaftWert
Typstring
Enum"plugin", "addon", "mini-program"
Standard"plugin"
"type": "mini-program"
TypLaufzeitUI-OberflächeAnforderungen
pluginWASM (Kernel-Slots 4-7)Keine (nur Hooks)wasm + wasm_sha256
addonWASM oder JSBenannte UI-Slotswasm oder entry
mini-programSandboxed iframe (null origin)Volles Panel (ersetzt Chat)entry + base_url

entry

Pfad zur Entry-HTML-Datei, relativ zu base_url.

EigenschaftWert
Typstring
ErforderlichJa 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).

EigenschaftWert
Typstring (URI)
ErforderlichJa 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.

Info

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.

EigenschaftWert
Typstring
"title": "Wortzähler"

description

Kurze Beschreibung für den Store-Eintrag und den Berechtigungsdialog.

EigenschaftWert
Typstring
Max. Länge256 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.

EigenschaftWert
Typstring (URI)
"icon": "https://cdn.example.com/word-counter/icon.png"
Tipp

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.

EigenschaftWert
Typobject
Eigenschaftenname (string, max 100), url (string, URI)
"author": {
"name": "Max Entwickler",
"url": "https://maxdev.com"
}

license

SPDX-Lizenzkennung.

EigenschaftWert
Typstring
"license": "MIT"

repository

Quellcode-Repository-URL.

EigenschaftWert
Typstring (URI)
"repository": "https://github.com/maxdev/word-counter"

keywords

Suchbegriffe für die Auffindbarkeit im App Store.

EigenschaftWert
Typstring[]
Max. Items10
Max. pro Keyword32 Zeichen
"keywords": ["statistik", "werkzeug", "wortzahl"]

min_platform_version

Minimale AISCouncil Plattform-Version, die zum Ausführen dieser Erweiterung erforderlich ist.

EigenschaftWert
Typstring (semver)
"min_platform_version": "1.0.0"

Berechtigungen

permissions

Array von Berechtigungszeichenfolgen, die die Erweiterung anfordert. Der Benutzer muss diese zur Installationszeit genehmigen.

EigenschaftWert
Typstring[]
Eindeutige ItemsJa
"permissions": ["storage", "chat:read", "ui:toast"]

Verfügbare Berechtigungen

BerechtigungBeschreibungAuto-genehmigt?
storagePro-App isolierter Schlüssel-Wert-SpeicherJa (immer erlaubt)
chat:readChat-Verlauf lesen und neue Nachrichten abonnierenNein
chat:writeNachrichten als Benutzer senden (löst KI-Antworten aus)Nein
config:readAktive Bot-Konfiguration lesen (Anbieter, Modell, System-Prompt)Nein
config:writeAktive Bot-Konfiguration ändernNein
auth:readBenutzerinfo lesen (Name, E-Mail, Profilbild) und Abonnement-LevelNein
ui:toastToast-Benachrichtigungen in der Plattform-UI anzeigenNein
ui:modalBestätigungsdialoge anzeigenNein
hooks:actionHook-Events registrieren und feuernNein
hooks:filterFilter-Hooks registrierenNein
network:fetchProxied Netzwerkrequests durch die Plattform machen (zukünftig)Nein
secrets:syncAPI-Schlüssel für Gerät-zu-Gerät-Übertragung lesen und schreibenNein
pages:publishWebseiten auf bcz.co veröffentlichenNein
Warnung

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.

EigenschaftWert
Typstring (URI)
ErforderlichFü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.

EigenschaftWert
Typstring
Muster^[0-9a-f]{64}$
ErforderlichFür Plugins
"wasm_sha256": "a1b2c3d4e5f6..."

segment_size

WASM-Modul-Speichersegmentgröße in Bytes.

EigenschaftWert
Typinteger
Minimum0
"segment_size": 4194304

Erweiterte Felder

pages

Zusätzliche Seitenpfade für Multi-Page-Mini-Programme.

EigenschaftWert
Typstring[]
"pages": ["settings.html", "about.html"]

hooks

Hook-Registrierungen für Plugins und Addons. Jeder Hook hat einen Namen und optionale Priorität.

EigenschaftWert
Typobject[]
"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.

EigenschaftWert
Typobject (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.

EigenschaftWert
Typobject[]
"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

FeldPluginAddonMini-Programm
nameErforderlichErforderlichErforderlich
versionErforderlichErforderlichErforderlich
type"plugin""addon""mini-program"
wasmErforderlichErforderlich wenn kein entryNicht verwendet
wasm_sha256ErforderlichErforderlich wenn wasm verwendetNicht verwendet
entryNicht verwendetErforderlich wenn kein wasmErforderlich
base_urlNicht verwendetOptionalErforderlich

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
  • name entspricht dem Muster ^[a-z0-9-]+$ und ist maximal 64 Zeichen
  • version ist gültiges semver
  • abi ist 1 (falls vorhanden)
  • type ist einer von plugin, addon, mini-program
  • Berechtigungen stammen aus der zulässigen Menge
  • Typ-spezifische erforderliche Felder sind vorhanden (z.B. entry für Mini-Programme)
  • Keine unbekannten Felder (Schema ist strikt mit additionalProperties: false)
Tipp

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.