auspex 0.2.0 → 0.2.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/dist/agent/actions.d.ts.map +1 -1
- package/dist/agent/actions.js +7 -1
- package/dist/agent/actions.js.map +1 -1
- package/dist/agent/agent.d.ts +20 -6
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +197 -74
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/logger.d.ts +15 -0
- package/dist/agent/logger.d.ts.map +1 -0
- package/dist/agent/logger.js +70 -0
- package/dist/agent/logger.js.map +1 -0
- package/dist/agent/loop.d.ts +18 -3
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +123 -48
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/report.d.ts.map +1 -1
- package/dist/agent/report.js +41 -29
- package/dist/agent/report.js.map +1 -1
- package/dist/browser/executor.d.ts.map +1 -1
- package/dist/browser/executor.js +65 -11
- package/dist/browser/executor.js.map +1 -1
- package/dist/browser/pool.d.ts +33 -0
- package/dist/browser/pool.d.ts.map +1 -0
- package/dist/browser/pool.js +101 -0
- package/dist/browser/pool.js.map +1 -0
- package/dist/browser/snapshot.d.ts +1 -0
- package/dist/browser/snapshot.d.ts.map +1 -1
- package/dist/browser/snapshot.js +104 -48
- package/dist/browser/snapshot.js.map +1 -1
- package/dist/config/defaults.d.ts +6 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +7 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +107 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +29 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/llm/client.d.ts +1 -1
- package/dist/llm/client.d.ts.map +1 -1
- package/dist/llm/client.js +74 -37
- package/dist/llm/client.js.map +1 -1
- package/dist/llm/prompt.d.ts +14 -2
- package/dist/llm/prompt.d.ts.map +1 -1
- package/dist/llm/prompt.js +52 -6
- package/dist/llm/prompt.js.map +1 -1
- package/dist/llm/vision-models.d.ts +3 -0
- package/dist/llm/vision-models.d.ts.map +1 -0
- package/dist/llm/vision-models.js +30 -0
- package/dist/llm/vision-models.js.map +1 -0
- package/dist/scraper/extractors/content.d.ts +3 -2
- package/dist/scraper/extractors/content.d.ts.map +1 -1
- package/dist/scraper/extractors/content.js +4 -4
- package/dist/scraper/extractors/content.js.map +1 -1
- package/dist/scraper/extractors/ssr.d.ts +3 -2
- package/dist/scraper/extractors/ssr.d.ts.map +1 -1
- package/dist/scraper/extractors/ssr.js +4 -4
- package/dist/scraper/extractors/ssr.js.map +1 -1
- package/dist/scraper/tiers/tier1-http.d.ts.map +1 -1
- package/dist/scraper/tiers/tier1-http.js +7 -13
- package/dist/scraper/tiers/tier1-http.js.map +1 -1
- package/dist/scraper/tiers/tier2-stealth.d.ts.map +1 -1
- package/dist/scraper/tiers/tier2-stealth.js +6 -5
- package/dist/scraper/tiers/tier2-stealth.js.map +1 -1
- package/dist/scraper/tiers/tier3-browser.d.ts +1 -0
- package/dist/scraper/tiers/tier3-browser.d.ts.map +1 -1
- package/dist/scraper/tiers/tier3-browser.js +31 -26
- package/dist/scraper/tiers/tier3-browser.js.map +1 -1
- package/dist/security/action-validator.d.ts +35 -20
- package/dist/security/action-validator.d.ts.map +1 -1
- package/dist/security/action-validator.js +39 -3
- package/dist/security/action-validator.js.map +1 -1
- package/dist/security/url-validator.d.ts.map +1 -1
- package/dist/security/url-validator.js +10 -1
- package/dist/security/url-validator.js.map +1 -1
- package/dist/types.d.ts +97 -25
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -4
- package/readme.md +169 -35
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,53 @@
|
|
|
1
|
+
import type { ZodType } from "zod";
|
|
2
|
+
export type AgentAction = {
|
|
3
|
+
type: "click";
|
|
4
|
+
selector: string;
|
|
5
|
+
} | {
|
|
6
|
+
type: "type";
|
|
7
|
+
selector: string;
|
|
8
|
+
text: string;
|
|
9
|
+
} | {
|
|
10
|
+
type: "select";
|
|
11
|
+
selector: string;
|
|
12
|
+
value: string;
|
|
13
|
+
} | {
|
|
14
|
+
type: "pressKey";
|
|
15
|
+
key: string;
|
|
16
|
+
} | {
|
|
17
|
+
type: "hover";
|
|
18
|
+
selector: string;
|
|
19
|
+
} | {
|
|
20
|
+
type: "goto";
|
|
21
|
+
url: string;
|
|
22
|
+
} | {
|
|
23
|
+
type: "wait";
|
|
24
|
+
ms: number;
|
|
25
|
+
} | {
|
|
26
|
+
type: "scroll";
|
|
27
|
+
direction: "up" | "down";
|
|
28
|
+
amount?: number;
|
|
29
|
+
} | {
|
|
30
|
+
type: "done";
|
|
31
|
+
result: string;
|
|
32
|
+
};
|
|
33
|
+
export interface ProxyConfig {
|
|
34
|
+
/** Proxy server URL (e.g. "http://proxy:8080" or "socks5://proxy:1080") */
|
|
35
|
+
server: string;
|
|
36
|
+
/** Username for proxy authentication */
|
|
37
|
+
username?: string;
|
|
38
|
+
/** Password for proxy authentication */
|
|
39
|
+
password?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface CookieParam {
|
|
42
|
+
name: string;
|
|
43
|
+
value: string;
|
|
44
|
+
domain?: string;
|
|
45
|
+
path?: string;
|
|
46
|
+
httpOnly?: boolean;
|
|
47
|
+
secure?: boolean;
|
|
48
|
+
sameSite?: "Strict" | "Lax" | "None";
|
|
49
|
+
expires?: number;
|
|
50
|
+
}
|
|
1
51
|
export interface AgentConfig {
|
|
2
52
|
llmApiKey: string;
|
|
3
53
|
llmBaseUrl?: string;
|
|
@@ -14,38 +64,49 @@ export interface AgentConfig {
|
|
|
14
64
|
gotoTimeoutMs?: number;
|
|
15
65
|
allowedDomains?: string[];
|
|
16
66
|
blockedDomains?: string[];
|
|
67
|
+
/** Delay in ms between agent loop iterations. Default: 500 */
|
|
68
|
+
actionDelayMs?: number;
|
|
69
|
+
/** Maximum total tokens budget across all LLM calls. Aborts if exceeded. */
|
|
70
|
+
maxTotalTokens?: number;
|
|
71
|
+
/** Proxy configuration for browser and HTTP requests */
|
|
72
|
+
proxy?: ProxyConfig;
|
|
73
|
+
/** Cookies to inject into browser context */
|
|
74
|
+
cookies?: CookieParam[];
|
|
75
|
+
/** Extra HTTP headers for browser context */
|
|
76
|
+
extraHeaders?: Record<string, string>;
|
|
77
|
+
/** Enable file logging for each run. Logs are saved to ./logs/ */
|
|
78
|
+
log?: boolean;
|
|
79
|
+
/** Directory for log files. Default: "logs" */
|
|
80
|
+
logDir?: string;
|
|
81
|
+
/** Enable vision as auto-fallback. Screenshots are sent to the LLM only after consecutive failures
|
|
82
|
+
* (invalid actions, execution errors, stuck loops). Requires a vision-capable model. Default: false */
|
|
83
|
+
vision?: boolean;
|
|
84
|
+
/** JPEG quality for screenshots (1-100). Lower = smaller payload, fewer tokens. Default: 75 */
|
|
85
|
+
screenshotQuality?: number;
|
|
17
86
|
}
|
|
18
87
|
export interface RunOptions {
|
|
19
88
|
url: string;
|
|
20
89
|
prompt: string;
|
|
90
|
+
/** Override maxIterations for this run */
|
|
91
|
+
maxIterations?: number;
|
|
92
|
+
/** Override timeoutMs for this run */
|
|
93
|
+
timeoutMs?: number;
|
|
94
|
+
/** Override actionDelayMs for this run */
|
|
95
|
+
actionDelayMs?: number;
|
|
96
|
+
/** AbortSignal to cancel this run */
|
|
97
|
+
signal?: AbortSignal;
|
|
98
|
+
/** Zod schema for structured data extraction. When provided, the agent returns validated, typed data. */
|
|
99
|
+
schema?: ZodType;
|
|
100
|
+
/** Override vision auto-fallback setting for this run */
|
|
101
|
+
vision?: boolean;
|
|
21
102
|
}
|
|
22
|
-
export type AgentAction = {
|
|
23
|
-
type: "click";
|
|
24
|
-
selector: string;
|
|
25
|
-
} | {
|
|
26
|
-
type: "type";
|
|
27
|
-
selector: string;
|
|
28
|
-
text: string;
|
|
29
|
-
} | {
|
|
30
|
-
type: "goto";
|
|
31
|
-
url: string;
|
|
32
|
-
} | {
|
|
33
|
-
type: "wait";
|
|
34
|
-
ms: number;
|
|
35
|
-
} | {
|
|
36
|
-
type: "scroll";
|
|
37
|
-
direction: "up" | "down";
|
|
38
|
-
} | {
|
|
39
|
-
type: "done";
|
|
40
|
-
result: string;
|
|
41
|
-
};
|
|
42
103
|
export interface ActionRecord {
|
|
43
104
|
action: AgentAction;
|
|
44
105
|
iteration: number;
|
|
45
106
|
timestamp: number;
|
|
46
107
|
}
|
|
47
|
-
export type AgentStatus = "done" | "max_iterations" | "error" | "timeout";
|
|
48
|
-
/**
|
|
108
|
+
export type AgentStatus = "done" | "max_iterations" | "error" | "timeout" | "aborted";
|
|
109
|
+
/** Execution method used by the agent */
|
|
49
110
|
export type AgentTier = "http" | "playwright";
|
|
50
111
|
export interface LLMUsage {
|
|
51
112
|
promptTokens: number;
|
|
@@ -54,14 +115,14 @@ export interface LLMUsage {
|
|
|
54
115
|
calls: number;
|
|
55
116
|
}
|
|
56
117
|
export interface MemoryUsage {
|
|
57
|
-
/** RSS
|
|
118
|
+
/** RSS of the Playwright browser process in KB. 0 when tier="http". */
|
|
58
119
|
browserPeakRssKb: number;
|
|
59
|
-
/**
|
|
120
|
+
/** Node.js heap used at completion time (MB) */
|
|
60
121
|
nodeHeapUsedMb: number;
|
|
61
122
|
}
|
|
62
123
|
export interface AgentResult {
|
|
63
124
|
status: AgentStatus;
|
|
64
|
-
/**
|
|
125
|
+
/** Method used: "http" = Cheerio without browser | "playwright" = full browser */
|
|
65
126
|
tier: AgentTier;
|
|
66
127
|
data: string | null;
|
|
67
128
|
report: string;
|
|
@@ -77,6 +138,10 @@ export interface PageSnapshot {
|
|
|
77
138
|
text: string;
|
|
78
139
|
links: SnapshotLink[];
|
|
79
140
|
forms: SnapshotForm[];
|
|
141
|
+
/** YAML accessibility tree from Playwright (only present in browser tier) */
|
|
142
|
+
ariaTree?: string;
|
|
143
|
+
/** Base64-encoded JPEG screenshot of the viewport (only present when vision is enabled) */
|
|
144
|
+
screenshot?: string;
|
|
80
145
|
}
|
|
81
146
|
export interface SnapshotLink {
|
|
82
147
|
text: string;
|
|
@@ -93,4 +158,11 @@ export interface SnapshotInput {
|
|
|
93
158
|
placeholder: string;
|
|
94
159
|
selector: string;
|
|
95
160
|
}
|
|
161
|
+
export interface AuspexEvents {
|
|
162
|
+
action: [action: AgentAction, iteration: number];
|
|
163
|
+
iteration: [iteration: number, snapshot: PageSnapshot];
|
|
164
|
+
tier: [tier: AgentTier];
|
|
165
|
+
error: [error: Error];
|
|
166
|
+
done: [result: AgentResult];
|
|
167
|
+
}
|
|
96
168
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "auspex",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
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",
|
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
"dev": "tsx src/index.ts",
|
|
21
21
|
"example": "tsx examples/basic.ts",
|
|
22
22
|
"example:scraper": "tsx examples/scraper.ts",
|
|
23
|
-
"install:browser": "playwright install chromium"
|
|
23
|
+
"install:browser": "playwright install chromium",
|
|
24
|
+
"test": "vitest run",
|
|
25
|
+
"test:watch": "vitest"
|
|
24
26
|
},
|
|
25
27
|
"keywords": [
|
|
26
28
|
"auspex",
|
|
@@ -44,7 +46,8 @@
|
|
|
44
46
|
"playwright-core": "^1.49.0",
|
|
45
47
|
"turndown": "^7.2.2",
|
|
46
48
|
"turndown-plugin-gfm": "^1.0.2",
|
|
47
|
-
"zod": "^3.24.0"
|
|
49
|
+
"zod": "^3.24.0",
|
|
50
|
+
"zod-to-json-schema": "^3.25.1"
|
|
48
51
|
},
|
|
49
52
|
"devDependencies": {
|
|
50
53
|
"@types/jsdom": "^21.1.7",
|
|
@@ -52,6 +55,7 @@
|
|
|
52
55
|
"@types/turndown": "^5.0.6",
|
|
53
56
|
"dotenv": "^16.4.0",
|
|
54
57
|
"tsx": "^4.19.0",
|
|
55
|
-
"typescript": "^5.7.0"
|
|
58
|
+
"typescript": "^5.7.0",
|
|
59
|
+
"vitest": "^4.0.18"
|
|
56
60
|
}
|
|
57
61
|
}
|
package/readme.md
CHANGED
|
@@ -18,6 +18,8 @@ Framework de browser automation alimentado por LLM. Voce fornece uma **URL** e u
|
|
|
18
18
|
- [Relatorio de Execucao](#relatorio-de-execucao)
|
|
19
19
|
- [Parametros da LLM](#parametros-da-llm)
|
|
20
20
|
- [Providers de LLM compativeis](#providers-de-llm-compativeis)
|
|
21
|
+
- [Eventos](#eventos)
|
|
22
|
+
- [Browser Pool](#browser-pool)
|
|
21
23
|
- [Acoes do Agent](#acoes-do-agent)
|
|
22
24
|
- [Seguranca](#seguranca)
|
|
23
25
|
- [Monitoramento — Tokens e Memoria](#monitoramento--tokens-e-memoria)
|
|
@@ -126,6 +128,20 @@ const r2 = await agent.run({
|
|
|
126
128
|
await agent.close(); // limpa tudo no final
|
|
127
129
|
```
|
|
128
130
|
|
|
131
|
+
### Construtor com pool (opcional)
|
|
132
|
+
|
|
133
|
+
Voce pode passar um `BrowserPool` como segundo argumento para compartilhar instancias de browser entre multiplos agents (ex.: workers concorrentes). Sem pool, o agent usa um unico browser por instancia.
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
import { Auspex, BrowserPool } from "auspex";
|
|
137
|
+
|
|
138
|
+
const pool = new BrowserPool({ maxSize: 3 });
|
|
139
|
+
const agent = new Auspex({ llmApiKey: "sk-..." }, pool);
|
|
140
|
+
const result = await agent.run({ url, prompt });
|
|
141
|
+
await agent.close(); // apenas desvincula do pool; o pool continua ativo
|
|
142
|
+
// pool.close() quando nao for mais usar
|
|
143
|
+
```
|
|
144
|
+
|
|
129
145
|
---
|
|
130
146
|
|
|
131
147
|
## AgentConfig — Configuracao completa
|
|
@@ -154,6 +170,22 @@ new Auspex({
|
|
|
154
170
|
// ──── Seguranca ──────────────────────────────────
|
|
155
171
|
allowedDomains: ["example.com"], // se definido, SO permite esses dominios
|
|
156
172
|
blockedDomains: ["evil.com"], // dominios bloqueados explicitamente
|
|
173
|
+
|
|
174
|
+
// ──── Browser e rede ────────────────────────────
|
|
175
|
+
gotoTimeoutMs: 15000, // timeout do page.goto (default: 15s)
|
|
176
|
+
proxy: { server: "http://...", username?: "...", password?: "..." },
|
|
177
|
+
cookies: [{ name, value, domain?, path?, ... }], // cookies injetados no context
|
|
178
|
+
extraHeaders: { "Accept-Language": "pt-BR" }, // headers HTTP do context
|
|
179
|
+
|
|
180
|
+
// ──── Loop e orcamento ──────────────────────────
|
|
181
|
+
actionDelayMs: 500, // delay entre iteracoes (ms, default: 500)
|
|
182
|
+
maxTotalTokens: 0, // orcamento total de tokens (0 = ilimitado)
|
|
183
|
+
|
|
184
|
+
// ──── Log e vision ───────────────────────────────
|
|
185
|
+
log: false, // gravar log em arquivo por execucao (./logs/)
|
|
186
|
+
logDir: "logs", // diretorio dos logs
|
|
187
|
+
vision: false, // fallback com screenshot apos falhas (modelo com vision)
|
|
188
|
+
screenshotQuality: 75, // qualidade JPEG 1-100 (vision, default: 75)
|
|
157
189
|
});
|
|
158
190
|
```
|
|
159
191
|
|
|
@@ -172,8 +204,18 @@ new Auspex({
|
|
|
172
204
|
| `maxIterations` | `number` | Nao | `30` | Max iteracoes do agent loop |
|
|
173
205
|
| `timeoutMs` | `number` | Nao | `120000` | Timeout total da execucao (ms) |
|
|
174
206
|
| `maxWaitMs` | `number` | Nao | `5000` | Max ms para acao `wait` |
|
|
207
|
+
| `gotoTimeoutMs` | `number` | Nao | `15000` | Timeout do page.goto (ms) |
|
|
175
208
|
| `allowedDomains` | `string[]` | Nao | — | Whitelist de dominios permitidos |
|
|
176
209
|
| `blockedDomains` | `string[]` | Nao | — | Blacklist de dominios bloqueados |
|
|
210
|
+
| `actionDelayMs` | `number` | Nao | `500` | Delay entre iteracoes (ms) |
|
|
211
|
+
| `maxTotalTokens` | `number` | Nao | `0` | Orcamento total de tokens (0 = ilimitado) |
|
|
212
|
+
| `proxy` | `ProxyConfig` | Nao | — | Proxy para browser e requests |
|
|
213
|
+
| `cookies` | `CookieParam[]` | Nao | — | Cookies injetados no context |
|
|
214
|
+
| `extraHeaders` | `Record<string, string>` | Nao | — | Headers HTTP do context |
|
|
215
|
+
| `log` | `boolean` | Nao | `false` | Gravar log em arquivo por run |
|
|
216
|
+
| `logDir` | `string` | Nao | `"logs"` | Diretorio dos arquivos de log |
|
|
217
|
+
| `vision` | `boolean` | Nao | `false` | Fallback com screenshot apos falhas (modelo vision) |
|
|
218
|
+
| `screenshotQuality` | `number` | Nao | `75` | Qualidade JPEG 1-100 para screenshots |
|
|
177
219
|
|
|
178
220
|
---
|
|
179
221
|
|
|
@@ -185,12 +227,27 @@ Opcoes passadas para `agent.run(options)`:
|
|
|
185
227
|
|-----------|------|:-----------:|-----------|
|
|
186
228
|
| `url` | `string` | Sim | URL inicial para o agent navegar |
|
|
187
229
|
| `prompt` | `string` | Sim | Instrucao em linguagem natural |
|
|
230
|
+
| `maxIterations` | `number` | Nao | Override de maxIterations para este run |
|
|
231
|
+
| `timeoutMs` | `number` | Nao | Override de timeoutMs para este run |
|
|
232
|
+
| `actionDelayMs` | `number` | Nao | Override de actionDelayMs para este run |
|
|
233
|
+
| `signal` | `AbortSignal` | Nao | AbortSignal para cancelar o run |
|
|
234
|
+
| `schema` | `ZodType<T>` | Nao | Schema Zod: retorno tipado em `data` (T \| null) |
|
|
235
|
+
| `vision` | `boolean` | Nao | Override do fallback com screenshot |
|
|
188
236
|
|
|
189
237
|
```typescript
|
|
190
238
|
const result = await agent.run({
|
|
191
239
|
url: "https://example.com",
|
|
192
240
|
prompt: "Qual o titulo desta pagina?",
|
|
193
241
|
});
|
|
242
|
+
|
|
243
|
+
// Com schema Zod — data fica tipado
|
|
244
|
+
const schema = z.object({ title: z.string(), price: z.number() });
|
|
245
|
+
const result = await agent.run({
|
|
246
|
+
url: "https://shop.example.com",
|
|
247
|
+
prompt: "Extraia titulo e preco do produto.",
|
|
248
|
+
schema,
|
|
249
|
+
});
|
|
250
|
+
// result.data: { title: string; price: number } | null
|
|
194
251
|
```
|
|
195
252
|
|
|
196
253
|
---
|
|
@@ -201,9 +258,9 @@ O `agent.run()` retorna um objeto `AgentResult` com tudo que aconteceu:
|
|
|
201
258
|
|
|
202
259
|
```typescript
|
|
203
260
|
interface AgentResult {
|
|
204
|
-
status: "done" | "max_iterations" | "error" | "timeout";
|
|
261
|
+
status: "done" | "max_iterations" | "error" | "timeout" | "aborted";
|
|
205
262
|
tier: "http" | "playwright"; // metodo de scraping utilizado
|
|
206
|
-
data: string | null; // resultado
|
|
263
|
+
data: string | null; // resultado (texto). Com run({ schema }), pode ser objeto tipado
|
|
207
264
|
report: string; // relatorio formatado legivel
|
|
208
265
|
durationMs: number; // duracao total da execucao em ms
|
|
209
266
|
actions: ActionRecord[]; // historico de todas as acoes executadas
|
|
@@ -220,6 +277,7 @@ interface AgentResult {
|
|
|
220
277
|
| `"done"` | Tarefa concluida com sucesso. `data` contem o resultado. |
|
|
221
278
|
| `"max_iterations"` | Atingiu o limite de iteracoes sem concluir. |
|
|
222
279
|
| `"timeout"` | Tempo limite excedido (`timeoutMs`). |
|
|
280
|
+
| `"aborted"` | Cancelado pelo chamador (AbortSignal). |
|
|
223
281
|
| `"error"` | Erro durante execucao. Ver `error` para detalhes. |
|
|
224
282
|
|
|
225
283
|
### Tier
|
|
@@ -272,31 +330,32 @@ const result = await agent.run({ url, prompt });
|
|
|
272
330
|
console.log(result.report);
|
|
273
331
|
```
|
|
274
332
|
|
|
275
|
-
Exemplo de saida (tier HTTP):
|
|
333
|
+
Exemplo de saida (tier HTTP). O relatorio eh gerado em ingles:
|
|
276
334
|
|
|
277
335
|
```
|
|
278
336
|
═══════════════════════════════════════════
|
|
279
|
-
|
|
337
|
+
EXECUTION REPORT — auspex
|
|
280
338
|
═══════════════════════════════════════════
|
|
281
339
|
|
|
282
|
-
URL
|
|
283
|
-
Prompt
|
|
284
|
-
Status
|
|
285
|
-
|
|
286
|
-
|
|
340
|
+
URL : https://news.ycombinator.com
|
|
341
|
+
Prompt : Retorne o titulo do primeiro artigo.
|
|
342
|
+
Status : Task completed successfully.
|
|
343
|
+
Method : HTTP/Cheerio (no browser — static page)
|
|
344
|
+
Duration: 1.2s
|
|
287
345
|
|
|
288
346
|
───────────────────────────────────────────
|
|
289
|
-
|
|
347
|
+
RESULT
|
|
290
348
|
───────────────────────────────────────────
|
|
291
349
|
|
|
292
350
|
Show HN: My weekend project
|
|
293
351
|
|
|
294
352
|
───────────────────────────────────────────
|
|
295
|
-
|
|
353
|
+
RESOURCE USAGE
|
|
296
354
|
───────────────────────────────────────────
|
|
297
355
|
|
|
298
|
-
LLM
|
|
299
|
-
|
|
356
|
+
LLM : 1 call(s) | 1820 tokens
|
|
357
|
+
> 1650 prompt + 170 completion
|
|
358
|
+
RAM : Node.js 45.2 MB | Browser: not used
|
|
300
359
|
|
|
301
360
|
═══════════════════════════════════════════
|
|
302
361
|
```
|
|
@@ -305,37 +364,38 @@ Exemplo de saida (tier Playwright):
|
|
|
305
364
|
|
|
306
365
|
```
|
|
307
366
|
═══════════════════════════════════════════
|
|
308
|
-
|
|
367
|
+
EXECUTION REPORT — auspex
|
|
309
368
|
═══════════════════════════════════════════
|
|
310
369
|
|
|
311
|
-
URL
|
|
312
|
-
Prompt
|
|
313
|
-
Status
|
|
314
|
-
|
|
315
|
-
|
|
370
|
+
URL : https://app.exemplo.com
|
|
371
|
+
Prompt : Faca login e retorne o saldo da conta.
|
|
372
|
+
Status : Task completed successfully.
|
|
373
|
+
Method : Playwright Chromium (full browser — JS required)
|
|
374
|
+
Duration: 12.4s
|
|
316
375
|
|
|
317
376
|
───────────────────────────────────────────
|
|
318
|
-
|
|
377
|
+
STEP BY STEP
|
|
319
378
|
───────────────────────────────────────────
|
|
320
379
|
|
|
321
|
-
1.
|
|
322
|
-
2.
|
|
323
|
-
3.
|
|
324
|
-
4.
|
|
325
|
-
5.
|
|
380
|
+
1. Clicked element "input[name='email']"
|
|
381
|
+
2. Typed "user@email.com" into "input[name='email']"
|
|
382
|
+
3. Typed "••••••••" into "input[name='password']"
|
|
383
|
+
4. Clicked element "button[type='submit']"
|
|
384
|
+
5. Finished with result
|
|
326
385
|
|
|
327
386
|
───────────────────────────────────────────
|
|
328
|
-
|
|
387
|
+
RESULT
|
|
329
388
|
───────────────────────────────────────────
|
|
330
389
|
|
|
331
390
|
Saldo: R$ 1.234,56
|
|
332
391
|
|
|
333
392
|
───────────────────────────────────────────
|
|
334
|
-
|
|
393
|
+
RESOURCE USAGE
|
|
335
394
|
───────────────────────────────────────────
|
|
336
395
|
|
|
337
|
-
LLM
|
|
338
|
-
|
|
396
|
+
LLM : 5 call(s) | 9430 tokens
|
|
397
|
+
> 8100 prompt + 1330 completion
|
|
398
|
+
RAM : Node.js 67.0 MB | Chromium peak 412.3 MB
|
|
339
399
|
|
|
340
400
|
═══════════════════════════════════════════
|
|
341
401
|
```
|
|
@@ -443,14 +503,72 @@ O LLM so pode executar acoes de uma **whitelist rigorosa**. Qualquer coisa fora
|
|
|
443
503
|
|
|
444
504
|
| Acao | Formato JSON | Descricao |
|
|
445
505
|
|------|-------------|-----------|
|
|
446
|
-
| **click** | `{"type":"click","selector":"#btn"}` | Clica em um elemento
|
|
506
|
+
| **click** | `{"type":"click","selector":"#btn"}` | Clica em um elemento (CSS ou role=button[name="..."] ) |
|
|
447
507
|
| **type** | `{"type":"type","selector":"input[name='q']","text":"busca"}` | Digita texto em um campo (max 1000 chars) |
|
|
508
|
+
| **select** | `{"type":"select","selector":"select#country","value":"br"}` | Seleciona opcao em `<select>` (value = option value) |
|
|
509
|
+
| **pressKey** | `{"type":"pressKey","key":"Enter"}` | Tecla: Enter, Tab, Escape, Backspace, ArrowUp/Down, etc. |
|
|
510
|
+
| **hover** | `{"type":"hover","selector":"#menu"}` | Passa o mouse sobre o elemento (menus, tooltips) |
|
|
448
511
|
| **goto** | `{"type":"goto","url":"https://..."}` | Navega para uma URL (passa por validacao anti-SSRF) |
|
|
449
512
|
| **wait** | `{"type":"wait","ms":2000}` | Espera N milissegundos (max 5000ms) |
|
|
450
|
-
| **scroll** | `{"type":"scroll","direction":"down"}` | Scroll
|
|
451
|
-
| **done** | `{"type":"done","result":"
|
|
513
|
+
| **scroll** | `{"type":"scroll","direction":"down","amount":500}` | Scroll (amount opcional, default 500px) |
|
|
514
|
+
| **done** | `{"type":"done","result":"..."}` | Finaliza e retorna o resultado (max 50k chars) |
|
|
515
|
+
|
|
516
|
+
Selectors podem ser **CSS** ou **role-based** (ex.: `role=button[name="Submit"]`) quando a Accessibility Tree esta no snapshot.
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
## Eventos
|
|
521
|
+
|
|
522
|
+
O `Auspex` estende `EventEmitter`. Voce pode escutar eventos por run:
|
|
523
|
+
|
|
524
|
+
| Evento | Argumentos | Descricao |
|
|
525
|
+
|--------|------------|-----------|
|
|
526
|
+
| `tier` | `(tier: AgentTier)` | Indica se o run usou HTTP ou Playwright |
|
|
527
|
+
| `iteration` | `(iteration: number, snapshot: PageSnapshot)` | Apos cada snapshot no loop |
|
|
528
|
+
| `action` | `(action: AgentAction, iteration: number)` | Antes de executar cada acao |
|
|
529
|
+
| `error` | `(error: Error)` | Em caso de erro na execucao (se houver listener) |
|
|
530
|
+
| `done` | `(result: AgentResult)` | Ao finalizar o run (sucesso ou nao) |
|
|
531
|
+
|
|
532
|
+
```typescript
|
|
533
|
+
agent.on("tier", (tier) => console.log("[tier]", tier));
|
|
534
|
+
agent.on("iteration", (i, snapshot) => console.log(`[iter ${i}]`, snapshot.url));
|
|
535
|
+
agent.on("action", (action, i) => console.log(`[action ${i}]`, action.type));
|
|
536
|
+
agent.on("done", (result) => console.log("Done:", result.status));
|
|
537
|
+
|
|
538
|
+
const result = await agent.run({ url, prompt });
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
---
|
|
542
|
+
|
|
543
|
+
## Browser Pool
|
|
544
|
+
|
|
545
|
+
A classe `BrowserPool` gerencia um conjunto de browsers Playwright reutilizaveis. Util para limitar recursos quando varios agents rodam em paralelo.
|
|
546
|
+
|
|
547
|
+
```typescript
|
|
548
|
+
import { BrowserPool } from "auspex";
|
|
549
|
+
|
|
550
|
+
const pool = new BrowserPool({
|
|
551
|
+
maxSize: 3,
|
|
552
|
+
acquireTimeoutMs: 30_000,
|
|
553
|
+
launchOptions: { headless: true },
|
|
554
|
+
});
|
|
452
555
|
|
|
453
|
-
|
|
556
|
+
const browser = await pool.acquire();
|
|
557
|
+
// ... usar browser (newContext, newPage, etc.)
|
|
558
|
+
pool.release(browser);
|
|
559
|
+
|
|
560
|
+
await pool.close(); // fecha todos os browsers
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
| Opcao | Tipo | Default | Descricao |
|
|
564
|
+
|-------|------|---------|-----------|
|
|
565
|
+
| `maxSize` | `number` | `3` | Maximo de instancias de browser |
|
|
566
|
+
| `acquireTimeoutMs` | `number` | `30000` | Timeout ao esperar um browser livre |
|
|
567
|
+
| `launchOptions` | `LaunchOptions` | headless + stealth args | Opcoes do Playwright |
|
|
568
|
+
|
|
569
|
+
---
|
|
570
|
+
|
|
571
|
+
## Acoes BLOQUEADAS
|
|
454
572
|
|
|
455
573
|
O framework **nao permite** nenhuma forma de:
|
|
456
574
|
|
|
@@ -473,7 +591,7 @@ Toda URL (inicial e durante navegacao) passa por validacao rigorosa:
|
|
|
473
591
|
- **IPs privados**: `127.0.0.0/8`, `10.0.0.0/8`, `192.168.0.0/16`, `172.16.0.0/12`
|
|
474
592
|
- **Cloud metadata**: `169.254.169.254` (AWS/GCP metadata endpoint)
|
|
475
593
|
- **Localhost**: `localhost`, `[::1]`
|
|
476
|
-
- **DNS rebinding**: resolve o hostname antes de navegar — detecta dominios publicos apontando para IPs privados
|
|
594
|
+
- **DNS rebinding**: resolve o hostname antes de navegar — detecta dominios publicos apontando para IPs privados. Falha de DNS rejeita a URL (fail closed).
|
|
477
595
|
|
|
478
596
|
### Whitelist de acoes
|
|
479
597
|
|
|
@@ -486,6 +604,8 @@ Selectors CSS sao verificados contra padroes maliciosos antes de qualquer intera
|
|
|
486
604
|
- `javascript:` — bloqueado
|
|
487
605
|
- `on*=` (event handlers como `onclick=`) — bloqueado
|
|
488
606
|
- `<script>` — bloqueado
|
|
607
|
+
- `data:` — bloqueado
|
|
608
|
+
- Tamanho maximo de 500 caracteres (protecao DoS)
|
|
489
609
|
- Strings vazias ou so espacos — bloqueadas
|
|
490
610
|
|
|
491
611
|
### Anti-prompt injection
|
|
@@ -613,6 +733,9 @@ switch (result.status) {
|
|
|
613
733
|
case "timeout":
|
|
614
734
|
console.warn("Timeout — aumente timeoutMs ou simplifique a tarefa");
|
|
615
735
|
break;
|
|
736
|
+
case "aborted":
|
|
737
|
+
console.warn("Cancelado (AbortSignal)");
|
|
738
|
+
break;
|
|
616
739
|
case "error":
|
|
617
740
|
console.error("Erro:", result.error);
|
|
618
741
|
break;
|
|
@@ -632,7 +755,8 @@ Criar um `Auspex` uma vez e chamar `run()` multiplas vezes eh mais eficiente do
|
|
|
632
755
|
- **Sem file upload**: a acao `type` preenche campos de texto, mas nao faz upload de arquivos.
|
|
633
756
|
- **Dependencia de selectors CSS**: a qualidade da automacao depende da capacidade do LLM de identificar selectors corretos a partir do snapshot textual.
|
|
634
757
|
- **Snapshot limitado**: captura ate 25 links, 5 formularios e 3500 chars de texto por pagina. Paginas muito grandes podem ter elementos nao capturados.
|
|
635
|
-
- **
|
|
758
|
+
- **Vision**: ao usar `vision: true`, o modelo deve suportar entrada de imagem (ex.: gpt-4o, gpt-4o-mini). Screenshot so eh enviado apos falhas consecutivas (fallback).
|
|
759
|
+
- **JSON mode obrigatorio**: o provider LLM deve suportar `response_format: { type: "json_object" }` (exceto em chamadas com screenshot, quando pode ser omitido).
|
|
636
760
|
|
|
637
761
|
---
|
|
638
762
|
|
|
@@ -694,6 +818,11 @@ src/
|
|
|
694
818
|
loop.ts # Core loop: snapshot -> LLM -> validar -> executar
|
|
695
819
|
actions.ts # Parser e validador de acoes do LLM
|
|
696
820
|
report.ts # Gerador de relatorio de execucao
|
|
821
|
+
logger.ts # Log por run (arquivo em logDir)
|
|
822
|
+
browser/
|
|
823
|
+
pool.ts # BrowserPool — pool de browsers reutilizaveis
|
|
824
|
+
llm/
|
|
825
|
+
vision-models.ts # Whitelist de modelos com suporte a vision
|
|
697
826
|
scraper/
|
|
698
827
|
index.ts # Scraper — fallback HTTP -> Stealth -> Browser
|
|
699
828
|
tiers/
|
|
@@ -777,6 +906,7 @@ LLM_API_KEY=sk-your-key-here
|
|
|
777
906
|
```typescript
|
|
778
907
|
import {
|
|
779
908
|
Auspex,
|
|
909
|
+
BrowserPool,
|
|
780
910
|
type AgentConfig,
|
|
781
911
|
type AgentResult,
|
|
782
912
|
type AgentAction,
|
|
@@ -790,6 +920,10 @@ import {
|
|
|
790
920
|
type SnapshotLink,
|
|
791
921
|
type SnapshotForm,
|
|
792
922
|
type SnapshotInput,
|
|
923
|
+
type ProxyConfig,
|
|
924
|
+
type CookieParam,
|
|
925
|
+
type AuspexEvents,
|
|
926
|
+
type BrowserPoolOptions,
|
|
793
927
|
UrlValidationError,
|
|
794
928
|
ActionValidationError,
|
|
795
929
|
} from "auspex";
|