zan-browser 2.0.7 → 3.0.0

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 (103) hide show
  1. package/dist/agent/agent.d.ts +42 -0
  2. package/dist/agent/agent.d.ts.map +1 -0
  3. package/dist/agent/agent.js +157 -0
  4. package/dist/agent/agent.js.map +1 -0
  5. package/dist/agent/conversation.d.ts +22 -0
  6. package/dist/agent/conversation.d.ts.map +1 -0
  7. package/dist/agent/conversation.js +47 -0
  8. package/dist/agent/conversation.js.map +1 -0
  9. package/dist/agent/prompt.d.ts +3 -0
  10. package/dist/agent/prompt.d.ts.map +1 -0
  11. package/dist/agent/prompt.js +73 -0
  12. package/dist/agent/prompt.js.map +1 -0
  13. package/dist/ai.d.ts +1 -1
  14. package/dist/ai.d.ts.map +1 -1
  15. package/dist/ai.js +26 -1
  16. package/dist/ai.js.map +1 -1
  17. package/dist/browser.d.ts +0 -1
  18. package/dist/browser.d.ts.map +1 -1
  19. package/dist/browser.js +2 -10
  20. package/dist/browser.js.map +1 -1
  21. package/dist/index.d.ts +19 -2
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +35 -3
  24. package/dist/index.js.map +1 -1
  25. package/dist/navigator.d.ts +1 -0
  26. package/dist/navigator.d.ts.map +1 -1
  27. package/dist/navigator.js +58 -3
  28. package/dist/navigator.js.map +1 -1
  29. package/dist/observer.d.ts +5 -1
  30. package/dist/observer.d.ts.map +1 -1
  31. package/dist/observer.js +23 -3
  32. package/dist/observer.js.map +1 -1
  33. package/dist/registry.d.ts +20 -0
  34. package/dist/registry.d.ts.map +1 -0
  35. package/dist/registry.js +69 -0
  36. package/dist/registry.js.map +1 -0
  37. package/dist/session.d.ts +12 -27
  38. package/dist/session.d.ts.map +1 -1
  39. package/dist/session.js +74 -194
  40. package/dist/session.js.map +1 -1
  41. package/dist/tools/base.d.ts +37 -0
  42. package/dist/tools/base.d.ts.map +1 -0
  43. package/dist/tools/base.js +6 -0
  44. package/dist/tools/base.js.map +1 -0
  45. package/dist/tools/browser/click.d.ts +8 -0
  46. package/dist/tools/browser/click.d.ts.map +1 -0
  47. package/dist/tools/browser/click.js +42 -0
  48. package/dist/tools/browser/click.js.map +1 -0
  49. package/dist/tools/browser/eval_js.d.ts +8 -0
  50. package/dist/tools/browser/eval_js.d.ts.map +1 -0
  51. package/dist/tools/browser/eval_js.js +46 -0
  52. package/dist/tools/browser/eval_js.js.map +1 -0
  53. package/dist/tools/browser/fill.d.ts +8 -0
  54. package/dist/tools/browser/fill.d.ts.map +1 -0
  55. package/dist/tools/browser/fill.js +48 -0
  56. package/dist/tools/browser/fill.js.map +1 -0
  57. package/dist/tools/browser/navigate.d.ts +8 -0
  58. package/dist/tools/browser/navigate.d.ts.map +1 -0
  59. package/dist/tools/browser/navigate.js +40 -0
  60. package/dist/tools/browser/navigate.js.map +1 -0
  61. package/dist/tools/browser/screenshot.d.ts +8 -0
  62. package/dist/tools/browser/screenshot.d.ts.map +1 -0
  63. package/dist/tools/browser/screenshot.js +27 -0
  64. package/dist/tools/browser/screenshot.js.map +1 -0
  65. package/dist/tools/browser/scroll.d.ts +8 -0
  66. package/dist/tools/browser/scroll.d.ts.map +1 -0
  67. package/dist/tools/browser/scroll.js +36 -0
  68. package/dist/tools/browser/scroll.js.map +1 -0
  69. package/dist/tools/browser/wait.d.ts +8 -0
  70. package/dist/tools/browser/wait.d.ts.map +1 -0
  71. package/dist/tools/browser/wait.js +27 -0
  72. package/dist/tools/browser/wait.js.map +1 -0
  73. package/dist/tools/network/download_file.d.ts +8 -0
  74. package/dist/tools/network/download_file.d.ts.map +1 -0
  75. package/dist/tools/network/download_file.js +68 -0
  76. package/dist/tools/network/download_file.js.map +1 -0
  77. package/dist/tools/network/fetch_url.d.ts +8 -0
  78. package/dist/tools/network/fetch_url.d.ts.map +1 -0
  79. package/dist/tools/network/fetch_url.js +68 -0
  80. package/dist/tools/network/fetch_url.js.map +1 -0
  81. package/dist/tools/network/read_network_logs.d.ts +8 -0
  82. package/dist/tools/network/read_network_logs.d.ts.map +1 -0
  83. package/dist/tools/network/read_network_logs.js +64 -0
  84. package/dist/tools/network/read_network_logs.js.map +1 -0
  85. package/dist/tools/network/web_search.d.ts +8 -0
  86. package/dist/tools/network/web_search.d.ts.map +1 -0
  87. package/dist/tools/network/web_search.js +63 -0
  88. package/dist/tools/network/web_search.js.map +1 -0
  89. package/dist/tools/page/extract_dom.d.ts +8 -0
  90. package/dist/tools/page/extract_dom.d.ts.map +1 -0
  91. package/dist/tools/page/extract_dom.js +37 -0
  92. package/dist/tools/page/extract_dom.js.map +1 -0
  93. package/dist/tools/page/observe.d.ts +8 -0
  94. package/dist/tools/page/observe.d.ts.map +1 -0
  95. package/dist/tools/page/observe.js +37 -0
  96. package/dist/tools/page/observe.js.map +1 -0
  97. package/dist/tools/page/scrape.d.ts +8 -0
  98. package/dist/tools/page/scrape.d.ts.map +1 -0
  99. package/dist/tools/page/scrape.js +75 -0
  100. package/dist/tools/page/scrape.js.map +1 -0
  101. package/dist/types.d.ts +4 -0
  102. package/dist/types.d.ts.map +1 -1
  103. package/package.json +1 -1
