zan-browser 3.0.12 → 3.0.14

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.
@@ -1,5 +1,5 @@
1
1
  import type { ToolRegistry } from "../registry";
2
- import type { ToolContext, ToolResult } from "../tools/base";
2
+ import type { ToolContext } from "../tools/base";
3
3
  import { ConversationHistory } from "./conversation";
4
4
  import type { SeedValue, CapturedRequest } from "../types";
5
5
  export interface AgentConfig {
@@ -13,7 +13,7 @@ export interface AgentStepRecord {
13
13
  step: number;
14
14
  toolName: string;
15
15
  params: Record<string, unknown>;
16
- result: ToolResult;
16
+ result: import("../tools/base").ToolResult;
17
17
  reasoning: string;
18
18
  }
19
19
  export interface AgentResult {
@@ -32,19 +32,11 @@ export declare class AgentLoop {
32
32
  private systemPrompt;
33
33
  constructor(registry: ToolRegistry, ctx: ToolContext, model?: string, conversation?: ConversationHistory);
34
34
  run(config: AgentConfig): Promise<AgentResult>;
35
- private runValidationStep;
36
- /** Validate whether a captured response is a real, usable data API. */
37
- private validateCapture;
38
- /** Purely structural check: 3+ descriptive keys (>3 chars) with at least one meaningful value. */
39
- private hasStructuredData;
35
+ private buildInitialMessage;
40
36
  private askLLM;
41
- private parseDecision;
42
- private tryParseJson;
43
- private jsonToDecision;
44
- /** Fallback: extract params from flat action object (legacy format compat) */
45
- private extractLegacyParams;
46
- private buildProgressSummary;
47
- private getCurrentUrl;
48
- private buildResult;
37
+ private maybeSynthetic;
38
+ private appendStepResult;
39
+ private url;
40
+ private result;
49
41
  }
50
42
  //# sourceMappingURL=agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAmB3D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,eAAe,EAAE,CAAC;CACrC;AA2BD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,YAAY,CAAS;gBAG3B,QAAQ,EAAE,YAAY,EACtB,GAAG,EAAE,WAAW,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,mBAAmB;IAU9B,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YAgItC,iBAAiB;IA0D/B,uEAAuE;IACvE,OAAO,CAAC,eAAe;IA4CvB,kGAAkG;IAClG,OAAO,CAAC,iBAAiB;YA4BX,MAAM;IAkCpB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,cAAc;IAWtB,8EAA8E;IAC9E,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,oBAAoB;IA+D5B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,WAAW;CASpB"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAMrD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAW3D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,OAAO,eAAe,EAAE,UAAU,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,eAAe,EAAE,CAAC;CACrC;AAID,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,YAAY,CAAS;gBAEjB,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,mBAAmB;IASlG,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAsDpD,OAAO,CAAC,mBAAmB;YAYb,MAAM;IAsBpB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,GAAG;IAEX,OAAO,CAAC,MAAM;CAGf"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // ─── Agent Loop ──────────────────────────────────────────────────────────────
3
3
  // observe → LLM decides → registry.execute() → repeat
4
- // Replaces SmartNavigator. No hardcoded strategies — the LLM decides everything.
4
+ // No hardcoded strategies — the LLM decides everything.
5
5
  var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
7
7
  };
@@ -10,24 +10,14 @@ exports.AgentLoop = void 0;
10
10
  const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
11
11
  const conversation_1 = require("./conversation");
12
12
  const prompt_1 = require("./prompt");
13
+ const progress_1 = require("./progress");
14
+ const validation_1 = require("./validation");
15
+ const parser_1 = require("./parser");
13
16
  const crypto_1 = require("crypto");
14
17
  // Tools whose output should be injected as synthetic requests
15
18
  const SYNTHETIC_TOOLS = new Set(["scrape", "extract_dom", "download_file"]);
16
- // Tools that indicate the agent is actually finding data (not just browsing)
17
- const DATA_PRODUCING_TOOLS = new Set([
18
- "read_network_logs", "scrape", "eval_js", "download_file",
19
- "fetch_url", "web_search",
20
- ]);
21
19
  const FALLBACK_MODEL = "claude-haiku-4-5-20251001";
22
- // Hard ceiling — absolute maximum to prevent runaway loops
23
20
  const HARD_MAX_STEPS = 50;
24
- // ─── Patterns that indicate framework data-transport, not a real API ─────────
25
- const FRAMEWORK_URL_PATTERNS = [
26
- /__data\.json/,
27
- /\/_next\/data\//,
28
- /\/_next\/static\//,
29
- /\/__nuxt\//,
30
- ];
31
21
  // ─── Agent ───────────────────────────────────────────────────────────────────
32
22
  class AgentLoop {
33
23
  client;
@@ -50,352 +40,110 @@ class AgentLoop {
50
40
  const startTime = Date.now();
51
41
  const progress = config.onProgress ?? (() => { });
52
42
  const steps = [];
53
- // Build the initial task message
54
- const seedLines = config.seedValues?.length
55
- ? `\nSeed values:\n${config.seedValues.map((s) => ` • ${s.paramName} (${s.description}): "${s.exampleValue}"`).join("\n")}`
56
- : "";
57
- // Detect if we're on a blank/empty page to guide the first action
58
- const currentUrl = this.getCurrentUrl();
59
- const isBlank = !currentUrl || currentUrl === "about:blank" || currentUrl === "unknown";
60
- const firstActionHint = isBlank
61
- ? "The browser is on a blank page. Use web_search to find the target URL, or navigate directly if the goal includes a URL."
62
- : `The browser is on ${currentUrl}. Start by observing the page.`;
63
- this.conversation.append("user", `NAVIGATION TASK\nGoal: ${config.goal}\nSuggested budget: ${suggestedBudget} steps${seedLines}\n\n${firstActionHint}`);
43
+ this.conversation.append("user", this.buildInitialMessage(config, suggestedBudget));
64
44
  for (let i = 0; i < hardCeiling; i++) {
65
45
  progress(`Step ${i + 1} (budget: ${suggestedBudget})`);
66
- // ── 1. Ask LLM what to do ──────────────────────────────────────────
46
+ // 1. Ask LLM
67
47
  const decision = await this.askLLM();
68
- // ── 2. Handle data_found — validate before accepting ───────────────
48
+ // 2. data_found (pre-execution) — validate before accepting
69
49
  if (decision.data_found && decision.tool_name !== "eval_js") {
70
- const validation = await this.runValidationStep(steps, progress);
71
- if (validation.valid) {
72
- progress("data_found validated — stopping");
73
- return this.buildResult(true, steps, decision.reasoning);
50
+ const v = await (0, validation_1.runValidationStep)(steps, this.ctx, this.registry, this.conversation, progress);
51
+ if (v.valid) {
52
+ progress("data_found validated");
53
+ return this.result(true, steps, decision.reasoning);
74
54
  }
75
- progress(`data_found rejected: ${validation.reason}`);
55
+ progress(`data_found rejected: ${v.reason}`);
76
56
  continue;
77
57
  }
78
- // ── 3. Terminal states ─────────────────────────────────────────────
58
+ // 3. Terminal states
79
59
  if (decision.tool_name === "done") {
80
- progress("Agent signalled done");
81
- return this.buildResult(true, steps, decision.reasoning);
60
+ progress("Agent: done");
61
+ return this.result(true, steps, decision.reasoning);
82
62
  }
83
63
  if (decision.tool_name === "impossible") {
84
64
  progress(`Agent: impossible — ${decision.reasoning}`);
85
- return this.buildResult(false, steps, decision.reasoning);
86
- }
87
- // ── 4. Execute the tool ────────────────────────────────────────────
88
- const result = await this.registry.execute(decision.tool_name, decision.params, this.ctx);
89
- steps.push({
90
- step: i + 1,
91
- toolName: decision.tool_name,
92
- params: decision.params,
93
- result,
94
- reasoning: decision.reasoning,
95
- });
96
- progress(`Step ${i + 1}: ${decision.tool_name} ${result.success ? "ok" : `error: ${result.error ?? result.summary}`}`);
97
- // ── 4b. Inject synthetic request for content-extraction tools ──────
98
- if (result.success && SYNTHETIC_TOOLS.has(decision.tool_name) && this.ctx.interceptor) {
99
- const body = typeof result.data === "string"
100
- ? result.data
101
- : JSON.stringify(result.data ?? "");
102
- if (body.length > 500) {
103
- this.ctx.interceptor.injectSynthetic({
104
- id: (0, crypto_1.randomUUID)(),
105
- method: "GET",
106
- url: this.getCurrentUrl(),
107
- requestHeaders: {},
108
- responseBody: body,
109
- contentType: "text/plain",
110
- score: 10,
111
- isXHR: false,
112
- isAsset: false,
113
- timestamp: Date.now(),
114
- isDomExtraction: true,
115
- });
116
- }
117
- }
118
- // ── 5. Feed result + progress summary back to conversation ────────
119
- const progressSummary = this.buildProgressSummary(steps, startTime, suggestedBudget);
120
- if (decision.tool_name === "screenshot" && result.success && result.data) {
121
- const screenshotData = result.data;
122
- this.conversation.append("user", [
123
- {
124
- type: "image",
125
- source: { type: "base64", media_type: "image/jpeg", data: screenshotData.base64 },
126
- },
127
- { type: "text", text: `Screenshot captured. URL: ${this.getCurrentUrl()}\n\n${progressSummary}\nDecide next action.` },
128
- ]);
129
- }
130
- else {
131
- const stepContext = `Tool: ${decision.tool_name}\nResult: ${result.summary}\nURL: ${this.getCurrentUrl()}\n\n${progressSummary}`;
132
- this.conversation.append("user", stepContext);
133
- }
134
- // ── 6. Post-execution data_found check (for eval_js) ──────────────
65
+ return this.result(false, steps, decision.reasoning);
66
+ }
67
+ // 4. Execute tool
68
+ const res = await this.registry.execute(decision.tool_name, decision.params, this.ctx);
69
+ steps.push({ step: i + 1, toolName: decision.tool_name, params: decision.params, result: res, reasoning: decision.reasoning });
70
+ progress(`Step ${i + 1}: ${decision.tool_name} → ${res.success ? "ok" : `error: ${res.error ?? res.summary}`}`);
71
+ // 4b. Inject synthetic request for content-extraction tools
72
+ this.maybeSynthetic(decision.tool_name, res);
73
+ // 5. Feed result + progress summary
74
+ const summary = (0, progress_1.buildProgressSummary)(steps, startTime, suggestedBudget, this.ctx.interceptor, this.url());
75
+ this.appendStepResult(decision, res, summary);
76
+ // 6. data_found (post-execution for eval_js)
135
77
  if (decision.data_found && decision.tool_name === "eval_js") {
136
- const validation = await this.runValidationStep(steps, progress);
137
- if (validation.valid) {
138
- progress("data_found (eval_js) validated — stopping");
139
- return this.buildResult(true, steps, decision.reasoning);
78
+ const v = await (0, validation_1.runValidationStep)(steps, this.ctx, this.registry, this.conversation, progress);
79
+ if (v.valid) {
80
+ progress("data_found (eval_js) validated");
81
+ return this.result(true, steps, decision.reasoning);
140
82
  }
141
- progress(`data_found (eval_js) rejected: ${validation.reason}`);
83
+ progress(`data_found (eval_js) rejected: ${v.reason}`);
142
84
  continue;
143
85
  }
144
86
  }
145
- // Hard ceiling exhausted
146
- progress(`Completed ${steps.length} steps (hard ceiling: ${hardCeiling})`);
147
- return this.buildResult(false, steps, `Reached hard ceiling (${hardCeiling} steps) without finding valid data`);
148
- }
149
- // ─── Validation step: verify captured data is actually useful ─────────────
150
- async runValidationStep(steps, progress) {
151
- const useful = this.ctx.interceptor?.getUseful(5) ?? [];
152
- // Fallback for eval_js: if no XHR captured, use the last eval_js result as body
153
- if (useful.length === 0) {
154
- const lastEvalStep = [...steps].reverse().find((s) => s.toolName === "eval_js" && s.result.success);
155
- if (lastEvalStep) {
156
- const evalBody = typeof lastEvalStep.result.data === "string"
157
- ? lastEvalStep.result.data
158
- : JSON.stringify(lastEvalStep.result.data ?? "");
159
- const validation = this.validateCapture("eval_js://inline", evalBody);
160
- if (!validation.valid) {
161
- const preview = evalBody.slice(0, 300);
162
- this.conversation.append("user", `The data you found is not suitable. Preview: ${preview}\nReason: ${validation.reason}.\nContinue searching for a cleaner data source.`);
163
- }
164
- return validation;
165
- }
166
- const reason = "No useful XHR requests captured and no eval_js data available";
167
- this.conversation.append("user", `The data you found is not suitable. Reason: ${reason}. Continue searching for a cleaner data source.`);
168
- return { valid: false, reason };
169
- }
170
- // Pick the top-scored request
171
- const top = useful[0]; // already sorted by score desc from getUseful()
172
- // If we already have the response body from the interceptor, use it directly
173
- let responseBody = top.responseBody ?? "";
174
- // If no body cached, fetch it directly
175
- if (!responseBody && top.url) {
176
- progress("Validating: fetching top API URL...");
177
- const fetchResult = await this.registry.execute("fetch_url", { url: top.url, method: top.method }, this.ctx);
178
- if (fetchResult.success && fetchResult.data) {
179
- responseBody = fetchResult.data.body ?? "";
180
- }
181
- }
182
- const validation = this.validateCapture(top.url, responseBody);
183
- if (!validation.valid) {
184
- const preview = responseBody.slice(0, 300);
185
- this.conversation.append("user", `The data you found is not suitable. Preview: ${preview}\nReason: ${validation.reason}.\nContinue searching for a cleaner data source.`);
186
- }
187
- return validation;
188
- }
189
- /** Validate whether a captured response is a real, usable data API. */
190
- validateCapture(url, body) {
191
- // Check 1: framework data-transport URLs
192
- if (FRAMEWORK_URL_PATTERNS.some((p) => p.test(url))) {
193
- return { valid: false, reason: `URL "${url}" is a framework data-transport route, not a stable API` };
194
- }
195
- // Check 2: body too short to be useful
196
- if (body.length < 100) {
197
- return { valid: false, reason: `Response body is too short (${body.length} chars) — likely empty or error` };
198
- }
199
- // Check 3: flat array of primitives (cross-indexed junk)
200
- try {
201
- const parsed = JSON.parse(body);
202
- if (Array.isArray(parsed) && parsed.length > 30) {
203
- const allPrimitive = parsed.every((v) => typeof v === "string" || typeof v === "number" || typeof v === "boolean" || v === null);
204
- if (allPrimitive) {
205
- return { valid: false, reason: "Response is a flat array of 30+ primitives — likely cross-indexed data, not a structured API" };
206
- }
207
- }
208
- }
209
- catch {
210
- // Not JSON — that's fine, could be XML or other format
211
- }
212
- // Check 4: purely structural — 3+ descriptive keys with at least one meaningful value
213
- try {
214
- const parsed = JSON.parse(body);
215
- if (this.hasStructuredData(parsed)) {
216
- return { valid: true, reason: "Response has structured data with descriptive keys" };
217
- }
218
- }
219
- catch {
220
- // Not JSON — fall through to length-based check
221
- }
222
- // Default: if it passed checks 1-3 and has a decent body, accept it
223
- if (body.length >= 200) {
224
- return { valid: true, reason: "Response has substantial content" };
225
- }
226
- return { valid: false, reason: "Response does not appear to contain structured data" };
87
+ progress(`Hard ceiling reached (${hardCeiling} steps)`);
88
+ return this.result(false, steps, `Reached hard ceiling (${hardCeiling} steps) without finding valid data`);
227
89
  }
228
- /** Purely structural check: 3+ descriptive keys (>3 chars) with at least one meaningful value. */
229
- hasStructuredData(parsed) {
230
- const obj = Array.isArray(parsed)
231
- ? (parsed.length > 0 ? parsed[0] : null)
232
- : parsed;
233
- if (!obj || typeof obj !== "object")
234
- return false;
235
- const keys = Object.keys(obj);
236
- const descriptiveKeys = keys.filter((k) => k.length > 3 && !/^[_$]/.test(k));
237
- if (descriptiveKeys.length < 3)
238
- return false;
239
- // At least one value must be a non-trivial string (>5 chars) or a number > 0
240
- const record = obj;
241
- const hasMeaningfulValue = descriptiveKeys.some((k) => {
242
- const v = record[k];
243
- if (typeof v === "string" && v.length > 5)
244
- return true;
245
- if (typeof v === "number" && v > 0)
246
- return true;
247
- return false;
248
- });
249
- return hasMeaningfulValue;
90
+ // ─── Private helpers ─────────────────────────────────────────────────────────
91
+ buildInitialMessage(config, budget) {
92
+ const seedLines = config.seedValues?.length
93
+ ? `\nSeed values:\n${config.seedValues.map((s) => ` • ${s.paramName} (${s.description}): "${s.exampleValue}"`).join("\n")}`
94
+ : "";
95
+ const url = this.url();
96
+ const isBlank = !url || url === "about:blank" || url === "unknown";
97
+ const hint = isBlank
98
+ ? "The browser is on a blank page. Use web_search to find the target URL, or navigate directly if the goal includes a URL."
99
+ : `The browser is on ${url}. Start by observing the page.`;
100
+ return `NAVIGATION TASK\nGoal: ${config.goal}\nSuggested budget: ${budget} steps${seedLines}\n\n${hint}`;
250
101
  }
251
- // ─── Private: Ask LLM for next decision ────────────────────────────────────
252
102
  async askLLM() {
253
103
  const messages = this.conversation.toMessages();
254
- // Mark early messages with cache_control so Anthropic caches them
255
- // across steps (5-min TTL). Only the last 2 messages change per step.
256
- if (messages.length > 2) {
257
- const cacheBreakpoint = messages.length - 2;
258
- for (let j = 0; j < cacheBreakpoint; j++) {
259
- const msg = messages[j];
260
- if (typeof msg.content === "string") {
261
- messages[j].content = [
262
- { type: "text", text: msg.content, cache_control: { type: "ephemeral" } },
263
- ];
264
- }
265
- }
104
+ // Prompt caching: 2 blocks max system + first message
105
+ if (messages.length > 2 && typeof messages[0].content === "string") {
106
+ messages[0].content = [
107
+ { type: "text", text: messages[0].content, cache_control: { type: "ephemeral" } },
108
+ ];
266
109
  }
267
110
  const response = await this.client.messages.create({
268
111
  model: this.model,
269
112
  max_tokens: 800,
270
- system: [
271
- { type: "text", text: this.systemPrompt, cache_control: { type: "ephemeral" } },
272
- ],
113
+ system: [{ type: "text", text: this.systemPrompt, cache_control: { type: "ephemeral" } }],
273
114
  messages,
274
115
  });
275
116
  const text = response.content[0].type === "text" ? response.content[0].text : "{}";
276
- // Store assistant response in conversation
277
117
  this.conversation.append("assistant", text);
278
- return this.parseDecision(text);
279
- }
280
- parseDecision(raw) {
281
- // Try 1: strip code fences and parse directly
282
- const cleaned = raw.replace(/```json\n?/g, "").replace(/```\n?/g, "").trim();
283
- const parsed = this.tryParseJson(cleaned);
284
- if (parsed)
285
- return this.jsonToDecision(parsed);
286
- // Try 2: extract the first JSON object from free-text response
287
- const jsonMatch = raw.match(/\{[\s\S]*\}/);
288
- if (jsonMatch) {
289
- const extracted = this.tryParseJson(jsonMatch[0]);
290
- if (extracted)
291
- return this.jsonToDecision(extracted);
292
- }
293
- // All parsing failed
294
- return {
295
- memory: "",
296
- next_goal: "",
297
- reasoning: `Failed to parse LLM response: ${raw.slice(0, 200)}`,
298
- data_found: false,
299
- tool_name: "impossible",
300
- params: {},
301
- };
118
+ return (0, parser_1.parseDecision)(text);
302
119
  }
303
- tryParseJson(text) {
304
- try {
305
- return JSON.parse(text);
306
- }
307
- catch {
308
- return null;
309
- }
310
- }
311
- jsonToDecision(obj) {
312
- return {
313
- memory: String(obj.memory ?? ""),
314
- next_goal: String(obj.next_goal ?? ""),
315
- reasoning: String(obj.reasoning ?? obj.reason ?? ""),
316
- data_found: obj.data_found === true,
317
- tool_name: String(obj.tool_name ?? obj.type ?? "impossible"),
318
- params: obj.params ?? this.extractLegacyParams(obj),
319
- };
320
- }
321
- /** Fallback: extract params from flat action object (legacy format compat) */
322
- extractLegacyParams(obj) {
323
- const params = {};
324
- for (const key of ["elementId", "value", "direction", "amount", "ms", "url", "code", "query", "selector", "prompt"]) {
325
- if (obj[key] !== undefined)
326
- params[key] = obj[key];
327
- }
328
- return params;
120
+ maybeSynthetic(toolName, res) {
121
+ if (!res.success || !SYNTHETIC_TOOLS.has(toolName) || !this.ctx.interceptor)
122
+ return;
123
+ const body = typeof res.data === "string" ? res.data : JSON.stringify(res.data ?? "");
124
+ if (body.length <= 500)
125
+ return;
126
+ this.ctx.interceptor.injectSynthetic({
127
+ id: (0, crypto_1.randomUUID)(), method: "GET", url: this.url(),
128
+ requestHeaders: {}, responseBody: body, contentType: "text/plain",
129
+ score: 10, isXHR: false, isAsset: false, timestamp: Date.now(), isDomExtraction: true,
130
+ });
329
131
  }
330
- // ─── Private: Progress summary ──────────────────────────────────────────────
331
- buildProgressSummary(steps, startTime, suggestedBudget) {
332
- const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
333
- const hasUsefulData = steps.some((s) => DATA_PRODUCING_TOOLS.has(s.toolName) && s.result.success);
334
- // Domains visited only from explicit navigate/fetch_url actions
335
- const domains = new Set();
336
- for (const s of steps) {
337
- if ((s.toolName === "navigate" || s.toolName === "fetch_url") && s.params.url) {
338
- try {
339
- domains.add(new URL(String(s.params.url)).hostname);
340
- }
341
- catch { /* ignore */ }
342
- }
132
+ appendStepResult(decision, res, summary) {
133
+ if (decision.tool_name === "screenshot" && res.success && res.data) {
134
+ const b64 = res.data.base64;
135
+ this.conversation.append("user", [
136
+ { type: "image", source: { type: "base64", media_type: "image/jpeg", data: b64 } },
137
+ { type: "text", text: `Screenshot captured. URL: ${this.url()}\n\n${summary}\nDecide next action.` },
138
+ ]);
343
139
  }
344
- // Tool usage counts
345
- const toolCounts = {};
346
- for (const s of steps) {
347
- toolCounts[s.toolName] = (toolCounts[s.toolName] ?? 0) + 1;
140
+ else {
141
+ this.conversation.append("user", `Tool: ${decision.tool_name}\nResult: ${res.summary}\nURL: ${this.url()}\n\n${summary}`);
348
142
  }
349
- const toolLine = Object.entries(toolCounts).map(([t, c]) => `${t}:${c}`).join(", ");
350
- // Last 3 actions
351
- const last3 = steps.slice(-3).map((s) => `${s.toolName}(${s.result.success ? "ok" : "err"})`).join(" → ");
352
- // XHR quality breakdown
353
- const allRequests = this.ctx.interceptor?.getAll() ?? [];
354
- const BINARY_TYPES = /grpc|protobuf|proto|wasm|octet-stream|msgpack/i;
355
- const NOISE_TYPES = /tracking|analytics|pixel|beacon|ad[s]?[./]|doubleclick|googletag|facebook.*tr/i;
356
- let useful = 0;
357
- let binary = 0;
358
- let noise = 0;
359
- for (const r of allRequests) {
360
- const ct = r.contentType ?? "";
361
- const url = r.url ?? "";
362
- if (BINARY_TYPES.test(ct) || BINARY_TYPES.test(url)) {
363
- binary++;
364
- }
365
- else if (r.isAsset || NOISE_TYPES.test(url) || r.score < 0) {
366
- noise++;
367
- }
368
- else if (r.isXHR && r.score >= 5 && (ct.includes("json") || ct.includes("xml"))) {
369
- useful++;
370
- }
371
- else {
372
- noise++;
373
- }
374
- }
375
- const xhrLine = `${useful} useful (JSON/XML) / ${binary} binary (grpc/proto/wasm) / ${noise} noise (ads/tracking/assets)`;
376
- return [
377
- "PROGRESS SUMMARY:",
378
- `- Steps taken: ${steps.length}/${suggestedBudget} suggested budget`,
379
- `- Time elapsed: ${elapsed}s`,
380
- `- Useful data found: ${hasUsefulData ? "yes" : "no"}`,
381
- `- Sites visited: ${domains.size > 0 ? [...domains].join(", ") : "none"}`,
382
- `- Tools used: ${toolLine || "none"}`,
383
- `- Last 3 actions: ${last3 || "none"}`,
384
- `- XHR quality: ${xhrLine}`,
385
- ].join("\n");
386
- }
387
- // ─── Private: Helpers ──────────────────────────────────────────────────────
388
- getCurrentUrl() {
389
- return this.ctx.page?.url() ?? "unknown";
390
143
  }
391
- buildResult(success, steps, reason) {
392
- return {
393
- success,
394
- steps,
395
- finalUrl: this.getCurrentUrl(),
396
- reason,
397
- capturedRequests: this.ctx.interceptor?.getUseful(3) ?? [],
398
- };
144
+ url() { return this.ctx.page?.url() ?? "unknown"; }
145
+ result(success, steps, reason) {
146
+ return { success, steps, finalUrl: this.url(), reason, capturedRequests: this.ctx.interceptor?.getUseful(3) ?? [] };
399
147
  }
400
148
  }
401
149
  exports.AgentLoop = AgentLoop;
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,10 @@ export interface ConversationMessage {
5
5
  }
6
6
  export declare class ConversationHistory {
7
7
  private messages;
8
- /** Append a message to the history. */
8
+ /** Append a message to the history. Strings are sanitized to strip lone surrogates. */
9
9
  append(role: "user" | "assistant", content: string | Anthropic.MessageParam["content"]): void;
10
+ /** Sanitize content — strings directly, arrays recursively on text fields. */
11
+ private sanitize;
10
12
  /** Return the pruned message list for the Anthropic API. */
11
13
  toMessages(): Anthropic.MessageParam[];
12
14
  /** Number of messages in history (before pruning). */
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/agent/conversation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAM/C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;CACrD;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAA6B;IAE7C,uCAAuC;IACvC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI;IAI7F,4DAA4D;IAC5D,UAAU,IAAI,SAAS,CAAC,YAAY,EAAE;IAQtC,sDAAsD;IACtD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,yBAAyB;IACzB,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,OAAO,CAAC,KAAK;CAQd"}
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/agent/conversation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAY/C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;CACrD;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAA6B;IAE7C,uFAAuF;IACvF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI;IAI7F,8EAA8E;IAC9E,OAAO,CAAC,QAAQ;IAYhB,4DAA4D;IAC5D,UAAU,IAAI,SAAS,CAAC,YAAY,EAAE;IAQtC,sDAAsD;IACtD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,yBAAyB;IACzB,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,OAAO,CAAC,KAAK;CAQd"}
@@ -7,11 +7,31 @@ exports.ConversationHistory = void 0;
7
7
  // How many user+assistant pairs to keep beyond the first message.
8
8
  // 6 pairs = 12 messages + 1 initial = 13 messages max.
9
9
  const MAX_HISTORY_PAIRS = 6;
10
+ /** Strip lone surrogates that cause Anthropic API JSON errors. */
11
+ function sanitizeForJSON(text) {
12
+ // eslint-disable-next-line no-control-regex
13
+ return text.replace(/[\uD800-\uDFFF]/g, "\uFFFD");
14
+ }
10
15
  class ConversationHistory {
11
16
  messages = [];
12
- /** Append a message to the history. */
17
+ /** Append a message to the history. Strings are sanitized to strip lone surrogates. */
13
18
  append(role, content) {
14
- this.messages.push({ role, content });
19
+ this.messages.push({ role, content: this.sanitize(content) });
20
+ }
21
+ /** Sanitize content — strings directly, arrays recursively on text fields. */
22
+ sanitize(content) {
23
+ if (typeof content === "string")
24
+ return sanitizeForJSON(content);
25
+ if (!Array.isArray(content))
26
+ return content;
27
+ return content.map((block) => {
28
+ if (typeof block === "string")
29
+ return sanitizeForJSON(block);
30
+ if ("text" in block && typeof block.text === "string") {
31
+ return { ...block, text: sanitizeForJSON(block.text) };
32
+ }
33
+ return block;
34
+ });
15
35
  }
16
36
  /** Return the pruned message list for the Anthropic API. */
17
37
  toMessages() {
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/agent/conversation.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,uEAAuE;AACvE,qDAAqD;;;AAIrD,kEAAkE;AAClE,uDAAuD;AACvD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAO5B,MAAa,mBAAmB;IACtB,QAAQ,GAA0B,EAAE,CAAC;IAE7C,uCAAuC;IACvC,MAAM,CAAC,IAA0B,EAAE,OAAmD;QACpF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,4DAA4D;IAC5D,UAAU;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAA6B,CAAC;IAClC,CAAC;IAED,sDAAsD;IACtD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,yBAAyB;IACzB,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED;;;OAGG;IACK,KAAK;QACX,MAAM,WAAW,GAAG,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,WAAW;YAAE,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnE,OAAO;YACL,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChB,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;SACjD,CAAC;IACJ,CAAC;CACF;AAvCD,kDAuCC"}
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/agent/conversation.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,uEAAuE;AACvE,qDAAqD;;;AAIrD,kEAAkE;AAClE,uDAAuD;AACvD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,kEAAkE;AAClE,SAAS,eAAe,CAAC,IAAY;IACnC,4CAA4C;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC;AAOD,MAAa,mBAAmB;IACtB,QAAQ,GAA0B,EAAE,CAAC;IAE7C,uFAAuF;IACvF,MAAM,CAAC,IAA0B,EAAE,OAAmD;QACpF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,8EAA8E;IACtE,QAAQ,CAAC,OAAmD;QAClE,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;QAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;YAC7D,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtD,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAsC,CAAC;IAC1C,CAAC;IAED,4DAA4D;IAC5D,UAAU;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAA6B,CAAC;IAClC,CAAC;IAED,sDAAsD;IACtD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,yBAAyB;IACzB,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED;;;OAGG;IACK,KAAK;QACX,MAAM,WAAW,GAAG,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,WAAW;YAAE,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnE,OAAO;YACL,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChB,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;SACjD,CAAC;IACJ,CAAC;CACF;AApDD,kDAoDC"}
@@ -0,0 +1,10 @@
1
+ export interface LLMDecision {
2
+ memory: string;
3
+ next_goal: string;
4
+ reasoning: string;
5
+ data_found: boolean;
6
+ tool_name: string;
7
+ params: Record<string, unknown>;
8
+ }
9
+ export declare function parseDecision(raw: string): LLMDecision;
10
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/agent/parser.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAOD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAsBtD"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ // ─── LLM response parsing ────────────────────────────────────────────────────
3
+ // Extracts structured LLMDecision from raw Claude output.
4
+ // Handles: clean JSON, code-fenced JSON, JSON embedded in free text.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseDecision = parseDecision;
7
+ const LEGACY_PARAM_KEYS = [
8
+ "elementId", "value", "direction", "amount", "ms",
9
+ "url", "code", "query", "selector", "prompt",
10
+ ];
11
+ function parseDecision(raw) {
12
+ // Try 1: strip code fences and parse directly
13
+ const cleaned = raw.replace(/```json\n?/g, "").replace(/```\n?/g, "").trim();
14
+ const parsed = tryParseJson(cleaned);
15
+ if (parsed)
16
+ return toDecision(parsed);
17
+ // Try 2: extract the first JSON object from free-text
18
+ const jsonMatch = raw.match(/\{[\s\S]*\}/);
19
+ if (jsonMatch) {
20
+ const extracted = tryParseJson(jsonMatch[0]);
21
+ if (extracted)
22
+ return toDecision(extracted);
23
+ }
24
+ // All parsing failed
25
+ return {
26
+ memory: "",
27
+ next_goal: "",
28
+ reasoning: `Failed to parse LLM response: ${raw.slice(0, 200)}`,
29
+ data_found: false,
30
+ tool_name: "impossible",
31
+ params: {},
32
+ };
33
+ }
34
+ function tryParseJson(text) {
35
+ try {
36
+ return JSON.parse(text);
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ function toDecision(obj) {
43
+ return {
44
+ memory: String(obj.memory ?? ""),
45
+ next_goal: String(obj.next_goal ?? ""),
46
+ reasoning: String(obj.reasoning ?? obj.reason ?? ""),
47
+ data_found: obj.data_found === true,
48
+ tool_name: String(obj.tool_name ?? obj.type ?? "impossible"),
49
+ params: obj.params ?? extractLegacyParams(obj),
50
+ };
51
+ }
52
+ function extractLegacyParams(obj) {
53
+ const params = {};
54
+ for (const key of LEGACY_PARAM_KEYS) {
55
+ if (obj[key] !== undefined)
56
+ params[key] = obj[key];
57
+ }
58
+ return params;
59
+ }
60
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/agent/parser.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0DAA0D;AAC1D,qEAAqE;;AAgBrE,sCAsBC;AA3BD,MAAM,iBAAiB,GAAG;IACxB,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI;IACjD,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ;CAC7C,CAAC;AAEF,SAAgB,aAAa,CAAC,GAAW;IACvC,8CAA8C;IAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7E,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,MAAM;QAAE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAEtC,sDAAsD;IACtD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC3C,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,SAAS;YAAE,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,qBAAqB;IACrB,OAAO;QACL,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,iCAAiC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QAC/D,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,YAAY;QACvB,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AACzD,CAAC;AAED,SAAS,UAAU,CAAC,GAA4B;IAC9C,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;QAChC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;QACtC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;QACpD,UAAU,EAAE,GAAG,CAAC,UAAU,KAAK,IAAI;QACnC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC;QAC5D,MAAM,EAAG,GAAG,CAAC,MAAkC,IAAI,mBAAmB,CAAC,GAAG,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,GAA4B;IACvD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ToolResult } from "../tools/base";
2
+ import type { Interceptor } from "../interceptor";
3
+ export interface StepRecord {
4
+ toolName: string;
5
+ params: Record<string, unknown>;
6
+ result: ToolResult;
7
+ }
8
+ export declare function buildProgressSummary(steps: StepRecord[], startTime: number, suggestedBudget: number, interceptor: Interceptor | undefined, currentUrl: string): string;
9
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/agent/progress.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAWlD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,EAAE,EACnB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,WAAW,GAAG,SAAS,EACpC,UAAU,EAAE,MAAM,GACjB,MAAM,CAoDR"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ // ─── Progress tracking & summary ─────────────────────────────────────────────
3
+ // Builds the PROGRESS SUMMARY block appended to every step message,
4
+ // giving the LLM visibility into its own performance.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildProgressSummary = buildProgressSummary;
7
+ // Tools that indicate the agent is actually finding data (not just browsing)
8
+ const DATA_PRODUCING_TOOLS = new Set([
9
+ "read_network_logs", "scrape", "eval_js", "download_file",
10
+ "fetch_url", "web_search",
11
+ ]);
12
+ const BINARY_TYPES = /grpc|protobuf|proto|wasm|octet-stream|msgpack/i;
13
+ const NOISE_TYPES = /tracking|analytics|pixel|beacon|ad[s]?[./]|doubleclick|googletag|facebook.*tr/i;
14
+ function buildProgressSummary(steps, startTime, suggestedBudget, interceptor, currentUrl) {
15
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
16
+ const hasUsefulData = steps.some((s) => DATA_PRODUCING_TOOLS.has(s.toolName) && s.result.success);
17
+ // Domains visited — only from explicit navigate/fetch_url actions
18
+ const domains = new Set();
19
+ for (const s of steps) {
20
+ if ((s.toolName === "navigate" || s.toolName === "fetch_url") && s.params.url) {
21
+ try {
22
+ domains.add(new URL(String(s.params.url)).hostname);
23
+ }
24
+ catch { /* ignore */ }
25
+ }
26
+ }
27
+ // Tool usage counts
28
+ const toolCounts = {};
29
+ for (const s of steps) {
30
+ toolCounts[s.toolName] = (toolCounts[s.toolName] ?? 0) + 1;
31
+ }
32
+ const toolLine = Object.entries(toolCounts).map(([t, c]) => `${t}:${c}`).join(", ");
33
+ // Last 3 actions
34
+ const last3 = steps.slice(-3).map((s) => `${s.toolName}(${s.result.success ? "ok" : "err"})`).join(" → ");
35
+ // XHR quality breakdown
36
+ const allRequests = interceptor?.getAll() ?? [];
37
+ let useful = 0;
38
+ let binary = 0;
39
+ let noise = 0;
40
+ for (const r of allRequests) {
41
+ const ct = r.contentType ?? "";
42
+ const url = r.url ?? "";
43
+ if (BINARY_TYPES.test(ct) || BINARY_TYPES.test(url)) {
44
+ binary++;
45
+ }
46
+ else if (r.isAsset || NOISE_TYPES.test(url) || r.score < 0) {
47
+ noise++;
48
+ }
49
+ else if (r.isXHR && r.score >= 5 && (ct.includes("json") || ct.includes("xml"))) {
50
+ useful++;
51
+ }
52
+ else {
53
+ noise++;
54
+ }
55
+ }
56
+ const xhrLine = `${useful} useful (JSON/XML) / ${binary} binary (grpc/proto/wasm) / ${noise} noise (ads/tracking/assets)`;
57
+ return [
58
+ "PROGRESS SUMMARY:",
59
+ `- Steps taken: ${steps.length}/${suggestedBudget} suggested budget`,
60
+ `- Time elapsed: ${elapsed}s`,
61
+ `- Useful data found: ${hasUsefulData ? "yes" : "no"}`,
62
+ `- Sites visited: ${domains.size > 0 ? [...domains].join(", ") : "none"}`,
63
+ `- Tools used: ${toolLine || "none"}`,
64
+ `- Last 3 actions: ${last3 || "none"}`,
65
+ `- XHR quality: ${xhrLine}`,
66
+ ].join("\n");
67
+ }
68
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/agent/progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ToolRegistry } from "../registry";
2
+ import type { ToolContext } from "../tools/base";
3
+ import type { ConversationHistory } from "./conversation";
4
+ export interface ValidationResult {
5
+ valid: boolean;
6
+ reason: string;
7
+ }
8
+ interface StepLike {
9
+ toolName: string;
10
+ result: {
11
+ success: boolean;
12
+ data?: unknown;
13
+ };
14
+ }
15
+ /** Run the full validation pipeline: pick best capture, fetch if needed, validate. */
16
+ export declare function runValidationStep(steps: StepLike[], ctx: ToolContext, registry: ToolRegistry, conversation: ConversationHistory, progress: (msg: string) => void): Promise<ValidationResult>;
17
+ /** Validate whether a captured response is real, usable data. */
18
+ export declare function validateCapture(url: string, body: string): ValidationResult;
19
+ export {};
20
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/agent/validation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAW1D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,QAAQ;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC9C;AAED,sFAAsF;AACtF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,QAAQ,EAAE,EACjB,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAiD3B;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAsC3E"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ // ─── Capture validation ───────────────────────────────────��──────────────────
3
+ // Determines whether a captured HTTP response or eval_js result is actually
4
+ // useful structured data, or framework junk / noise.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runValidationStep = runValidationStep;
7
+ exports.validateCapture = validateCapture;
8
+ // ─── Patterns that indicate framework data-transport, not a real API ─────────
9
+ const FRAMEWORK_URL_PATTERNS = [
10
+ /__data\.json/,
11
+ /\/_next\/data\//,
12
+ /\/_next\/static\//,
13
+ /\/__nuxt\//,
14
+ ];
15
+ /** Run the full validation pipeline: pick best capture, fetch if needed, validate. */
16
+ async function runValidationStep(steps, ctx, registry, conversation, progress) {
17
+ const useful = ctx.interceptor?.getUseful(5) ?? [];
18
+ // Fallback for eval_js: if no XHR captured, use the last eval_js result
19
+ if (useful.length === 0) {
20
+ const lastEvalStep = [...steps].reverse().find((s) => s.toolName === "eval_js" && s.result.success);
21
+ if (lastEvalStep) {
22
+ const evalBody = typeof lastEvalStep.result.data === "string"
23
+ ? lastEvalStep.result.data
24
+ : JSON.stringify(lastEvalStep.result.data ?? "");
25
+ const validation = validateCapture("eval_js://inline", evalBody);
26
+ if (!validation.valid) {
27
+ conversation.append("user", `The data you found is not suitable. Preview: ${evalBody.slice(0, 300)}\nReason: ${validation.reason}.\nContinue searching for a cleaner data source.`);
28
+ }
29
+ return validation;
30
+ }
31
+ const reason = "No useful XHR requests captured and no eval_js data available";
32
+ conversation.append("user", `The data you found is not suitable. Reason: ${reason}. Continue searching for a cleaner data source.`);
33
+ return { valid: false, reason };
34
+ }
35
+ // Pick the top-scored request
36
+ const top = useful[0];
37
+ let responseBody = top.responseBody ?? "";
38
+ // If no body cached, fetch it directly
39
+ if (!responseBody && top.url) {
40
+ progress("Validating: fetching top API URL...");
41
+ const fetchResult = await registry.execute("fetch_url", { url: top.url, method: top.method }, ctx);
42
+ if (fetchResult.success && fetchResult.data) {
43
+ responseBody = fetchResult.data.body ?? "";
44
+ }
45
+ }
46
+ const validation = validateCapture(top.url, responseBody);
47
+ if (!validation.valid) {
48
+ conversation.append("user", `The data you found is not suitable. Preview: ${responseBody.slice(0, 300)}\nReason: ${validation.reason}.\nContinue searching for a cleaner data source.`);
49
+ }
50
+ return validation;
51
+ }
52
+ /** Validate whether a captured response is real, usable data. */
53
+ function validateCapture(url, body) {
54
+ // Check 1: framework data-transport URLs
55
+ if (FRAMEWORK_URL_PATTERNS.some((p) => p.test(url))) {
56
+ return { valid: false, reason: `URL "${url}" is a framework data-transport route, not a stable API` };
57
+ }
58
+ // Check 2: body too short
59
+ if (body.length < 100) {
60
+ return { valid: false, reason: `Response body is too short (${body.length} chars) — likely empty or error` };
61
+ }
62
+ // Check 3: flat array of primitives (cross-indexed junk)
63
+ try {
64
+ const parsed = JSON.parse(body);
65
+ if (Array.isArray(parsed) && parsed.length > 30) {
66
+ const allPrimitive = parsed.every((v) => typeof v === "string" || typeof v === "number" || typeof v === "boolean" || v === null);
67
+ if (allPrimitive) {
68
+ return { valid: false, reason: "Response is a flat array of 30+ primitives — likely cross-indexed data, not a structured API" };
69
+ }
70
+ }
71
+ }
72
+ catch { /* not JSON */ }
73
+ // Check 4: 3+ descriptive keys with at least one meaningful value
74
+ try {
75
+ const parsed = JSON.parse(body);
76
+ if (hasStructuredData(parsed)) {
77
+ return { valid: true, reason: "Response has structured data with descriptive keys" };
78
+ }
79
+ }
80
+ catch { /* not JSON */ }
81
+ // Default: decent body length passes
82
+ if (body.length >= 200) {
83
+ return { valid: true, reason: "Response has substantial content" };
84
+ }
85
+ return { valid: false, reason: "Response does not appear to contain structured data" };
86
+ }
87
+ /** Purely structural check: 3+ descriptive keys (>3 chars) with a meaningful value. */
88
+ function hasStructuredData(parsed) {
89
+ const obj = Array.isArray(parsed)
90
+ ? (parsed.length > 0 ? parsed[0] : null)
91
+ : parsed;
92
+ if (!obj || typeof obj !== "object")
93
+ return false;
94
+ const keys = Object.keys(obj);
95
+ const descriptiveKeys = keys.filter((k) => k.length > 3 && !/^[_$]/.test(k));
96
+ if (descriptiveKeys.length < 3)
97
+ return false;
98
+ const record = obj;
99
+ return descriptiveKeys.some((k) => {
100
+ const v = record[k];
101
+ if (typeof v === "string" && v.length > 5)
102
+ return true;
103
+ if (typeof v === "number" && v > 0)
104
+ return true;
105
+ return false;
106
+ });
107
+ }
108
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/agent/validation.ts"],"names":[],"mappings":"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"}
package/dist/session.d.ts CHANGED
@@ -23,6 +23,8 @@ export declare class Session {
23
23
  getCapturedRequests(): CapturedRequest[];
24
24
  getUsefulRequests(minScore?: number): CapturedRequest[];
25
25
  act(goal: string, config?: Partial<AgentConfig>): Promise<AgentResult>;
26
+ /** Reset conversation history. Page, interceptor, and browser stay intact. */
27
+ resetConversation(): void;
26
28
  getRegistry(): ToolRegistry;
27
29
  getToolContext(): ToolContext;
28
30
  close(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAuB9D,qBAAa,OAAO;IAClB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;gBAGrC,IAAI,EAAE,UAAU,EAChB,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,MAAM,EACvB,OAAO,SAAS,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM;IAiCZ,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtE,IAAI,GAAG,IAAI,MAAM,CAEhB;IAIK,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAWvC,mBAAmB,IAAI,eAAe,EAAE;IAIxC,iBAAiB,CAAC,QAAQ,SAAI,GAAG,eAAe,EAAE;IAM5C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAa5E,WAAW,IAAI,YAAY;IAI3B,cAAc,IAAI,WAAW;IAMvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B,OAAO,CAAC,oBAAoB;CAqB7B"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAuB9D,qBAAa,OAAO;IAClB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;gBAGrC,IAAI,EAAE,UAAU,EAChB,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,MAAM,EACvB,OAAO,SAAS,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM;IAiCZ,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtE,IAAI,GAAG,IAAI,MAAM,CAEhB;IAIK,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAWvC,mBAAmB,IAAI,eAAe,EAAE;IAIxC,iBAAiB,CAAC,QAAQ,SAAI,GAAG,eAAe,EAAE;IAM5C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAa5E,8EAA8E;IAC9E,iBAAiB,IAAI,IAAI;IAMzB,WAAW,IAAI,YAAY;IAI3B,cAAc,IAAI,WAAW;IAMvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B,OAAO,CAAC,oBAAoB;CAqB7B"}
package/dist/session.js CHANGED
@@ -103,6 +103,11 @@ class Session {
103
103
  ...config,
104
104
  });
105
105
  }
106
+ // ─── Conversation control ────────────────────────────────────────────────────
107
+ /** Reset conversation history. Page, interceptor, and browser stay intact. */
108
+ resetConversation() {
109
+ this.conversation.clear();
110
+ }
106
111
  // ─── Registry access (for custom tools) ────────────────────────────────────────
107
112
  getRegistry() {
108
113
  return this.registry;
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zan-browser",
3
- "version": "3.0.12",
3
+ "version": "3.0.14",
4
4
  "description": "AI-powered cloud browser library with observe-first, screenshot-as-fallback pattern",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",