# Referência de IA, contexto e workflows

Provedores, conversas, ações, orquestração, permissões e liberação do subsistema de IA.

<span id="preparar-una-instancia-de-ia"></span>

<span class="section-anchor" id="section-1"></span>

## Preparar uma instância de IA

Obtenha `const ai = await wu.aiReady()` antes de configurar o subsistema. Apenas `WuAI` é um export público do subpath `wu-framework/ai`; os objetos `context`, `conversation` e `permissions` expõem métodos concretos, não acesso irrestrito a suas classes internas.

Nos exemplos de conversa, configure primeiro um provedor `demo` com transporte próprio ou um proxy de servidor. Uma resposta de ação com `success:false` deve ser tratada mesmo que a promessa tenha sido resolvida. Os nomes de resultados nas assinaturas descrevem estruturas de dados e não prometem exports TypeScript adicionais.

A política de IA e os grants do core têm propósitos diferentes. Os workflows deterministas executam primitivas do host diretamente; não são uma API para conceder execução a código alheio. Consulte a [receita de IA e MCP](/pt/docs/framework/ai-recipes/) para uma integração guiada.

<span class="section-anchor" id="section-2"></span>

## wu.aiReady

Carrega o subsistema opcional e fornece uma instância pronta para configurar.

`wu.aiReady(): Promise<WuAI>`

- **Parâmetros:** Não exige importar wu-framework/ai se a facade do core for usada.
- **Retorno:** Promessa da instância WuAI.
- **Erros:** Rejeita se não conseguir importar o módulo opcional.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
const ai = await wu.aiReady();
ai.init({ permissions: { executeActions: false } });
```

Para operações imediatas de leitura, aguarde aiReady: a facade lazy pode retornar valores iniciais antes de concluir o carregamento.

Referência: `src/index.js`.

<span class="section-anchor" id="section-3"></span>

## WuAI

Cria o coordenador de IA com dependências explícitas.

`new WuAI({ eventBus, store, core?, token? })`

- **Parâmetros:** eventBus e store compartilhados com o host; core permite consultar apps.
- **Retorno:** Instância ainda não inicializada.
- **Erros:** Propaga erros de configuração ou execução; capture rejeições e revise os resultados das ações.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
import { WuAI } from 'wu-framework/ai';
const ai = new WuAI({ eventBus: wu.eventBus, store: wu.store, core: wu });
ai.init();
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-4"></span>

## ai.init

Inicializa provedores, conversas, ações, contexto e proteção de execução.

`ai.init(config?): WuAI`

- **Parâmetros:** permissions, context, conversation, triggers, agent, orchestrate, rateLimit, circuitBreaker, loopProtection, allowedDomains e browser. O provedor é registrado separadamente com ai.provider(name, config).
- **Retorno:** A mesma instância; chamadas posteriores reconfiguram as opções compatíveis.
- **Erros:** Propaga erros de configuração ou execução; capture rejeições e revise os resultados das ações.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
const ai = await wu.aiReady();
ai.init({ permissions: { executeActions: true, network: false }, allowedDomains: [] });
```

A autorização declarada não isola JavaScript capturado por um handler próprio: o código do host continua sendo confiável.

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-5"></span>

## ai.provider

Registra um provedor integrado ou funções de transporte próprias.

`ai.provider(name, config): WuAI`

- **Parâmetros:** name; adapter, endpoint, model, active; ou send/stream próprios. Use um proxy de servidor para as credenciais.
- **Retorno:** A mesma instância.
- **Erros:** Lança se não reconhecer o adapter e não houver send/stream. Uma API key direta é removida por padrão ao detectar produção.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
ai.provider('demo', {
  send: async () => ({ content: 'Respuesta determinista', usage: {} }),
});
const result = await ai.send('Hola', { provider: 'demo' });
```

Um transporte personalizado é código privilegiado do host, não uma forma de testar o isolamento de rede.

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-6"></span>

## ai.send

Envia uma mensagem e processa as ferramentas solicitadas pelo provedor.

`ai.send(message, options?): Promise<ConversationResponse>`

- **Parâmetros:** message string; namespace, provider, systemPrompt, templateVars, temperature, maxTokens, responseFormat e signal.
- **Retorno:** Resposta com content, namespace e resultados/uso disponíveis. Um preflight negado resolve content:"[blocked] ..."; um cancelamento resolve content:"[aborted]".
- **Erros:** Os erros do provedor normalmente rejeitam a promessa; bloqueio de preflight e AbortError são representados como respostas resolvidas com um marcador em content.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** ai.abort(namespace) interrompe essa conversa; clear remove o histórico, deleteNamespace remove e aborta.

```js
const response = await ai.send('Resume el estado', { namespace: 'help', provider: 'demo' });
console.log(response.content);
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-7"></span>