@@ -0,0 +1,42 @@
1
+ import type { ToolRegistry } from "../registry";
2
+ import type { ToolContext, ToolResult } from "../tools/base";
3
+ import type { SeedValue, CapturedRequest } from "../types";
4
+ export interface AgentConfig {
5
+ goal: string;
6
+ seedValues?: SeedValue[];
7
+ maxSteps?: number;
8
+ model?: string;
9
+ onProgress?: (msg: string) => void;
10
+ }
11
+ export interface AgentStepRecord {
12
+ step: number;
13
+ toolName: string;
14
+ params: Record<string, unknown>;
15
+ result: ToolResult;
16
+ reasoning: string;
17
+ }
18
+ export interface AgentResult {
19
+ success: boolean;
20
+ steps: AgentStepRecord[];
21
+ finalUrl: string;
22
+ reason: string;
23
+ capturedRequests: CapturedRequest[];
24
+ }
25
+ export declare class AgentLoop {
26
+ private client;
27
+ private model;
28
+ private registry;
29
+ private ctx;
30
+ private conversation;
31
+ private systemPrompt;
32
+ constructor(registry: ToolRegistry, ctx: ToolContext, model?: string);
33
+ run(config: AgentConfig): Promise<AgentResult>;
34
+ private askLLM;
35
+ private parseDecision;
36
+ /** Fallback: extract params from flat action object (legacy format compat) */
37
+ private extractLegacyParams;
38
+ private getCurrentUrl;
39
+ private hasUsefulCaptures;
40
+ private buildResult;
41
+ }
42
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAM3D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,eAAe,EAAE,CAAC;CACrC;AAaD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,YAAY,CAAS;gBAG3B,QAAQ,EAAE,YAAY,EACtB,GAAG,EAAE,WAAW,EAChB,KAAK,CAAC,EAAE,MAAM;IAUV,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YAoFtC,MAAM;IAkBpB,OAAO,CAAC,aAAa;IAyBrB,8EAA8E;IAC9E,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,WAAW;CASpB"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ // ─── Agent Loop ──────────────────────────────────────────────────────────────
3
+ // observe → LLM decides → registry.execute() → repeat
4
+ // Replaces SmartNavigator. No hardcoded strategies — the LLM decides everything.
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AgentLoop = void 0;
10
+ const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
11
+ const conversation_1 = require("./conversation");
12
+ const prompt_1 = require("./prompt");
13
+ const FALLBACK_MODEL = "claude-haiku-4-5-20251001";
14
+ // ─── Agent ───────────────────────────────────────────────────────────────────
15
+ class AgentLoop {
16
+ client;
17
+ model;
18
+ registry;
19
+ ctx;
20
+ conversation;
21
+ systemPrompt;
22
+ constructor(registry, ctx, model) {
23
+ this.registry = registry;
24
+ this.ctx = ctx;
25
+ this.model = model ?? ctx.aiModel ?? FALLBACK_MODEL;
26
+ this.client = new sdk_1.default({ apiKey: ctx.anthropicApiKey });
27
+ this.conversation = new conversation_1.ConversationHistory();
28
+ this.systemPrompt = (0, prompt_1.buildSystemPrompt)(registry);
29
+ }
30
+ async run(config) {
31
+ const maxSteps = config.maxSteps ?? 15;
32
+ const progress = config.onProgress ?? (() => { });
33
+ const steps = [];
34
+ // Build the initial task message
35
+ const seedLines = config.seedValues?.length
36
+ ? `\nSeed values:\n${config.seedValues.map((s) => ` • ${s.paramName} (${s.description}): "${s.exampleValue}"`).join("\n")}`
37
+ : "";
38
+ this.conversation.append("user", `NAVIGATION TASK\nGoal: ${config.goal}\nStep budget: ${maxSteps}${seedLines}\n\nStart by observing the page.`);
39
+ for (let i = 0; i < maxSteps; i++) {
40
+ progress(`Step ${i + 1}/${maxSteps}`);
41
+ // ── 1. Ask LLM what to do ──────────────────────────────────────────
42
+ const decision = await this.askLLM();
43
+ // ── 2. Terminal states ─────────────────────────────────────────────
44
+ if (decision.data_found && decision.tool_name !== "eval_js") {
45
+ progress("Agent signalled data_found — stopping");
46
+ return this.buildResult(true, steps, decision.reasoning);
47
+ }
48
+ if (decision.tool_name === "done") {
49
+ progress("Agent signalled done");
50
+ return this.buildResult(true, steps, decision.reasoning);
51
+ }
52
+ if (decision.tool_name === "impossible") {
53
+ progress(`Agent: impossible — ${decision.reasoning}`);
54
+ return this.buildResult(false, steps, decision.reasoning);
55
+ }
56
+ // ── 3. Execute the tool ────────────────────────────────────────────
57
+ const result = await this.registry.execute(decision.tool_name, decision.params, this.ctx);
58
+ steps.push({
59
+ step: i + 1,
60
+ toolName: decision.tool_name,
61
+ params: decision.params,
62
+ result,
63
+ reasoning: decision.reasoning,
64
+ });
65
+ progress(`Step ${i + 1}: ${decision.tool_name} → ${result.success ? "ok" : "error"}`);
66
+ // ── 4. Feed result back to conversation ────────────────────────────
67
+ // For screenshot tool, include the image in the message
68
+ if (decision.tool_name === "screenshot" && result.success && result.data) {
69
+ const screenshotData = result.data;
70
+ this.conversation.append("user", [
71
+ {
72
+ type: "image",
73
+ source: { type: "base64", media_type: "image/jpeg", data: screenshotData.base64 },
74
+ },
75
+ { type: "text", text: `Screenshot captured. URL: ${this.getCurrentUrl()}\nDecide next action.` },
76
+ ]);
77
+ }
78
+ else {
79
+ const stepContext = `Tool: ${decision.tool_name}\nResult: ${result.summary}\nURL: ${this.getCurrentUrl()}`;
80
+ this.conversation.append("user", stepContext);
81
+ }
82
+ // ── 5. Post-execution data_found check (for eval_js) ──────────────
83
+ if (decision.data_found && decision.tool_name === "eval_js") {
84
+ progress("Agent signalled data_found via eval_js — stopping");
85
+ return this.buildResult(true, steps, decision.reasoning);
86
+ }
87
+ }
88
+ // Max steps exhausted
89
+ progress(`Completed ${maxSteps} steps`);
90
+ return this.buildResult(this.hasUsefulCaptures(), steps, `Reached max steps (${maxSteps})`);
91
+ }
92
+ // ─── Private: Ask LLM for next decision ────────────────────────────────────
93
+ async askLLM() {
94
+ const messages = this.conversation.toMessages();
95
+ const response = await this.client.messages.create({
96
+ model: this.model,
97
+ max_tokens: 800,
98
+ system: this.systemPrompt,
99
+ messages,
100
+ });
101
+ const text = response.content[0].type === "text" ? response.content[0].text : "{}";
102
+ // Store assistant response in conversation
103
+ this.conversation.append("assistant", text);
104
+ return this.parseDecision(text);
105
+ }
106
+ parseDecision(raw) {
107
+ try {
108
+ const cleaned = raw.replace(/```json\n?/g, "").replace(/```\n?/g, "").trim();
109
+ const obj = JSON.parse(cleaned);
110
+ return {
111
+ memory: obj.memory ?? "",
112
+ next_goal: obj.next_goal ?? "",
113
+ reasoning: obj.reasoning ?? String(obj.reason ?? ""),
114
+ data_found: obj.data_found === true,
115
+ tool_name: obj.tool_name ?? obj.type ?? "impossible",
116
+ params: obj.params ?? this.extractLegacyParams(obj),
117
+ };
118
+ }
119
+ catch {
120
+ return {
121
+ memory: "",
122
+ next_goal: "",
123
+ reasoning: `Failed to parse LLM response: ${raw.slice(0, 100)}`,
124
+ data_found: false,
125
+ tool_name: "impossible",
126
+ params: {},
127
+ };
128
+ }
129
+ }
130
+ /** Fallback: extract params from flat action object (legacy format compat) */
131
+ extractLegacyParams(obj) {
132
+ const params = {};
133
+ for (const key of ["elementId", "value", "direction", "amount", "ms", "url", "code", "query", "selector", "prompt"]) {
134
+ if (obj[key] !== undefined)
135
+ params[key] = obj[key];
136
+ }
137
+ return params;
138
+ }
139
+ // ─── Private: Helpers ──────────────────────────────────────────────────────
140
+ getCurrentUrl() {
141
+ return this.ctx.page?.url() ?? "unknown";
142
+ }
143
+ hasUsefulCaptures() {
144
+ return (this.ctx.interceptor?.getUseful(5).length ?? 0) > 0;
145
+ }
146
+ buildResult(success, steps, reason) {
147
+ return {
148
+ success,
149
+ steps,
150
+ finalUrl: this.getCurrentUrl(),
151
+ reason,
152
+ capturedRequests: this.ctx.interceptor?.getUseful(3) ?? [],
153
+ };
154
+ }
155
+ }
156
+ exports.AgentLoop = AgentLoop;
157
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type Anthropic from "@anthropic-ai/sdk";
2
+ export interface ConversationMessage {
3
+ role: "user" | "assistant";
4
+ content: string | Anthropic.MessageParam["content"];
5
+ }
6
+ export declare class ConversationHistory {
7
+ private messages;
8
+ /** Append a message to the history. */
9
+ append(role: "user" | "assistant", content: string | Anthropic.MessageParam["content"]): void;
10
+ /** Return the pruned message list for the Anthropic API. */
11
+ toMessages(): Anthropic.MessageParam[];
12
+ /** Number of messages in history (before pruning). */
13
+ get length(): number;
14
+ /** Clear all history. */
15
+ clear(): void;
16
+ /**
17
+ * Keep the first message (task context, always preserved) +
18
+ * the last MAX_HISTORY_PAIRS user+assistant pairs.
19
+ */
20
+ private prune;
21
+ }
22
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/agent/conversation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAM/C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;CACrD;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAA6B;IAE7C,uCAAuC;IACvC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI;IAI7F,4DAA4D;IAC5D,UAAU,IAAI,SAAS,CAAC,YAAY,EAAE;IAQtC,sDAAsD;IACtD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,yBAAyB;IACzB,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,OAAO,CAAC,KAAK;CAQd"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ // ─── Multi-turn conversation history with sliding-window pruning ─────────────
3
+ // Keeps the first message (task context) + last N pairs to stay within
4
+ // the LLM context window. Mirrors the Notte pattern.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConversationHistory = void 0;
7
+ // How many user+assistant pairs to keep beyond the first message.
8
+ // 6 pairs = 12 messages + 1 initial = 13 messages max.
9
+ const MAX_HISTORY_PAIRS = 6;
10
+ class ConversationHistory {
11
+ messages = [];
12
+ /** Append a message to the history. */
13
+ append(role, content) {
14
+ this.messages.push({ role, content });
15
+ }
16
+ /** Return the pruned message list for the Anthropic API. */
17
+ toMessages() {
18
+ const pruned = this.prune();
19
+ return pruned.map((m) => ({
20
+ role: m.role,
21
+ content: m.content,
22
+ }));
23
+ }
24
+ /** Number of messages in history (before pruning). */
25
+ get length() {
26
+ return this.messages.length;
27
+ }
28
+ /** Clear all history. */
29
+ clear() {
30
+ this.messages = [];
31
+ }
32
+ /**
33
+ * Keep the first message (task context, always preserved) +
34
+ * the last MAX_HISTORY_PAIRS user+assistant pairs.
35
+ */
36
+ prune() {
37
+ const maxMessages = 1 + MAX_HISTORY_PAIRS * 2;
38
+ if (this.messages.length <= maxMessages)
39
+ return [...this.messages];
40
+ return [
41
+ this.messages[0],
42
+ ...this.messages.slice(-(MAX_HISTORY_PAIRS * 2)),
43
+ ];
44
+ }
45
+ }
46
+ exports.ConversationHistory = ConversationHistory;
47
+ //# sourceMappingURL=conversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/agent/conversation.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,uEAAuE;AACvE,qDAAqD;;;AAIrD,kEAAkE;AAClE,uDAAuD;AACvD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAO5B,MAAa,mBAAmB;IACtB,QAAQ,GAA0B,EAAE,CAAC;IAE7C,uCAAuC;IACvC,MAAM,CAAC,IAA0B,EAAE,OAAmD;QACpF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,4DAA4D;IAC5D,UAAU;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAA6B,CAAC;IAClC,CAAC;IAED,sDAAsD;IACtD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,yBAAyB;IACzB,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED;;;OAGG;IACK,KAAK;QACX,MAAM,WAAW,GAAG,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,WAAW;YAAE,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnE,OAAO;YACL,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChB,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;SACjD,CAAC;IACJ,CAAC;CACF;AAvCD,kDAuCC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolRegistry } from "../registry";
2
+ export declare function buildSystemPrompt(registry: ToolRegistry): string;
3
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAgEhE"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ // ─── Dynamic system prompt generation ────────────────────────────────────────
3
+ // Builds the system prompt from the registered tools + the observer's own
4
+ // ActionSpace format description. Adding a new tool or changing the observer
5
+ // ID scheme automatically updates the prompt — nothing is hardcoded.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.buildSystemPrompt = buildSystemPrompt;
8
+ const observer_1 = require("../observer");
9
+ function buildSystemPrompt(registry) {
10
+ const toolsBlock = registry.generateToolsBlock();
11
+ const actionSpaceFormat = (0, observer_1.describeActionSpaceFormat)();
12
+ return `You are a browser navigation agent. Your mission is to discover APIs by navigating websites exactly like a real human user, triggering the network requests that return the data described in the navigation goal.
13
+
14
+ You have access to tools that let you observe the page, interact with elements, inspect network traffic, search the web, and call APIs directly.
15
+
16
+ ─── ActionSpace Format ────────────────────────────────────────────────────────
17
+
18
+ ${actionSpaceFormat}
19
+
20
+ ─── XHR Scores ────────────────────────────────────────────────────────────────
21
+
22
+ Use "read_network_logs" to inspect captured requests. Each is scored 0–100:
23
+
24
+ 80–100 High-value data API — structured JSON, likely triggered by user action
25
+ 50–79 Potentially useful — API-shaped URL, JSON content type
26
+ 20–49 Low-signal — config, feature flags, initialization, analytics
27
+ 0–19 Noise — tracking pixels, CDN assets, fonts, thumbnails
28
+
29
+ The ↑ marker means the request fired within 2 seconds of your last action.
30
+
31
+ ─── ${toolsBlock} ────────────────────────────────────────────────────────────
32
+
33
+ ─── Response Format ───────────────────────────────────────────────────────────
34
+
35
+ Respond ONLY with valid JSON. No markdown, no code fences, no extra text.
36
+
37
+ {
38
+ "memory": "What I have tried, what worked, what failed, what I have ruled out",
39
+ "next_goal": "What the next action is specifically intended to achieve",
40
+ "reasoning": "Why I chose this tool over the other available alternatives",
41
+ "data_found": false,
42
+ "tool_name": "click",
43
+ "params": { "elementId": "B3" }
44
+ }
45
+
46
+ Special tool names for terminal states:
47
+ - "done" — goal achieved, terminate (params: {})
48
+ - "impossible" — goal cannot be achieved due to structural blocker (params: {})
49
+
50
+ Set data_found to true ONLY when high-score XHRs (≥ 60) confirm that the data
51
+ described in the goal has been captured. Setting data_found=true terminates the
52
+ session immediately — set it only when you are certain.
53
+
54
+ ─── Rules ─────────────────────────────────────────────────────────────────────
55
+
56
+ 1. Always observe first — run "observe" before any interaction on a new page.
57
+ 2. One tool call per response. Never list multiple tools.
58
+ 3. IDs reset every observation. Never reuse an ID from a prior step.
59
+ 4. data_found: true means immediate termination. Set it only when certain.
60
+ 5. Dismiss popups, cookie banners, and overlays before other interactions.
61
+ 6. If a modal is open, interact with it or close it before anything else.
62
+ 7. Use seed values verbatim when filling inputs — do not rephrase.
63
+ 8. If the page shows errors or "no results", return "done" to allow retry.
64
+ 9. Prefer clicking visible elements over direct URL navigation.
65
+ 10. If the page is still loading, use "wait" with 1500ms.
66
+ 11. Return "impossible" only for structural blockers: CAPTCHA, mandatory login.
67
+ 12. Use "web_search" when the goal is vague or the target URL is unknown.
68
+ 13. Use "fetch_url" to call a discovered API directly if the URL is known.
69
+ 14. Use "read_network_logs" to check if useful data has already been captured.
70
+ 15. Use "eval_js" to extract SSR data (window.__NEXT_DATA__, etc.).
71
+ 16. Reason like a real user. Click what you can see. Do not invent element IDs.`;
72
+ }
73
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,6EAA6E;AAC7E,qEAAqE;;AAKrE,8CAgEC;AAlED,0CAAwD;AAExD,SAAgB,iBAAiB,CAAC,QAAsB;IACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,kBAAkB,EAAE,CAAC;IACjD,MAAM,iBAAiB,GAAG,IAAA,oCAAyB,GAAE,CAAC;IAEtD,OAAO;;;;;;EAMP,iBAAiB;;;;;;;;;;;;;MAab,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gFAwCgE,CAAC;AACjF,CAAC"}
package/dist/ai.d.ts CHANGED
@@ -21,7 +21,7 @@ export interface StepInput {
21
21
  seedValues?: SeedValue[];
22
22
  actionResult?: string;
23
23
  }
