Pular para o conteúdo principal

Referência do Manifest

Todo mini-programa, addon e plugin requer um arquivo manifest.json que descreve os metadados, permissões e pontos de entrada da extensão. O manifest segue o schema Manifest v2.

Exemplo Mínimo​

O manifest mais simples válido para um mini-programa:

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

Exemplo Completo​

Um manifest completo com todos os campos comumente usados:

{
"name": "word-counter",
"version": "1.2.0",
"abi": 1,
"type": "mini-program",
"title": "Word Counter",
"description": "Conte palavras no seu histórico de chat por papel e visualize tendências",
"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"
}

Referência de Campos​

Campos Obrigatórios​

name​

Nome único do pacote. Usado como identificador interno para isolamento de armazenamento, verificações de instalação e lookups de registro.

PropriedadeValor
Tipostring
Padrão^[a-z0-9-]+$ (apenas letras minúsculas, dígitos, hífens)
Comprimento máx64 caracteres
ObrigatórioSim
"name": "word-counter"
cuidado

O nome deve ser globalmente único dentro do registro. Escolha um nome descritivo. Você não pode mudá-lo após publicar sem criar uma nova entrada de pacote.

version​

String de versão semântica. Deve seguir o formato semver.

PropriedadeValor
Tipostring
Padrão^\d+\.\d+\.\d+ (major.minor.patch, prerelease opcional)
ObrigatórioSim
"version": "1.0.0"

Ao atualizar seu app no registro, incremente a versão tanto no manifest quanto na entrada do registry/packages.json.

Campos Fortemente Recomendados​

abi​

Versão da ABI (Application Binary Interface) que este manifest targetiza. Deve ser 1 para a plataforma atual.

PropriedadeValor
Tipointeger
Constante1
ObrigatórioTecnicamente opcional, mas fortemente recomendado
"abi": 1

A plataforma rejeita manifests com valores de abi diferentes de 1. Se omitido, a plataforma assume ABI 1 mas declaração explícita é preferida para compatibilidade futura.

type​

Tipo de extensão. Determina o ambiente de runtime e capacidades disponíveis.

PropriedadeValor
Tipostring
Enum"plugin", "addon", "mini-program"
Padrão"plugin"
"type": "mini-program"
TipoRuntimeSurface de UIRequisitos
pluginWASM (kernel slots 4-7)Nenhum (hooks apenas)wasm + wasm_sha256
addonWASM ou JSSlots de UI nomeadoswasm ou entry
mini-programiframe sandboxed (origem nula)Painel completo (substitui chat)entry + base_url

entry​

Caminho para o arquivo HTML de entrada, relativo a base_url.

PropriedadeValor
Tipostring
ObrigatórioSim para mini-programas e addons HTML
"entry": "index.html"

A plataforma busca {base_url}{entry} no momento da instalação e cacheia o HTML para uso offline.

base_url​

URL base para resolver o arquivo de entrada e caminhos de assets relativos (imagens, scripts, stylesheets).

PropriedadeValor
Tipostring (URI)
ObrigatórioSim para mini-programas
"base_url": "https://cdn.example.com/word-counter/"

Uma tag <base href="{base_url}"> é injetada no iframe para que caminhos relativos no seu HTML resolvam corretamente.

informação

Para bundles .ais instalados via upload de arquivo, base_url é definido como local:// automaticamente já que todos os assets estão inlineados.

Campos de Metadados Opcionais​

title​

Nome de exibição legível por humanos mostrado na App Store e diálogo de permissão. Se omitido, name é usado.

PropriedadeValor
Tipostring
"title": "Word Counter"

description​

Descrição curta para listagem na store e diálogo de permissão.

PropriedadeValor
Tipostring
Comprimento máx256 caracteres
"description": "Conte palavras no seu histórico de chat por papel e visualize tendências"

icon​

URL para uma imagem de ícone quadrada. Tamanho recomendado: 128x128 PNG. Exibido no grid de apps e listagem da store.

PropriedadeValor
Tipostring (URI)
"icon": "https://cdn.example.com/word-counter/icon.png"
dica

Use um PNG quadrado de 128x128 pixels com fundo transparente ou escuro para combinar com o tema escuro da plataforma. SVG também é aceito.

author​

Informação do autor.

PropriedadeValor
Tipoobject
Propriedadesname (string, máx 100), url (string, URI)
"author": {
"name": "Jane Developer",
"url": "https://janedev.com"
}

license​

Identificador de licença SPDX.

PropriedadeValor
Tipostring
"license": "MIT"

repository​

URL do repositório de código fonte.

PropriedadeValor
Tipostring (URI)
"repository": "https://github.com/janedev/word-counter"

keywords​

Palavras-chave de busca para descoberta na App Store.

PropriedadeValor
Tipostring[]
Máx itens10
Máx por keyword32 caracteres
"keywords": ["statistics", "utility", "word-count"]

min_platform_version​

Versão mínima da plataforma AISCouncil requerida para rodar esta extensão.

PropriedadeValor
Tipostring (semver)
"min_platform_version": "1.0.0"

Permissões​

permissions​

Array de strings de permissão que a extensão solicita. O usuário deve aprovar estas no momento da instalação.

PropriedadeValor
Tipostring[]
Itens únicosSim
"permissions": ["storage", "chat:read", "ui:toast"]

