zan-browser 3.0.66 → 3.0.67
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 +0 -1
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +39 -133
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/candidate-evaluator.d.ts +13 -0
- package/dist/agent/candidate-evaluator.d.ts.map +1 -0
- package/dist/agent/candidate-evaluator.js +179 -0
- package/dist/agent/candidate-evaluator.js.map +1 -0
- package/dist/agent/enforcement.d.ts +11 -0
- package/dist/agent/enforcement.d.ts.map +1 -0
- package/dist/agent/enforcement.js +46 -0
- package/dist/agent/enforcement.js.map +1 -0
- package/dist/agent/extraction.d.ts +11 -0
- package/dist/agent/extraction.d.ts.map +1 -0
- package/dist/agent/extraction.js +96 -0
- package/dist/agent/extraction.js.map +1 -0
- package/dist/agent/goal-builder.d.ts +11 -0
- package/dist/agent/goal-builder.d.ts.map +1 -0
- package/dist/agent/goal-builder.js +57 -0
- package/dist/agent/goal-builder.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +0 -6
- package/dist/agent/orchestrator.d.ts.map +1 -1
- package/dist/agent/orchestrator.js +23 -347
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/pre-validator.d.ts +19 -0
- package/dist/agent/pre-validator.d.ts.map +1 -0
- package/dist/agent/pre-validator.js +123 -0
- package/dist/agent/pre-validator.js.map +1 -0
- package/dist/agent/state-updater.d.ts +19 -0
- package/dist/agent/state-updater.d.ts.map +1 -0
- package/dist/agent/state-updater.js +101 -0
- package/dist/agent/state-updater.js.map +1 -0
- package/package.json +1 -1
package/dist/agent/agent.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAMA,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;AAI3D,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAMA,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;AAI3D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAanD,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;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;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,KAAK,CAAiB;IAC9B,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,YAAY,CAAS;gBAG3B,QAAQ,EAAE,YAAY,EACtB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,KAAK,EAAE,cAAc,EACrB,YAAY,CAAC,EAAE,mBAAmB;IAW9B,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAiHpD,OAAO,CAAC,mBAAmB;YAeb,MAAM;IA8CpB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,GAAG;IAEX,OAAO,CAAC,MAAM;CAGf"}
|
package/dist/agent/agent.js
CHANGED
|
@@ -16,16 +16,13 @@ const validation_1 = require("./validation");
|
|
|
16
16
|
const parser_1 = require("./parser");
|
|
17
17
|
const crypto_1 = require("crypto");
|
|
18
18
|
const planner_1 = require("./planner");
|
|
19
|
-
const
|
|
19
|
+
const enforcement_1 = require("./enforcement");
|
|
20
|
+
const state_updater_1 = require("./state-updater");
|
|
21
|
+
const extraction_1 = require("./extraction");
|
|
20
22
|
// Tools whose output should be injected as synthetic requests
|
|
21
23
|
const SYNTHETIC_TOOLS = new Set(["scrape", "extract_dom", "download_file"]);
|
|
22
24
|
const FALLBACK_MODEL = "claude-sonnet-4-6";
|
|
23
25
|
const HARD_MAX_STEPS = 50;
|
|
24
|
-
// Mechanical thresholds
|
|
25
|
-
const FETCH_WITHOUT_SIGNAL_LIMIT = 5;
|
|
26
|
-
const DOMAIN_EXHAUSTION_STEPS = 7;
|
|
27
|
-
const DOMAIN_EXHAUSTION_MIN_SCORE = 35;
|
|
28
|
-
const USEFUL_XHR_MIN_SCORE = 40;
|
|
29
26
|
// ─── Agent ───────────────────────────────────────────────────────────────────
|
|
30
27
|
class AgentLoop {
|
|
31
28
|
client;
|
|
@@ -71,140 +68,57 @@ class AgentLoop {
|
|
|
71
68
|
progress(`Agent: impossible — ${decision.reasoning}`);
|
|
72
69
|
return this.result(false, steps, decision.reasoning);
|
|
73
70
|
}
|
|
74
|
-
//
|
|
75
|
-
|
|
76
|
-
if (
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
steps.push({ step: i + 1, toolName: decision.tool_name, params: decision.params, result: blocked, reasoning: decision.reasoning });
|
|
81
|
-
progress(`Step ${i + 1}: ${decision.tool_name} → blocked (dead domain: ${hostname})`);
|
|
82
|
-
this.conversation.append("user", `Domain ${hostname} is permanently unreachable (connection error on a previous attempt). Do not attempt to visit it again. Remove it from your plan and choose a different source.`);
|
|
83
|
-
this.state.totalSteps++;
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
if (hostname && this.state.isExhausted(hostname)) {
|
|
87
|
-
const blocked = { success: false, summary: `Domain exhausted: many steps without useful signal`, error: `Domain ${hostname} has been exhausted without finding useful data` };
|
|
88
|
-
steps.push({ step: i + 1, toolName: decision.tool_name, params: decision.params, result: blocked, reasoning: decision.reasoning });
|
|
89
|
-
progress(`Step ${i + 1}: ${decision.tool_name} → blocked (exhausted domain: ${hostname})`);
|
|
90
|
-
this.conversation.append("user", `Domain ${hostname} has been explored extensively without finding useful API signal. Try a completely different site or source.`);
|
|
91
|
-
this.state.totalSteps++;
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
// 4b. Consecutive fetch_url without signal limit
|
|
96
|
-
if (decision.tool_name === "fetch_url" && this.state.consecutiveFetchWithoutSignal >= FETCH_WITHOUT_SIGNAL_LIMIT) {
|
|
97
|
-
const blocked = { success: false, summary: `fetch_url blocked: ${FETCH_WITHOUT_SIGNAL_LIMIT} consecutive calls without useful signal`, error: "fetch limit reached" };
|
|
98
|
-
steps.push({ step: i + 1, toolName: decision.tool_name, params: decision.params, result: blocked, reasoning: decision.reasoning });
|
|
99
|
-
progress(`Step ${i + 1}: fetch_url → blocked (${FETCH_WITHOUT_SIGNAL_LIMIT} consecutive without signal)`);
|
|
100
|
-
this.conversation.append("user", `You have made ${FETCH_WITHOUT_SIGNAL_LIMIT} consecutive fetch_url calls without finding useful data. Stop probing URLs and change approach: navigate to a real website, interact with it, and inspect network traffic or JS source to find real endpoints.`);
|
|
71
|
+
// 3. PRE-EXECUTION enforcement
|
|
72
|
+
const enforcement = (0, enforcement_1.checkEnforcement)(decision, this.state);
|
|
73
|
+
if (enforcement) {
|
|
74
|
+
steps.push({ step: i + 1, toolName: decision.tool_name, params: decision.params, result: enforcement.result, reasoning: decision.reasoning });
|
|
75
|
+
progress(`Step ${i + 1}: ${decision.tool_name} → blocked`);
|
|
76
|
+
this.conversation.append("user", enforcement.message);
|
|
101
77
|
this.state.totalSteps++;
|
|
102
78
|
continue;
|
|
103
79
|
}
|
|
104
|
-
//
|
|
80
|
+
// 4. Execute tool
|
|
105
81
|
const res = await this.registry.execute(decision.tool_name, decision.params, this.ctx);
|
|
106
82
|
steps.push({ step: i + 1, toolName: decision.tool_name, params: decision.params, result: res, reasoning: decision.reasoning });
|
|
107
83
|
progress(`Step ${i + 1}: ${decision.tool_name} → ${res.success ? "ok" : `error: ${res.error ?? res.summary}`}`);
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const actionHostname = actionUrl ? this.extractHostname(actionUrl) : null;
|
|
112
|
-
// 6a. Connection error → mark dead
|
|
113
|
-
if (!res.success && isNavOrFetch && actionUrl) {
|
|
114
|
-
const errMsg = String(res.error ?? res.summary ?? "");
|
|
115
|
-
if ((0, discovery_state_1.isConnectionError)(errMsg) && actionHostname) {
|
|
116
|
-
this.state.markDead(actionHostname);
|
|
117
|
-
progress(`Dead domain detected: ${actionHostname}`);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
// 6b. fetch_url signal tracking
|
|
121
|
-
// Counter only resets on real XHR signal or active search — not on navigate
|
|
122
|
-
if (decision.tool_name === "fetch_url") {
|
|
123
|
-
const topXhr = this.ctx.interceptor?.getUseful(USEFUL_XHR_MIN_SCORE)?.[0];
|
|
124
|
-
const hadNewSignal = topXhr && (!this.state.bestSignal || topXhr.score > this.state.bestSignal.score);
|
|
125
|
-
if (hadNewSignal) {
|
|
126
|
-
this.state.resetFetchCounter();
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
this.state.incrementFetchWithoutSignal();
|
|
130
|
-
if (actionUrl && !res.success) {
|
|
131
|
-
this.state.triedEndpoints.set(actionUrl, String(res.error ?? "request failed"));
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
else if (decision.tool_name === "web_search") {
|
|
136
|
-
// Active search = genuine strategy change
|
|
137
|
-
this.state.resetFetchCounter();
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
// For all other tools: only reset if a new useful XHR appeared
|
|
141
|
-
const topXhr = this.ctx.interceptor?.getUseful(USEFUL_XHR_MIN_SCORE)?.[0];
|
|
142
|
-
const hadNewSignal = topXhr && (!this.state.bestSignal || topXhr.score > this.state.bestSignal.score);
|
|
143
|
-
if (hadNewSignal) {
|
|
144
|
-
this.state.resetFetchCounter();
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
// 6c. Update best signal from interceptor
|
|
148
|
-
const currentTop = this.ctx.interceptor?.getUseful(1)?.[0];
|
|
149
|
-
if (currentTop) {
|
|
150
|
-
this.state.updateBestSignal(currentTop.score, currentTop.url);
|
|
151
|
-
}
|
|
152
|
-
// 6d. Track domain steps
|
|
153
|
-
if (isNavOrFetch && actionHostname) {
|
|
154
|
-
this.state.incrementStepsForDomain(actionHostname);
|
|
155
|
-
this.state.visitedDomains.add(actionHostname);
|
|
156
|
-
}
|
|
157
|
-
if (decision.tool_name === "fetch_url" && res.success && actionHostname) {
|
|
158
|
-
this.state.visitedDomains.add(actionHostname);
|
|
159
|
-
}
|
|
160
|
-
// 6e. Domain exhaustion check
|
|
161
|
-
if (actionHostname) {
|
|
162
|
-
const domainSteps = this.state.stepsByDomain.get(actionHostname) ?? 0;
|
|
163
|
-
if (domainSteps >= DOMAIN_EXHAUSTION_STEPS) {
|
|
164
|
-
// Check best XHR score for this specific domain
|
|
165
|
-
const domainRequests = this.ctx.interceptor?.getAll().filter((r) => {
|
|
166
|
-
try {
|
|
167
|
-
return new URL(r.url).hostname === actionHostname;
|
|
168
|
-
}
|
|
169
|
-
catch {
|
|
170
|
-
return false;
|
|
171
|
-
}
|
|
172
|
-
}) ?? [];
|
|
173
|
-
const bestDomainScore = domainRequests.reduce((max, r) => Math.max(max, r.score), 0);
|
|
174
|
-
const hadSuccessfulFetch = steps.some((s) => s.toolName === "fetch_url" &&
|
|
175
|
-
s.result.success &&
|
|
176
|
-
s.params.url &&
|
|
177
|
-
this.extractHostname(String(s.params.url)) === actionHostname &&
|
|
178
|
-
String(s.result.summary ?? "").length > 200);
|
|
179
|
-
if (hadSuccessfulFetch) {
|
|
180
|
-
// domain is producing data via fetch_url — don't mark as exhausted
|
|
181
|
-
}
|
|
182
|
-
else if (bestDomainScore < DOMAIN_EXHAUSTION_MIN_SCORE) {
|
|
183
|
-
this.state.markExhausted(actionHostname);
|
|
184
|
-
progress(`Exhausted domain: ${actionHostname} (${domainSteps} steps, best score ${bestDomainScore})`);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
// 6f. Increment total steps
|
|
189
|
-
this.state.totalSteps++;
|
|
190
|
-
// 7. Inject synthetic request for content-extraction tools
|
|
84
|
+
// 5. POST-EXECUTION state updates
|
|
85
|
+
(0, state_updater_1.updateState)({ decision, res, state: this.state, steps, ctx: this.ctx, progress });
|
|
86
|
+
// 6. Inject synthetic request for content-extraction tools
|
|
191
87
|
this.maybeSynthetic(decision.tool_name, res);
|
|
192
|
-
//
|
|
88
|
+
// 7. Feed result + progress summary
|
|
193
89
|
const summary = (0, progress_1.buildProgressSummary)(steps, startTime, suggestedBudget, this.ctx.interceptor, this.url(), this.state);
|
|
194
90
|
this.appendStepResult(decision, res, summary);
|
|
195
|
-
//
|
|
91
|
+
// 8. Auto-observe + extraction after navigating to a seed-matching URL
|
|
196
92
|
if (decision.tool_name === "navigate" && res.success) {
|
|
197
93
|
const navUrl = String(decision.params.url ?? "").toLowerCase();
|
|
198
94
|
const urlHasSeed = (config.seedValues ?? []).some((s) => navUrl.includes(s.exampleValue.toLowerCase()));
|
|
199
95
|
if (urlHasSeed) {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
96
|
+
const pageUrl = this.url();
|
|
97
|
+
progress(`Auto-extraction on seed page: ${pageUrl}`);
|
|
98
|
+
const extracted = await (0, extraction_1.tryExtraction)(pageUrl, config.seedValues ?? [], this.registry, this.ctx, this.conversation);
|
|
99
|
+
if (extracted) {
|
|
100
|
+
progress(`Extraction succeeded: ${extracted.data.length} chars`);
|
|
101
|
+
// Inject as synthetic DOM extraction request
|
|
102
|
+
if (this.ctx.interceptor) {
|
|
103
|
+
this.ctx.interceptor.injectSynthetic({
|
|
104
|
+
id: (0, crypto_1.randomUUID)(), method: "GET", url: extracted.url,
|
|
105
|
+
requestHeaders: {}, responseBody: extracted.data, contentType: "text/html",
|
|
106
|
+
score: 70, isXHR: false, isAsset: false, timestamp: Date.now(), isDomExtraction: true,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
this.conversation.append("user", `[Auto-extraction] Successfully extracted data from seed page ${extracted.url} (${extracted.data.length} chars). ` +
|
|
110
|
+
"The data has been captured. Set data_found=true and declare done.");
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// Extraction failed — still provide observe context if possible
|
|
114
|
+
try {
|
|
115
|
+
const obsRes = await this.registry.execute("observe", {}, this.ctx);
|
|
116
|
+
if (obsRes.success) {
|
|
117
|
+
this.conversation.append("user", `[Auto-observe] The page you navigated to contains a seed value. Here is what the page looks like:\n${obsRes.summary}\n\nIf you see the data you need in the DOM, use scrape as your next action.`);
|
|
118
|
+
}
|
|
205
119
|
}
|
|
120
|
+
catch { /* non-fatal */ }
|
|
206
121
|
}
|
|
207
|
-
catch { /* non-fatal */ }
|
|
208
122
|
}
|
|
209
123
|
}
|
|
210
124
|
// 9. data_found (post-execution) — validate after tool has run
|
|
@@ -301,14 +215,6 @@ class AgentLoop {
|
|
|
301
215
|
}
|
|
302
216
|
}
|
|
303
217
|
url() { return this.ctx.page?.url() ?? "unknown"; }
|
|
304
|
-
extractHostname(url) {
|
|
305
|
-
try {
|
|
306
|
-
return new URL(url).hostname;
|
|
307
|
-
}
|
|
308
|
-
catch {
|
|
309
|
-
return null;
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
218
|
result(success, steps, reason) {
|
|
313
219
|
return { success, steps, finalUrl: this.url(), reason, capturedRequests: this.ctx.interceptor?.getUseful(3) ?? [] };
|
|
314
220
|
}
|
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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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ToolContext } from "../tools/base";
|
|
2
|
+
import type { AgentResult } from "./agent";
|
|
3
|
+
import type { DiscoveryState } from "./discovery-state";
|
|
4
|
+
import type { EndpointResult } from "./orchestrator";
|
|
5
|
+
import type { SeedValue } from "../types";
|
|
6
|
+
export interface CandidateEvaluatorInput {
|
|
7
|
+
agentResult: AgentResult;
|
|
8
|
+
state: DiscoveryState;
|
|
9
|
+
seedValues: SeedValue[];
|
|
10
|
+
ctx: ToolContext;
|
|
11
|
+
}
|
|
12
|
+
export declare function evaluateResult(input: CandidateEvaluatorInput): EndpointResult | null;
|
|
13
|
+
//# sourceMappingURL=candidate-evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candidate-evaluator.d.ts","sourceRoot":"","sources":["../../src/agent/candidate-evaluator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,UAAU,CAAC;AAE3D,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,GAAG,EAAE,WAAW,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,uBAAuB,GAAG,cAAc,GAAG,IAAI,CAwJpF"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ─── Candidate evaluator ─────────────────────────────────────────────────────
|
|
3
|
+
// Evaluates an agent run's results to find the best reproducible endpoint.
|
|
4
|
+
// Implements 4 candidate paths + sorting by parameterizability.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.evaluateResult = evaluateResult;
|
|
7
|
+
function evaluateResult(input) {
|
|
8
|
+
const { agentResult, state, seedValues, ctx } = input;
|
|
9
|
+
// Build set of URLs the agent explicitly tested via fetch_url with success
|
|
10
|
+
const verifiedUrls = new Set();
|
|
11
|
+
for (const step of agentResult.steps) {
|
|
12
|
+
if (step.toolName === "fetch_url" && step.result.success && step.params.url) {
|
|
13
|
+
verifiedUrls.add(String(step.params.url));
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const candidates = [];
|
|
17
|
+
const allCaptured = [
|
|
18
|
+
...agentResult.capturedRequests,
|
|
19
|
+
...(ctx.interceptor?.getAll() ?? []),
|
|
20
|
+
];
|
|
21
|
+
// Deduplicate by URL
|
|
22
|
+
const seenUrls = new Set();
|
|
23
|
+
// Path 1: fetch_url verified endpoints with score >= 50
|
|
24
|
+
for (const url of verifiedUrls) {
|
|
25
|
+
const match = allCaptured.find((r) => r.url === url && !r.isDomExtraction && !r.isAsset && r.score >= 50);
|
|
26
|
+
if (match && !seenUrls.has(url)) {
|
|
27
|
+
candidates.push(match);
|
|
28
|
+
seenUrls.add(url);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Path 2: high-score XHRs from browser navigation
|
|
32
|
+
for (const r of allCaptured) {
|
|
33
|
+
if (r.score >= 60 &&
|
|
34
|
+
!r.isDomExtraction &&
|
|
35
|
+
!r.isAsset &&
|
|
36
|
+
r.isXHR &&
|
|
37
|
+
!state.triedEndpoints.has(r.url) &&
|
|
38
|
+
!seenUrls.has(r.url)) {
|
|
39
|
+
candidates.push(r);
|
|
40
|
+
seenUrls.add(r.url);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Path 3: successful fetch_url in the last 5 steps of a successful run
|
|
44
|
+
if (agentResult.success) {
|
|
45
|
+
const recentSteps = agentResult.steps.slice(-5).reverse();
|
|
46
|
+
for (const step of recentSteps) {
|
|
47
|
+
if (step.toolName === "fetch_url" &&
|
|
48
|
+
step.result.success &&
|
|
49
|
+
step.params.url &&
|
|
50
|
+
!seenUrls.has(String(step.params.url)) &&
|
|
51
|
+
!state.triedEndpoints.has(String(step.params.url))) {
|
|
52
|
+
const fetchUrl = String(step.params.url);
|
|
53
|
+
const fetchData = step.result.data;
|
|
54
|
+
const bodyLen = fetchData?.body?.length ?? 0;
|
|
55
|
+
if (bodyLen > 100) {
|
|
56
|
+
const synthetic = {
|
|
57
|
+
id: `fetch_url_${Date.now()}`,
|
|
58
|
+
timestamp: Date.now(),
|
|
59
|
+
method: String(step.params.method ?? "GET"),
|
|
60
|
+
url: fetchUrl,
|
|
61
|
+
requestHeaders: {},
|
|
62
|
+
requestBody: step.params.body ? String(step.params.body) : undefined,
|
|
63
|
+
status: fetchData?.status ?? 200,
|
|
64
|
+
responseHeaders: {},
|
|
65
|
+
responseBody: fetchData?.body,
|
|
66
|
+
contentType: fetchData?.contentType ?? "",
|
|
67
|
+
isXHR: false,
|
|
68
|
+
isAsset: false,
|
|
69
|
+
score: 75,
|
|
70
|
+
isDomExtraction: false,
|
|
71
|
+
};
|
|
72
|
+
candidates.push(synthetic);
|
|
73
|
+
seenUrls.add(fetchUrl);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Path 4: successful scrape on a page whose URL contains a seed value
|
|
79
|
+
const seeds = seedValues.map((s) => s.exampleValue.toLowerCase());
|
|
80
|
+
for (let i = 0; i < agentResult.steps.length; i++) {
|
|
81
|
+
const step = agentResult.steps[i];
|
|
82
|
+
if (step.toolName === "scrape" && step.result.success) {
|
|
83
|
+
const pageUrl = [...agentResult.steps]
|
|
84
|
+
.slice(0, i)
|
|
85
|
+
.reverse()
|
|
86
|
+
.find((s) => s.toolName === "navigate" && s.result.success && s.params.url)
|
|
87
|
+
?.params.url;
|
|
88
|
+
if (pageUrl && seeds.some((sv) => pageUrl.toLowerCase().includes(sv))) {
|
|
89
|
+
const scrapeData = step.result.data;
|
|
90
|
+
if (scrapeData?.text && scrapeData.text.length > 100) {
|
|
91
|
+
const syntheticUrl = String(pageUrl);
|
|
92
|
+
if (!seenUrls.has(syntheticUrl)) {
|
|
93
|
+
candidates.push({
|
|
94
|
+
id: `scrape_${Date.now()}`,
|
|
95
|
+
timestamp: Date.now(),
|
|
96
|
+
method: "GET",
|
|
97
|
+
url: syntheticUrl,
|
|
98
|
+
requestHeaders: {},
|
|
99
|
+
status: 200,
|
|
100
|
+
responseHeaders: {},
|
|
101
|
+
responseBody: scrapeData.text,
|
|
102
|
+
contentType: "text/html",
|
|
103
|
+
isXHR: false,
|
|
104
|
+
isAsset: false,
|
|
105
|
+
score: 70,
|
|
106
|
+
isDomExtraction: true,
|
|
107
|
+
});
|
|
108
|
+
seenUrls.add(syntheticUrl);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Exclude endpoints that already failed or were pre-validated in previous attempts
|
|
115
|
+
const viable = candidates.filter((r) => !state.triedEndpoints.has(r.url) &&
|
|
116
|
+
!state.preValidatedEndpoints.has(r.url));
|
|
117
|
+
if (viable.length === 0) {
|
|
118
|
+
recordFailedEndpoints(agentResult, state);
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
// Prefer endpoints where seed value appears in URL (parameterizable), then by score
|
|
122
|
+
viable.sort((a, b) => {
|
|
123
|
+
const aHasSeed = seeds.some((sv) => a.url.toLowerCase().includes(sv));
|
|
124
|
+
const bHasSeed = seeds.some((sv) => b.url.toLowerCase().includes(sv));
|
|
125
|
+
if (aHasSeed && !bHasSeed)
|
|
126
|
+
return -1;
|
|
127
|
+
if (!aHasSeed && bHasSeed)
|
|
128
|
+
return 1;
|
|
129
|
+
return b.score - a.score;
|
|
130
|
+
});
|
|
131
|
+
const best = viable[0];
|
|
132
|
+
// Build URL template by replacing seed values
|
|
133
|
+
const urlTemplate = buildUrlTemplate(best.url, seedValues);
|
|
134
|
+
return {
|
|
135
|
+
request: best,
|
|
136
|
+
urlTemplate,
|
|
137
|
+
score: best.score,
|
|
138
|
+
reproducible: true,
|
|
139
|
+
whyReproducible: explainReproducibility(best),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function buildUrlTemplate(url, seedValues) {
|
|
143
|
+
let template = url;
|
|
144
|
+
for (const seed of seedValues) {
|
|
145
|
+
if (template.includes(seed.exampleValue)) {
|
|
146
|
+
template = template.split(seed.exampleValue).join(`{${seed.paramName}}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return template;
|
|
150
|
+
}
|
|
151
|
+
function explainReproducibility(req) {
|
|
152
|
+
const parts = [];
|
|
153
|
+
if (req.isXHR)
|
|
154
|
+
parts.push("real XHR/fetch request");
|
|
155
|
+
if (req.contentType?.includes("json"))
|
|
156
|
+
parts.push("returns JSON");
|
|
157
|
+
if (req.score >= 80)
|
|
158
|
+
parts.push("high relevance score");
|
|
159
|
+
if (req.method === "GET")
|
|
160
|
+
parts.push("stateless GET — no session dependency");
|
|
161
|
+
if (req.method === "POST" && req.requestBody)
|
|
162
|
+
parts.push("POST with known payload structure");
|
|
163
|
+
return parts.length > 0
|
|
164
|
+
? `Reproducible: ${parts.join(", ")}`
|
|
165
|
+
: "Captured as a real network request with structured response";
|
|
166
|
+
}
|
|
167
|
+
function recordFailedEndpoints(agentResult, state) {
|
|
168
|
+
for (const step of agentResult.steps) {
|
|
169
|
+
if (step.toolName === "fetch_url" && step.params.url) {
|
|
170
|
+
const url = String(step.params.url);
|
|
171
|
+
if (!state.triedEndpoints.has(url)) {
|
|
172
|
+
state.triedEndpoints.set(url, step.result.success
|
|
173
|
+
? "returned data but not structured/useful enough"
|
|
174
|
+
: String(step.result.error ?? "request failed"));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=candidate-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candidate-evaluator.js","sourceRoot":"","sources":["../../src/agent/candidate-evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ToolResult } from "../tools/base";
|
|
2
|
+
import type { LLMDecision } from "./parser";
|
|
3
|
+
import type { DiscoveryState } from "./discovery-state";
|
|
4
|
+
export interface EnforcementResult {
|
|
5
|
+
blocked: boolean;
|
|
6
|
+
result: ToolResult;
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
/** Check pre-execution enforcement rules. Returns null if the action is allowed. */
|
|
10
|
+
export declare function checkEnforcement(decision: LLMDecision, state: DiscoveryState): EnforcementResult | null;
|
|
11
|
+
//# sourceMappingURL=enforcement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enforcement.d.ts","sourceRoot":"","sources":["../../src/agent/enforcement.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,oFAAoF;AACpF,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,cAAc,GACpB,iBAAiB,GAAG,IAAI,CA8B1B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ─── Pre-execution enforcement ───────────────────────────────────────────────
|
|
3
|
+
// Mechanical guardrails that prevent the agent from wasting steps on dead ends.
|
|
4
|
+
// Runs BEFORE tool execution — blocks the action and returns feedback.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.checkEnforcement = checkEnforcement;
|
|
7
|
+
const FETCH_WITHOUT_SIGNAL_LIMIT = 5;
|
|
8
|
+
function extractHostname(url) {
|
|
9
|
+
try {
|
|
10
|
+
return new URL(url).hostname;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** Check pre-execution enforcement rules. Returns null if the action is allowed. */
|
|
17
|
+
function checkEnforcement(decision, state) {
|
|
18
|
+
// Dead/exhausted domain check for navigate/fetch_url
|
|
19
|
+
if ((decision.tool_name === "navigate" || decision.tool_name === "fetch_url") && decision.params.url) {
|
|
20
|
+
const hostname = extractHostname(String(decision.params.url));
|
|
21
|
+
if (hostname && state.isDead(hostname)) {
|
|
22
|
+
return {
|
|
23
|
+
blocked: true,
|
|
24
|
+
result: { success: false, summary: `Domain blocked: connection error on previous attempt`, error: `Domain ${hostname} is permanently unreachable` },
|
|
25
|
+
message: `Domain ${hostname} is permanently unreachable (connection error on a previous attempt). Do not attempt to visit it again. Remove it from your plan and choose a different source.`,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (hostname && state.isExhausted(hostname)) {
|
|
29
|
+
return {
|
|
30
|
+
blocked: true,
|
|
31
|
+
result: { success: false, summary: `Domain exhausted: many steps without useful signal`, error: `Domain ${hostname} has been exhausted without finding useful data` },
|
|
32
|
+
message: `Domain ${hostname} has been explored extensively without finding useful API signal. Try a completely different site or source.`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Consecutive fetch_url without signal limit
|
|
37
|
+
if (decision.tool_name === "fetch_url" && state.consecutiveFetchWithoutSignal >= FETCH_WITHOUT_SIGNAL_LIMIT) {
|
|
38
|
+
return {
|
|
39
|
+
blocked: true,
|
|
40
|
+
result: { success: false, summary: `fetch_url blocked: ${FETCH_WITHOUT_SIGNAL_LIMIT} consecutive calls without useful signal`, error: "fetch limit reached" },
|
|
41
|
+
message: `You have made ${FETCH_WITHOUT_SIGNAL_LIMIT} consecutive fetch_url calls without finding useful data. Stop probing URLs and change approach: navigate to a real website, interact with it, and inspect network traffic or JS source to find real endpoints.`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=enforcement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enforcement.js","sourceRoot":"","sources":["../../src/agent/enforcement.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,gFAAgF;AAChF,uEAAuE;;AAmBvE,4CAiCC;AA9CD,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAQrC,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,CAAC;QAAC,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC9D,CAAC;AAED,oFAAoF;AACpF,SAAgB,gBAAgB,CAC9B,QAAqB,EACrB,KAAqB;IAErB,qDAAqD;IACrD,IAAI,CAAC,QAAQ,CAAC,SAAS,KAAK,UAAU,IAAI,QAAQ,CAAC,SAAS,KAAK,WAAW,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACrG,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,sDAAsD,EAAE,KAAK,EAAE,UAAU,QAAQ,6BAA6B,EAAE;gBACnJ,OAAO,EAAE,UAAU,QAAQ,iKAAiK;aAC7L,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,oDAAoD,EAAE,KAAK,EAAE,UAAU,QAAQ,iDAAiD,EAAE;gBACrK,OAAO,EAAE,UAAU,QAAQ,8GAA8G;aAC1I,CAAC;QACJ,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,IAAI,QAAQ,CAAC,SAAS,KAAK,WAAW,IAAI,KAAK,CAAC,6BAA6B,IAAI,0BAA0B,EAAE,CAAC;QAC5G,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,0BAA0B,0CAA0C,EAAE,KAAK,EAAE,qBAAqB,EAAE;YAC7J,OAAO,EAAE,iBAAiB,0BAA0B,iNAAiN;SACtQ,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ToolRegistry } from "../registry";
|
|
2
|
+
import type { ToolContext } from "../tools/base";
|
|
3
|
+
import type { ConversationHistory } from "./conversation";
|
|
4
|
+
import type { SeedValue } from "../types";
|
|
5
|
+
export interface ExtractionResult {
|
|
6
|
+
data: string;
|
|
7
|
+
url: string;
|
|
8
|
+
}
|
|
9
|
+
/** Try to extract data from the current page using multiple strategies. */
|
|
10
|
+
export declare function tryExtraction(pageUrl: string, _seedValues: SeedValue[], registry: ToolRegistry, ctx: ToolContext, conversation: ConversationHistory): Promise<ExtractionResult | null>;
|
|
11
|
+
//# sourceMappingURL=extraction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extraction.d.ts","sourceRoot":"","sources":["../../src/agent/extraction.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;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAWD,2EAA2E;AAC3E,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,SAAS,EAAE,EACxB,QAAQ,EAAE,YAAY,EACtB,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAgClC"}
|