24
- export declare const NAVIGATION_SYSTEM_PROMPT = "You are a browser navigation agent for zan-browser. Your mission is to discover APIs by navigating websites exactly like a real human user, triggering the network requests that return the data described in the navigation goal.\n\nYou observe the page as an ActionSpace \u2014 a compact, structured view of interactive elements \u2014 along with captured XHR requests scored by their relevance to the goal. You decide one action at a time.\n\n\u2500\u2500\u2500 ActionSpace Format \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nEach line represents one element:\n\n B1[:] \"Search flights\" \u2190 button, ID = B1\n L3[:] \"Flights > One-way\" \u2190 link, ID = L3\n I2[:] placeholder=\"From city\" \u2190 input field, ID = I2\n S4[:] selected=\"Economy\" \u2190 select element, ID = S4\n T1[:] \"Your message here\" \u2190 textarea, ID = T1\n C2[:] checked=false \"Newsletter\" \u2190 checkbox, ID = C2\n _[:] \"42 results found\" \u2190 non-interactive text (labels, headings)\n Scroll: 1400px hidden below \u2190 content hidden below the viewport\n\nIDs (B1, L3, I2 \u2026) are assigned fresh on every step.\nAn ID from a previous step is INVALID. Never reference a past ID.\nAlways read the current ActionSpace before choosing an element.\n\n\u2500\u2500\u2500 XHR Scores \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nEvery captured request is scored 0\u2013100 for relevance to the goal:\n\n 80\u2013100 High-value data API \u2014 structured JSON, likely triggered by user action\n 50\u201379 Potentially useful \u2014 API-shaped URL, JSON content type\n 20\u201349 Low-signal \u2014 config, feature flags, initialization, analytics\n 0\u201319 Noise \u2014 tracking pixels, CDN assets, fonts, thumbnails\n\nThe \u2191 marker means the request fired within 2 seconds of your last action.\nUse scores to judge whether useful data has already been captured before deciding to navigate further.\n\n\u2500\u2500\u2500 Navigation Strategies \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nload-capture\n The page likely fires data requests on load or on minimal interaction.\n Check if any captured XHR already has score \u2265 60 \u2014 if yes, set data_found=true.\n If not, look for controls (country selectors, filters, tabs, date pickers) that\n could trigger additional data loads. Avoid navigating away from the page.\n\nsearch\n The page has a search input. Find it, fill it with the seed value exactly as\n given, then handle any autocomplete dropdown (click the first relevant result).\n If no dropdown appears, submit with the form button or Enter. Confirm that\n post-submit XHRs with score \u2265 60 carry the target data.\n\nmulti-step\n Reaching the target content requires navigating through menus, tabs, sections,\n or filters. Move methodically toward the content described in the goal. After\n each action, check for new high-score XHRs. Stop as soon as target data is\n captured \u2014 do not continue navigating unnecessarily.\n\n\u2500\u2500\u2500 Response Format \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nRespond ONLY with valid JSON. No markdown, no code fences, no extra text.\n\n{\n \"memory\": \"What I have tried, what worked, what failed, what I have ruled out\",\n \"next_goal\": \"What the next action is specifically intended to achieve\",\n \"reasoning\": \"Why I chose this action over the other available alternatives\",\n \"data_found\": false,\n \"action\": {\n \"type\": \"click\" | \"fill\" | \"scroll\" | \"wait\" | \"navigate\" | \"done\" | \"impossible\",\n \"elementId\": \"B3\", \u2190 for click / fill \u2014 exact ID from current ActionSpace\n \"value\": \"search term\", \u2190 for fill only\n \"direction\": \"down\", \u2190 for scroll only (\"up\" | \"down\")\n \"amount\": 300, \u2190 optional pixels for scroll\n \"ms\": 1500, \u2190 for wait only\n \"url\": \"https://...\", \u2190 for navigate only\n \"reason\": \"one-line reason\"\n }\n}\n\nSet data_found to true ONLY when high-score XHRs (\u2265 60) confirm that the data\ndescribed in the goal has been captured. Setting data_found=true terminates the\nsession immediately \u2014 set it only when you are certain.\n\n\u2500\u2500\u2500 Rules \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n1. One action per response. Never list multiple actions.\n2. IDs reset every step. Never reuse an ID from a prior step.\n3. data_found: true means immediate termination. Set it only when certain.\n4. Dismiss popups, cookie banners, and overlays before other interactions.\n5. If a modal is open, interact with it or close it (Escape) before anything else.\n6. Use seed values verbatim when filling inputs \u2014 do not rephrase or approximate.\n7. If the page shows errors or \"no results\", return done to allow retry with the\n next seed value.\n8. Prefer clicking visible elements over direct URL navigation (navigate loses\n captured page state).\n9. If the page is still loading, return wait with ms: 1500.\n10. Return impossible only for structural blockers: CAPTCHA with no bypass,\n mandatory login with no credentials provided, feature not present on the site.\n11. Reason like a real user. Click what you can see. Do not invent element IDs.";
24
+ export declare const NAVIGATION_SYSTEM_PROMPT = "You are a browser navigation agent for zan-browser. Your mission is to discover APIs by navigating websites exactly like a real human user, triggering the network requests that return the data described in the navigation goal.\n\nYou observe the page as an ActionSpace \u2014 a compact, structured view of interactive elements \u2014 along with captured XHR requests scored by their relevance to the goal. You decide one action at a time.\n\n\u2500\u2500\u2500 ActionSpace Format \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nEach line represents one element:\n\n B1[:] \"Search flights\" \u2190 button, ID = B1\n L3[:] \"Flights > One-way\" \u2190 link, ID = L3\n I2[:] placeholder=\"From city\" \u2190 input field, ID = I2\n S4[:] selected=\"Economy\" \u2190 select element, ID = S4\n T1[:] \"Your message here\" \u2190 textarea, ID = T1\n C2[:] checked=false \"Newsletter\" \u2190 checkbox, ID = C2\n _[:] \"42 results found\" \u2190 non-interactive text (labels, headings)\n Scroll: 1400px hidden below \u2190 content hidden below the viewport\n\nIDs (B1, L3, I2 \u2026) are assigned fresh on every step.\nAn ID from a previous step is INVALID. Never reference a past ID.\nAlways read the current ActionSpace before choosing an element.\n\n\u2500\u2500\u2500 XHR Scores \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nEvery captured request is scored 0\u2013100 for relevance to the goal:\n\n 80\u2013100 High-value data API \u2014 structured JSON, likely triggered by user action\n 50\u201379 Potentially useful \u2014 API-shaped URL, JSON content type\n 20\u201349 Low-signal \u2014 config, feature flags, initialization, analytics\n 0\u201319 Noise \u2014 tracking pixels, CDN assets, fonts, thumbnails\n\nThe \u2191 marker means the request fired within 2 seconds of your last action.\nUse scores to judge whether useful data has already been captured before deciding to navigate further.\n\n\u2500\u2500\u2500 Navigation Strategies \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nload-capture\n The page likely fires data requests on load or on minimal interaction.\n Check if any captured XHR already has score \u2265 60 \u2014 if yes, set data_found=true.\n If not, look for controls (country selectors, filters, tabs, date pickers) that\n could trigger additional data loads. Avoid navigating away from the page.\n\nsearch\n The page has a search input. Find it, fill it with the seed value exactly as\n given, then handle any autocomplete dropdown (click the first relevant result).\n If no dropdown appears, submit with the form button or Enter. Confirm that\n post-submit XHRs with score \u2265 60 carry the target data.\n\nmulti-step\n Reaching the target content requires navigating through menus, tabs, sections,\n or filters. Move methodically toward the content described in the goal. After\n each action, check for new high-score XHRs. Stop as soon as target data is\n captured \u2014 do not continue navigating unnecessarily.\n\n\u2500\u2500\u2500 eval_js \u2014 In-page JavaScript Evaluation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nUse eval_js to extract data embedded directly in the page that will never appear\nas an XHR request. Common patterns:\n\n window.__NEXT_DATA__?.props?.pageProps \u2190 Next.js SSR props\n window.__NUXT__?.data \u2190 Nuxt SSR state\n window.__REDUX_STATE__ || window.__INITIAL_STATE__\n JSON.parse(document.getElementById('__data__').textContent ?? 'null')\n window.pageData || window.APP_CONFIG || window.dataLayer?.[0]\n\nThe code field must be a single JS expression that returns a value (string or\nJSON-serializable object). Use optional chaining to avoid throwing on missing keys.\n\nThe result is injected as the action result in the next step. If you are confident\nthat the result satisfies the navigation goal, set data_found=true in the same\nresponse \u2014 the navigator will execute the code and terminate immediately.\n\n\u2500\u2500\u2500 Response Format \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nRespond ONLY with valid JSON. No markdown, no code fences, no extra text.\n\n{\n \"memory\": \"What I have tried, what worked, what failed, what I have ruled out\",\n \"next_goal\": \"What the next action is specifically intended to achieve\",\n \"reasoning\": \"Why I chose this action over the other available alternatives\",\n \"data_found\": false,\n \"action\": {\n \"type\": \"click\" | \"fill\" | \"scroll\" | \"wait\" | \"navigate\" | \"eval_js\" | \"done\" | \"impossible\",\n \"elementId\": \"B3\", \u2190 for click / fill \u2014 exact ID from current ActionSpace\n \"value\": \"search term\", \u2190 for fill only\n \"direction\": \"down\", \u2190 for scroll only (\"up\" | \"down\")\n \"amount\": 300, \u2190 optional pixels for scroll\n \"ms\": 1500, \u2190 for wait only\n \"url\": \"https://...\", \u2190 for navigate only\n \"code\": \"window.__NEXT_DATA__?.props?.pageProps\", \u2190 for eval_js only\n \"reason\": \"one-line reason\"\n }\n}\n\nSet data_found to true ONLY when high-score XHRs (\u2265 60) confirm that the data\ndescribed in the goal has been captured. Setting data_found=true terminates the\nsession immediately \u2014 set it only when you are certain.\n\n\u2500\u2500\u2500 Rules \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n1. One action per response. Never list multiple actions.\n2. IDs reset every step. Never reuse an ID from a prior step.\n3. data_found: true means immediate termination. Set it only when certain.\n4. Dismiss popups, cookie banners, and overlays before other interactions.\n5. If a modal is open, interact with it or close it (Escape) before anything else.\n6. Use seed values verbatim when filling inputs \u2014 do not rephrase or approximate.\n7. If the page shows errors or \"no results\", return done to allow retry with the\n next seed value.\n8. Prefer clicking visible elements over direct URL navigation (navigate loses\n captured page state).\n9. If the page is still loading, return wait with ms: 1500.\n10. Return impossible only for structural blockers: CAPTCHA with no bypass,\n mandatory login with no credentials provided, feature not present on the site.\n11. Reason like a real user. Click what you can see. Do not invent element IDs.";
25
25
  export declare class AIClient {
26
26
  private client;
27
27
  private model;
package/dist/ai.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAWtF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAC;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,eAAO,MAAM,wBAAwB,+wNA6F2C,CAAC;AAIjF,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,SAAgB;IAU3C,gBAAgB,CACpB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAC;QAAC,cAAc,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC;IAgCxE,8BAA8B,CAClC,KAAK,EAAE,SAAS,EAChB,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAC;QAAC,cAAc,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC;IAwCxE,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,WAAW,CAAC;IAiEjB,oBAAoB,CACxB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,WAAW,CAAC;IAkEvB,OAAO,CAAC,gBAAgB;IAkCxB,OAAO,CAAC,sBAAsB;IA2B9B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,kBAAkB;IAyC1B,OAAO,CAAC,qBAAqB;IAkD7B,OAAO,CAAC,WAAW;CAcpB"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAWtF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAC;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,eAAO,MAAM,wBAAwB,6+PAgH2C,CAAC;AAIjF,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,SAAgB;IAU3C,gBAAgB,CACpB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAC;QAAC,cAAc,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC;IAgCxE,8BAA8B,CAClC,KAAK,EAAE,SAAS,EAChB,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAC;QAAC,cAAc,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC;IAwCxE,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,WAAW,CAAC;IAiEjB,oBAAoB,CACxB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,WAAW,CAAC;IAkEvB,OAAO,CAAC,gBAAgB;IAkCxB,OAAO,CAAC,sBAAsB;IA2B9B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,kBAAkB;IAyC1B,OAAO,CAAC,qBAAqB;IAwD7B,OAAO,CAAC,WAAW;CAcpB"}
package/dist/ai.js CHANGED
@@ -64,6 +64,24 @@ multi-step
64
64
  each action, check for new high-score XHRs. Stop as soon as target data is