## ai.stream

Fornece texto e eventos de ferramentas de forma incremental.

`ai.stream(message, options?): AsyncGenerator<StreamChunk>`

- **Parâmetros:** As mesmas opções de conversa de send; o provedor deve oferecer suporte a streaming.
- **Retorno:** Iterador assíncrono com chunks tipados por type.
- **Erros:** Erros do provedor e abort são emitidos como chunks type:"error". A construção de systemPrompt ocorre antes do try e pode rejeitar a iteração.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
for await (const chunk of ai.stream('Explica el estado', { namespace: 'help' })) {
  if (chunk.type === 'text') console.log(chunk.content);
}
```

Não presuma que cada chunk contém texto: há resultados de ferramentas, finalização e erros.

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-8"></span>

## ai.json

Solicita uma saída JSON e separa o texto recebido do resultado do parsing.

`ai.json(message, options?): Promise<JsonResponse>`

- **Parâmetros:** schema/schemaName opcionais, além das opções de send.
- **Retorno:** {data, raw, error, usage, namespace}.
- **Erros:** JSON inválido é informado em error com data:null; as falhas do provedor podem rejeitar a promessa.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
const result = await ai.json('Devuelve {"ready":true}', { provider: 'demo' });
if (result.error) console.error(result.error);
else console.log(result.data);
```

A disponibilidade de schema no provedor não substitui a validação de negócio do resultado.

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-9"></span>

## ai.abort

Cancela solicitações ativas de uma conversa ou de todas.

`ai.abort(namespace?): void`

- **Parâmetros:** Namespace opcional; omiti-lo aborta todos.
- **Retorno:** void.
- **Erros:** Propaga erros de configuração ou execução; capture rejeições e revise os resultados das ações.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** Abortar não apaga as mensagens anteriores; use conversation.clear se também quiser esvaziar o histórico.

