zan-browser 3.0.13 → 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.
- package/dist/agent/agent.d.ts +7 -15
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +75 -324
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/conversation.d.ts +3 -1
- package/dist/agent/conversation.d.ts.map +1 -1
- package/dist/agent/conversation.js +22 -2
- package/dist/agent/conversation.js.map +1 -1
- package/dist/agent/parser.d.ts +10 -0
- package/dist/agent/parser.d.ts.map +1 -0
- package/dist/agent/parser.js +60 -0
- package/dist/agent/parser.js.map +1 -0
- package/dist/agent/progress.d.ts +9 -0
- package/dist/agent/progress.d.ts.map +1 -0
- package/dist/agent/progress.js +68 -0
- package/dist/agent/progress.js.map +1 -0
- package/dist/agent/validation.d.ts +20 -0
- package/dist/agent/validation.d.ts.map +1 -0
- package/dist/agent/validation.js +108 -0
- package/dist/agent/validation.js.map +1 -0
- package/dist/session.d.ts +2 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +5 -0
- package/dist/session.js.map +1 -1
- package/package.json +1 -1
package/dist/agent/agent.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ToolRegistry } from "../registry";
|
|
2
|
-
import type { ToolContext
|
|
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
|
|
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
|
|
42
|
-
private
|
|
43
|
-
private
|
|
44
|
-
|
|
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,
|
|
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"}
|
package/dist/agent/agent.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// ─── Agent Loop ──────────────────────────────────────────────────────────────
|
|
3
3
|
// observe → LLM decides → registry.execute() → repeat
|
|
4
|
-
//
|
|
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,349 +40,110 @@ class AgentLoop {
|
|
|
50
40
|
const startTime = Date.now();
|
|
51
41
|
const progress = config.onProgress ?? (() => { });
|
|
52
42
|
const steps = [];
|
|
53
|
-
|
|
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
|
-
//
|
|
46
|
+
// 1. Ask LLM
|
|
67
47
|
const decision = await this.askLLM();
|
|
68
|
-
//
|
|
48
|
+
// 2. data_found (pre-execution) — validate before accepting
|
|
69
49
|
if (decision.data_found && decision.tool_name !== "eval_js") {
|
|
70
|
-
const
|
|
71
|
-
if (
|
|
72
|
-
progress("data_found validated
|
|
73
|
-
return this.
|
|
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: ${
|
|
55
|
+
progress(`data_found rejected: ${v.reason}`);
|
|
76
56
|
continue;
|
|
77
57
|
}
|
|
78
|
-
//
|
|
58
|
+
// 3. Terminal states
|
|
79
59
|
if (decision.tool_name === "done") {
|
|
80
|
-
progress("Agent
|
|
81
|
-
return this.
|
|
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.
|
|
86
|
-
}
|
|
87
|
-
//
|
|
88
|
-
const
|
|
89
|
-
steps.push({
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
|
137
|
-
if (
|
|
138
|
-
progress("data_found (eval_js) validated
|
|
139
|
-
return this.
|
|
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: ${
|
|
83
|
+
progress(`data_found (eval_js) rejected: ${v.reason}`);
|
|
142
84
|
continue;
|
|
143
85
|
}
|
|
144
86
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
return this.buildResult(false, steps, `Reached hard ceiling (${hardCeiling} steps) without finding valid data`);
|
|
87
|
+
progress(`Hard ceiling reached (${hardCeiling} steps)`);
|
|
88
|
+
return this.result(false, steps, `Reached hard ceiling (${hardCeiling} steps) without finding valid data`);
|
|
148
89
|
}
|
|
149
|
-
// ───
|
|
150
|
-
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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" };
|
|
227
|
-
}
|
|
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
|
-
// Prompt caching: max
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
messages[0].content = [
|
|
260
|
-
{ type: "text", text: first.content, cache_control: { type: "ephemeral" } },
|
|
261
|
-
];
|
|
262
|
-
}
|
|
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
|
+
];
|
|
263
109
|
}
|
|
264
110
|
const response = await this.client.messages.create({
|
|
265
111
|
model: this.model,
|
|
266
112
|
max_tokens: 800,
|
|
267
|
-
system: [
|
|
268
|
-
{ type: "text", text: this.systemPrompt, cache_control: { type: "ephemeral" } },
|
|
269
|
-
],
|
|
113
|
+
system: [{ type: "text", text: this.systemPrompt, cache_control: { type: "ephemeral" } }],
|
|
270
114
|
messages,
|
|
271
115
|
});
|
|
272
116
|
const text = response.content[0].type === "text" ? response.content[0].text : "{}";
|
|
273
|
-
// Store assistant response in conversation
|
|
274
117
|
this.conversation.append("assistant", text);
|
|
275
|
-
return
|
|
276
|
-
}
|
|
277
|
-
parseDecision(raw) {
|
|
278
|
-
// Try 1: strip code fences and parse directly
|
|
279
|
-
const cleaned = raw.replace(/```json\n?/g, "").replace(/```\n?/g, "").trim();
|
|
280
|
-
const parsed = this.tryParseJson(cleaned);
|
|
281
|
-
if (parsed)
|
|
282
|
-
return this.jsonToDecision(parsed);
|
|
283
|
-
// Try 2: extract the first JSON object from free-text response
|
|
284
|
-
const jsonMatch = raw.match(/\{[\s\S]*\}/);
|
|
285
|
-
if (jsonMatch) {
|
|
286
|
-
const extracted = this.tryParseJson(jsonMatch[0]);
|
|
287
|
-
if (extracted)
|
|
288
|
-
return this.jsonToDecision(extracted);
|
|
289
|
-
}
|
|
290
|
-
// All parsing failed
|
|
291
|
-
return {
|
|
292
|
-
memory: "",
|
|
293
|
-
next_goal: "",
|
|
294
|
-
reasoning: `Failed to parse LLM response: ${raw.slice(0, 200)}`,
|
|
295
|
-
data_found: false,
|
|
296
|
-
tool_name: "impossible",
|
|
297
|
-
params: {},
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
tryParseJson(text) {
|
|
301
|
-
try {
|
|
302
|
-
return JSON.parse(text);
|
|
303
|
-
}
|
|
304
|
-
catch {
|
|
305
|
-
return null;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
jsonToDecision(obj) {
|
|
309
|
-
return {
|
|
310
|
-
memory: String(obj.memory ?? ""),
|
|
311
|
-
next_goal: String(obj.next_goal ?? ""),
|
|
312
|
-
reasoning: String(obj.reasoning ?? obj.reason ?? ""),
|
|
313
|
-
data_found: obj.data_found === true,
|
|
314
|
-
tool_name: String(obj.tool_name ?? obj.type ?? "impossible"),
|
|
315
|
-
params: obj.params ?? this.extractLegacyParams(obj),
|
|
316
|
-
};
|
|
118
|
+
return (0, parser_1.parseDecision)(text);
|
|
317
119
|
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
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
|
+
});
|
|
326
131
|
}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
if ((s.toolName === "navigate" || s.toolName === "fetch_url") && s.params.url) {
|
|
335
|
-
try {
|
|
336
|
-
domains.add(new URL(String(s.params.url)).hostname);
|
|
337
|
-
}
|
|
338
|
-
catch { /* ignore */ }
|
|
339
|
-
}
|
|
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
|
+
]);
|
|
340
139
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
for (const s of steps) {
|
|
344
|
-
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}`);
|
|
345
142
|
}
|
|
346
|
-
const toolLine = Object.entries(toolCounts).map(([t, c]) => `${t}:${c}`).join(", ");
|
|
347
|
-
// Last 3 actions
|
|
348
|
-
const last3 = steps.slice(-3).map((s) => `${s.toolName}(${s.result.success ? "ok" : "err"})`).join(" → ");
|
|
349
|
-
// XHR quality breakdown
|
|
350
|
-
const allRequests = this.ctx.interceptor?.getAll() ?? [];
|
|
351
|
-
const BINARY_TYPES = /grpc|protobuf|proto|wasm|octet-stream|msgpack/i;
|
|
352
|
-
const NOISE_TYPES = /tracking|analytics|pixel|beacon|ad[s]?[./]|doubleclick|googletag|facebook.*tr/i;
|
|
353
|
-
let useful = 0;
|
|
354
|
-
let binary = 0;
|
|
355
|
-
let noise = 0;
|
|
356
|
-
for (const r of allRequests) {
|
|
357
|
-
const ct = r.contentType ?? "";
|
|
358
|
-
const url = r.url ?? "";
|
|
359
|
-
if (BINARY_TYPES.test(ct) || BINARY_TYPES.test(url)) {
|
|
360
|
-
binary++;
|
|
361
|
-
}
|
|
362
|
-
else if (r.isAsset || NOISE_TYPES.test(url) || r.score < 0) {
|
|
363
|
-
noise++;
|
|
364
|
-
}
|
|
365
|
-
else if (r.isXHR && r.score >= 5 && (ct.includes("json") || ct.includes("xml"))) {
|
|
366
|
-
useful++;
|
|
367
|
-
}
|
|
368
|
-
else {
|
|
369
|
-
noise++;
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
const xhrLine = `${useful} useful (JSON/XML) / ${binary} binary (grpc/proto/wasm) / ${noise} noise (ads/tracking/assets)`;
|
|
373
|
-
return [
|
|
374
|
-
"PROGRESS SUMMARY:",
|
|
375
|
-
`- Steps taken: ${steps.length}/${suggestedBudget} suggested budget`,
|
|
376
|
-
`- Time elapsed: ${elapsed}s`,
|
|
377
|
-
`- Useful data found: ${hasUsefulData ? "yes" : "no"}`,
|
|
378
|
-
`- Sites visited: ${domains.size > 0 ? [...domains].join(", ") : "none"}`,
|
|
379
|
-
`- Tools used: ${toolLine || "none"}`,
|
|
380
|
-
`- Last 3 actions: ${last3 || "none"}`,
|
|
381
|
-
`- XHR quality: ${xhrLine}`,
|
|
382
|
-
].join("\n");
|
|
383
|
-
}
|
|
384
|
-
// ─── Private: Helpers ──────────────────────────────────────────────────────
|
|
385
|
-
getCurrentUrl() {
|
|
386
|
-
return this.ctx.page?.url() ?? "unknown";
|
|
387
143
|
}
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
steps,
|
|
392
|
-
finalUrl: this.getCurrentUrl(),
|
|
393
|
-
reason,
|
|
394
|
-
capturedRequests: this.ctx.interceptor?.getUseful(3) ?? [],
|
|
395
|
-
};
|
|
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) ?? [] };
|
|
396
147
|
}
|
|
397
148
|
}
|
|
398
149
|
exports.AgentLoop = AgentLoop;
|
package/dist/agent/agent.js.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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":";AAAA,iFAAiF;AACjF,4EAA4E;AAC5E,qDAAqD;;AA0BrD,8CAuDC;AAGD,0CAsCC;AApHD,gFAAgF;AAEhF,MAAM,sBAAsB,GAAG;IAC7B,cAAc;IACd,iBAAiB;IACjB,mBAAmB;IACnB,YAAY;CACb,CAAC;AAYF,sFAAsF;AAC/E,KAAK,UAAU,iBAAiB,CACrC,KAAiB,EACjB,GAAgB,EAChB,QAAsB,EACtB,YAAiC,EACjC,QAA+B;IAE/B,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEnD,wEAAwE;IACxE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpG,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;gBAC3D,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI;gBAC1B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAEnD,MAAM,UAAU,GAAG,eAAe,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;YACjE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,YAAY,CAAC,MAAM,CAAC,MAAM,EACxB,gDAAgD,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,aAAa,UAAU,CAAC,MAAM,kDAAkD,CACvJ,CAAC;YACJ,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,MAAM,GAAG,+DAA+D,CAAC;QAC/E,YAAY,CAAC,MAAM,CAAC,MAAM,EACxB,+CAA+C,MAAM,iDAAiD,CACvG,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,8BAA8B;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;IAE1C,uCAAuC;IACvC,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QAC7B,QAAQ,CAAC,qCAAqC,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;QACnG,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YAC5C,YAAY,GAAI,WAAW,CAAC,IAAY,CAAC,IAAI,IAAI,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAE1D,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,YAAY,CAAC,MAAM,CAAC,MAAM,EACxB,gDAAgD,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,aAAa,UAAU,CAAC,MAAM,kDAAkD,CAC3J,CAAC;IACJ,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,iEAAiE;AACjE,SAAgB,eAAe,CAAC,GAAW,EAAE,IAAY;IACvD,yCAAyC;IACzC,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAG,yDAAyD,EAAE,CAAC;IACxG,CAAC;IAED,0BAA0B;IAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,+BAA+B,IAAI,CAAC,MAAM,iCAAiC,EAAE,CAAC;IAC/G,CAAC;IAED,yDAAyD;IACzD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAChD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAC9F,CAAC;YACF,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,8FAA8F,EAAE,CAAC;YAClI,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;IAE1B,kEAAkE;IAClE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,oDAAoD,EAAE,CAAC;QACvF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;IAE1B,qCAAqC;IACrC,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC;IACrE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,qDAAqD,EAAE,CAAC;AACzF,CAAC;AAED,uFAAuF;AACvF,SAAS,iBAAiB,CAAC,MAAe;IACxC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxC,CAAC,CAAC,MAAM,CAAC;IAEX,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAElD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAE7C,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QAChC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACvD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC"}
|
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>;
|
package/dist/session.d.ts.map
CHANGED
|
@@ -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;
|
package/dist/session.js.map
CHANGED
|
@@ -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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"}
|