@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 +50 -0
- package/dist/esm/brain-extension-DDuKTYrJ.js +2192 -0
- package/dist/esm/brain-extension-DDuKTYrJ.js.map +1 -0
- package/dist/esm/debug-extension-D0P_sNkc.js +45 -0
- package/dist/esm/debug-extension-D0P_sNkc.js.map +1 -0
- package/dist/esm/page-agent.d.ts +126 -2
- package/dist/esm/page-agent.js +91 -4
- package/dist/esm/page-agent.js.map +1 -1
- package/dist/esm/profiler-CcdRV96d.js +203 -0
- package/dist/esm/profiler-CcdRV96d.js.map +1 -0
- package/dist/iife/page-agent.demo.js +63 -40
- package/dist/voice/index.js +3 -0
- package/dist/voice/index.js.map +1 -1
- package/package.json +4 -2
- package/server/agent-gateway.mjs +33 -0
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.
|