```js
ai.abort('help');
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-10"></span>

## ai.action

Registra uma operação executável com descrição, parâmetros e handler.

`ai.action(name, config): WuAI`

- **Parâmetros:** description, parameters, handler; confirm, permissions, permissionsWhen e dangerous opcionais.
- **Retorno:** A mesma instância.
- **Erros:** Propaga erros de configuração ou execução; capture rejeições e revise os resultados das ações.
- **Permissões:** executeActions autoriza a execução; permissions/permissionsWhen podem exigir flags adicionais de IA.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
ai.action('math.double', {
  description: 'Duplica un número',
  parameters: { type: 'object', properties: { value: { type: 'number' } }, required: ['value'] },
  handler: ({ value }) => value * 2,
});
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-11"></span>

## ai.execute

Executa uma ação registrada passando pela política e pelos controles do subsistema.

`ai.execute(actionName, params?): Promise<ActionResult>`

- **Parâmetros:** Nome exato e objeto de argumentos.
- **Retorno:** {success, result?, reason?}; success:false também é uma resposta resolvida.
- **Erros:** Propaga erros de configuração ou execução; capture rejeições e revise os resultados das ações.
- **Permissões:** Exige executeActions e as permissões específicas da ação; pode exigir confirmação.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
const result = await ai.execute('math.double', { value: 21 });
if (!result.success) throw new Error(result.reason);
console.log(result.result);
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-12"></span>

## ai.trigger

Conecta um padrão de eventos a uma solicitação ao assistente.

`ai.trigger(name, config): WuAI`

- **Parâmetros:** pattern, prompt; condition, debounce, priority e onResult opcionais.
- **Retorno:** A mesma instância.
- **Erros:** Propaga erros de configuração ou execução; capture rejeições e revise os resultados das ações.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** ai.destroy() remove as inscrições criadas pelos triggers.

```js
ai.trigger('cart-help', {
  pattern: 'cart:help',
  prompt: 'Explica cómo revisar este carrito',
  debounce: 500,
  onResult: (response) => console.log(response.content),
});
```

Use condition e debounce para limitar ativações; não publique dados sensíveis em eventos destinados ao contexto.

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-13"></span>

## ai.fireTrigger

Solicita explicitamente a execução de um trigger registrado.

`ai.fireTrigger(name, data?): Promise<unknown>`

- **Parâmetros:** Nome e dados recebidos por sua configuração de prompt/condition.
- **Retorno:** Resultado assíncrono da execução ou ausência de resultado quando ela é omitida.
- **Erros:** Propaga erros de configuração ou execução; capture rejeições e revise os resultados das ações.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
await ai.fireTrigger('cart-help', { itemCount: 2 });
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-14"></span>

## ai.agent

Executa um loop de etapas que pode consultar o contexto e chamar ações.

`ai.agent(goal, options?): AsyncGenerator<AgentStep>`

- **Parâmetros:** goal string; opções do agente, como maxSteps, namespace, provider e signal.
- **Retorno:** Iterador de etapas, não um texto único.
- **Erros:** Propaga erros de configuração ou execução; capture rejeições e revise os resultados das ações.
- **Permissões:** As ações continuam sujeitas a executeActions e suas flags. Limitar maxSteps não concede permissões.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
for await (const step of ai.agent('Explica las acciones disponibles', { maxSteps: 3 })) {
  console.log(step);
}
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-15"></span>

## ai.capability

Registra uma ação sob a identidade funcional de uma aplicação para orquestração.

`ai.capability(appName, actionName, config): WuAI`

- **Parâmetros:** appName, actionName e configuração de ação com description, parameters e handler.
- **Retorno:** A mesma instância.
- **Erros:** Propaga erros de configuração ou execução; capture rejeições e revise os resultados das ações.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
ai.capability('calculator', 'double', {
  description: 'Duplica un número',
  parameters: { value: { type: 'number', required: true } },
  handler: ({ value }) => value * 2,
});
```

Aqui, capability significa uma ação publicada para o orquestrador. Não cria um grant events.emit/rpc.call/store.write do core.

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-16"></span>

## ai.intent

Resolve uma intenção usando as capacidades registradas pelas aplicações.

`ai.intent(description, options?): Promise<IntentResult>`

- **Parâmetros:** Descrição e opções de orquestração/provedor.
- **Retorno:** Resultado com content, tool_results, usage, resolved e appsInvolved.
- **Erros:** Propaga erros de configuração ou execução; capture rejeições e revise os resultados das ações.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
const result = await ai.intent('Duplica 7 usando calculator');
console.log(result.resolved, result.appsInvolved);
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-17"></span>

## ai.removeApp

Remove as capacidades de IA associadas a uma aplicação.

`ai.removeApp(appName): WuAI`

- **Parâmetros:** Nome usado ao registrar capability.
- **Retorno:** A mesma instância.
- **Erros:** Propaga erros de configuração ou execução; capture rejeições e revise os resultados das ações.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** Não desmonta a aplicação do core nem apaga seu estado global.

```js
ai.removeApp('calculator');
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-18"></span>

## ai.workflow

Registra uma sequência determinista de ações ou etapas interpretadas por um agente.

`ai.workflow(name, config): WuAI`

- **Parâmetros:** steps não vazio; o modo deterministic aceita click, type, navigate, wait, emit e setState. O modo ai aceita descrições. parameters, maxSteps, provider e temperature opcionais.
- **Retorno:** A mesma instância.
- **Erros:** Nome ausente ou steps vazio/inválido lançam um erro ao registrar.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
ai.workflow('mark-ready', {
  mode: 'deterministic',
  steps: [{ action: 'setState', path: 'workflow.ready', value: true }],
});
```

As etapas deterministas são primitivas do host e não chamam ações registradas com ai.action. São executadas diretamente, sem passar por ai.execute nem por suas verificações de permissões.

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-19"></span>