Permissões Disponíveis​

PermissãoDescriçãoAuto-concedida?
storageArmazenamento chave-valor isolado por appSim (sempre permitido)
chat:readLer histórico de chat e subscrever a novas mensagensNão
chat:writeEnviar mensagens como o usuário (dispara respostas de IA)Não
config:readLer a configuração do bot ativo (provedor, modelo, prompt de sistema)Não
config:writeModificar a configuração do bot ativoNão
auth:readLer informações do usuário (nome, email, foto de perfil) e nível de assinaturaNão
ui:toastMostrar notificações toast na UI da plataformaNão
ui:modalMostrar diálogos de confirmaçãoNão
hooks:actionRegistrar e disparar eventos de hookNão
hooks:filterRegistrar hooks de filtroNão
network:fetchFazer requisições de rede proxied através da plataforma (futuro)Não
secrets:syncLer e escrever chaves de API para transferência dispositivo-para-dispositivoNão
pages:publishPublicar páginas web em bcz.coNão
aviso

Solicite apenas as permissões que seu app realmente precisa. Cada permissão adicional aumenta a barreira para instalação -- usuários são mais propensos a aprovar apps com menos permissões.

Campos Específicos de Plugin​

Estes campos são usados por plugins e addons WASM, não por mini-programas.

wasm​

URL para o binário WASM.

PropriedadeValor
Tipostring (URI)
ObrigatórioPara plugins
"wasm": "https://cdn.example.com/my-plugin/plugin.wasm"

wasm_sha256​

Digest hex SHA-256 do binário WASM para verificação de integridade.

PropriedadeValor
Tipostring
Padrão^[0-9a-f]{64}$
ObrigatórioPara plugins
"wasm_sha256": "a1b2c3d4e5f6..."

segment_size​

Tamanho do segmento de memória do módulo WASM em bytes.

PropriedadeValor
Tipointeger
Mínimo0
"segment_size": 4194304

Campos Avançados​

pages​

Caminhos de páginas adicionais para mini-programas multi-página.

PropriedadeValor
Tipostring[]
"pages": ["settings.html", "about.html"]

hooks​

Registros de hooks para plugins e addons. Cada hook tem um nome e prioridade opcional.

PropriedadeValor
Tipoobject[]
"hooks": [
{ "name": "chat:before-send", "priority": 50 },
{ "name": "message:filter", "priority": 100 }
]

Nomes de hooks devem corresponder a ^[a-z][a-z0-9_.:-]*$ e ter no máximo 128 caracteres. Prioridade varia de 0 (mais cedo) a 999 (mais tarde), padrão 100.

settings​

Configurações configuráveis pelo usuário que aparecem na UI de Configurações da plataforma.

PropriedadeValor
Tipoobject (chaves são nomes de configurações, valores são definições de configuração)
"settings": {
"theme": {
"type": "select",
"label": "Tema de Cores",
"default": "dark",
"options": [
{ "value": "dark", "label": "Escuro" },
{ "value": "light", "label": "Claro" }
]
},
"maxMessages": {
"type": "number",
"label": "Máx mensagens para analisar",
"default": 500,
"description": "Limita o número de mensagens de chat carregadas"
},
"autoRefresh": {
"type": "boolean",
"label": "Auto-atualizar ao abrir",
"default": true
}
}

Tipos de configuração: string, number, boolean, select.

mcp_tools​

Declarações de ferramentas MCP (Model Context Protocol) fornecidas por esta extensão.

PropriedadeValor
Tipoobject[]
"mcp_tools": [
{
"name": "count-words",
"description": "Conta palavras no texto fornecido",
"inputSchema": {
"type": "object",
"properties": {
"text": { "type": "string" }
},
"required": ["text"]
}
}
]

Requisitos Específicos por Tipo​

CampoPluginAddonMini-Program
nameObrigatórioObrigatórioObrigatório
versionObrigatórioObrigatórioObrigatório
type"plugin""addon""mini-program"
wasmObrigatórioObrigatório se sem entryNão usado
wasm_sha256ObrigatórioObrigatório se usar wasmNão usado
entryNão usadoObrigatório se sem wasmObrigatório
base_urlNão usadoOpcionalObrigatório

Validação​

Use o script de validação integrado para verificar seu manifest antes de publicar:

# Valida um único arquivo de manifest
python3 registry/validate.py manifest caminho/para/manifest.json

O validador verifica:

  • Campos obrigatórios presentes
  • name corresponde ao padrão ^[a-z0-9-]+$ e tem no máximo 64 caracteres
  • version é semver válido
  • abi é 1 (se presente)
  • type é um de plugin, addon, mini-program
  • Permissões são do conjunto permitido
  • Campos obrigatórios específicos por tipo estão presentes (ex: entry para mini-programas)
  • Nenhum campo desconhecido (schema é estrito com additionalProperties: false)
dica

O JSON Schema é publicado em registry/manifest-schema.json. Você pode usá-lo com qualquer validador JSON Schema para integração de IDE ou pipelines de CI.


Referência do Schema​

O schema do manifest é definido como JSON Schema (Draft 2020-12) e está disponível em:

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

Referencie-o no seu manifest para autocompletar no editor:

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

A maioria dos editores (VS Code, JetBrains, etc.) fornecerá autocompletar e validação quando o campo $schema está presente.