@agent-browser-io/browser 0.1.0 → 0.2.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 (77) hide show
  1. package/README.md +70 -0
  2. package/bin/agent-browser-cli.cjs +2 -0
  3. package/bin/agent-browser-mcp.cjs +2 -0
  4. package/bin/index.cjs +54 -0
  5. package/dist/cjs/ai-sdk/createBrowserTools.d.ts +58 -0
  6. package/dist/cjs/ai-sdk/createBrowserTools.d.ts.map +1 -0
  7. package/dist/cjs/ai-sdk/createBrowserTools.js +192 -0
  8. package/dist/cjs/ai-sdk/createBrowserTools.js.map +1 -0
  9. package/dist/cjs/cli/cli.d.ts +6 -0
  10. package/dist/cjs/cli/cli.d.ts.map +1 -0
  11. package/dist/cjs/cli/cli.js +149 -0
  12. package/dist/cjs/cli/cli.js.map +1 -0
  13. package/dist/cjs/core/agent-browser/agent-browser.d.ts +51 -0
  14. package/dist/cjs/core/agent-browser/agent-browser.d.ts.map +1 -0
  15. package/dist/cjs/core/agent-browser/agent-browser.js +80 -0
  16. package/dist/cjs/core/agent-browser/agent-browser.js.map +1 -0
  17. package/dist/cjs/core/agent-browser/normalize-script.d.ts +3 -0
  18. package/dist/cjs/core/agent-browser/normalize-script.d.ts.map +1 -0
  19. package/dist/cjs/core/agent-browser/normalize-script.js +531 -0
  20. package/dist/cjs/core/agent-browser/normalize-script.js.map +1 -0
  21. package/dist/cjs/core/browser-backend/browser-backend.d.ts +23 -0
  22. package/dist/cjs/core/browser-backend/browser-backend.d.ts.map +1 -0
  23. package/dist/cjs/core/browser-backend/browser-backend.js +6 -0
  24. package/dist/cjs/core/browser-backend/browser-backend.js.map +1 -0
  25. package/dist/cjs/core/browser-backend/index.d.ts +3 -0
  26. package/dist/cjs/core/browser-backend/index.d.ts.map +1 -0
  27. package/dist/cjs/core/browser-backend/index.js +6 -0
  28. package/dist/cjs/core/browser-backend/index.js.map +1 -0
  29. package/dist/cjs/core/browser-backend/playwright-browser-backend.d.ts +27 -0
  30. package/dist/cjs/core/browser-backend/playwright-browser-backend.d.ts.map +1 -0
  31. package/dist/cjs/core/browser-backend/playwright-browser-backend.js +86 -0
  32. package/dist/cjs/core/browser-backend/playwright-browser-backend.js.map +1 -0
  33. package/dist/cjs/index.d.ts +5 -0
  34. package/dist/cjs/index.d.ts.map +1 -1
  35. package/dist/cjs/index.js +8 -3
  36. package/dist/cjs/index.js.map +1 -1
  37. package/dist/cjs/mcp/server.d.ts +5 -0
  38. package/dist/cjs/mcp/server.d.ts.map +1 -0
  39. package/dist/cjs/mcp/server.js +284 -0
  40. package/dist/cjs/mcp/server.js.map +1 -0
  41. package/dist/esm/ai-sdk/createBrowserTools.d.ts +58 -0
  42. package/dist/esm/ai-sdk/createBrowserTools.d.ts.map +1 -0
  43. package/dist/esm/ai-sdk/createBrowserTools.js +189 -0
  44. package/dist/esm/ai-sdk/createBrowserTools.js.map +1 -0
  45. package/dist/esm/cli/cli.d.ts +6 -0
  46. package/dist/esm/cli/cli.d.ts.map +1 -0
  47. package/dist/esm/cli/cli.js +114 -0
  48. package/dist/esm/cli/cli.js.map +1 -0
  49. package/dist/esm/core/agent-browser/agent-browser.d.ts +51 -0
  50. package/dist/esm/core/agent-browser/agent-browser.d.ts.map +1 -0
  51. package/dist/esm/core/agent-browser/agent-browser.js +76 -0
  52. package/dist/esm/core/agent-browser/agent-browser.js.map +1 -0
  53. package/dist/esm/core/agent-browser/normalize-script.d.ts +3 -0
  54. package/dist/esm/core/agent-browser/normalize-script.d.ts.map +1 -0
  55. package/dist/esm/core/agent-browser/normalize-script.js +528 -0
  56. package/dist/esm/core/agent-browser/normalize-script.js.map +1 -0
  57. package/dist/esm/core/browser-backend/browser-backend.d.ts +23 -0
  58. package/dist/esm/core/browser-backend/browser-backend.d.ts.map +1 -0
  59. package/dist/esm/core/browser-backend/browser-backend.js +5 -0
  60. package/dist/esm/core/browser-backend/browser-backend.js.map +1 -0
  61. package/dist/esm/core/browser-backend/index.d.ts +3 -0
  62. package/dist/esm/core/browser-backend/index.d.ts.map +1 -0
  63. package/dist/esm/core/browser-backend/index.js +2 -0
  64. package/dist/esm/core/browser-backend/index.js.map +1 -0
  65. package/dist/esm/core/browser-backend/playwright-browser-backend.d.ts +27 -0
  66. package/dist/esm/core/browser-backend/playwright-browser-backend.d.ts.map +1 -0
  67. package/dist/esm/core/browser-backend/playwright-browser-backend.js +82 -0
  68. package/dist/esm/core/browser-backend/playwright-browser-backend.js.map +1 -0
  69. package/dist/esm/index.d.ts +5 -0
  70. package/dist/esm/index.d.ts.map +1 -1
  71. package/dist/esm/index.js +4 -2
  72. package/dist/esm/index.js.map +1 -1
  73. package/dist/esm/mcp/server.d.ts +5 -0
  74. package/dist/esm/mcp/server.d.ts.map +1 -0
  75. package/dist/esm/mcp/server.js +282 -0
  76. package/dist/esm/mcp/server.js.map +1 -0
  77. package/package.json +14 -5