## ai.runWorkflow

Executa um workflow e emite o progresso de suas etapas.

`ai.runWorkflow(name, params?, options?): AsyncGenerator<WorkflowStep>`

- **Parâmetros:** Nome registrado, parâmetros exigidos por workflow.parameters e opções de execução.
- **Retorno:** Iterador assíncrono de resultados.
- **Erros:** Workflow desconhecido ou parâmetro obrigatório ausente produzem uma rejeição durante a iteração.
- **Permissões:** O modo AI controla suas chamadas de ferramentas; o modo deterministic executa primitivas do host diretamente e não aplica as flags de ai.permissions. Aceite apenas workflows e parâmetros confiáveis.
- **Limpeza:** Chame ai.destroy() quando o runtime proprietário terminar.

```js
for await (const step of ai.runWorkflow('mark-ready')) console.log(step);
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-20"></span>

## ai.context.configure

Configura a seleção e o orçamento do contexto.

`ai.context.configure(config): void`

- **Parâmetros:** budget, charRatio e sources com store, events e custom.
- **Retorno:** void
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.context.configure({ budget: 1500, sources: { store: { include: ['cart'] } } });
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-21"></span>

## ai.context.register

Adiciona um coletor de contexto próprio.

`ai.context.register(name, config): void`

- **Parâmetros:** Nome e {collector,priority}; collector pode ser assíncrono.
- **Retorno:** void
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.context.register('build', { collector: () => ({ release: 'demo' }), priority: 'high' });
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-22"></span>

## ai.context.collect

Coleta apps, estado, eventos e coletores configurados.

`ai.context.collect(): Promise<ContextSnapshot>`

- **Parâmetros:** Sem parâmetros.
- **Retorno:** Promise<ContextSnapshot>
- **Erros:** As falhas de coletores individuais são registradas e não interrompem os demais.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
await ai.context.collect();
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-23"></span>

## ai.context.getSnapshot

Retorna o último contexto coletado sem consultar as fontes novamente.

`ai.context.getSnapshot(): ContextSnapshot | null`

- **Parâmetros:** Sem parâmetros.
- **Retorno:** ContextSnapshot | null
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.context.getSnapshot();
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-24"></span>

## ai.conversation.getHistory

Lê o histórico de uma conversa.

`ai.conversation.getHistory(namespace?): Message[]`

- **Parâmetros:** Namespace; default quando omitido.
- **Retorno:** Message[]
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.conversation.getHistory('help');
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-25"></span>

## ai.conversation.clear

Esvazia as mensagens de uma conversa.

`ai.conversation.clear(namespace?): void`

- **Parâmetros:** Namespace; não equivale a abortar uma solicitação ativa.
- **Retorno:** void
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.conversation.clear('help');
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-26"></span>

## ai.conversation.clearAll

Esvazia as mensagens de todos os namespaces existentes.

`ai.conversation.clearAll(): void`

- **Parâmetros:** Sem parâmetros.
- **Retorno:** void
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.conversation.clearAll();
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-27"></span>

## ai.conversation.inject

Adiciona uma mensagem ao histórico sem enviá-la ao provedor.

`ai.conversation.inject(role, content, options?): void`

- **Parâmetros:** role, content e {namespace}.
- **Retorno:** void
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.conversation.inject('user', 'Necesito ayuda con el catálogo', { namespace: 'help' });
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-28"></span>

## ai.conversation.getNamespaces

Enumera as conversas criadas.

`ai.conversation.getNamespaces(): string[]`

- **Parâmetros:** Sem parâmetros.
- **Retorno:** string[]
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.conversation.getNamespaces();
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-29"></span>

## ai.conversation.deleteNamespace

Aborta e remove um namespace.

`ai.conversation.deleteNamespace(namespace): void`

- **Parâmetros:** Nome exato.
- **Retorno:** void
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.conversation.deleteNamespace('help');
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-30"></span>

## ai.permissions.configure

Atualiza flags booleanas reconhecidas de IA.

`ai.permissions.configure(flags): void`

- **Parâmetros:** Objeto de flags; ignora nomes desconhecidos e valores que não sejam booleanos.
- **Retorno:** void
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.permissions.configure({ executeActions: true, network: false });
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-31"></span>

## ai.permissions.check

Verifica se uma flag de IA está habilitada.

`ai.permissions.check(permission): boolean`

- **Parâmetros:** Nome da permissão; desconhecido produz false.
- **Retorno:** boolean
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.permissions.check('executeActions');
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-32"></span>

## ai.permissions.getPermissions

Fornece uma cópia das flags de IA.

`ai.permissions.getPermissions(): Record<string, boolean>`

- **Parâmetros:** Sem parâmetros.
- **Retorno:** Record<string, boolean>
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.permissions.getPermissions();
```

