zan-browser 3.0.66 → 3.0.69

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.
Files changed (37) hide show
  1. package/dist/agent/agent.d.ts +0 -1
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/agent.js +39 -133
  4. package/dist/agent/agent.js.map +1 -1
  5. package/dist/agent/candidate-evaluator.d.ts +13 -0
  6. package/dist/agent/candidate-evaluator.d.ts.map +1 -0
  7. package/dist/agent/candidate-evaluator.js +223 -0
  8. package/dist/agent/candidate-evaluator.js.map +1 -0
  9. package/dist/agent/enforcement.d.ts +11 -0
  10. package/dist/agent/enforcement.d.ts.map +1 -0
  11. package/dist/agent/enforcement.js +46 -0
  12. package/dist/agent/enforcement.js.map +1 -0
  13. package/dist/agent/extraction.d.ts +11 -0
  14. package/dist/agent/extraction.d.ts.map +1 -0
  15. package/dist/agent/extraction.js +96 -0
  16. package/dist/agent/extraction.js.map +1 -0
  17. package/dist/agent/goal-builder.d.ts +11 -0
  18. package/dist/agent/goal-builder.d.ts.map +1 -0
  19. package/dist/agent/goal-builder.js +57 -0
  20. package/dist/agent/goal-builder.js.map +1 -0
  21. package/dist/agent/orchestrator.d.ts +1 -6
  22. package/dist/agent/orchestrator.d.ts.map +1 -1
  23. package/dist/agent/orchestrator.js +40 -347
  24. package/dist/agent/orchestrator.js.map +1 -1
  25. package/dist/agent/pre-validator.d.ts +19 -0
  26. package/dist/agent/pre-validator.d.ts.map +1 -0
  27. package/dist/agent/pre-validator.js +201 -0
  28. package/dist/agent/pre-validator.js.map +1 -0
  29. package/dist/agent/replicability-checker.d.ts +9 -0
  30. package/dist/agent/replicability-checker.d.ts.map +1 -0
  31. package/dist/agent/replicability-checker.js +91 -0
  32. package/dist/agent/replicability-checker.js.map +1 -0
  33. package/dist/agent/state-updater.d.ts +19 -0
  34. package/dist/agent/state-updater.d.ts.map +1 -0
  35. package/dist/agent/state-updater.js +101 -0
  36. package/dist/agent/state-updater.js.map +1 -0
  37. package/package.json +1 -1
@@ -40,7 +40,6 @@ export declare class AgentLoop {
40
40
  private maybeSynthetic;
41
41
  private appendStepResult;
42
42
  private url;
43
- private extractHostname;
44
43
  private result;
45
44
  }
46
45
  //# sourceMappingURL=agent.d.ts.map
