zan-browser 2.0.8 → 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.
- package/dist/agent/agent.d.ts +42 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +157 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/conversation.d.ts +22 -0
- package/dist/agent/conversation.d.ts.map +1 -0
- package/dist/agent/conversation.js +47 -0
- package/dist/agent/conversation.js.map +1 -0
- package/dist/agent/prompt.d.ts +3 -0
- package/dist/agent/prompt.d.ts.map +1 -0
- package/dist/agent/prompt.js +73 -0
- package/dist/agent/prompt.js.map +1 -0
- package/dist/browser.d.ts +0 -1
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +2 -10
- package/dist/browser.js.map +1 -1
- package/dist/index.d.ts +19 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -3
- package/dist/index.js.map +1 -1
- package/dist/observer.d.ts +5 -1
- package/dist/observer.d.ts.map +1 -1
- package/dist/observer.js +23 -3
- package/dist/observer.js.map +1 -1
- package/dist/registry.d.ts +20 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +69 -0
- package/dist/registry.js.map +1 -0
- package/dist/session.d.ts +12 -27
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +74 -206
- package/dist/session.js.map +1 -1
- package/dist/tools/base.d.ts +37 -0
- package/dist/tools/base.d.ts.map +1 -0
- package/dist/tools/base.js +6 -0
- package/dist/tools/base.js.map +1 -0
- package/dist/tools/browser/click.d.ts +8 -0
- package/dist/tools/browser/click.d.ts.map +1 -0
- package/dist/tools/browser/click.js +42 -0
- package/dist/tools/browser/click.js.map +1 -0
- package/dist/tools/browser/eval_js.d.ts +8 -0
- package/dist/tools/browser/eval_js.d.ts.map +1 -0
- package/dist/tools/browser/eval_js.js +46 -0
- package/dist/tools/browser/eval_js.js.map +1 -0
- package/dist/tools/browser/fill.d.ts +8 -0
- package/dist/tools/browser/fill.d.ts.map +1 -0
- package/dist/tools/browser/fill.js +48 -0
- package/dist/tools/browser/fill.js.map +1 -0
- package/dist/tools/browser/navigate.d.ts +8 -0
- package/dist/tools/browser/navigate.d.ts.map +1 -0
- package/dist/tools/browser/navigate.js +40 -0
- package/dist/tools/browser/navigate.js.map +1 -0
- package/dist/tools/browser/screenshot.d.ts +8 -0
- package/dist/tools/browser/screenshot.d.ts.map +1 -0
- package/dist/tools/browser/screenshot.js +27 -0
- package/dist/tools/browser/screenshot.js.map +1 -0
- package/dist/tools/browser/scroll.d.ts +8 -0
- package/dist/tools/browser/scroll.d.ts.map +1 -0
- package/dist/tools/browser/scroll.js +36 -0
- package/dist/tools/browser/scroll.js.map +1 -0
- package/dist/tools/browser/wait.d.ts +8 -0
- package/dist/tools/browser/wait.d.ts.map +1 -0
- package/dist/tools/browser/wait.js +27 -0
- package/dist/tools/browser/wait.js.map +1 -0
- package/dist/tools/network/download_file.d.ts +8 -0
- package/dist/tools/network/download_file.d.ts.map +1 -0
- package/dist/tools/network/download_file.js +68 -0
- package/dist/tools/network/download_file.js.map +1 -0
- package/dist/tools/network/fetch_url.d.ts +8 -0
- package/dist/tools/network/fetch_url.d.ts.map +1 -0
- package/dist/tools/network/fetch_url.js +68 -0
- package/dist/tools/network/fetch_url.js.map +1 -0
- package/dist/tools/network/read_network_logs.d.ts +8 -0
- package/dist/tools/network/read_network_logs.d.ts.map +1 -0
- package/dist/tools/network/read_network_logs.js +64 -0
- package/dist/tools/network/read_network_logs.js.map +1 -0
- package/dist/tools/network/web_search.d.ts +8 -0
- package/dist/tools/network/web_search.d.ts.map +1 -0
- package/dist/tools/network/web_search.js +63 -0
- package/dist/tools/network/web_search.js.map +1 -0
- package/dist/tools/page/extract_dom.d.ts +8 -0
- package/dist/tools/page/extract_dom.d.ts.map +1 -0
- package/dist/tools/page/extract_dom.js +37 -0
- package/dist/tools/page/extract_dom.js.map +1 -0
- package/dist/tools/page/observe.d.ts +8 -0
- package/dist/tools/page/observe.d.ts.map +1 -0
- package/dist/tools/page/observe.js +37 -0
- package/dist/tools/page/observe.js.map +1 -0
- package/dist/tools/page/scrape.d.ts +8 -0
- package/dist/tools/page/scrape.d.ts.map +1 -0
- package/dist/tools/page/scrape.js +75 -0
- package/dist/tools/page/scrape.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ObserveTool = void 0;
|
|
4
|
+
const perception_1 = require("../../perception");
|
|
5
|
+
class ObserveTool {
|
|
6
|
+
name = "observe";
|
|
7
|
+
description = "Observe the current page: returns the ActionSpace (interactive elements, forms, errors, network summary)";
|
|
8
|
+
inputSchema = {
|
|
9
|
+
type: "object",
|
|
10
|
+
properties: {},
|
|
11
|
+
required: [],
|
|
12
|
+
};
|
|
13
|
+
async execute(_params, ctx) {
|
|
14
|
+
const { observer, interceptor } = ctx;
|
|
15
|
+
if (!observer) {
|
|
16
|
+
return { success: false, summary: "observe failed: no observer", error: "missing observer" };
|
|
17
|
+
}
|
|
18
|
+
const observation = await observer.observe();
|
|
19
|
+
const forms = await observer.detectForms();
|
|
20
|
+
const autocompleteItems = await observer.detectAutocomplete();
|
|
21
|
+
const errorMessages = await observer.detectErrors();
|
|
22
|
+
const capturedRequests = interceptor?.getAll() ?? [];
|
|
23
|
+
const perception = (0, perception_1.buildPerception)(observation, forms, autocompleteItems, errorMessages, capturedRequests);
|
|
24
|
+
const actionSpace = (0, perception_1.formatPerceptionForLLM)(perception);
|
|
25
|
+
return {
|
|
26
|
+
success: true,
|
|
27
|
+
summary: actionSpace,
|
|
28
|
+
data: {
|
|
29
|
+
perception,
|
|
30
|
+
observation,
|
|
31
|
+
hasVisibleElements: observation.elements.filter((e) => e.visible).length > 0,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.ObserveTool = ObserveTool;
|
|
37
|
+
//# sourceMappingURL=observe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../../../src/tools/page/observe.ts"],"names":[],"mappings":";;;AACA,iDAG0B;AAE1B,MAAa,WAAW;IACtB,IAAI,GAAG,SAAS,CAAC;IACjB,WAAW,GAAG,0GAA0G,CAAC;IAEzH,WAAW,GAAe;QACxB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,OAAgC,EAAE,GAAgB;QAC9D,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,6BAA6B,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAC/F,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC9D,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;QAEpD,MAAM,gBAAgB,GAAG,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAErD,MAAM,UAAU,GAAG,IAAA,4BAAe,EAChC,WAAW,EACX,KAAK,EACL,iBAAiB,EACjB,aAAa,EACb,gBAAgB,CACjB,CAAC;QAEF,MAAM,WAAW,GAAG,IAAA,mCAAsB,EAAC,UAAU,CAAC,CAAC;QAEvD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE;gBACJ,UAAU;gBACV,WAAW;gBACX,kBAAkB,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;aAC7E;SACF,CAAC;IACJ,CAAC;CACF;AA3CD,kCA2CC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Tool, ToolContext, ToolResult, JSONSchema } from "../base";
|
|
2
|
+
export declare class ScrapeTool implements Tool {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: JSONSchema;
|
|
6
|
+
execute(params: Record<string, unknown>, ctx: ToolContext): Promise<ToolResult>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=scrape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrape.d.ts","sourceRoot":"","sources":["../../../src/tools/page/scrape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAMzE,qBAAa,UAAW,YAAW,IAAI;IACrC,IAAI,SAAY;IAChB,WAAW,SAAuI;IAElJ,WAAW,EAAE,UAAU,CAOrB;IAEI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CAyDtF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ScrapeTool = void 0;
|
|
7
|
+
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
8
|
+
const FALLBACK_MODEL = "claude-haiku-4-5-20251001";
|
|
9
|
+
const MAX_HTML_LENGTH = 12_000;
|
|
10
|
+
class ScrapeTool {
|
|
11
|
+
name = "scrape";
|
|
12
|
+
description = "Extract structured data from the current page using CSS selectors or by sending visible HTML to Claude for intelligent extraction";
|
|
13
|
+
inputSchema = {
|
|
14
|
+
type: "object",
|
|
15
|
+
properties: {
|
|
16
|
+
selector: { type: "string", description: "CSS selector to extract from (optional — if omitted, extracts from full visible body)" },
|
|
17
|
+
prompt: { type: "string", description: "What data to extract, e.g. 'extract all product names and prices as JSON'" },
|
|
18
|
+
},
|
|
19
|
+
required: ["prompt"],
|
|
20
|
+
};
|
|
21
|
+
async execute(params, ctx) {
|
|
22
|
+
const { page } = ctx;
|
|
23
|
+
if (!page) {
|
|
24
|
+
return { success: false, summary: "scrape failed: no browser context", error: "missing page" };
|
|
25
|
+
}
|
|
26
|
+
const selector = params.selector ? String(params.selector) : "body";
|
|
27
|
+
const prompt = String(params.prompt);
|
|
28
|
+
// Extract clean HTML from the target element
|
|
29
|
+
const html = await page.evaluate((sel) => {
|
|
30
|
+
const el = document.querySelector(sel);
|
|
31
|
+
if (!el)
|
|
32
|
+
return "";
|
|
33
|
+
const clone = el.cloneNode(true);
|
|
34
|
+
clone.querySelectorAll("script, style, svg, noscript").forEach((n) => n.remove());
|
|
35
|
+
return clone.innerHTML.replace(/\s+/g, " ").trim();
|
|
36
|
+
}, selector);
|
|
37
|
+
if (!html) {
|
|
38
|
+
return { success: false, summary: `scrape failed: no content found for selector "${selector}"`, error: "empty result" };
|
|
39
|
+
}
|
|
40
|
+
const trimmedHtml = html.slice(0, MAX_HTML_LENGTH);
|
|
41
|
+
// Use Claude to extract structured data from the HTML
|
|
42
|
+
try {
|
|
43
|
+
const client = new sdk_1.default({ apiKey: ctx.anthropicApiKey });
|
|
44
|
+
const response = await client.messages.create({
|
|
45
|
+
model: ctx.aiModel ?? FALLBACK_MODEL,
|
|
46
|
+
max_tokens: 2000,
|
|
47
|
+
messages: [
|
|
48
|
+
{
|
|
49
|
+
role: "user",
|
|
50
|
+
content: `Extract data from this HTML. ${prompt}\n\nHTML:\n${trimmedHtml}\n\nRespond ONLY with the extracted data as JSON. No explanation.`,
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
});
|
|
54
|
+
const text = response.content[0].type === "text" ? response.content[0].text : "{}";
|
|
55
|
+
let parsed;
|
|
56
|
+
try {
|
|
57
|
+
parsed = JSON.parse(text.replace(/```json\n?/g, "").replace(/```\n?/g, "").trim());
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
parsed = text;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
success: true,
|
|
64
|
+
summary: `Scraped data:\n${typeof parsed === "string" ? parsed : JSON.stringify(parsed, null, 2)}`.slice(0, 4000),
|
|
65
|
+
data: parsed,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
const msg = err.message;
|
|
70
|
+
return { success: false, summary: `scrape LLM extraction failed: ${msg}`, error: msg };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.ScrapeTool = ScrapeTool;
|
|
75
|
+
//# sourceMappingURL=scrape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrape.js","sourceRoot":"","sources":["../../../src/tools/page/scrape.ts"],"names":[],"mappings":"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"}
|