65
65
  captured — do not continue navigating unnecessarily.
66
66
 
67
+ ─── eval_js — In-page JavaScript Evaluation ──────────────────────────────────
68
+
69
+ Use eval_js to extract data embedded directly in the page that will never appear
70
+ as an XHR request. Common patterns:
71
+
72
+ window.__NEXT_DATA__?.props?.pageProps ← Next.js SSR props
73
+ window.__NUXT__?.data ← Nuxt SSR state
74
+ window.__REDUX_STATE__ || window.__INITIAL_STATE__
75
+ JSON.parse(document.getElementById('__data__').textContent ?? 'null')
76
+ window.pageData || window.APP_CONFIG || window.dataLayer?.[0]
77
+
78
+ The code field must be a single JS expression that returns a value (string or
79
+ JSON-serializable object). Use optional chaining to avoid throwing on missing keys.
80
+
81
+ The result is injected as the action result in the next step. If you are confident
82
+ that the result satisfies the navigation goal, set data_found=true in the same
83
+ response — the navigator will execute the code and terminate immediately.
84
+
67
85
  ─── Response Format ───────────────────────────────────────────────────────────
68
86
 
69
87
  Respond ONLY with valid JSON. No markdown, no code fences, no extra text.
@@ -74,13 +92,14 @@ Respond ONLY with valid JSON. No markdown, no code fences, no extra text.
74
92
  "reasoning": "Why I chose this action over the other available alternatives",
