@omnivoice/page-agent 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -56,6 +56,54 @@ AGENT_API_KEY=... AGENT_BASE_URL=https://api.openai.com/v1 AGENT_MODEL=gpt-4o-mi
56
56
  O gateway expõe `GET /config`, `POST /v1/chat/completions` e `GET /health`, e injeta a chave ao chamar o provedor.
57
57
  As variáveis `AGENT_*` estão descritas no cabeçalho de `server/agent-gateway.mjs`.
58
58
 
59
+ `GET /config` também pode levar três campos opcionais, sempre sem a chave (o `AGENT_CONFIG` aceita os mesmos nomes
60
+ em JSON; o ambiente vence o arquivo):
61
+
62
+ | Variável | Campo em `/config` | Efeito |
63
+ |---|---|---|
64
+ | `AGENT_INSTRUCTIONS` | `instructions: { system }` | Texto de instruções de sistema (até 8 KB; acima disso o gateway não sobe). Só aparece se não estiver vazio. |
65
+ | `AGENT_BRAIN` (`on`/`off`) | `brain` | Pede ao widget que ligue o segundo cérebro. Padrão `off`. O gateway só repassa o sinal. |
66
+ | `AGENT_DEBUG` (`on`/`off`) | `debug` | Pede ao widget o diagnóstico por passo. Padrão `off`. |
67
+
68
+ `AGENT_MAX_STEPS` alto aumenta o custo de loops: um agente que repete a mesma ação continua chamando o modelo
69
+ até o limite de passos.
70
+
71
+ ## Segundo cérebro (opcional)
72
+
73
+ Sem ele o agente é o do upstream: o modelo decide tudo e nada o impede de repetir um clique sem efeito até o limite de passos,
74
+ de declarar sucesso sem prova ou de preencher e salvar um formulário numa tarefa de leitura. Com `brain: true` o agente
75
+ ganha um supervisor:
76
+
77
+ - **Não-progresso:** a mesma ferramenta com a mesma evidência 3 vezes seguidas encerra a tarefa com o motivo (menus que só
78
+ alternam aberto/fechado contam como repetição).
79
+ - **Política de escrita:** digitar, selecionar e clicar em controles de alteração (Salvar, Criar, Excluir, Atualizar, ...) só
80
+ quando a TAREFA pede. Ler e navegar são livres. Verbo negado ("não altere nada") não conta como pedido. A recusa volta ao
81
+ agente com o motivo; 3 recusas encerram a tarefa. Modos: `task-intent` (padrão), `allow`, `deny`.
82
+ - **Veredito:** o resultado ganha `verification` (`verified`, `unverified` ou `failed`). Só vira `verified` quando valores
83
+ explícitos da tarefa foram confirmados no DOM; tarefas abertas ficam `unverified` (com `[não verificado: ...]` no texto quando
84
+ nada mudou na página), sem serem reprovadas.
85
+ - **Teclado:** o núcleo não tem ferramenta de tecla, então o agente não confirmava buscas nem fechava paletas e overlays. Com o
86
+ cérebro ele ganha `press_key` (Enter, Escape, setas, Tab, Backspace, Espaço) e `input_text` passa a tratar um `\n` no fim do texto
87
+ como Enter. Enter que enviaria um formulário ou ativaria um botão de alteração passa pela política de escrita.
88
+ - **Mapa e histórico:** mapa da página (`procurar_na_pagina`, `ir_para_regiao`, `await_effect`) e compactação de passos antigos.
89
+
90
+ ```ts
91
+ const widget = mountWidget({ model, baseURL, brain: true }); // padrões
92
+ mountWidget({ model, baseURL, brain: { writePolicy: "deny", repeatLimit: 4 } }); // opções
93
+ ```
94
+
95
+ Por CDN, `data-auto-init="false"` e `PageAgent.mountWidget({ ..., brain: true })`. Com o gateway, `AGENT_BRAIN=on` faz o
96
+ `/config` pedir o cérebro, então o front não precisa mudar. **Opt-in:** sem a flag o comportamento é idêntico e o código do
97
+ cérebro nem é carregado (no ESM é um `import()` dinâmico). Ele guarda perfis de página em IndexedDB, por origem, sem valores
98
+ digitados por pessoas.
99
+
100
+ **Diagnóstico:** `debug: true` (ou `AGENT_DEBUG=on`) registra, por passo, o objetivo, a ferramenta e o conteúdo que o modelo
101
+ recebeu, no console e em `window.__pageAgentDebug`. Esse conteúdo pode ter dados de clientes: use só para investigar.
102
+
103
+ **Extensões:** `mountWidget` aceita `hooks` (`onBeforeStep`, `onAfterStep`, `onBeforeTask`, `onAfterTask`, `onDispose`,
104
+ `transformPageContent`), `extensions` (`{ customTools, instructions, hooks }`) e `resolveExtensions`. Ferramentas são
105
+ mescladas (a última vence), instruções concatenadas, ganchos encadeados em ordem, e o erro de um gancho não derruba a tarefa.
106
+
59
107
  ## Voz em tempo real (opcional)
60
108
 
61
109
  `@omnivoice/page-agent/voice` é um módulo à parte. **Importar o agente não o carrega**, e importá-lo, criar a
@@ -70,6 +118,8 @@ npm ci
70
118
  npm run build:package # dist/esm, dist/iife, dist/voice e server/
71
119
  npm run verify:package # identidade, tarball efetivo, dist atual, tipos
72
120
  npm run test:consumer # empacota e testa o tarball num projeto novo
121
+ npm run test:brain # política de escrita e veredito (puros)
122
+ npm run test:brain-e2e # Chromium + LLM falso: loop, falso sucesso, escrita não pedida, teclado e overlay (precisa do build)
73
123
  ```
74
124
 
75
125
  `npm publish` roda o build e o guard em modo `--release` antes de enviar.