Aller au contenu principal

Référence du Manifeste

Chaque mini-programme, addon et plugin nécessite un fichier manifest.json qui décrit les métadonnées de l'extension, ses permissions et ses points d'entrée. Le manifeste suit le schéma Manifest v2.

Exemple Minimal

Le manifeste le plus simple pour un mini-programme :

{
"name": "my-app",
"version": "1.0.0",
"abi": 1,
"type": "mini-program",
"entry": "index.html",
"base_url": "https://cdn.example.com/my-app/"
}

Exemple Complet

Un manifeste complet avec tous les champs couramment utilisés :

{
"name": "word-counter",
"version": "1.2.0",
"abi": 1,
"type": "mini-program",
"title": "Word Counter",
"description": "Count words in your chat history by role and visualize trends",
"icon": "https://cdn.example.com/word-counter/icon.png",
"author": {
"name": "Jane Developer",
"url": "https://janedev.com"
},
"entry": "index.html",
"base_url": "https://cdn.example.com/word-counter/",
"permissions": ["storage", "chat:read", "ui:toast"],
"keywords": ["statistics", "utility", "word-count"],
"license": "MIT",
"repository": "https://github.com/janedev/word-counter",
"min_platform_version": "1.0.0"
}

Référence des Champs

Champs Requis

name

Nom de package unique. Utilisé comme identifiant interne pour l'isolation du stockage, les vérifications d'installation et les recherches dans le registre.

PropriétéValeur
Typestring
Pattern^[a-z0-9-]+$ (lettres minuscules, chiffres, tirets uniquement)
Longueur max64 caractères
RequisOui
"name": "word-counter"
attention

Le nom doit être globalement unique dans le registre. Choisissez un nom descriptif. Vous ne pouvez pas le changer après publication sans créer une nouvelle entrée de package.

version

Chaîne de version sémantique. Doit suivre le format semver.

PropriétéValeur
Typestring
Pattern^\d+\.\d+\.\d+ (majeur.mineur.correctif, pré-version optionnelle)
RequisOui
"version": "1.0.0"

Lors de la mise à jour de votre application dans le registre, incrémentez la version à la fois dans le manifeste et dans l'entrée registry/packages.json.

Champs Fortement Recommandés

abi

Version ABI (Application Binary Interface) que ce manifeste cible. Doit être 1 pour la plateforme actuelle.

PropriétéValeur
Typeinteger
Const1
RequisTechniquement optionnel, mais fortement recommandé
"abi": 1

La plateforme rejette les manifestes avec des valeurs abi autres que 1. Si omis, la plateforme suppose ABI 1 mais la déclaration explicite est préférée pour la compatibilité future.

type

Type d'extension. Détermine l'environnement d'exécution et les capacités disponibles.

PropriétéValeur
Typestring
Enum"plugin", "addon", "mini-program"
Défaut"plugin"
"type": "mini-program"
TypeRuntimeSurface UIPrérequis
pluginWASM (slots noyau 4-7)Aucun (hooks uniquement)wasm + wasm_sha256
addonWASM ou JSSlots UI nomméswasm ou entry
mini-programiframe sandboxée (origine nulle)Panneau complet (remplace le chat)entry + base_url

entry

Chemin vers le fichier HTML d'entrée, relatif à base_url.

PropriétéValeur
Typestring
RequisOui pour les mini-programmes et addons HTML
"entry": "index.html"

La plateforme récupère {base_url}{entry} au moment de l'installation et met en cache le HTML pour l'usage hors-ligne.

base_url

URL de base pour résoudre le fichier d'entrée et les chemins de ressources relatifs (images, scripts, feuilles de style).

PropriétéValeur
Typestring (URI)
RequisOui pour les mini-programmes
"base_url": "https://cdn.example.com/word-counter/"

Une balise <base href="{base_url}"> est injectée dans l'iframe pour que les chemins relatifs dans votre HTML soient résolus correctement.