75
93
  "data_found": false,
76
94
  "action": {
77
- "type": "click" | "fill" | "scroll" | "wait" | "navigate" | "done" | "impossible",
95
+ "type": "click" | "fill" | "scroll" | "wait" | "navigate" | "eval_js" | "done" | "impossible",
78
96
  "elementId": "B3", ← for click / fill — exact ID from current ActionSpace
79
97
  "value": "search term", ← for fill only
80
98
  "direction": "down", ← for scroll only ("up" | "down")
81
99
  "amount": 300, ← optional pixels for scroll
82
100
  "ms": 1500, ← for wait only
83
101
  "url": "https://...", ← for navigate only
102
+ "code": "window.__NEXT_DATA__?.props?.pageProps", ← for eval_js only
84
103
  "reason": "one-line reason"
85
104
  }
86
105
  }
@@ -413,6 +432,12 @@ Respond with JSON (no markdown, no code fences):
413
432
  url: String(obj.url ?? ""),
414
433
  reason: String(obj.reason ?? ""),
415
434
  };
435
+ case "eval_js":
436
+ return {
437
+ type: "eval_js",
438
+ code: String(obj.code ?? ""),
439
+ reason: String(obj.reason ?? ""),
440
+ };
416
441
  case "done":
417
442
  return { type: "done", reason: String(obj.reason ?? "") };
