@agenttool/browser 0.1.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 (45) hide show
  1. package/CLAUDE.md +66 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +4 -0
  4. package/README.md +295 -0
  5. package/dist/bin/agenttool-browser.d.ts +3 -0
  6. package/dist/bin/agenttool-browser.d.ts.map +1 -0
  7. package/dist/bin/agenttool-browser.js +11 -0
  8. package/dist/bin/agenttool-browser.js.map +1 -0
  9. package/dist/src/browser.d.ts +56 -0
  10. package/dist/src/browser.d.ts.map +1 -0
  11. package/dist/src/browser.js +1354 -0
  12. package/dist/src/browser.js.map +1 -0
  13. package/dist/src/cli.d.ts +33 -0
  14. package/dist/src/cli.d.ts.map +1 -0
  15. package/dist/src/cli.js +447 -0
  16. package/dist/src/cli.js.map +1 -0
  17. package/dist/src/config.d.ts +40 -0
  18. package/dist/src/config.d.ts.map +1 -0
  19. package/dist/src/config.js +219 -0
  20. package/dist/src/config.js.map +1 -0
  21. package/dist/src/errors.d.ts +11 -0
  22. package/dist/src/errors.d.ts.map +1 -0
  23. package/dist/src/errors.js +20 -0
  24. package/dist/src/errors.js.map +1 -0
  25. package/dist/src/index.d.ts +16 -0
  26. package/dist/src/index.d.ts.map +1 -0
  27. package/dist/src/index.js +9 -0
  28. package/dist/src/index.js.map +1 -0
  29. package/dist/src/mcp.d.ts +76 -0
  30. package/dist/src/mcp.d.ts.map +1 -0
  31. package/dist/src/mcp.js +408 -0
  32. package/dist/src/mcp.js.map +1 -0
  33. package/dist/src/policy.d.ts +49 -0
  34. package/dist/src/policy.d.ts.map +1 -0
  35. package/dist/src/policy.js +315 -0
  36. package/dist/src/policy.js.map +1 -0
  37. package/dist/src/snapshot.d.ts +45 -0
  38. package/dist/src/snapshot.d.ts.map +1 -0
  39. package/dist/src/snapshot.js +184 -0
  40. package/dist/src/snapshot.js.map +1 -0
  41. package/dist/src/types.d.ts +352 -0
  42. package/dist/src/types.d.ts.map +1 -0
  43. package/dist/src/types.js +2 -0
  44. package/dist/src/types.js.map +1 -0
  45. package/package.json +70 -0