info

Pour les bundles .ais installés depuis un upload de fichier, base_url est défini sur local:// automatiquement puisque toutes les ressources sont intégrées.

Champs de Métadonnées Optionnels

title

Nom d'affichage lisible montré dans l'App Store et la boîte de dialogue de permission. Si omis, name est utilisé.

PropriétéValeur
Typestring
"title": "Word Counter"

description

Description courte pour le listing du store et la boîte de dialogue de permission.

PropriétéValeur
Typestring
Longueur max256 caractères
"description": "Count words in your chat history by role and visualize trends"

icon

URL vers une image d'icône carrée. Taille recommandée : 128x128 PNG. Affichée dans la grille d'applications et le listing du store.

PropriétéValeur
Typestring (URI)
"icon": "https://cdn.example.com/word-counter/icon.png"
astuce

Utilisez un PNG carré de 128x128 pixels avec un fond transparent ou sombre pour correspondre au thème sombre de la plateforme. SVG est également accepté.

author

Informations sur l'auteur.

PropriétéValeur
Typeobject
Propriétésname (string, max 100), url (string, URI)
"author": {
"name": "Jane Developer",
"url": "https://janedev.com"
}

license

Identifiant de licence SPDX.

PropriétéValeur
Typestring
"license": "MIT"

repository

URL du dépôt source.

PropriétéValeur
Typestring (URI)
"repository": "https://github.com/janedev/word-counter"

keywords

Mots-clés de recherche pour la découvrabilité dans l'App Store.

PropriétéValeur
Typestring[]
Max éléments10
Max par mot-clé32 caractères
"keywords": ["statistics", "utility", "word-count"]

min_platform_version

Version minimale de la plateforme AISCouncil requise pour exécuter cette extension.

PropriétéValeur
Typestring (semver)
"min_platform_version": "1.0.0"

Permissions

permissions

Tableau de chaînes de permission que l'extension demande. L'utilisateur doit les approuver au moment de l'installation.

PropriétéValeur
Typestring[]
Éléments uniquesOui
"permissions": ["storage", "chat:read", "ui:toast"]

Permissions Disponibles

PermissionDescriptionAuto-accordée ?
storageStockage clé-valeur isolé par applicationOui (toujours autorisé)
chat:readLire l'historique de chat et s'abonner aux nouveaux messagesNon
chat:writeEnvoyer des messages en tant qu'utilisateur (déclenche des réponses IA)Non
config:readLire la configuration du bot actif (provider, modèle, prompt système)Non
config:writeModifier la configuration du bot actifNon
auth:readLire les infos utilisateur (nom, email, photo de profil) et niveau d'abonnementNon
ui:toastAfficher des notifications toast dans l'interface de la plateformeNon
ui:modalAfficher des boîtes de dialogue de confirmationNon
hooks:actionEnregistrer et déclencher des événements hookNon
hooks:filterEnregistrer des hooks de filtreNon
network:fetchFaire des requêtes réseau proxifiées via la plateforme (futur)Non
secrets:syncLire et écrire les clés API pour le transfert entre appareilsNon
pages:publishPublier des pages web sur bcz.coNon
avertissement

Demandez uniquement les permissions dont votre application a réellement besoin. Chaque permission supplémentaire augmente la barrière à l'installation — les utilisateurs sont plus susceptibles d'approuver des applications avec moins de permissions.

Champs Spécifiques aux Plugins

Ces champs sont utilisés par les plugins et addons WASM, pas par les mini-programmes.

wasm

URL vers le binaire WASM.

PropriétéValeur
Typestring (URI)
RequisPour les plugins
"wasm": "https://cdn.example.com/my-plugin/plugin.wasm"

wasm_sha256

Digest hex SHA-256 du binaire WASM pour la vérification d'intégrité.

