auspex 0.3.1 → 0.4.0
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/package.json +2 -1
- package/readme.md +137 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "auspex",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "AI-powered browser agent with tiered scraping — HTTP/Cheerio first, Playwright as fallback",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"build": "tsc",
|
|
20
20
|
"dev": "tsx src/index.ts",
|
|
21
21
|
"example": "tsx examples/basic.ts",
|
|
22
|
+
"example:websearch": "tsx examples/websearch.ts",
|
|
22
23
|
"example:scraper": "tsx examples/scraper.ts",
|
|
23
24
|
"install:browser": "playwright install chromium",
|
|
24
25
|
"test": "vitest run",
|
package/readme.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
https://www.npmjs.com/package/auspex
|
|
5
5
|
|
|
6
6
|
Framework de browser automation alimentado por LLM. Voce fornece uma **URL** e um **prompt em linguagem natural** — o agent decide sozinho se basta uma requisicao HTTP ou se precisa abrir o Playwright, navega, clica, preenche formularios e retorna o resultado com um relatorio completo.
|
|
7
|
-
|
|
7
|
+
Além disso, é compatível com Web Search através de SearXNG
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
## Indice
|
|
@@ -21,6 +21,7 @@ Framework de browser automation alimentado por LLM. Voce fornece uma **URL** e u
|
|
|
21
21
|
- [Eventos](#eventos)
|
|
22
22
|
- [Browser Pool](#browser-pool)
|
|
23
23
|
- [Acoes do Agent](#acoes-do-agent)
|
|
24
|
+
- [Web Search com SearXNG](#web-search-com-searxng)
|
|
24
25
|
- [Seguranca](#seguranca)
|
|
25
26
|
- [Monitoramento — Tokens e Memoria](#monitoramento--tokens-e-memoria)
|
|
26
27
|
- [Dicas de uso](#dicas-de-uso)
|
|
@@ -186,6 +187,9 @@ new Auspex({
|
|
|
186
187
|
logDir: "logs", // diretorio dos logs
|
|
187
188
|
vision: false, // fallback com screenshot apos falhas (modelo com vision)
|
|
188
189
|
screenshotQuality: 75, // qualidade JPEG 1-100 (vision, default: 75)
|
|
190
|
+
|
|
191
|
+
// ──── Web Search ──────────────────────────────────
|
|
192
|
+
searxngUrl: "http://localhost:8080", // base URL do SearXNG (localhost por padrao; remoto exige allowedDomains)
|
|
189
193
|
});
|
|
190
194
|
```
|
|
191
195
|
|
|
@@ -216,6 +220,7 @@ new Auspex({
|
|
|
216
220
|
| `logDir` | `string` | Nao | `"logs"` | Diretorio dos arquivos de log |
|
|
217
221
|
| `vision` | `boolean` | Nao | `false` | Fallback com screenshot apos falhas (modelo vision) |
|
|
218
222
|
| `screenshotQuality` | `number` | Nao | `75` | Qualidade JPEG 1-100 para screenshots |
|
|
223
|
+
| `searxngUrl` | `string` | Nao | — | Base URL do SearXNG (loopback por padrao; instancia remota so se o host estiver em allowedDomains) |
|
|
219
224
|
|
|
220
225
|
---
|
|
221
226
|
|
|
@@ -225,7 +230,7 @@ Opcoes passadas para `agent.run(options)`:
|
|
|
225
230
|
|
|
226
231
|
| Parametro | Tipo | Obrigatorio | Descricao |
|
|
227
232
|
|-----------|------|:-----------:|-----------|
|
|
228
|
-
| `url` | `string` |
|
|
233
|
+
| `url` | `string` | Nao\* | URL inicial para o agent navegar (obrigatorio se sem SearXNG) |
|
|
229
234
|
| `prompt` | `string` | Sim | Instrucao em linguagem natural |
|
|
230
235
|
| `maxIterations` | `number` | Nao | Override de maxIterations para este run |
|
|
231
236
|
| `timeoutMs` | `number` | Nao | Override de timeoutMs para este run |
|
|
@@ -233,6 +238,9 @@ Opcoes passadas para `agent.run(options)`:
|
|
|
233
238
|
| `signal` | `AbortSignal` | Nao | AbortSignal para cancelar o run |
|
|
234
239
|
| `schema` | `ZodType<T>` | Nao | Schema Zod: retorno tipado em `data` (T \| null) |
|
|
235
240
|
| `vision` | `boolean` | Nao | Override do fallback com screenshot |
|
|
241
|
+
| `searxngUrl` | `string` | Nao | Override do SearXNG **neste run** (sobrescreve `AgentConfig` / `SEARXNG_URL`) |
|
|
242
|
+
|
|
243
|
+
\* Se `url` nao for fornecida, o agent usa web search (SearXNG) para a URL inicial. Nesse caso configure `searxngUrl` no `run()`, no `AgentConfig`, ou `SEARXNG_URL` no ambiente (na construcao do agent o env e aplicado ao config).
|
|
236
244
|
|
|
237
245
|
```typescript
|
|
238
246
|
const result = await agent.run({
|
|
@@ -503,6 +511,7 @@ O LLM so pode executar acoes de uma **whitelist rigorosa**. Qualquer coisa fora
|
|
|
503
511
|
|
|
504
512
|
| Acao | Formato JSON | Descricao |
|
|
505
513
|
|------|-------------|-----------|
|
|
514
|
+
| **search** | `{"type":"search","query":"buscar isso"}` | Busca na web via SearXNG (max 500 chars) |
|
|
506
515
|
| **click** | `{"type":"click","selector":"#btn"}` | Clica em um elemento (CSS ou role=button[name="..."] ) |
|
|
507
516
|
| **type** | `{"type":"type","selector":"input[name='q']","text":"busca"}` | Digita texto em um campo (max 1000 chars) |
|
|
508
517
|
| **select** | `{"type":"select","selector":"select#country","value":"br"}` | Seleciona opcao em `<select>` (value = option value) |
|
|
@@ -517,6 +526,125 @@ Selectors podem ser **CSS** ou **role-based** (ex.: `role=button[name="Submit"]`
|
|
|
517
526
|
|
|
518
527
|
---
|
|
519
528
|
|
|
529
|
+
## Web Search com SearXNG
|
|
530
|
+
|
|
531
|
+
O auspex suporta busca web via [SearXNG](https://searxng.org/) para descobrir URLs automaticamente e permitir que o agente faca buscas durante o loop.
|
|
532
|
+
|
|
533
|
+
### Exemplo no repositorio
|
|
534
|
+
|
|
535
|
+
Com `LLM_API_KEY` e `SEARXNG_URL` (ou SearXNG em localhost:8080) no `.env`:
|
|
536
|
+
|
|
537
|
+
```bash
|
|
538
|
+
npm run example:websearch
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
Veja [`examples/websearch.ts`](examples/websearch.ts) — execucao sem `url` (busca inicial) e com `url` (fluxo normal com acao `search` disponivel).
|
|
542
|
+
|
|
543
|
+
### Configuracao
|
|
544
|
+
|
|
545
|
+
Configure a URL do SearXNG no `AgentConfig` ou via variavel de ambiente:
|
|
546
|
+
|
|
547
|
+
```typescript
|
|
548
|
+
const agent = new Auspex({
|
|
549
|
+
llmApiKey: process.env.LLM_API_KEY!,
|
|
550
|
+
searxngUrl: process.env.SEARXNG_URL, // ex: "http://localhost:8080"
|
|
551
|
+
});
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
Ou via variavel de ambiente:
|
|
555
|
+
```bash
|
|
556
|
+
export SEARXNG_URL=http://localhost:8080
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
> **Nota**: Por padrao o `searxngUrl` deve apontar para loopback (`localhost`, `127.0.0.1` ou `[::1]`). Para usar um SearXNG em outro host (ex.: rede interna), inclua o hostname desse servidor em `allowedDomains` (mesmas regras de subdominio que para navegacao).
|
|
560
|
+
|
|
561
|
+
### Busca inicial (sem URL)
|
|
562
|
+
|
|
563
|
+
Quando voce nao fornece uma URL, o agent busca no SearXNG automaticamente e usa o primeiro resultado como ponto de partida:
|
|
564
|
+
|
|
565
|
+
```typescript
|
|
566
|
+
const agent = new Auspex({
|
|
567
|
+
llmApiKey: process.env.LLM_API_KEY!,
|
|
568
|
+
searxngUrl: "http://localhost:8080",
|
|
569
|
+
});
|
|
570
|
+
|
|
571
|
+
// Sem URL — o agent busca primeiro e depois navega
|
|
572
|
+
const result = await agent.run({
|
|
573
|
+
prompt: "Encontre o preco do iPhone 15 no site da Apple",
|
|
574
|
+
});
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
O agent ira:
|
|
578
|
+
1. Buscar "preco do iPhone 15 site da Apple" no SearXNG
|
|
579
|
+
2. Usar o primeiro resultado como URL inicial
|
|
580
|
+
3. Navegar e executar a tarefa normalmente
|
|
581
|
+
|
|
582
|
+
### Acao `search` durante o loop
|
|
583
|
+
|
|
584
|
+
O agent tambem pode usar a acao `search` durante o loop para encontrar informacoes adicionais:
|
|
585
|
+
|
|
586
|
+
```typescript
|
|
587
|
+
const result = await agent.run({
|
|
588
|
+
url: "https://shop.example.com",
|
|
589
|
+
prompt: "Compare o preco deste produto com os concorrentes",
|
|
590
|
+
});
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
O agent pode:
|
|
594
|
+
1. Ler o preco na pagina atual
|
|
595
|
+
2. Usar `{"type":"search","query":"produto X preco concorrentes"}` para buscar
|
|
596
|
+
3. Analisar os resultados da busca
|
|
597
|
+
4. Retornar a comparacao
|
|
598
|
+
|
|
599
|
+
### Resultados de busca no snapshot
|
|
600
|
+
|
|
601
|
+
Quando uma busca e realizada, os resultados sao incluidos no proximo snapshot:
|
|
602
|
+
|
|
603
|
+
```
|
|
604
|
+
### Search Results (5)
|
|
605
|
+
1. iPhone 15 - Apple
|
|
606
|
+
https://www.apple.com/iphone-15/
|
|
607
|
+
O novo iPhone 15 apresenta design renovado...
|
|
608
|
+
Score: 0.95
|
|
609
|
+
|
|
610
|
+
2. iPhone 15 - Loja Exemplo
|
|
611
|
+
https://loja.example.com/iphone-15
|
|
612
|
+
iPhone 15 a partir de R$ 5.999...
|
|
613
|
+
Score: 0.87
|
|
614
|
+
...
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
### Configuracao do SearXNG
|
|
618
|
+
|
|
619
|
+
Para rodar o SearXNG localmente com Docker:
|
|
620
|
+
|
|
621
|
+
```bash
|
|
622
|
+
docker run -d --name searxng -p 8080:8080 \
|
|
623
|
+
-e BASE_URL=http://localhost:8080 \
|
|
624
|
+
quay.io/searxng/searxng:latest
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
Ou via Docker Compose:
|
|
628
|
+
|
|
629
|
+
```yaml
|
|
630
|
+
services:
|
|
631
|
+
searxng:
|
|
632
|
+
image: quay.io/searxng/searxng:latest
|
|
633
|
+
ports:
|
|
634
|
+
- "8080:8080"
|
|
635
|
+
environment:
|
|
636
|
+
- BASE_URL=http://localhost:8080
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
### Seguranca
|
|
640
|
+
|
|
641
|
+
- **Validacao de URL**: loopback por padrao; hosts remotos apenas se o hostname do SearXNG estiver em `allowedDomains` (e respeitando `blockedDomains`)
|
|
642
|
+
- **Sanitizacao de query**: maximo 500 caracteres, sem caracteres perigosos
|
|
643
|
+
- **Timeout**: 5 segundos para requisicoes ao SearXNG
|
|
644
|
+
- **Rate limiting**: configure rate limiting no proprio SearXNG se necessario
|
|
645
|
+
|
|
646
|
+
---
|
|
647
|
+
|
|
520
648
|
## Eventos
|
|
521
649
|
|
|
522
650
|
O `Auspex` estende `EventEmitter`. Voce pode escutar eventos por run:
|
|
@@ -895,6 +1023,9 @@ LLM_API_KEY=sk-your-key-here
|
|
|
895
1023
|
# Opcional — trocar provider
|
|
896
1024
|
# LLM_BASE_URL=https://api.groq.com/openai/v1
|
|
897
1025
|
# LLM_MODEL=llama-3.3-70b-versatile
|
|
1026
|
+
|
|
1027
|
+
# Opcional — habilita web search com SearXNG
|
|
1028
|
+
# SEARXNG_URL=http://localhost:8080
|
|
898
1029
|
```
|
|
899
1030
|
|
|
900
1031
|
> O framework em si recebe tudo via `AgentConfig` no construtor — as variaveis de ambiente sao usadas apenas pelo exemplo.
|
|
@@ -926,6 +1057,10 @@ import {
|
|
|
926
1057
|
type BrowserPoolOptions,
|
|
927
1058
|
UrlValidationError,
|
|
928
1059
|
ActionValidationError,
|
|
1060
|
+
SearXNGClient,
|
|
1061
|
+
type SearchResult,
|
|
1062
|
+
type SearXNGResponse,
|
|
1063
|
+
type SearXNGClientOptions,
|
|
929
1064
|
} from "auspex";
|
|
930
1065
|
```
|
|
931
1066
|
|