package/README.md CHANGED
@@ -22,6 +22,76 @@ import { VERSION } from '@agent-browser-io/browser';
22
22
  const { VERSION } = require('@agent-browser-io/browser');
23
23
  ```
24
24
 
25
+ **CLI (interactive):**
26
+
27
+ ```bash
28
+ npx @agent-browser-io/browser
29
+ # or, after install: browser
30
+ ```
31
+
32
+ Uses Node.js `readline` for a REPL. Commands: `help`, `version`, `exit` (or `q`).
33
+
34
+ ## How to add MCP
35
+
36
+ The package includes an MCP server that exposes browser tools over stdio (launch, navigate, wireframe, click, type, etc.). Add it to your MCP client so agents can control a real browser.
37
+
38
+ **Run the MCP server (for testing):**
39
+
40
+ ```bash
41
+ npx @agent-browser-io/browser mcp
42
+ ```
43
+
44
+ **Add to Cursor**
45
+
46
+ 1. Open Cursor settings → **MCP** (or edit your MCP config file, e.g. `~/.cursor/mcp.json` or project `.cursor/mcp.json`).
47
+ 2. Add a server entry:
48
+
49
+ ```json
50
+ {
51
+ "mcpServers": {
52
+ "agent-browser": {
53
+ "command": "npx",
54
+ "args": ["-y", "@agent-browser-io/browser", "mcp"]
55
+ }
56
+ }
57
+ }
58
+ ```
59
+
60
+ 3. Restart Cursor or reload MCP so it picks up the new server. The **agent-browser** tools will appear for the AI to use.
61
+
62
+ **Other MCP clients (e.g. Claude Desktop)**
63
+
64
+ Use the same stdio command in your client’s config:
65
+
66
+ - **Command:** `npx` (or full path to `node`)
67
+ - **Args:** `["-y", "@agent-browser-io/browser", "mcp"]` (or `["path/to/bin/index.cjs", "mcp"]`)
68
+
69
+ The server speaks JSON-RPC over stdin/stdout; no extra env vars are required.
70
+
71
+ ## Vercel AI SDK
72
+
73
+ You can use the same browser automation as **tools** with the [Vercel AI SDK](https://sdk.vercel.ai) and `generateText`. The package exposes `createBrowserTools(browser)`, which returns an object of tools you can pass to `generateText({ tools, ... })`. The `ai` package is included as a dependency.
74
+
75
+ **Important:** Have the model call the `launch` tool first before other actions (navigate, getWireframe, click, etc.).
76
+
77
+ **Example:**
78
+
79
+ ```ts
80
+ import { createBrowserTools, AgentBrowser, DefaultBrowserBackend } from '@agent-browser-io/browser';
81
+ import { generateText } from 'ai';
82
+ import { openai } from '@ai-sdk/openai';
83
+
84
+ const browser = new AgentBrowser(new DefaultBrowserBackend());
85
+ const tools = createBrowserTools(browser);
86
+
87
+ const { text } = await generateText({
88
+ model: openai('gpt-4o'),
89
+ tools,
90
+ prompt: 'Go to hackernews visit on top 3 news, and summarize their content.',
91
+ });
92
+ // Model will call launch, then navigate, then getWireframe, etc.
93
+ ```
94
+
25
95
  ## Development
26
96
 
27
97
  ```bash
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('../dist/cjs/cli/cli.js');
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require("../dist/cjs/mcp/server.js");
package/bin/index.cjs ADDED
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Single entrypoint: parses the command and routes to CLI or MCP server.
4
+ * Usage:
5
+ * browser → run CLI (default)
6
+ * browser cli → run CLI
7
+ * browser mcp → run MCP server
8
+ * browser help → show this usage
9
+ */
10
+
11
+ const cmd = process.argv[2];
12
+ const isHelp =
13
+ cmd === "help" ||
14
+ cmd === "-h" ||
15
+ cmd === "--help" ||
16
+ cmd === "-?";
17
+
18
+ if (isHelp) {
19
+ console.log(`
20
+ @agent-browser-io/browser
21
+
22
+ Usage:
23
+ browser Run interactive CLI (default)
24
+ browser cli Run interactive CLI
25
+ browser mcp Run MCP server (stdio)
26
+
27
+ Examples:
28
+ npx @agent-browser-io/browser
29
+ npx @agent-browser-io/browser cli
30
+ npx @agent-browser-io/browser mcp
31
+ `);
32
+ process.exit(0);
33
+ }
34
+
35
+ const path = require("path");
36
+ const scriptDir = __dirname;
37
+
38
+ // Route: no command or "cli" → CLI; "mcp" → MCP
39
+ const target = !cmd || cmd === "cli" ? "cli" : cmd === "mcp" ? "mcp" : null;
40
+
41
+ if (!target) {
42
+ console.error(`Unknown command: ${cmd}`);
43
+ console.error("Use 'browser help' for usage.");
44
+ process.exit(1);
45
+ }
46
+
47
+ // Remove the subcommand so the target sees clean argv (node, script, ...rest)
48
+ if (cmd) process.argv.splice(2, 1);
49
+
50
+ if (target === "cli") {
51
+ require(path.join(scriptDir, "../dist/cjs/cli/cli.js"));
52
+ } else {
53
+ require(path.join(scriptDir, "../dist/cjs/mcp/server.js"));
54
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Vercel AI SDK tools for agent-browser-io.
3
+ * Use with generateText({ tools: createBrowserTools(browser), ... }).
4
+ * Call the launch tool before other actions if the browser is not yet running.
5
+ */
6
+ import type { IAgentBrowser } from "../core/agent-browser/agent-browser.js";
7
+ /**
8
+ * Creates a set of Vercel AI SDK–compatible tools that control the given browser instance.
9
+ * Pass the result to generateText({ tools: createBrowserTools(browser), ... }).
10
+ * The model should call the launch tool first before other actions.
11
+ */
12
+ export declare function createBrowserTools(browser: IAgentBrowser): {
13
+ launch: import("ai").Tool<Record<string, never>, string>;
14
+ navigate: import("ai").Tool<{
15
+ url: string;
16
+ }, string>;
17
+ getWireframe: import("ai").Tool<Record<string, never>, string>;
18
+ click: import("ai").Tool<{
19
+ ref: string;
20
+ }, string>;
21
+ type: import("ai").Tool<{
22
+ ref: string;
23
+ text: string;
24
+ }, string>;
25
+ fill: import("ai").Tool<{
26
+ ref: string;
27
+ text: string;
28
+ }, string>;
29
+ dblclick: import("ai").Tool<{
30
+ ref: string;
31
+ }, string>;
32
+ hover: import("ai").Tool<{
33
+ ref: string;
34
+ }, string>;
35
+ press: import("ai").Tool<{
36
+ key: string;
37
+ }, string>;
38
+ select: import("ai").Tool<{
39
+ ref: string;
40
+ value: string;
41
+ }, string>;
42
+ check: import("ai").Tool<{
43
+ ref: string;
44
+ }, string>;
45
+ uncheck: import("ai").Tool<{
46
+ ref: string;
47
+ }, string>;
48
+ scroll: import("ai").Tool<{
49
+ direction: "up" | "down" | "left" | "right";
50
+ pixels?: number | undefined;
51
+ }, string>;
52
+ screenshot: import("ai").Tool<{
53
+ path?: string | undefined;
54
+ fullPage?: boolean | undefined;
55
+ }, string>;
56
+ close: import("ai").Tool<Record<string, never>, string>;
57
+ };
58
+ //# sourceMappingURL=createBrowserTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBrowserTools.d.ts","sourceRoot":"","sources":["../../../src/ai-sdk/createBrowserTools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAgB5E;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsLxD"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ /**
3
+ * Vercel AI SDK tools for agent-browser-io.
4
+ * Use with generateText({ tools: createBrowserTools(browser), ... }).
5
+ * Call the launch tool before other actions if the browser is not yet running.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.createBrowserTools = createBrowserTools;
9
+ const ai_1 = require("ai");
10
+ const zod_1 = require("zod");
11
+ function wrapExecute(browser, fn) {
12
+ return async (args) => {
13
+ try {
14
+ return await fn(browser, args);
15
+ }
16
+ catch (err) {
17
+ const message = err instanceof Error ? err.message : String(err);
18
+ return `Error: ${message}`;
19
+ }
20
+ };
21
+ }
22
+ /**
23
+ * Creates a set of Vercel AI SDK–compatible tools that control the given browser instance.
24
+ * Pass the result to generateText({ tools: createBrowserTools(browser), ... }).
25
+ * The model should call the launch tool first before other actions.
26
+ */
27
+ function createBrowserTools(browser) {
28
+ return {
29
+ launch: (0, ai_1.tool)({
30
+ description: "Launch the browser (idempotent). Call before other actions if the browser is not yet running.",
31
+ inputSchema: zod_1.z.object({}),
32
+ execute: wrapExecute(browser, async (b) => {
33
+ await b.launch();
34
+ return "Browser launched.";
35
+ }),
36
+ }),
37
+ navigate: (0, ai_1.tool)({
38
+ description: "Navigate to a URL and apply the wireframe normalizer.",
39
+ inputSchema: zod_1.z.object({
40
+ url: zod_1.z.string().describe("URL to open"),
41
+ }),
42
+ execute: wrapExecute(browser, async (b, { url }) => {
43
+ await b.navigate(url);
44
+ return `Navigated to ${url}`;
45
+ }),
46
+ }),
47
+ getWireframe: (0, ai_1.tool)({
48
+ description: "Return the ASCII wireframe of the current page. Use ref IDs from this output for click, type, fill, etc. Ref ids are positioned at the start of the element.",
49
+ inputSchema: zod_1.z.object({}),
50
+ execute: wrapExecute(browser, async (b) => {
51
+ const wireframe = await b.getWireframe();
52
+ return wireframe || "(empty wireframe)";
53
+ }),
54
+ }),
55
+ click: (0, ai_1.tool)({
56
+ description: "Click the element with the given ref ID (from the wireframe).",
57
+ inputSchema: zod_1.z.object({
58
+ ref: zod_1.z.string().describe("Element ref ID from wireframe"),
59
+ }),
60
+ execute: wrapExecute(browser, async (b, { ref }) => {
61
+ await b.click(ref);
62
+ return `Clicked ref ${ref}`;
63
+ }),
64
+ }),
65
+ type: (0, ai_1.tool)({
66
+ description: "Type text into the element with the given ref ID.",
67
+ inputSchema: zod_1.z.object({
68
+ ref: zod_1.z.string().describe("Element ref ID from wireframe"),
69
+ text: zod_1.z.string().describe("Text to type"),
70
+ }),
71
+ execute: wrapExecute(browser, async (b, { ref, text }) => {
72
+ await b.type(ref, text);
73
+ return `Typed into ref ${ref}`;
74
+ }),
75
+ }),
76
+ fill: (0, ai_1.tool)({
77
+ description: "Clear and fill the element (by ref) with the given text.",
78
+ inputSchema: zod_1.z.object({
79
+ ref: zod_1.z.string().describe("Element ref ID from wireframe"),
80
+ text: zod_1.z.string().describe("Text to fill"),
81
+ }),
82
+ execute: wrapExecute(browser, async (b, { ref, text }) => {
83
+ await b.fill(ref, text);
84
+ return `Filled ref ${ref}`;
85
+ }),
86
+ }),
87
+ dblclick: (0, ai_1.tool)({
88
+ description: "Double-click the element with the given ref ID.",
89
+ inputSchema: zod_1.z.object({
90
+ ref: zod_1.z.string().describe("Element ref ID from wireframe"),
91
+ }),
92
+ execute: wrapExecute(browser, async (b, { ref }) => {
93
+ await b.dblclick(ref);
94
+ return `Double-clicked ref ${ref}`;
95
+ }),
96
+ }),
97
+ hover: (0, ai_1.tool)({
98
+ description: "Hover over the element with the given ref ID.",
99
+ inputSchema: zod_1.z.object({
100
+ ref: zod_1.z.string().describe("Element ref ID from wireframe"),
101
+ }),
102
+ execute: wrapExecute(browser, async (b, { ref }) => {
103
+ await b.hover(ref);
104
+ return `Hovered ref ${ref}`;
105
+ }),
106
+ }),
107
+ press: (0, ai_1.tool)({
108
+ description: "Press a keyboard key (e.g. Enter, Tab, ArrowDown).",
109
+ inputSchema: zod_1.z.object({
110
+ key: zod_1.z.string().describe("Key to press"),
111
+ }),
112
+ execute: wrapExecute(browser, async (b, { key }) => {
113
+ await b.press(key);
114
+ return `Pressed key ${key}`;
115
+ }),
116
+ }),
117
+ select: (0, ai_1.tool)({
118
+ description: "Select an option in a dropdown by ref and value.",
119
+ inputSchema: zod_1.z.object({
120
+ ref: zod_1.z.string().describe("Element ref ID from wireframe"),
121
+ value: zod_1.z.string().describe("Option value to select"),
122
+ }),
123
+ execute: wrapExecute(browser, async (b, { ref, value }) => {
124
+ await b.select(ref, value);
125
+ return `Selected value in ref ${ref}`;
126
+ }),
127
+ }),
128
+ check: (0, ai_1.tool)({
129
+ description: "Check the checkbox/radio with the given ref ID.",
130
+ inputSchema: zod_1.z.object({
131
+ ref: zod_1.z.string().describe("Element ref ID from wireframe"),
132
+ }),
133
+ execute: wrapExecute(browser, async (b, { ref }) => {
134
+ await b.check(ref);
135
+ return `Checked ref ${ref}`;
136
+ }),
137
+ }),
138
+ uncheck: (0, ai_1.tool)({
139
+ description: "Uncheck the checkbox with the given ref ID.",
140
+ inputSchema: zod_1.z.object({
141
+ ref: zod_1.z.string().describe("Element ref ID from wireframe"),
142
+ }),
143
+ execute: wrapExecute(browser, async (b, { ref }) => {
144
+ await b.uncheck(ref);
145
+ return `Unchecked ref ${ref}`;
146
+ }),
147
+ }),
148
+ scroll: (0, ai_1.tool)({
149
+ description: "Scroll the page in the given direction.",
150
+ inputSchema: zod_1.z.object({
151
+ direction: zod_1.z
152
+ .enum(["up", "down", "left", "right"])
153
+ .describe("Scroll direction"),
154
+ pixels: zod_1.z.number().optional().describe("Pixels to scroll (default 100)"),
155
+ }),
156
+ execute: wrapExecute(browser, async (b, { direction, pixels }) => {
157
+ await b.scroll(direction, pixels);
158
+ return `Scrolled ${direction}`;
159
+ }),
160
+ }),
161
+ screenshot: (0, ai_1.tool)({
162
+ description: "Take a screenshot. Returns base64 PNG when path is omitted; otherwise saves to file.",
163
+ inputSchema: zod_1.z.object({
164
+ path: zod_1.z
165
+ .string()
166
+ .optional()
167
+ .describe("Optional file path to save screenshot"),
168
+ fullPage: zod_1.z
169
+ .boolean()
170
+ .optional()
171
+ .describe("Capture full scrollable page"),
172
+ }),
173
+ execute: wrapExecute(browser, async (b, { path: filePath, fullPage }) => {
174
+ const result = await b.screenshot(filePath, { fullPage });
175
+ if (filePath) {
176
+ return `Screenshot saved to ${filePath}`;
177
+ }
178
+ const base64 = result instanceof Buffer ? result.toString("base64") : "";
179
+ return base64 ? `data:image/png;base64,${base64}` : "(no image)";
180
+ }),
181
+ }),
182
+ close: (0, ai_1.tool)({
183
+ description: "Close the browser.",
184
+ inputSchema: zod_1.z.object({}),
185
+ execute: wrapExecute(browser, async (b) => {
186
+ await b.close();
187
+ return "Browser closed.";
188
+ }),
189
+ }),
190
+ };
191
+ }
192
+ //# sourceMappingURL=createBrowserTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBrowserTools.js","sourceRoot":"","sources":["../../../src/ai-sdk/createBrowserTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Interactive CLI for @agent-browser-io/browser
3
+ * Launches a browser and provides REPL-style commands.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/cli/cli.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ /**
3
+ * Interactive CLI for @agent-browser-io/browser
4
+ * Launches a browser and provides REPL-style commands.
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ const readline = __importStar(require("readline"));
41
+ const index_1 = require("../index");
42
+ const agent_browser_js_1 = require("../core/agent-browser/agent-browser.js");
43
+ const index_js_1 = require("../core/browser-backend/index.js");
44
+ const PROMPT = 'agent-browser> ';
45
+ function print(msg) {
46
+ console.log(msg);
47
+ }
48
+ async function main() {
49
+ print(`@agent-browser-io/browser v${index_1.VERSION}`);
50
+ print('Launching browser...');
51
+ const backend = new index_js_1.DefaultBrowserBackend();
52
+ const browser = new agent_browser_js_1.AgentBrowser(backend);
53
+ await browser.launch();
54
+ print('Browser ready. Type "help" for commands, "exit" or Ctrl+D to quit.\n');
55
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
56
+ const loop = () => {
57
+ rl.question(PROMPT, async (line) => {
58
+ const trimmed = line.trim();
59
+ const parts = trimmed.split(/\s+/).filter(Boolean);
60
+ const cmd = parts[0]?.toLowerCase() ?? '';
61
+ const rest = parts.slice(1);
62
+ if (cmd === 'exit' || cmd === 'quit' || cmd === 'q') {
63
+ rl.close();
64
+ process.exit(0);
65
+ }
66
+ if (cmd === 'help') {
67
+ print(' help Show this message');
68
+ print(' version Show version');
69
+ print(' navigate <url> Open URL and apply wireframe normalizer');
70
+ print(' wireframe Print ASCII wireframe of current page');
71
+ print(' click <ref> Click element by ref id (e.g. 1)');
72
+ print(' type <ref> <text> Type into element by ref id');
73
+ print(' exit Quit the CLI');
74
+ }
75
+ else if (cmd === 'version') {
76
+ print(` ${index_1.VERSION}`);
77
+ }
78
+ else if (cmd === 'navigate') {
79
+ const url = rest[0];
80
+ if (!url) {
81
+ print(' Usage: navigate <url>');
82
+ }
83
+ else {
84
+ try {
85
+ await browser.navigate(url);
86
+ print(` Navigated to ${url}`);
87
+ }
88
+ catch (e) {
89
+ print(` Error: ${e instanceof Error ? e.message : String(e)}`);
90
+ }
91
+ }
92
+ }
93
+ else if (cmd === 'wireframe') {
94
+ try {
95
+ const wf = await browser.getWireframe();
96
+ print(wf || ' (empty wireframe)');
97
+ }
98
+ catch (e) {
99
+ print(` Error: ${e instanceof Error ? e.message : String(e)}`);
100
+ }
101
+ }
102
+ else if (cmd === 'click') {
103
+ const ref = rest[0];
104
+ if (!ref) {
105
+ print(' Usage: click <ref>');
106
+ }
107
+ else {
108
+ try {
109
+ await browser.click(ref);
110
+ print(` Clicked ref ${ref}`);
111
+ }
112
+ catch (e) {
113
+ print(` Error: ${e instanceof Error ? e.message : String(e)}`);
114
+ }
115
+ }
116
+ }
117
+ else if (cmd === 'type') {
118
+ const ref = rest[0];
119
+ const text = rest.slice(1).join(' ');
120
+ if (!ref) {
121
+ print(' Usage: type <ref> <text>');
122
+ }
123
+ else {
124
+ try {
125
+ await browser.type(ref, text);
126
+ print(` Typed into ref ${ref}`);
127
+ }
128
+ catch (e) {
129
+ print(` Error: ${e instanceof Error ? e.message : String(e)}`);
130
+ }
131
+ }
132
+ }
133
+ else if (trimmed !== '') {
134
+ print(` Unknown command: ${cmd}. Type "help" for commands.`);
135
+ }
136
+ loop();
137
+ });
138
+ };
139
+ rl.on('close', () => {
140
+ print('\nBye.');
141
+ process.exit(0);
142
+ });
143
+ loop();
144
+ }
145
+ main().catch((e) => {
146
+ console.error('Fatal:', e);
147
+ process.exit(1);
148
+ });
149
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { IBrowserBackend } from "../browser-backend/browser-backend.js";
2
+ export interface IAgentBrowser {
3
+ launch(): Promise<void>;
4
+ navigate(url: string): Promise<void>;
5
+ click(ref: string): Promise<void>;
6
+ type(ref: string, text: string): Promise<void>;
7
+ dblclick(ref: string): Promise<void>;
8
+ fill(ref: string, text: string): Promise<void>;
9
+ press(key: string): Promise<void>;
10
+ hover(ref: string): Promise<void>;
11
+ select(ref: string, value: string): Promise<void>;
12
+ check(ref: string): Promise<void>;
13
+ uncheck(ref: string): Promise<void>;
14
+ scroll(direction: "up" | "down" | "left" | "right", pixels?: number): Promise<void>;
15
+ screenshot(path?: string, options?: {
16
+ fullPage?: boolean;
17
+ }): Promise<Buffer | void>;
18
+ close(): Promise<void>;
19
+ getWireframe(): Promise<string>;
20
+ }
21
+ export declare class AgentBrowser implements IAgentBrowser {
22
+ private readonly browserBackend;
23
+ constructor(browserBackend: IBrowserBackend);
24
+ private injectNormalizeScript;
25
+ launch(): Promise<void>;
26
+ navigate(url: string): Promise<void>;
27
+ /** Ref is the data-ref-id value from the wireframe (e.g. "1"). */
28
+ click(ref: string): Promise<void>;
29
+ /** Ref is the data-ref-id value from the wireframe (e.g. "1"). */
30
+ type(ref: string, text: string): Promise<void>;
31
+ /** Ref is the data-ref-id value from the wireframe (e.g. "1"). */
32
+ dblclick(ref: string): Promise<void>;
33
+ /** Ref is the data-ref-id value from the wireframe (e.g. "1"). */
34
+ fill(ref: string, text: string): Promise<void>;
35
+ press(key: string): Promise<void>;
36
+ /** Ref is the data-ref-id value from the wireframe (e.g. "1"). */
37
+ hover(ref: string): Promise<void>;
38
+ /** Ref is the data-ref-id value from the wireframe (e.g. "1"). */
39
+ select(ref: string, value: string): Promise<void>;
40
+ /** Ref is the data-ref-id value from the wireframe (e.g. "1"). */
41
+ check(ref: string): Promise<void>;
42
+ /** Ref is the data-ref-id value from the wireframe (e.g. "1"). */
43
+ uncheck(ref: string): Promise<void>;
44
+ scroll(direction: "up" | "down" | "left" | "right", pixels?: number): Promise<void>;
45
+ screenshot(path?: string, options?: {
46
+ fullPage?: boolean;
47
+ }): Promise<Buffer | void>;
48
+ close(): Promise<void>;
49
+ getWireframe(): Promise<string>;
50
+ }
51
+ //# sourceMappingURL=agent-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-browser.d.ts","sourceRoot":"","sources":["../../../../src/core/agent-browser/agent-browser.ts"],"names":[],"mappings":"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"}