PropriétéValeur
Typestring
Pattern^[0-9a-f]{64}$
RequisPour les plugins
"wasm_sha256": "a1b2c3d4e5f6..."

segment_size

Taille du segment mémoire du module WASM en octets.

PropriétéValeur
Typeinteger
Minimum0
"segment_size": 4194304

Champs Avancés

pages

Chemins de pages supplémentaires pour les mini-programmes multi-pages.

PropriétéValeur
Typestring[]
"pages": ["settings.html", "about.html"]

hooks

Enregistrements de hooks pour les plugins et addons. Chaque hook a un nom et une priorité optionnelle.

PropriétéValeur
Typeobject[]
"hooks": [
{ "name": "chat:before-send", "priority": 50 },
{ "name": "message:filter", "priority": 100 }
]

Les noms de hooks doivent correspondre à ^[a-z][a-z0-9_.:-]*$ et faire au plus 128 caractères. La priorité va de 0 (le plus tôt) à 999 (le plus tard), avec 100 par défaut.

settings

Paramètres configurables par l'utilisateur qui apparaissent dans l'interface des paramètres de la plateforme.

PropriétéValeur
Typeobject (les clés sont des noms de paramètres, les valeurs sont des définitions de paramètres)
"settings": {
"theme": {
"type": "select",
"label": "Thème de couleur",
"default": "dark",
"options": [
{ "value": "dark", "label": "Sombre" },
{ "value": "light", "label": "Clair" }
]
},
"maxMessages": {
"type": "number",
"label": "Max messages à analyser",
"default": 500,
"description": "Limiter le nombre de messages de chat chargés"
},
"autoRefresh": {
"type": "boolean",
"label": "Actualisation automatique à l'ouverture",
"default": true
}
}

Types de paramètres : string, number, boolean, select.

mcp_tools

Déclarations d'outils MCP (Model Context Protocol) fournis par cette extension.

PropriétéValeur
Typeobject[]
"mcp_tools": [
{
"name": "count-words",
"description": "Count words in the given text",
"inputSchema": {
"type": "object",
"properties": {
"text": { "type": "string" }
},
"required": ["text"]
}
}
]

Prérequis par Type

ChampPluginAddonMini-Program
nameRequisRequisRequis
versionRequisRequisRequis
type"plugin""addon""mini-program"
wasmRequisRequis si pas de entryNon utilisé
wasm_sha256RequisRequis si utilisation de wasmNon utilisé
entryNon utiliséRequis si pas de wasmRequis
base_urlNon utiliséOptionnelRequis

Validation

Utilisez le script de validation intégré pour vérifier votre manifeste avant publication :

# Valider un seul fichier manifeste
python3 registry/validate.py manifest path/to/manifest.json

Le validateur vérifie :

  • Les champs requis sont présents
  • name correspond au pattern ^[a-z0-9-]+$ et fait au plus 64 caractères
  • version est un semver valide
  • abi est 1 (si présent)
  • type est l'un de plugin, addon, mini-program
  • Les permissions proviennent de l'ensemble autorisé
  • Les champs requis spécifiques au type sont présents (ex., entry pour les mini-programmes)
  • Pas de champs inconnus (le schéma est strict avec additionalProperties: false)
astuce

Le JSON Schema est publié à registry/manifest-schema.json. Vous pouvez l'utiliser avec n'importe quel validateur JSON Schema pour l'intégration IDE ou les pipelines CI.


Référence du Schéma

Le schéma du manifeste est défini comme JSON Schema (Draft 2020-12) et est disponible à :

https://aiscouncil.net/schema/manifest/v2

Référencez-le dans votre manifeste pour l'autocomplétion dans l'éditeur :

{
"$schema": "https://aiscouncil.net/schema/manifest/v2",
"name": "my-app",
"version": "1.0.0"
}

La plupart des éditeurs (VS Code, JetBrains, etc.) fourniront l'autocomplétion et la validation lorsque le champ $schema est présent.