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.com/schema/manifest/v2

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

{
"$schema": "https://aiscouncil.com/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.