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 |
|---|---|
| Type | string |
| Pattern | ^[a-z0-9-]+$ (lettres minuscules, chiffres, tirets uniquement) |
| Longueur max | 64 caractères |
| Requis | Oui |
"name": "word-counter"
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 |
|---|---|
| Type | string |
| Pattern | ^\d+\.\d+\.\d+ (majeur.mineur.correctif, pré-version optionnelle) |
| Requis | Oui |
"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 |
|---|---|
| Type | integer |
| Const | 1 |
| Requis | Techniquement 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 |
|---|---|
| Type | string |
| Enum | "plugin", "addon", "mini-program" |
| Défaut | "plugin" |
"type": "mini-program"
| Type | Runtime | Surface UI | Prérequis |
|---|---|---|---|
plugin | WASM (slots noyau 4-7) | Aucun (hooks uniquement) | wasm + wasm_sha256 |
addon | WASM ou JS | Slots UI nommés | wasm ou entry |
mini-program | iframe 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 |
|---|---|
| Type | string |
| Requis | Oui 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 |
|---|---|
| Type | string (URI) |
| Requis | Oui 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.
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 |
|---|---|
| Type | string |
"title": "Word Counter"
description
Description courte pour le listing du store et la boîte de dialogue de permission.
| Propriété | Valeur |
|---|---|
| Type | string |
| Longueur max | 256 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 |
|---|---|
| Type | string (URI) |
"icon": "https://cdn.example.com/word-counter/icon.png"
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 |
|---|---|
| Type | object |
| Propriétés | name (string, max 100), url (string, URI) |
"author": {
"name": "Jane Developer",
"url": "https://janedev.com"
}
license
Identifiant de licence SPDX.
| Propriété | Valeur |
|---|---|
| Type | string |
"license": "MIT"
repository
URL du dépôt source.
| Propriété | Valeur |
|---|---|
| Type | string (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 |
|---|---|
| Type | string[] |
| Max éléments | 10 |
| 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 |
|---|---|
| Type | string (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 |
|---|---|
| Type | string[] |
| Éléments uniques | Oui |
"permissions": ["storage", "chat:read", "ui:toast"]
Permissions Disponibles
| Permission | Description | Auto-accordée ? |
|---|---|---|
storage | Stockage clé-valeur isolé par application | Oui (toujours autorisé) |
chat:read | Lire l'historique de chat et s'abonner aux nouveaux messages | Non |
chat:write | Envoyer des messages en tant qu'utilisateur (déclenche des réponses IA) | Non |
config:read | Lire la configuration du bot actif (provider, modèle, prompt système) | Non |
config:write | Modifier la configuration du bot actif | Non |
auth:read | Lire les infos utilisateur (nom, email, photo de profil) et niveau d'abonnement | Non |
ui:toast | Afficher des notifications toast dans l'interface de la plateforme | Non |
ui:modal | Afficher des boîtes de dialogue de confirmation | Non |
hooks:action | Enregistrer et déclencher des événements hook | Non |
hooks:filter | Enregistrer des hooks de filtre | Non |
network:fetch | Faire des requêtes réseau proxifiées via la plateforme (futur) | Non |
secrets:sync | Lire et écrire les clés API pour le transfert entre appareils | Non |
pages:publish | Publier des pages web sur bcz.co | Non |
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 |
|---|---|
| Type | string (URI) |
| Requis | Pour 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 |
|---|---|
| Type | string |
| Pattern | ^[0-9a-f]{64}$ |
| Requis | Pour les plugins |
"wasm_sha256": "a1b2c3d4e5f6..."
segment_size
Taille du segment mémoire du module WASM en octets.
| Propriété | Valeur |
|---|---|
| Type | integer |
| Minimum | 0 |
"segment_size": 4194304
Champs Avancés
pages
Chemins de pages supplémentaires pour les mini-programmes multi-pages.
| Propriété | Valeur |
|---|---|
| Type | string[] |
"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 |
|---|---|
| Type | object[] |
"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 |
|---|---|
| Type | object (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 |
|---|---|
| Type | object[] |
"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
| Champ | Plugin | Addon | Mini-Program |
|---|---|---|---|
name | Requis | Requis | Requis |
version | Requis | Requis | Requis |
type | "plugin" | "addon" | "mini-program" |
wasm | Requis | Requis si pas de entry | Non utilisé |
wasm_sha256 | Requis | Requis si utilisation de wasm | Non utilisé |
entry | Non utilisé | Requis si pas de wasm | Requis |
base_url | Non utilisé | Optionnel | Requis |
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
namecorrespond au pattern^[a-z0-9-]+$et fait au plus 64 caractèresversionest un semver valideabiest1(si présent)typeest l'un deplugin,addon,mini-program- Les permissions proviennent de l'ensemble autorisé
- Les champs requis spécifiques au type sont présents (ex.,
entrypour les mini-programmes) - Pas de champs inconnus (le schéma est strict avec
additionalProperties: false)
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.