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

Referencie-o no seu manifest para autocompletar no editor:

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