418
443
  case "impossible":
package/dist/ai.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
package/dist/browser.d.ts CHANGED
@@ -2,7 +2,6 @@ import type { BrowserConfig } from "./types";
2
2
  import { Session } from "./session";
3
3
  export declare class RensanBrowser {
4
4
  private config;
5
- private ai;
6
5
  constructor(config: BrowserConfig);
7
6
  newSession(): Promise<Session>;
8
7
  private resolveProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,EAAE,CAAW;gBAET,MAAM,EAAE,aAAa;IAO3B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IA6CpC,OAAO,CAAC,eAAe;CAmBxB"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAM3B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAkDpC,OAAO,CAAC,eAAe;CAgBxB"}
package/dist/browser.js CHANGED
@@ -2,15 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RensanBrowser = void 0;
4
4
  const session_1 = require("./session");
5
- const ai_1 = require("./ai");
6
5
  const puppeteer_local_1 = require("./providers/puppeteer-local");
7
6
  const browserbase_1 = require("./providers/browserbase");
8
7
  class RensanBrowser {
9
8
  config;
10
- ai;
11
9
  constructor(config) {
12
10
  this.config = config;
13
- this.ai = new ai_1.AIClient(config.ai.apiKey, config.ai.model);
14
11
  }
15
12
  // Create a new browser session using the configured provider.
16
13
  // Provider selection: puppeteer-local (default for dev) → browserbase (production)
@@ -39,12 +36,10 @@ class RensanBrowser {
39
36
  });