@@ -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,EAAqB,MAAM,mBAAmB,CAAC;AAgBtE,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;IAiMpD,OAAO,CAAC,mBAAmB;YAeb,MAAM;IA8CpB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,GAAG;IAEX,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,MAAM;CAGf"}
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"}
@@ -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 discovery_state_1 = require("./discovery-state");
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
- // 4. PRE-EXECUTION enforcement ─────────────────────────────────────────
75
- // 4a. Dead/exhausted domain check for navigate/fetch_url
76
- if ((decision.tool_name === "navigate" || decision.tool_name === "fetch_url") && decision.params.url) {
77
- const hostname = this.extractHostname(String(decision.params.url));
78
- if (hostname && this.state.isDead(hostname)) {
79
- const blocked = { success: false, summary: `Domain blocked: connection error on previous attempt`, error: `Domain ${hostname} is permanently unreachable` };
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
- // 5. Execute tool ──────────────────────────────────────────────────────
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
- // 6. POST-EXECUTION state updates ──────────────────────────────────────
109
- const isNavOrFetch = decision.tool_name === "navigate" || decision.tool_name === "fetch_url";
110
- const actionUrl = isNavOrFetch ? String(decision.params.url ?? "") : "";
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
- // 8. Feed result + progress summary
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
- // 8b. Auto-observe after navigating to a seed-matching URL
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
- try {
201
- const obsRes = await this.registry.execute("observe", {}, this.ctx);
202
- if (obsRes.success) {
203
- progress(`Auto-observe on seed page: ${this.url()}`);
204
- 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.`);
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
  }
@@ -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,CAsKpF"}
@@ -0,0 +1,223 @@
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
+ // When no seed values, filter out candidates whose response lacks structured data
122
+ const hasSeeds = seedValues.length > 0 && seedValues.some((s) => s.exampleValue.length > 0);
123
+ if (!hasSeeds) {
124
+ const relevant = viable.filter((r) => {
125
+ if (!r.responseBody)
126
+ return true; // keep if no body to check
127
+ return hasStructuredResponse(r.responseBody);
128
+ });
129
+ // Only apply filter if it doesn't eliminate all candidates
130
+ if (relevant.length > 0) {
131
+ viable.length = 0;
132
+ viable.push(...relevant);
133
+ }
134
+ }
135
+ // Prefer endpoints where seed value appears in URL (parameterizable), then by score
136
+ viable.sort((a, b) => {
137
+ const aHasSeed = seeds.some((sv) => a.url.toLowerCase().includes(sv));
138
+ const bHasSeed = seeds.some((sv) => b.url.toLowerCase().includes(sv));
139
+ if (aHasSeed && !bHasSeed)
140
+ return -1;
141
+ if (!aHasSeed && bHasSeed)
142
+ return 1;
143
+ return b.score - a.score;
144
+ });
145
+ const best = viable[0];
146
+ // Build URL template by replacing seed values
147
+ const urlTemplate = buildUrlTemplate(best.url, seedValues);
148
+ return {
149
+ request: best,
150
+ urlTemplate,
151
+ score: best.score,
152
+ reproducible: true,
153
+ whyReproducible: explainReproducibility(best),
154
+ };
155
+ }
156
+ /** Check if a response body contains structured data (language-agnostic). */
157
+ function hasStructuredResponse(body) {
158
+ // Try JSON parse
159
+ try {
160
+ const parsed = JSON.parse(body);
161
+ return hasStructure(parsed);
162
+ }
163
+ catch { /* not JSON */ }
164
+ // Non-JSON and short → likely metadata/config
165
+ if (body.length < 500)
166
+ return false;
167
+ // Non-JSON but substantial → keep as candidate
168
+ return true;
169
+ }
170
+ function hasStructure(value) {
171
+ if (Array.isArray(value)) {
172
+ if (value.length >= 2)
173
+ return true;
174
+ // Single-item array — check the item
175
+ return value.length === 1 && hasStructure(value[0]);
176
+ }
177
+ if (value && typeof value === "object") {
178
+ const keys = Object.keys(value);
179
+ if (keys.length >= 3)
180
+ return true;
181
+ // Check nested values
182
+ return Object.values(value).some((v) => hasStructure(v));
183
+ }
184
+ return false;
185
+ }
186
+ function buildUrlTemplate(url, seedValues) {
187
+ let template = url;
188
+ for (const seed of seedValues) {
189
+ if (template.includes(seed.exampleValue)) {
190
+ template = template.split(seed.exampleValue).join(`{${seed.paramName}}`);
191
+ }
192
+ }
193
+ return template;
194
+ }
195
+ function explainReproducibility(req) {
196
+ const parts = [];
197
+ if (req.isXHR)
198
+ parts.push("real XHR/fetch request");
199
+ if (req.contentType?.includes("json"))
200
+ parts.push("returns JSON");
201
+ if (req.score >= 80)
202
+ parts.push("high relevance score");
203
+ if (req.method === "GET")
204
+ parts.push("stateless GET — no session dependency");
205
+ if (req.method === "POST" && req.requestBody)
206
+ parts.push("POST with known payload structure");
207
+ return parts.length > 0
208
+ ? `Reproducible: ${parts.join(", ")}`
209
+ : "Captured as a real network request with structured response";
210
+ }
211
+ function recordFailedEndpoints(agentResult, state) {
212
+ for (const step of agentResult.steps) {
213
+ if (step.toolName === "fetch_url" && step.params.url) {
214
+ const url = String(step.params.url);
215
+ if (!state.triedEndpoints.has(url)) {
216
+ state.triedEndpoints.set(url, step.result.success
217
+ ? "returned data but not structured/useful enough"
218
+ : String(step.result.error ?? "request failed"));
219
+ }
220
+ }
221
+ }
222
+ }
223
+ //# 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