@@ -0,0 +1,40 @@
1
+ export declare const BROWSER_ENV: {
2
+ readonly headless: "AGENTOOL_BROWSER_HEADLESS";
3
+ readonly publicWeb: "AGENTOOL_BROWSER_PUBLIC_WEB";
4
+ readonly localNetwork: "AGENTOOL_BROWSER_LOCAL_NETWORK";
5
+ readonly profile: "AGENTOOL_BROWSER_PROFILE";
6
+ readonly profileDir: "AGENTOOL_BROWSER_PROFILE_DIR";
7
+ readonly channel: "AGENTOOL_BROWSER_CHANNEL";
8
+ readonly executable: "AGENTOOL_BROWSER_EXECUTABLE";
9
+ readonly outputDir: "AGENTOOL_BROWSER_OUTPUT_DIR";
10
+ };
11
+ export type BrowserProfileConfig = {
12
+ mode: "ephemeral";
13
+ } | {
14
+ mode: "persistent";
15
+ directory: string;
16
+ };
17
+ /**
18
+ * Process-scoped authority for one browser server. Tool calls deliberately do
19
+ * not accept these fields, so a page cannot persuade an agent to widen them.
20
+ */
21
+ export interface BrowserProcessConfig {
22
+ headless: boolean;
23
+ allowPublicWeb: boolean;
24
+ allowLocalNetwork: boolean;
25
+ profile: BrowserProfileConfig;
26
+ channel?: string;
27
+ executablePath?: string;
28
+ outputDir: string;
29
+ }
30
+ export interface ParseBrowserConfigOptions {
31
+ env?: Record<string, string | undefined>;
32
+ cwd?: string;
33
+ }
34
+ /**
35
+ * Parse only process-start configuration. Unknown arguments are rejected so a
36
+ * misspelled safety flag cannot silently become a broader policy.
37
+ */
38
+ export declare function parseBrowserProcessConfig(args: readonly string[], options?: ParseBrowserConfigOptions): BrowserProcessConfig;
39
+ export declare function formatProcessConfig(config: BrowserProcessConfig): Record<string, unknown>;
40
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW;;;;;;;;;CASd,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAiHD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,yBAA8B,GACtC,oBAAoB,CAwGtB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczF"}
@@ -0,0 +1,219 @@
1
+ import { existsSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, isAbsolute, join, relative, resolve } from "node:path";
4
+ export const BROWSER_ENV = {
5
+ headless: "AGENTOOL_BROWSER_HEADLESS",
6
+ publicWeb: "AGENTOOL_BROWSER_PUBLIC_WEB",
7
+ localNetwork: "AGENTOOL_BROWSER_LOCAL_NETWORK",
8
+ profile: "AGENTOOL_BROWSER_PROFILE",
9
+ profileDir: "AGENTOOL_BROWSER_PROFILE_DIR",
10
+ channel: "AGENTOOL_BROWSER_CHANNEL",
11
+ executable: "AGENTOOL_BROWSER_EXECUTABLE",
12
+ outputDir: "AGENTOOL_BROWSER_OUTPUT_DIR",
13
+ };
14
+ const DEFAULT_CHANNEL = "chrome";
15
+ const SAFE_CHANNEL = /^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/;
16
+ function booleanValue(name, value, fallback) {
17
+ if (value === undefined || value === "")
18
+ return fallback;
19
+ switch (value.trim().toLowerCase()) {
20
+ case "1":
21
+ case "true":
22
+ case "yes":
23
+ case "on":
24
+ return true;
25
+ case "0":
26
+ case "false":
27
+ case "no":
28
+ case "off":
29
+ return false;
30
+ default:
31
+ throw new Error(`${name} must be one of 1, 0, true, false, yes, no, on, or off`);
32
+ }
33
+ }
34
+ function requiredValue(args, index, flag) {
35
+ const value = args[index + 1];
36
+ if (!value || value.startsWith("--")) {
37
+ throw new Error(`${flag} requires a value`);
38
+ }
39
+ return value;
40
+ }
41
+ function absoluteFrom(cwd, value) {
42
+ return isAbsolute(value) ? value : resolve(cwd, value);
43
+ }
44
+ function defaultOutputDirectory(cwd, env) {
45
+ const configuredDataHome = env.XDG_DATA_HOME?.trim();
46
+ const dataHome = configuredDataHome
47
+ ? absoluteFrom(cwd, configuredDataHome)
48
+ : join(homedir(), ".local", "share");
49
+ return join(dataHome, "agenttool", "browser", "artifacts");
50
+ }
51
+ function overlaps(left, right) {
52
+ const leftToRight = relative(left, right);
53
+ const rightToLeft = relative(right, left);
54
+ const contains = (value) => value === "" || (!value.startsWith("..") && !isAbsolute(value));
55
+ return contains(leftToRight) || contains(rightToLeft);
56
+ }
57
+ function findGitWorktree(cwd) {
58
+ let candidate = cwd;
59
+ for (;;) {
60
+ if (existsSync(join(candidate, ".git")))
61
+ return candidate;
62
+ const parent = dirname(candidate);
63
+ if (parent === candidate)
64
+ return undefined;
65
+ candidate = parent;
66
+ }
67
+ }
68
+ function checkedProfileDirectory(cwd, value, env) {
69
+ const directory = absoluteFrom(cwd, value);
70
+ const ownerHome = homedir();
71
+ const protectedRoots = [
72
+ join(ownerHome, ".agenttool"),
73
+ join(ownerHome, ".agenttool-agents"),
74
+ join(ownerHome, ".config", "agenttool"),
75
+ join(ownerHome, ".config", "google-chrome"),
76
+ join(ownerHome, ".config", "google-chrome-beta"),
77
+ join(ownerHome, ".config", "chromium"),
78
+ join(ownerHome, ".config", "microsoft-edge"),
79
+ join(ownerHome, ".config", "BraveSoftware", "Brave-Browser"),
80
+ join(ownerHome, "Library", "Application Support", "Google", "Chrome"),
81
+ join(ownerHome, "Library", "Application Support", "Chromium"),
82
+ join(ownerHome, "Library", "Application Support", "Microsoft Edge"),
83
+ join(ownerHome, "Library", "Application Support", "BraveSoftware", "Brave-Browser"),
84
+ ];
85
+ const localAppData = env.LOCALAPPDATA?.trim();
86
+ if (localAppData) {
87
+ protectedRoots.push(join(localAppData, "Google", "Chrome", "User Data"), join(localAppData, "Chromium", "User Data"), join(localAppData, "Microsoft", "Edge", "User Data"), join(localAppData, "BraveSoftware", "Brave-Browser", "User Data"));
88
+ }
89
+ if (directory === ownerHome || protectedRoots.some((root) => overlaps(directory, root))) {
90
+ throw new Error("persistent profile must be a dedicated directory and must not overlap AgentTool state or a normal browser profile");
91
+ }
92
+ const worktree = findGitWorktree(cwd);
93
+ if (worktree && overlaps(directory, worktree)) {
94
+ throw new Error("persistent profile must not be inside or contain the current Git worktree");
95
+ }
96
+ return directory;
97
+ }
98
+ function checkedChannel(value, source) {
99
+ if (!SAFE_CHANNEL.test(value)) {
100
+ throw new Error(`${source} must be a browser channel name (letters, numbers, dot, underscore, or dash)`);
101
+ }
102
+ return value;
103
+ }
104
+ /**
105
+ * Parse only process-start configuration. Unknown arguments are rejected so a
106
+ * misspelled safety flag cannot silently become a broader policy.
107
+ */
108
+ export function parseBrowserProcessConfig(args, options = {}) {
109
+ const env = options.env ?? process.env;
110
+ const cwd = resolve(options.cwd ?? process.cwd());
111
+ let headless = booleanValue(BROWSER_ENV.headless, env[BROWSER_ENV.headless], true);
112
+ let allowPublicWeb = booleanValue(BROWSER_ENV.publicWeb, env[BROWSER_ENV.publicWeb], true);
113
+ let allowLocalNetwork = booleanValue(BROWSER_ENV.localNetwork, env[BROWSER_ENV.localNetwork], false);
114
+ const envProfile = (env[BROWSER_ENV.profile] ?? "ephemeral").trim().toLowerCase();
115
+ if (envProfile !== "ephemeral" && envProfile !== "persistent") {
116
+ throw new Error(`${BROWSER_ENV.profile} must be ephemeral or persistent`);
117
+ }
118
+ let profileMode = envProfile;
119
+ let profileDirectory = env[BROWSER_ENV.profileDir]?.trim() || undefined;
120
+ let channelName = env[BROWSER_ENV.channel]?.trim() || DEFAULT_CHANNEL;
121
+ let executableName = env[BROWSER_ENV.executable]?.trim() || undefined;
122
+ if (executableName)
123
+ channelName = undefined;
124
+ let outputDirectory = env[BROWSER_ENV.outputDir]?.trim() || defaultOutputDirectory(cwd, env);
125
+ for (let index = 0; index < args.length; index += 1) {
126
+ const flag = args[index];
127
+ switch (flag) {
128
+ case "--headless":
129
+ headless = true;
130
+ break;
131
+ case "--headed":
132
+ headless = false;
133
+ break;
134
+ case "--public-web":
135
+ allowPublicWeb = true;
136
+ break;
137
+ case "--no-public-web":
138
+ allowPublicWeb = false;
139
+ break;
140
+ case "--local-network":
141
+ allowLocalNetwork = true;
142
+ break;
143
+ case "--no-local-network":
144
+ allowLocalNetwork = false;
145
+ break;
146
+ case "--ephemeral":
147
+ profileMode = "ephemeral";
148
+ profileDirectory = undefined;
149
+ break;
150
+ case "--profile":
151
+ case "--persistent-profile": {
152
+ profileMode = "persistent";
153
+ profileDirectory = requiredValue(args, index, flag);
154
+ index += 1;
155
+ break;
156
+ }
157
+ case "--channel": {
158
+ channelName = requiredValue(args, index, flag);
159
+ executableName = undefined;
160
+ index += 1;
161
+ break;
162
+ }
163
+ case "--executable":
164
+ case "--executable-path": {
165
+ executableName = requiredValue(args, index, flag);
166
+ channelName = undefined;
167
+ index += 1;
168
+ break;
169
+ }
170
+ case "--output-dir":
171
+ outputDirectory = requiredValue(args, index, flag);
172
+ index += 1;
173
+ break;
174
+ default:
175
+ throw new Error(`unknown option: ${flag}`);
176
+ }
177
+ }
178
+ const profile = profileMode === "ephemeral"
179
+ ? { mode: "ephemeral" }
180
+ : profileDirectory
181
+ ? {
182
+ mode: "persistent",
183
+ directory: checkedProfileDirectory(cwd, profileDirectory, env),
184
+ }
185
+ : (() => {
186
+ throw new Error(`${BROWSER_ENV.profileDir} is required for a persistent profile`);
187
+ })();
188
+ const executablePath = executableName
189
+ ? absoluteFrom(cwd, executableName)
190
+ : undefined;
191
+ const channel = channelName
192
+ ? checkedChannel(channelName, BROWSER_ENV.channel)
193
+ : undefined;
194
+ const outputDir = absoluteFrom(cwd, outputDirectory);
195
+ return {
196
+ headless,
197
+ allowPublicWeb,
198
+ allowLocalNetwork,
199
+ profile,
200
+ ...(channel ? { channel } : {}),
201
+ ...(executablePath ? { executablePath } : {}),
202
+ outputDir,
203
+ };
204
+ }
205
+ export function formatProcessConfig(config) {
206
+ return {
207
+ headless: config.headless,
208
+ public_web: config.allowPublicWeb,
209
+ local_network: config.allowLocalNetwork,
210
+ profile: config.profile.mode === "ephemeral"
211
+ ? { mode: "ephemeral" }
212
+ : { mode: "persistent", directory: config.profile.directory },
213
+ browser: config.executablePath
214
+ ? { executable_path: config.executablePath }
215
+ : { channel: config.channel ?? DEFAULT_CHANNEL },
216
+ output_dir: config.outputDir,
217
+ };
218
+ }
219
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzE,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,2BAA2B;IACrC,SAAS,EAAE,6BAA6B;IACxC,YAAY,EAAE,gCAAgC;IAC9C,OAAO,EAAE,0BAA0B;IACnC,UAAU,EAAE,8BAA8B;IAC1C,OAAO,EAAE,0BAA0B;IACnC,UAAU,EAAE,6BAA6B;IACzC,SAAS,EAAE,6BAA6B;CAChC,CAAC;AAyBX,MAAM,eAAe,GAAG,QAAQ,CAAC;AACjC,MAAM,YAAY,GAAG,mCAAmC,CAAC;AAEzD,SAAS,YAAY,CAAC,IAAY,EAAE,KAAyB,EAAE,QAAiB;IAC9E,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACzD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QACnC,KAAK,GAAG,CAAC;QACT,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,IAAI;YACP,OAAO,IAAI,CAAC;QACd,KAAK,GAAG,CAAC;QACT,KAAK,OAAO,CAAC;QACb,KAAK,IAAI,CAAC;QACV,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf;YACE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,wDAAwD,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAuB,EAAE,KAAa,EAAE,IAAY;IACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,KAAa;IAC9C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,sBAAsB,CAC7B,GAAW,EACX,GAAuC;IAEvC,MAAM,kBAAkB,GAAG,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IACrD,MAAM,QAAQ,GAAG,kBAAkB;QACjC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,kBAAkB,CAAC;QACvC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC3C,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE,CACjC,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,SAAS,GAAG,GAAG,CAAC;IACpB,SAAS,CAAC;QACR,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC3C,SAAS,GAAG,MAAM,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,GAAW,EACX,KAAa,EACb,GAAuC;IAEvC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC;IAC5B,MAAM,cAAc,GAAG;QACrB,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;QAC7B,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC;QACpC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC;QACvC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC;QAC3C,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,oBAAoB,CAAC;QAChD,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC;QACtC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,CAAC;QAC5C,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,CAAC;QAC5D,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACrE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,CAAC;QAC7D,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,gBAAgB,CAAC;QACnE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,eAAe,EAAE,eAAe,CAAC;KACpF,CAAC;IACF,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,YAAY,EAAE,CAAC;QACjB,cAAc,CAAC,IAAI,CACjB,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,EACnD,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,EAC3C,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EACpD,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,CAAC,CAClE,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,KAAK,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QACxF,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,MAAc;IACnD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,8EAA8E,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,IAAuB,EACvB,UAAqC,EAAE;IAEvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAElD,IAAI,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;IACnF,IAAI,cAAc,GAAG,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3F,IAAI,iBAAiB,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;IAErG,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClF,IAAI,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,CAAC,OAAO,kCAAkC,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,WAAW,GAA+B,UAAU,CAAC;IACzD,IAAI,gBAAgB,GAAG,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IACxE,IAAI,WAAW,GACb,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,eAAe,CAAC;IACtD,IAAI,cAAc,GAAG,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IACtE,IAAI,cAAc;QAAE,WAAW,GAAG,SAAS,CAAC;IAC5C,IAAI,eAAe,GACjB,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEzE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,CAAC;QAC1B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,YAAY;gBACf,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM;YACR,KAAK,UAAU;gBACb,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM;YACR,KAAK,cAAc;gBACjB,cAAc,GAAG,IAAI,CAAC;gBACtB,MAAM;YACR,KAAK,iBAAiB;gBACpB,cAAc,GAAG,KAAK,CAAC;gBACvB,MAAM;YACR,KAAK,iBAAiB;gBACpB,iBAAiB,GAAG,IAAI,CAAC;gBACzB,MAAM;YACR,KAAK,oBAAoB;gBACvB,iBAAiB,GAAG,KAAK,CAAC;gBAC1B,MAAM;YACR,KAAK,aAAa;gBAChB,WAAW,GAAG,WAAW,CAAC;gBAC1B,gBAAgB,GAAG,SAAS,CAAC;gBAC7B,MAAM;YACR,KAAK,WAAW,CAAC;YACjB,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,WAAW,GAAG,YAAY,CAAC;gBAC3B,gBAAgB,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBACpD,KAAK,IAAI,CAAC,CAAC;gBACX,MAAM;YACR,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC/C,cAAc,GAAG,SAAS,CAAC;gBAC3B,KAAK,IAAI,CAAC,CAAC;gBACX,MAAM;YACR,CAAC;YACD,KAAK,cAAc,CAAC;YACpB,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,cAAc,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAClD,WAAW,GAAG,SAAS,CAAC;gBACxB,KAAK,IAAI,CAAC,CAAC;gBACX,MAAM;YACR,CAAC;YACD,KAAK,cAAc;gBACjB,eAAe,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBACnD,KAAK,IAAI,CAAC,CAAC;gBACX,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GACX,WAAW,KAAK,WAAW;QACzB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;QACvB,CAAC,CAAC,gBAAgB;YAChB,CAAC,CAAC;gBACE,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,uBAAuB,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,CAAC;aAC/D;YACH,CAAC,CAAC,CAAC,GAAG,EAAE;gBACJ,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,CAAC,UAAU,uCAAuC,CAAC,CAAC;YACpF,CAAC,CAAC,EAAE,CAAC;IACb,MAAM,cAAc,GAAG,cAAc;QACnC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,cAAc,CAAC;QACnC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,OAAO,GAAG,WAAW;QACzB,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC;QAClD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAErD,OAAO;QACL,QAAQ;QACR,cAAc;QACd,iBAAiB;QACjB,OAAO;QACP,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAA4B;IAC9D,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,MAAM,CAAC,cAAc;QACjC,aAAa,EAAE,MAAM,CAAC,iBAAiB;QACvC,OAAO,EACL,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;YACjC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;YACvB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE;QACjE,OAAO,EAAE,MAAM,CAAC,cAAc;YAC5B,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE;YAC5C,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,eAAe,EAAE;QAClD,UAAU,EAAE,MAAM,CAAC,SAAS;KAC7B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type BrowserErrorCode = "invalid_options" | "not_started" | "browser_closed" | "browser_launch_failed" | "invalid_url" | "url_scheme_blocked" | "url_credentials_blocked" | "network_blocked" | "dns_failed" | "tab_not_found" | "snapshot_required" | "stale_snapshot" | "ref_not_found" | "ref_hidden" | "ref_disabled" | "ref_ambiguous" | "invalid_action" | "action_failed" | "extract_failed" | "screenshot_failed" | "content_limit";
2
+ export declare class BrowserError extends Error {
3
+ readonly code: BrowserErrorCode;
4
+ readonly cause?: unknown;
5
+ constructor(code: BrowserErrorCode, message: string, options?: {
6
+ cause?: unknown;
7
+ });
8
+ }
9
+ export declare function isBrowserError(error: unknown): error is BrowserError;
10
+ export declare function asBrowserError(error: unknown, code: BrowserErrorCode, message: string): BrowserError;
11
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,aAAa,GACb,gBAAgB,GAChB,uBAAuB,GACvB,aAAa,GACb,oBAAoB,GACpB,yBAAyB,GACzB,iBAAiB,GACjB,YAAY,GACZ,eAAe,GACf,mBAAmB,GACnB,gBAAgB,GAChB,eAAe,GACf,YAAY,GACZ,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,mBAAmB,GACnB,eAAe,CAAC;AAEpB,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,SAAkB,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEtB,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAMnF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,GACd,YAAY,CAId"}
@@ -0,0 +1,20 @@
1
+ export class BrowserError extends Error {
2
+ code;
3
+ cause;
4
+ constructor(code, message, options) {
5
+ super(message);
6
+ this.name = "BrowserError";
7
+ this.code = code;
8
+ if (options && "cause" in options)
9
+ this.cause = options.cause;
10
+ }
11
+ }
12
+ export function isBrowserError(error) {
13
+ return error instanceof BrowserError;
14
+ }
15
+ export function asBrowserError(error, code, message) {
16
+ return isBrowserError(error)
17
+ ? error
18
+ : new BrowserError(code, message, { cause: error });
19
+ }
20
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAuBA,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,CAAmB;IACd,KAAK,CAAW;IAElC,YAAY,IAAsB,EAAE,OAAe,EAAE,OAA6B;QAChF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO;YAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAChE,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,KAAK,YAAY,YAAY,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAc,EACd,IAAsB,EACtB,OAAe;IAEf,OAAO,cAAc,CAAC,KAAK,CAAC;QAC1B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,16 @@
1
+ export { AgentBrowser, DEFAULT_BROWSER_LIMITS } from "./browser.js";
2
+ export { asBrowserError, BrowserError, isBrowserError, } from "./errors.js";
3
+ export { BrowserNetworkPolicy, classifyIpAddress, defaultResolveHostname, isPrivateOrReservedAddress, parseBrowserUrl, redactHtmlUrlAttributes, redactUrlReferenceForOutput, redactUrlForOutput, redactUrlsInText, } from "./policy.js";
4
+ export { boundText, compactAriaSnapshot, intersectsViewport, looksLikeSensitiveControl, parseAriaCandidates, redactAriaSecrets, redactPasswordValues, redactSensitiveInputValues, } from "./snapshot.js";
5
+ export { BROWSER_ENV, formatProcessConfig, parseBrowserProcessConfig, } from "./config.js";
6
+ export { CLI_HELP, executeBrowserOperation, JSONL_PROTOCOL_VERSION, MAX_JSONL_REQUEST_BYTES, MAX_JSONL_RESPONSE_BYTES, runCli, runJsonlSession, } from "./cli.js";
7
+ export { actOnceAndObserve, browserActionSchema, buildBrowserMcpServer, publicBrowserError, toBrowserAction, } from "./mcp.js";
8
+ export { OBSERVATION_SCHEMA } from "./types.js";
9
+ export type * from "./errors.js";
10
+ export type * from "./policy.js";
11
+ export type * from "./snapshot.js";
12
+ export type * from "./types.js";
13
+ export type { BrowserProcessConfig, BrowserProfileConfig, ParseBrowserConfigOptions, } from "./config.js";
14
+ export type { BrowserOperation, CliDependencies, JsonlSessionOptions, } from "./cli.js";
15
+ export type { BrowserActionWire, BrowserMcpOptions, PublicBrowserError, } from "./mcp.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,QAAQ,EACR,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,MAAM,EACN,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,mBAAmB,aAAa,CAAC;AACjC,mBAAmB,aAAa,CAAC;AACjC,mBAAmB,eAAe,CAAC;AACnC,mBAAmB,YAAY,CAAC;AAChC,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { AgentBrowser, DEFAULT_BROWSER_LIMITS } from "./browser.js";
2
+ export { asBrowserError, BrowserError, isBrowserError, } from "./errors.js";
3
+ export { BrowserNetworkPolicy, classifyIpAddress, defaultResolveHostname, isPrivateOrReservedAddress, parseBrowserUrl, redactHtmlUrlAttributes, redactUrlReferenceForOutput, redactUrlForOutput, redactUrlsInText, } from "./policy.js";
4
+ export { boundText, compactAriaSnapshot, intersectsViewport, looksLikeSensitiveControl, parseAriaCandidates, redactAriaSecrets, redactPasswordValues, redactSensitiveInputValues, } from "./snapshot.js";
5
+ export { BROWSER_ENV, formatProcessConfig, parseBrowserProcessConfig, } from "./config.js";
6
+ export { CLI_HELP, executeBrowserOperation, JSONL_PROTOCOL_VERSION, MAX_JSONL_REQUEST_BYTES, MAX_JSONL_RESPONSE_BYTES, runCli, runJsonlSession, } from "./cli.js";
7
+ export { actOnceAndObserve, browserActionSchema, buildBrowserMcpServer, publicBrowserError, toBrowserAction, } from "./mcp.js";
8
+ export { OBSERVATION_SCHEMA } from "./types.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,QAAQ,EACR,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,MAAM,EACN,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { McpServer } from "@modelcontextprotocol/server";
2
+ import { z } from "zod";
3
+ import { type AgentBrowser } from "./browser.js";
4
+ import type { BrowserAction } from "./types.js";
5
+ export declare const browserActionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6
+ kind: z.ZodLiteral<"navigate">;
7
+ url: z.ZodString;
8
+ tab_id: z.ZodOptional<z.ZodString>;
9
+ }, z.core.$strict>, z.ZodObject<{
10
+ kind: z.ZodLiteral<"click">;
11
+ ref: z.ZodString;
12
+ snapshot_id: z.ZodString;
13
+ tab_id: z.ZodOptional<z.ZodString>;
14
+ }, z.core.$strict>, z.ZodObject<{
15
+ kind: z.ZodLiteral<"type">;
16
+ ref: z.ZodString;
17
+ snapshot_id: z.ZodString;
18
+ text: z.ZodString;
19
+ tab_id: z.ZodOptional<z.ZodString>;
20
+ }, z.core.$strict>, z.ZodObject<{
21
+ kind: z.ZodLiteral<"press">;
22
+ key: z.ZodString;
23
+ ref: z.ZodOptional<z.ZodString>;
24
+ snapshot_id: z.ZodOptional<z.ZodString>;
25
+ tab_id: z.ZodOptional<z.ZodString>;
26
+ }, z.core.$strict>, z.ZodObject<{
27
+ kind: z.ZodLiteral<"select">;
28
+ ref: z.ZodString;
29
+ snapshot_id: z.ZodString;
30
+ values: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
31
+ tab_id: z.ZodOptional<z.ZodString>;
32
+ }, z.core.$strict>, z.ZodObject<{
33
+ kind: z.ZodLiteral<"scroll">;
34
+ ref: z.ZodOptional<z.ZodString>;
35
+ snapshot_id: z.ZodOptional<z.ZodString>;
36
+ delta_x: z.ZodOptional<z.ZodNumber>;
37
+ delta_y: z.ZodOptional<z.ZodNumber>;
38
+ tab_id: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strict>, z.ZodObject<{
40
+ kind: z.ZodLiteral<"wait">;
41
+ ms: z.ZodNumber;
42
+ tab_id: z.ZodOptional<z.ZodString>;
43
+ }, z.core.$strict>, z.ZodObject<{
44
+ kind: z.ZodLiteral<"back">;
45
+ tab_id: z.ZodOptional<z.ZodString>;
46
+ }, z.core.$strict>, z.ZodObject<{
47
+ kind: z.ZodLiteral<"forward">;
48
+ tab_id: z.ZodOptional<z.ZodString>;
49
+ }, z.core.$strict>, z.ZodObject<{
50
+ kind: z.ZodLiteral<"reload">;
51
+ tab_id: z.ZodOptional<z.ZodString>;
52
+ }, z.core.$strict>, z.ZodObject<{
53
+ kind: z.ZodLiteral<"new_tab">;
54
+ url: z.ZodOptional<z.ZodString>;
55
+ }, z.core.$strict>, z.ZodObject<{
56
+ kind: z.ZodLiteral<"close_tab">;
57
+ tab_id: z.ZodOptional<z.ZodString>;
58
+ }, z.core.$strict>], "kind">;
59
+ export type BrowserActionWire = z.infer<typeof browserActionSchema>;
60
+ export interface BrowserMcpOptions {
61
+ /**
62
+ * Include a PNG content block only when the canonical on-disk artifact is
63
+ * no larger than this bound and its byte count and SHA-256 still match.
64
+ * Set to zero to return metadata only.
65
+ */
66
+ maxInlineScreenshotBytes?: number;
67
+ }
68
+ export interface PublicBrowserError {
69
+ code: string;
70
+ message: string;
71
+ }
72
+ export declare function publicBrowserError(error: unknown): PublicBrowserError;
73
+ export declare function toBrowserAction(action: BrowserActionWire): BrowserAction;
74
+ export declare function actOnceAndObserve(browser: AgentBrowser, action: BrowserActionWire): Promise<Record<string, unknown>>;
75
+ export declare function buildBrowserMcpServer(browser: AgentBrowser, options?: BrowserMcpOptions): McpServer;
76
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/mcp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAWhD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAmG5B,CAAC;AAEL,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AA4CpE,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAWrE;AA4BD,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAsDxE;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAsBlC;AAsCD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,iBAAsB,GAC9B,SAAS,CAwLX"}