40
37
  }
41
38
  else {
42
- // ws-endpoint: use Browserbase provider with custom wsEndpoint
43
- // For backwards compat — wraps Playwright connectOverCDP
39
+ // ws-endpoint: use Puppeteer local as fallback (connect via CDP)
44
40
  if (!this.config.session.wsEndpoint) {
45
41
  throw new Error("BrowserConfig requires wsEndpoint when provider=ws-endpoint");
46
42
  }
47
- // Use Puppeteer local as fallback for ws-endpoint (connect via CDP)
48
43
  const provider = new puppeteer_local_1.PuppeteerLocalProvider();
49
44
  browserHandle = await provider.launch({
50
45
  viewport: viewport ?? { width: 1280, height: 800 },
@@ -53,11 +48,10 @@ class RensanBrowser {
53
48
  });
54
49
  }
55
50
  const page = await browserHandle.newPage();
56
- return new session_1.Session(page, browserHandle, this.ai, timeout, browserHandle.viewerUrl);
51
+ return new session_1.Session(page, browserHandle, this.config.ai.apiKey, timeout, browserHandle.viewerUrl, this.config.ai.model);
57
52
  }
58
53
  // Determine which provider to use based on config + env
59
54
  resolveProvider() {
60
- // Explicit env override
61
55
  const envProvider = process.env.BROWSER_PROVIDER;
62
56
  if (envProvider) {
63
57
  const valid = ["puppeteer-local", "browserbase", "ws-endpoint"];
@@ -68,12 +62,10 @@ class RensanBrowser {
68
62
  return envProvider;
69
63
  }
70
64
  }
71
- // Auto-detect from config
72
65
  if (this.config.session.browserbase)
73
66
  return "browserbase";
74
67
  if (this.config.session.wsEndpoint)
75
68
  return "ws-endpoint";
76
- // Default: local Puppeteer
77
69
  return "puppeteer-local";
78
70
  }
79
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}