Uma cópia de flags não concede autorização a uma aplicação com escopo.

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-33"></span>

## ai.permissions.setAllowedDomains

Substitui os domínios permitidos para o transporte controlado por IA.

`ai.permissions.setAllowedDomains(domains): void`

- **Parâmetros:** Lista de strings; filtra entradas inválidas.
- **Retorno:** void
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.permissions.setAllowedDomains(["api.example.com"]);
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-34"></span>

## ai.tools

Descreve as ações no formato de ferramentas.

`ai.tools(): ToolSchema[]`

- **Parâmetros:** Sem parâmetros.
- **Retorno:** ToolSchema[]
- **Erros:** Pode inicializar o subsistema se ele ainda não estiver pronto; os métodos que apenas leem não fazem solicitações ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.tools();
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-35"></span>

## ai.expose

Registra as ações em navigator.modelContext quando o navegador o oferece.

`ai.expose(): Promise<boolean>`

- **Parâmetros:** Sem parâmetros; integração experimental de WebMCP.
- **Retorno:** Promise<boolean>
- **Erros:** Retorna false sem navigator.modelContext; captura erros individuais de registro. true não garante que todas as ferramentas tenham sido registradas.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
await ai.expose();
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-36"></span>

## ai.confirmTool

Aceita uma confirmação pendente de ferramenta.

`ai.confirmTool(confirmationId): void`

- **Parâmetros:** Identificador emitido pelo fluxo de confirmação.
- **Retorno:** void
- **Erros:** Se a instância não estiver inicializada, retorna sem inicializá-la; não faz uma solicitação ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.confirmTool(confirmationId);
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-37"></span>

## ai.rejectTool

Rejeita uma confirmação pendente de ferramenta.

`ai.rejectTool(confirmationId): void`

- **Parâmetros:** Identificador emitido pelo fluxo de confirmação.
- **Retorno:** void
- **Erros:** Se a instância não estiver inicializada, retorna sem inicializá-la; não faz uma solicitação ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.rejectTool(confirmationId);
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-38"></span>

## ai.getStats

Resume os módulos e contadores do coordenador de IA.

`ai.getStats(): object`

- **Parâmetros:** Sem parâmetros.
- **Retorno:** {initialized:false} ou um objeto com initialized:true e estatísticas dos módulos.
- **Erros:** Sem inicialização, retorna {initialized:false}; não inicializa módulos.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O proprietário do coordenador chama ai.destroy() ao encerrar.

```js
ai.getStats();
```

Referência: `src/ai/wu-ai.js`.

<span class="section-anchor" id="section-39"></span>

## ai.destroy

Aborta conversas, remove triggers e libera os módulos do coordenador.

`ai.destroy(): void`

- **Parâmetros:** Sem parâmetros.
- **Retorno:** void
- **Erros:** Se a instância não estiver inicializada, retorna sem inicializá-la; não faz uma solicitação ao provedor.
- **Permissões:** A política de IA é independente dos grants de microfrontends. Configure apenas as operações necessárias.
- **Limpeza:** O objeto pode ser inicializado novamente; os recursos da execução anterior são liberados.

```js
ai.destroy();
```

Referência: `src/ai/wu-ai.js`.

Nos fluxos deterministas do 4.0, passos `emit` exigem `emitEvents` e não podem atingir eventos `wu:`, `system:` ou `app:`. Passos `setState` exigem `writeStore`. Esses flags continuam sendo controles IA do host, independentes dos grants técnicos das apps.