@accomplish_ai/agent-core 0.2.2 → 0.3.1

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/README.md CHANGED
@@ -106,6 +106,35 @@ Speech-to-text transcription via ElevenLabs. Validates API keys, transcribes aud
106
106
  import { createSpeechService } from '@accomplish_ai/agent-core';
107
107
  ```
108
108
 
109
+ ### Browser Configuration
110
+
111
+ The config generator accepts a `browser` option to control how the agent connects to a browser:
112
+
113
+ ```typescript
114
+ import { generateConfig, type BrowserConfig } from '@accomplish_ai/agent-core';
115
+
116
+ // Default — uses the dev-browser HTTP server
117
+ generateConfig({ browser: { mode: 'builtin' } });
118
+
119
+ // Remote CDP — connect to any Chrome DevTools Protocol endpoint
120
+ generateConfig({
121
+ browser: {
122
+ mode: 'remote',
123
+ cdpEndpoint: 'http://localhost:9222',
124
+ cdpHeaders: { 'X-CDP-Secret': 'token' }, // optional auth
125
+ },
126
+ });
127
+
128
+ // No browser — omits browser tools entirely
129
+ generateConfig({ browser: { mode: 'none' } });
130
+ ```
131
+
132
+ | Mode | Description |
133
+ |------|-------------|
134
+ | `builtin` | Default. Connects via the dev-browser HTTP server (used by the desktop app). |
135
+ | `remote` | Connects directly to a CDP endpoint (headless Chromium, remote browser, etc.). |
136
+ | `none` | Disables browser tools. Strips browser identity from the agent's system prompt. |
137
+
109
138
  ## Sub-path Exports
110
139
 
111
140
  The package provides a `common` sub-path export for browser-safe types and constants that can be used in renderer or browser contexts without pulling in Node.js dependencies:
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export type { PlatformConfig, CliResolverConfig, ResolvedCliPaths, BundledNodePa
5
5
  export { OpenCodeCliNotFoundError } from './opencode/adapter.js';
6
6
  export { resolveCliPath, isCliAvailable } from './opencode/cli-resolver.js';
7
7
  export { generateConfig, buildCliArgs, ACCOMPLISH_AGENT_NAME, } from './opencode/config-generator.js';
8
+ export type { BrowserConfig } from './opencode/config-generator.js';
8
9
  export { buildOpenCodeEnvironment } from './opencode/environment.js';
9
10
  export type { EnvironmentConfig } from './opencode/environment.js';
10
11
  export { buildProviderConfigs, syncApiKeysToOpenCodeAuth } from './opencode/config-builder.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gCAAgC;AAChC,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,gFAAgF;AAEhF,gFAAgF;AAChF,0CAA0C;AAC1C,gFAAgF;AAChF,yEAAyE;AACzE,uEAAuE;AAEvE,2CAA2C;AAC3C,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,0BAA0B,EAC1B,eAAe,EACf,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAwE9B,gFAAgF;AAChF,qCAAqC;AACrC,gFAAgF;AAEhF,kDAAkD;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,6FAA6F;AAC7F,sFAAsF;AAEtF,yDAAyD;AACzD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EACL,cAAc,EACd,YAAY,EACZ,qBAAqB,GACtB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAIrE,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAE/F,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/E,qFAAqF;AACrF,gFAAgF;AAChF,2DAA2D;AAE3D,OAAO,EACL,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AAErC,gFAAgF;AAChF,mCAAmC;AACnC,gFAAgF;AAEhF,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,gFAAgF;AAChF,uCAAuC;AACvC,gFAAgF;AAEhF,uBAAuB;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAEjF,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAEjC,gFAAgF;AAChF,+BAA+B;AAC/B,gFAAgF;AAEhF,yCAAyC;AACzC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EACX,UAAU,EACV,UAAU,EACV,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAIjC,yBAAyB;AACzB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,yBAAyB;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,2BAA2B;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,4BAA4B;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,yBAAyB;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,sBAAsB;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,+EAA+E;AAE/E,gFAAgF;AAChF,mCAAmC;AACnC,gFAAgF;AAEhF,0CAA0C;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAI7D,gFAAgF;AAChF,qCAAqC;AACrC,gFAAgF;AAEhF,uBAAuB;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAyB/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AASxD,OAAO,EACL,eAAe,EACf,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AAetC,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,yBAAyB,EACzB,6BAA6B,EAC7B,aAAa,GACd,MAAM,4BAA4B,CAAC;AAuBpC,OAAO,EACL,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,oCAAoC,CAAC;AAgC5C,YAAY;AACZ,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,6BAA6B,EAC7B,uBAAuB,EACvB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,qCAAqC,CAAC;AAE7C,QAAQ;AACR,OAAO,EACL,YAAY,EACZ,eAAe,EACf,6BAA6B,EAC7B,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,+CAA+C;AAC/C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAE7F,UAAU;AACV,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,QAAQ,GACT,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,16 @@
1
1
  import type { ProviderId } from '../common/types/providerSettings.js';
2
2
  import type { Skill } from '../common/types/skills.js';
3
3
  export declare const ACCOMPLISH_AGENT_NAME = "accomplish";
4
+ export interface BrowserConfig {
5
+ /** 'builtin' = dev-browser HTTP server (default), 'remote' = connect to CDP endpoint, 'none' = no browser */
6
+ mode: 'builtin' | 'remote' | 'none';
7
+ /** For 'remote': the CDP endpoint URL */
8
+ cdpEndpoint?: string;
9
+ /** For 'remote': auth headers (e.g. { 'X-CDP-Secret': '...' }) */
10
+ cdpHeaders?: Record<string, string>;
11
+ /** For 'builtin': run headless */
12
+ headless?: boolean;
13
+ }
4
14
  export interface ConfigGeneratorOptions {
5
15
  platform: NodeJS.Platform;
6
16
  mcpToolsPath: string;
@@ -22,6 +32,8 @@ export interface ConfigGeneratorOptions {
22
32
  model?: string;
23
33
  smallModel?: string;
24
34
  enabledProviders?: string[];
35
+ /** Browser configuration. Defaults to { mode: 'builtin' } */
36
+ browser?: BrowserConfig;
25
37
  }
26
38
  export interface ProviderConfig {
27
39
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config-generator.d.ts","sourceRoot":"","sources":["../../src/opencode/config-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-generator.d.ts","sourceRoot":"","sources":["../../src/opencode/config-generator.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ You are running on ${platform === 'darwin' ? 'macOS' : 'Linux'}.
18
18
  }
19
19
  }
20
20
  const ACCOMPLISH_SYSTEM_PROMPT_TEMPLATE = `<identity>
21
- You are Accomplish, a browser automation assistant.
21
+ You are Accomplish, a {{AGENT_ROLE}} assistant.
22
22
  </identity>
23
23
 
24
24
  {{ENVIRONMENT_INSTRUCTIONS}}
@@ -69,8 +69,7 @@ CORRECT: Call start_task FIRST, update todos as you work, then complete_task
69
69
 
70
70
  <capabilities>
71
71
  When users ask about your capabilities, mention:
72
- - **Browser Automation**: Control web browsers, navigate sites, fill forms, click buttons
73
- - **File Management**: Sort, rename, and move files based on content or rules you give it
72
+ {{BROWSER_CAPABILITY}}- **File Management**: Sort, rename, and move files based on content or rules you give it
74
73
  </capabilities>
75
74
 
76
75
  <important name="filesystem-rules">
@@ -139,27 +138,7 @@ See the ask-user-question MCP tool for full documentation and examples.
139
138
 
140
139
  <behavior>
141
140
  - Use AskUserQuestion tool for clarifying questions before starting ambiguous tasks
142
- - **NEVER use shell commands (open, xdg-open, start, subprocess, webbrowser) to open browsers or URLs** - these open the user's default browser, not the automation-controlled Chrome. ALL browser operations MUST use browser_* MCP tools.
143
- - For multi-step browser workflows, prefer \`browser_script\` over individual tools - it's faster and auto-returns page state.
144
- - **For collecting data from multiple pages** (e.g. comparing listings, gathering info from search results), use \`browser_batch_actions\` to extract data from multiple URLs in ONE call instead of visiting each page individually with click/snapshot loops. First collect the URLs from the search results page, then pass them all to \`browser_batch_actions\` with a JS extraction script.
145
-
146
- **BROWSER ACTION VERBOSITY - Be descriptive about web interactions:**
147
- - Before each browser action, briefly explain what you're about to do in user terms
148
- - After navigation: mention the page title and what you see
149
- - After clicking: describe what you clicked and what happened (new page loaded, form appeared, etc.)
150
- - After typing: confirm what you typed and where
151
- - When analyzing a snapshot: describe the key elements you found
152
- - If something unexpected happens, explain what you see and how you'll adapt
153
-
154
- Example good narration:
155
- "I'll navigate to Google... The search page is loaded. I can see the search box. Let me search for 'cute animals'... Typing in the search field and pressing Enter... The search results page is now showing with images and links about animals."
156
-
157
- Example bad narration (too terse):
158
- "Done." or "Navigated." or "Clicked."
159
-
160
- - After each action, evaluate the result before deciding next steps
161
- - Use browser_sequence for efficiency when you need to perform multiple actions in quick succession (e.g., filling a form with multiple fields)
162
- - Don't announce server checks or startup - proceed directly to the task
141
+ {{BROWSER_BEHAVIOR}}- Don't announce server checks or startup - proceed directly to the task
163
142
  - Only use AskUserQuestion when you genuinely need user input or decisions
164
143
 
165
144
  **DO NOT ASK FOR PERMISSION TO CONTINUE:**
@@ -221,13 +200,15 @@ function resolveBundledTsxCommand(mcpToolsPath, platform) {
221
200
  }
222
201
  function resolveMcpCommand(tsxCommand, mcpToolsPath, mcpName, sourceRelPath, distRelPath, isPackaged, nodePath) {
223
202
  const mcpDir = path.join(mcpToolsPath, mcpName);
203
+ const sourcePath = path.join(mcpDir, sourceRelPath);
224
204
  const distPath = path.join(mcpDir, distRelPath);
225
- if ((isPackaged || process.env.ACCOMPLISH_BUNDLED_MCP === '1') && fs.existsSync(distPath)) {
205
+ // Use compiled dist entry when packaged OR when source files don't exist
206
+ // (e.g. agent-core installed from npm where only dist/ is published)
207
+ if ((isPackaged || !fs.existsSync(sourcePath)) && fs.existsSync(distPath)) {
226
208
  const nodeExe = nodePath || 'node';
227
209
  console.log('[OpenCode Config] Using bundled MCP entry:', distPath);
228
210
  return [nodeExe, distPath];
229
211
  }
230
- const sourcePath = path.join(mcpDir, sourceRelPath);
231
212
  console.log('[OpenCode Config] Using tsx MCP entry:', sourcePath);
232
213
  return [...tsxCommand, sourcePath];
233
214
  }
@@ -282,12 +263,6 @@ Use empty array [] if no skills apply to your task.
282
263
  },
283
264
  timeout: 30000,
284
265
  },
285
- 'dev-browser-mcp': {
286
- type: 'local',
287
- command: resolveMcpCommand(tsxCommand, mcpToolsPath, 'dev-browser-mcp', 'src/index.ts', 'dist/index.mjs', isPackaged, nodePath),
288
- enabled: true,
289
- timeout: 30000,
290
- },
291
266
  'complete-task': {
292
267
  type: 'local',
293
268
  command: resolveMcpCommand(tsxCommand, mcpToolsPath, 'complete-task', 'src/index.ts', 'dist/index.mjs', isPackaged, nodePath),
@@ -301,6 +276,60 @@ Use empty array [] if no skills apply to your task.
301
276
  timeout: 30000,
302
277
  },
303
278
  };
279
+ // Conditionally register dev-browser-mcp based on browser config
280
+ const browserConfig = options.browser ?? { mode: 'builtin' };
281
+ if (browserConfig.mode !== 'none') {
282
+ const browserEnv = {};
283
+ if (browserConfig.mode === 'remote') {
284
+ if (browserConfig.cdpEndpoint) {
285
+ browserEnv.CDP_ENDPOINT = browserConfig.cdpEndpoint;
286
+ }
287
+ if (browserConfig.cdpHeaders) {
288
+ for (const [key, value] of Object.entries(browserConfig.cdpHeaders)) {
289
+ if (key === 'X-CDP-Secret') {
290
+ browserEnv.CDP_SECRET = value;
291
+ }
292
+ }
293
+ }
294
+ }
295
+ mcpServers['dev-browser-mcp'] = {
296
+ type: 'local',
297
+ command: resolveMcpCommand(tsxCommand, mcpToolsPath, 'dev-browser-mcp', 'src/index.ts', 'dist/index.mjs', isPackaged, nodePath),
298
+ enabled: true,
299
+ ...(Object.keys(browserEnv).length > 0 && { environment: browserEnv }),
300
+ timeout: 30000,
301
+ };
302
+ }
303
+ // Fill browser-specific template sections based on mode
304
+ const hasBrowser = browserConfig.mode !== 'none';
305
+ systemPrompt = systemPrompt
306
+ .replace('{{AGENT_ROLE}}', hasBrowser ? 'browser automation' : 'task automation')
307
+ .replace('{{BROWSER_CAPABILITY}}', hasBrowser
308
+ ? '- **Browser Automation**: Control web browsers, navigate sites, fill forms, click buttons\n'
309
+ : '')
310
+ .replace('{{BROWSER_BEHAVIOR}}', hasBrowser
311
+ ? `- **NEVER use shell commands (open, xdg-open, start, subprocess, webbrowser) to open browsers or URLs** - these open the user's default browser, not the automation-controlled Chrome. ALL browser operations MUST use browser_* MCP tools.
312
+ - For multi-step browser workflows, prefer \`browser_script\` over individual tools - it's faster and auto-returns page state.
313
+ - **For collecting data from multiple pages** (e.g. comparing listings, gathering info from search results), use \`browser_batch_actions\` to extract data from multiple URLs in ONE call instead of visiting each page individually with click/snapshot loops. First collect the URLs from the search results page, then pass them all to \`browser_batch_actions\` with a JS extraction script.
314
+
315
+ **BROWSER ACTION VERBOSITY - Be descriptive about web interactions:**
316
+ - Before each browser action, briefly explain what you're about to do in user terms
317
+ - After navigation: mention the page title and what you see
318
+ - After clicking: describe what you clicked and what happened (new page loaded, form appeared, etc.)
319
+ - After typing: confirm what you typed and where
320
+ - When analyzing a snapshot: describe the key elements you found
321
+ - If something unexpected happens, explain what you see and how you'll adapt
322
+
323
+ Example good narration:
324
+ "I'll navigate to Google... The search page is loaded. I can see the search box. Let me search for 'cute animals'... Typing in the search field and pressing Enter... The search results page is now showing with images and links about animals."
325
+
326
+ Example bad narration (too terse):
327
+ "Done." or "Navigated." or "Clicked."
328
+
329
+ - After each action, evaluate the result before deciding next steps
330
+ - Use browser_sequence for efficiency when you need to perform multiple actions in quick succession (e.g., filling a form with multiple fields)
331
+ `
332
+ : '');
304
333
  const providerConfig = {};
305
334
  for (const provider of providerConfigs) {
306
335
  const { id, ...rest } = provider;
@@ -1 +1 @@
1
- {"version":3,"file":"config-generator.js","sourceRoot":"","sources":["../../src/opencode/config-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-generator.js","sourceRoot":"","sources":["../../src/opencode/config-generator.ts"],"names":[],"mappings":"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"}
@@ -8,12 +8,58 @@ An MCP (Model Context Protocol) server for browser automation using Playwright.
8
8
  npm install
9
9
  ```
10
10
 
11
- ## Usage
11
+ ## Connection Modes
12
+
13
+ The server supports two connection modes, determined by the `CDP_ENDPOINT` environment variable.
14
+
15
+ ### Builtin mode (default)
16
+
17
+ Connects to the dev-browser HTTP server, which manages browser lifecycle and page routing. This is how the Accomplish desktop app uses it.
18
+
19
+ ```bash
20
+ # Uses http://localhost:9224 by default
21
+ npx tsx src/index.ts
22
+
23
+ # Custom port
24
+ DEV_BROWSER_PORT=5555 npx tsx src/index.ts
25
+ ```
26
+
27
+ ### Remote CDP mode
28
+
29
+ Connects directly to any Chrome DevTools Protocol endpoint — no dev-browser HTTP server needed. Pages are managed in a local in-memory registry.
12
30
 
13
31
  ```bash
14
- npm start
32
+ # Local headless Chromium
33
+ CDP_ENDPOINT=http://localhost:9222 npx tsx src/index.ts
34
+
35
+ # Remote browser with auth
36
+ CDP_ENDPOINT=ws://remote-browser:9222 CDP_SECRET=my-token npx tsx src/index.ts
15
37
  ```
16
38
 
39
+ ### Environment variables
40
+
41
+ | Variable | Mode | Description |
42
+ |----------|------|-------------|
43
+ | `CDP_ENDPOINT` | remote | CDP endpoint URL (http or ws). When set, enables remote mode. |
44
+ | `CDP_SECRET` | remote | Sent as `X-CDP-Secret` header for authenticated endpoints. |
45
+ | `DEV_BROWSER_PORT` | builtin | Port for the dev-browser HTTP server (default: `9224`). |
46
+ | `ACCOMPLISH_TASK_ID` | both | Task ID for page name isolation (default: `default`). |
47
+
48
+ ### Launching a headless browser for remote mode
49
+
50
+ ```bash
51
+ # Start headless Chromium with a CDP port
52
+ chromium --headless --no-sandbox --remote-debugging-port=9222
53
+
54
+ # Verify it's running
55
+ curl http://localhost:9222/json/version
56
+
57
+ # Connect the MCP server
58
+ CDP_ENDPOINT=http://localhost:9222 npx tsx src/index.ts
59
+ ```
60
+
61
+ All `browser_*` tools (navigate, snapshot, click, type, evaluate, screenshot, tabs, etc.) work identically in both modes.
62
+
17
63
  ## browser_snapshot Parameters
18
64
 
19
65
  | Parameter | Type | Default | Description |
@@ -11311,10 +11311,10 @@ function prefixIssues(path, issues) {
11311
11311
  function unwrapMessage(message) {
11312
11312
  return typeof message === "string" ? message : message?.message;
11313
11313
  }
11314
- function finalizeIssue(iss, ctx, config2) {
11314
+ function finalizeIssue(iss, ctx, config3) {
11315
11315
  const full = { ...iss, path: iss.path ?? [] };
11316
11316
  if (!iss.message) {
11317
- const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ?? unwrapMessage(ctx?.error?.(iss)) ?? unwrapMessage(config2.customError?.(iss)) ?? unwrapMessage(config2.localeError?.(iss)) ?? "Invalid input";
11317
+ const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ?? unwrapMessage(ctx?.error?.(iss)) ?? unwrapMessage(config3.customError?.(iss)) ?? unwrapMessage(config3.localeError?.(iss)) ?? "Invalid input";
11318
11318
  full.message = message;
11319
11319
  }
11320
11320
  delete full.inst;
@@ -20652,9 +20652,6 @@ var StdioServerTransport = class {
20652
20652
  }
20653
20653
  };
20654
20654
 
20655
- // src/index.ts
20656
- import { chromium } from "playwright";
20657
-
20658
20655
  // src/snapshot/parser.ts
20659
20656
  function parseSnapshot(yamlSnapshot, url2, title) {
20660
20657
  const elements = /* @__PURE__ */ new Map();
@@ -20930,15 +20927,225 @@ function resetSnapshotManager() {
20930
20927
  }
20931
20928
  }
20932
20929
 
20930
+ // src/connection.ts
20931
+ import { chromium } from "playwright";
20932
+ var browser = null;
20933
+ var connectingPromise = null;
20934
+ var cachedServerMode = null;
20935
+ var localPageRegistry = /* @__PURE__ */ new Map();
20936
+ function getConnectionMode() {
20937
+ return config2.mode;
20938
+ }
20939
+ var config2;
20940
+ function configureFromEnv() {
20941
+ const cdpEndpoint = process.env.CDP_ENDPOINT;
20942
+ const taskId = process.env.ACCOMPLISH_TASK_ID || "default";
20943
+ if (cdpEndpoint) {
20944
+ const headers = {};
20945
+ if (process.env.CDP_SECRET) {
20946
+ headers["X-CDP-Secret"] = process.env.CDP_SECRET;
20947
+ }
20948
+ config2 = { mode: "remote", cdpEndpoint, cdpHeaders: headers, taskId };
20949
+ } else {
20950
+ const port = parseInt(process.env.DEV_BROWSER_PORT || "9224", 10);
20951
+ config2 = { mode: "builtin", devBrowserUrl: `http://localhost:${port}`, taskId };
20952
+ }
20953
+ return config2;
20954
+ }
20955
+ async function ensureConnected() {
20956
+ if (browser && browser.isConnected()) {
20957
+ return browser;
20958
+ }
20959
+ if (connectingPromise) {
20960
+ return connectingPromise;
20961
+ }
20962
+ connectingPromise = (async () => {
20963
+ try {
20964
+ if (config2.mode === "remote") {
20965
+ browser = await connectRemote();
20966
+ } else {
20967
+ browser = await connectBuiltin();
20968
+ }
20969
+ return browser;
20970
+ } finally {
20971
+ connectingPromise = null;
20972
+ }
20973
+ })();
20974
+ return connectingPromise;
20975
+ }
20976
+ function getFullPageName(pageName) {
20977
+ const name2 = pageName || "main";
20978
+ return `${config2.taskId}-${name2}`;
20979
+ }
20980
+ async function getPage(pageName) {
20981
+ if (config2.mode === "remote") {
20982
+ return getPageRemote(pageName);
20983
+ }
20984
+ return getPageBuiltin(pageName);
20985
+ }
20986
+ async function listPages() {
20987
+ if (config2.mode === "remote") {
20988
+ return listPagesRemote();
20989
+ }
20990
+ return listPagesBuiltin();
20991
+ }
20992
+ async function closePage(pageName) {
20993
+ if (config2.mode === "remote") {
20994
+ return closePageRemote(pageName);
20995
+ }
20996
+ return closePageBuiltin(pageName);
20997
+ }
20998
+ async function fetchWithRetry(url2, options2, maxRetries = 3, baseDelayMs = 100) {
20999
+ let lastError = null;
21000
+ for (let i2 = 0; i2 < maxRetries; i2++) {
21001
+ try {
21002
+ const res = await fetch(url2, options2);
21003
+ return res;
21004
+ } catch (err) {
21005
+ lastError = err instanceof Error ? err : new Error(String(err));
21006
+ const isConnectionError = lastError.message.includes("fetch failed") || lastError.message.includes("ECONNREFUSED") || lastError.message.includes("socket") || lastError.message.includes("UND_ERR");
21007
+ if (!isConnectionError || i2 >= maxRetries - 1) {
21008
+ throw lastError;
21009
+ }
21010
+ const delay = baseDelayMs * Math.pow(2, i2) + Math.random() * 50;
21011
+ await new Promise((resolve) => setTimeout(resolve, delay));
21012
+ }
21013
+ }
21014
+ throw lastError || new Error("fetchWithRetry failed");
21015
+ }
21016
+ async function connectBuiltin() {
21017
+ const res = await fetchWithRetry(config2.devBrowserUrl);
21018
+ if (!res.ok) {
21019
+ throw new Error(`Server returned ${res.status}: ${await res.text()}`);
21020
+ }
21021
+ const info = await res.json();
21022
+ cachedServerMode = info.mode || "normal";
21023
+ return chromium.connectOverCDP(info.wsEndpoint);
21024
+ }
21025
+ async function getPageBuiltin(pageName) {
21026
+ const fullName = getFullPageName(pageName);
21027
+ const res = await fetchWithRetry(`${config2.devBrowserUrl}/pages`, {
21028
+ method: "POST",
21029
+ headers: { "Content-Type": "application/json" },
21030
+ body: JSON.stringify({ name: fullName })
21031
+ });
21032
+ if (!res.ok) {
21033
+ throw new Error(`Failed to get page: ${await res.text()}`);
21034
+ }
21035
+ const pageInfo = await res.json();
21036
+ const { targetId } = pageInfo;
21037
+ const b = await ensureConnected();
21038
+ const isExtensionMode = cachedServerMode === "extension";
21039
+ if (isExtensionMode) {
21040
+ const allPages = b.contexts().flatMap((ctx) => ctx.pages());
21041
+ if (allPages.length === 0) throw new Error("No pages available in browser");
21042
+ if (allPages.length === 1) return allPages[0];
21043
+ if (pageInfo.url) {
21044
+ const matchingPage = allPages.find((p) => p.url() === pageInfo.url);
21045
+ if (matchingPage) return matchingPage;
21046
+ }
21047
+ return allPages[0];
21048
+ }
21049
+ const page2 = await findPageByTargetId(b, targetId);
21050
+ if (!page2) {
21051
+ throw new Error(`Page "${fullName}" not found in browser contexts`);
21052
+ }
21053
+ return page2;
21054
+ }
21055
+ async function listPagesBuiltin() {
21056
+ const res = await fetchWithRetry(`${config2.devBrowserUrl}/pages`);
21057
+ const data = await res.json();
21058
+ const taskPrefix = `${config2.taskId}-`;
21059
+ return data.pages.filter((name2) => name2.startsWith(taskPrefix)).map((name2) => name2.substring(taskPrefix.length));
21060
+ }
21061
+ async function closePageBuiltin(pageName) {
21062
+ const fullName = getFullPageName(pageName);
21063
+ const res = await fetchWithRetry(`${config2.devBrowserUrl}/pages/${encodeURIComponent(fullName)}`, {
21064
+ method: "DELETE"
21065
+ });
21066
+ return res.ok;
21067
+ }
21068
+ async function findPageByTargetId(b, targetId) {
21069
+ for (const context of b.contexts()) {
21070
+ for (const page2 of context.pages()) {
21071
+ let cdpSession;
21072
+ try {
21073
+ cdpSession = await context.newCDPSession(page2);
21074
+ const { targetInfo } = await cdpSession.send("Target.getTargetInfo");
21075
+ if (targetInfo.targetId === targetId) {
21076
+ return page2;
21077
+ }
21078
+ } catch (err) {
21079
+ const msg = err instanceof Error ? err.message : String(err);
21080
+ if (!msg.includes("Target closed") && !msg.includes("Session closed")) {
21081
+ console.warn(`Unexpected error checking page target: ${msg}`);
21082
+ }
21083
+ } finally {
21084
+ if (cdpSession) {
21085
+ try {
21086
+ await cdpSession.detach();
21087
+ } catch {
21088
+ }
21089
+ }
21090
+ }
21091
+ }
21092
+ }
21093
+ return null;
21094
+ }
21095
+ async function connectRemote() {
21096
+ const endpoint = config2.cdpEndpoint;
21097
+ const options2 = {};
21098
+ if (config2.cdpHeaders && Object.keys(config2.cdpHeaders).length > 0) {
21099
+ options2.headers = config2.cdpHeaders;
21100
+ }
21101
+ cachedServerMode = "remote";
21102
+ return chromium.connectOverCDP(endpoint, options2);
21103
+ }
21104
+ async function getPageRemote(pageName) {
21105
+ const fullName = getFullPageName(pageName);
21106
+ const existing = localPageRegistry.get(fullName);
21107
+ if (existing && !existing.isClosed()) {
21108
+ return existing;
21109
+ }
21110
+ const b = await ensureConnected();
21111
+ const context = b.contexts()[0];
21112
+ if (!context) {
21113
+ throw new Error("No browser context available");
21114
+ }
21115
+ const page2 = await context.newPage();
21116
+ localPageRegistry.set(fullName, page2);
21117
+ page2.on("close", () => {
21118
+ localPageRegistry.delete(fullName);
21119
+ });
21120
+ return page2;
21121
+ }
21122
+ function listPagesRemote() {
21123
+ const taskPrefix = `${config2.taskId}-`;
21124
+ const pages = Array.from(localPageRegistry.keys()).filter((name2) => name2.startsWith(taskPrefix)).filter((name2) => {
21125
+ const page2 = localPageRegistry.get(name2);
21126
+ return page2 && !page2.isClosed();
21127
+ }).map((name2) => name2.substring(taskPrefix.length));
21128
+ return Promise.resolve(pages);
21129
+ }
21130
+ function closePageRemote(pageName) {
21131
+ const fullName = getFullPageName(pageName);
21132
+ const page2 = localPageRegistry.get(fullName);
21133
+ if (!page2) return Promise.resolve(false);
21134
+ localPageRegistry.delete(fullName);
21135
+ if (!page2.isClosed()) {
21136
+ return page2.close().then(() => true);
21137
+ }
21138
+ return Promise.resolve(true);
21139
+ }
21140
+
20933
21141
  // src/index.ts
20934
21142
  console.error("[dev-browser-mcp] Script starting...");
20935
21143
  console.error("[dev-browser-mcp] Node version:", process.version);
20936
21144
  console.error("[dev-browser-mcp] CWD:", process.cwd());
20937
21145
  console.error("[dev-browser-mcp] ACCOMPLISH_TASK_ID:", process.env.ACCOMPLISH_TASK_ID || "(not set)");
20938
21146
  console.error("[dev-browser-mcp] All imports completed successfully");
20939
- var DEV_BROWSER_PORT = parseInt(process.env.DEV_BROWSER_PORT || "9224", 10);
20940
- var DEV_BROWSER_URL = `http://localhost:${DEV_BROWSER_PORT}`;
20941
- var TASK_ID = process.env.ACCOMPLISH_TASK_ID || "default";
21147
+ var connectionConfig = configureFromEnv();
21148
+ var TASK_ID = connectionConfig.taskId;
20942
21149
  function toAIFriendlyError(error2, selector) {
20943
21150
  const message = error2 instanceof Error ? error2.message : String(error2);
20944
21151
  if (message.includes("strict mode violation")) {
@@ -20977,9 +21184,6 @@ function toAIFriendlyError(error2, selector) {
20977
21184
  `${message}. Try taking a new browser_snapshot() to see the current page state before retrying.`
20978
21185
  );
20979
21186
  }
20980
- var browser = null;
20981
- var connectingPromise = null;
20982
- var cachedServerMode = null;
20983
21187
  var activePageOverride = null;
20984
21188
  var glowingPage = null;
20985
21189
  var pagesWithGlowListeners = /* @__PURE__ */ new WeakSet();
@@ -21079,143 +21283,46 @@ async function removeActiveTabGlow(page2) {
21079
21283
  glowingPage = null;
21080
21284
  }
21081
21285
  }
21082
- async function fetchWithRetry(url2, options2, maxRetries = 3, baseDelayMs = 100) {
21083
- let lastError = null;
21084
- for (let i2 = 0; i2 < maxRetries; i2++) {
21085
- try {
21086
- const res = await fetch(url2, options2);
21087
- return res;
21088
- } catch (err) {
21089
- lastError = err instanceof Error ? err : new Error(String(err));
21090
- const isConnectionError = lastError.message.includes("fetch failed") || lastError.message.includes("ECONNREFUSED") || lastError.message.includes("socket") || lastError.message.includes("UND_ERR");
21091
- if (!isConnectionError || i2 >= maxRetries - 1) {
21092
- throw lastError;
21093
- }
21094
- const delay = baseDelayMs * Math.pow(2, i2) + Math.random() * 50;
21095
- await new Promise((resolve) => setTimeout(resolve, delay));
21096
- }
21097
- }
21098
- throw lastError || new Error("fetchWithRetry failed");
21099
- }
21100
- async function ensureConnected() {
21101
- if (browser && browser.isConnected()) {
21102
- return browser;
21103
- }
21104
- if (connectingPromise) {
21105
- return connectingPromise;
21106
- }
21107
- connectingPromise = (async () => {
21108
- try {
21109
- const res = await fetchWithRetry(DEV_BROWSER_URL);
21110
- if (!res.ok) {
21111
- throw new Error(`Server returned ${res.status}: ${await res.text()}`);
21112
- }
21113
- const info = await res.json();
21114
- cachedServerMode = info.mode || "normal";
21115
- browser = await chromium.connectOverCDP(info.wsEndpoint);
21116
- for (const context of browser.contexts()) {
21117
- context.on("page", async (page2) => {
21118
- console.error("[dev-browser-mcp] New page detected, injecting glow immediately...");
21119
- setTimeout(async () => {
21120
- try {
21121
- if (!page2.isClosed()) {
21122
- await injectActiveTabGlow(page2);
21123
- console.error("[dev-browser-mcp] Glow injected on new page");
21124
- }
21125
- } catch (err) {
21126
- console.error("[dev-browser-mcp] Failed to inject glow on new page:", err);
21127
- }
21128
- }, 100);
21129
- });
21130
- for (const page2 of context.pages()) {
21131
- if (!page2.isClosed() && !glowingPage) {
21132
- try {
21286
+ var glowInitialized = false;
21287
+ async function ensureConnected2() {
21288
+ const b = await ensureConnected();
21289
+ if (!glowInitialized && getConnectionMode() === "builtin") {
21290
+ glowInitialized = true;
21291
+ for (const context of b.contexts()) {
21292
+ context.on("page", async (page2) => {
21293
+ console.error("[dev-browser-mcp] New page detected, injecting glow immediately...");
21294
+ setTimeout(async () => {
21295
+ try {
21296
+ if (!page2.isClosed()) {
21133
21297
  await injectActiveTabGlow(page2);
21134
- } catch (err) {
21135
- console.error("[dev-browser-mcp] Failed to inject glow on existing page:", err);
21298
+ console.error("[dev-browser-mcp] Glow injected on new page");
21136
21299
  }
21300
+ } catch (err) {
21301
+ console.error("[dev-browser-mcp] Failed to inject glow on new page:", err);
21137
21302
  }
21138
- }
21139
- }
21140
- return browser;
21141
- } finally {
21142
- connectingPromise = null;
21143
- }
21144
- })();
21145
- return connectingPromise;
21146
- }
21147
- function getFullPageName(pageName) {
21148
- const name2 = pageName || "main";
21149
- return `${TASK_ID}-${name2}`;
21150
- }
21151
- async function findPageByTargetId(b, targetId) {
21152
- for (const context of b.contexts()) {
21153
- for (const page2 of context.pages()) {
21154
- let cdpSession;
21155
- try {
21156
- cdpSession = await context.newCDPSession(page2);
21157
- const { targetInfo } = await cdpSession.send("Target.getTargetInfo");
21158
- if (targetInfo.targetId === targetId) {
21159
- return page2;
21160
- }
21161
- } catch (err) {
21162
- const msg = err instanceof Error ? err.message : String(err);
21163
- if (!msg.includes("Target closed") && !msg.includes("Session closed")) {
21164
- console.warn(`Unexpected error checking page target: ${msg}`);
21165
- }
21166
- } finally {
21167
- if (cdpSession) {
21303
+ }, 100);
21304
+ });
21305
+ for (const page2 of context.pages()) {
21306
+ if (!page2.isClosed() && !glowingPage) {
21168
21307
  try {
21169
- await cdpSession.detach();
21170
- } catch {
21308
+ await injectActiveTabGlow(page2);
21309
+ } catch (err) {
21310
+ console.error("[dev-browser-mcp] Failed to inject glow on existing page:", err);
21171
21311
  }
21172
21312
  }
21173
21313
  }
21174
21314
  }
21175
21315
  }
21176
- return null;
21316
+ return b;
21177
21317
  }
21178
- async function getPage(pageName) {
21318
+ async function getPage2(pageName) {
21179
21319
  if (activePageOverride) {
21180
21320
  if (!activePageOverride.isClosed()) {
21181
21321
  return activePageOverride;
21182
21322
  }
21183
21323
  activePageOverride = null;
21184
21324
  }
21185
- const fullName = getFullPageName(pageName);
21186
- const res = await fetchWithRetry(`${DEV_BROWSER_URL}/pages`, {
21187
- method: "POST",
21188
- headers: { "Content-Type": "application/json" },
21189
- body: JSON.stringify({ name: fullName })
21190
- });
21191
- if (!res.ok) {
21192
- throw new Error(`Failed to get page: ${await res.text()}`);
21193
- }
21194
- const pageInfo = await res.json();
21195
- const { targetId } = pageInfo;
21196
- const b = await ensureConnected();
21197
- const isExtensionMode = cachedServerMode === "extension";
21198
- if (isExtensionMode) {
21199
- const allPages = b.contexts().flatMap((ctx) => ctx.pages());
21200
- if (allPages.length === 0) {
21201
- throw new Error("No pages available in browser");
21202
- }
21203
- if (allPages.length === 1) {
21204
- return allPages[0];
21205
- }
21206
- if (pageInfo.url) {
21207
- const matchingPage = allPages.find((p) => p.url() === pageInfo.url);
21208
- if (matchingPage) {
21209
- return matchingPage;
21210
- }
21211
- }
21212
- return allPages[0];
21213
- }
21214
- const page2 = await findPageByTargetId(b, targetId);
21215
- if (!page2) {
21216
- throw new Error(`Page "${fullName}" not found in browser contexts`);
21217
- }
21218
- return page2;
21325
+ return getPage(pageName);
21219
21326
  }
21220
21327
  async function waitForPageLoad(page2, timeout = 3e3) {
21221
21328
  try {
@@ -22999,7 +23106,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
22999
23106
  fullUrl = "https://" + fullUrl;
23000
23107
  }
23001
23108
  resetSnapshotManager();
23002
- const page2 = await getPage(page_name2);
23109
+ const page2 = await getPage2(page_name2);
23003
23110
  await page2.goto(fullUrl);
23004
23111
  await waitForPageLoad(page2);
23005
23112
  await injectActiveTabGlow(page2);
@@ -23023,7 +23130,7 @@ The page has loaded. Use browser_snapshot() to see the page elements and find in
23023
23130
  }
23024
23131
  case "browser_snapshot": {
23025
23132
  const { page_name: page_name2, interactive_only, full_snapshot, max_elements, viewport_only, include_history, max_tokens } = args;
23026
- const page2 = await getPage(page_name2);
23133
+ const page2 = await getPage2(page_name2);
23027
23134
  const validatedMaxElements = full_snapshot ? Infinity : Math.min(Math.max(max_elements ?? 300, 1), 1e3);
23028
23135
  const validatedMaxTokens = full_snapshot ? Infinity : Math.min(Math.max(max_tokens ?? 8e3, 1e3), 5e4);
23029
23136
  const snapshotOptions = {
@@ -23102,7 +23209,7 @@ ${result.content}`;
23102
23209
  }
23103
23210
  case "browser_click": {
23104
23211
  const { ref, selector, x, y, position, button, click_count, page_name: page_name2 } = args;
23105
- const page2 = await getPage(page_name2);
23212
+ const page2 = await getPage2(page_name2);
23106
23213
  const clickOptions = {};
23107
23214
  if (button) clickOptions.button = button;
23108
23215
  if (click_count) clickOptions.clickCount = click_count;
@@ -23159,7 +23266,7 @@ ${result.content}`;
23159
23266
  }
23160
23267
  case "browser_type": {
23161
23268
  const { ref, selector, text, press_enter, page_name: page_name2 } = args;
23162
- const page2 = await getPage(page_name2);
23269
+ const page2 = await getPage2(page_name2);
23163
23270
  try {
23164
23271
  let element = null;
23165
23272
  if (ref) {
@@ -23206,7 +23313,7 @@ ${result.content}`;
23206
23313
  }
23207
23314
  case "browser_screenshot": {
23208
23315
  const { page_name: page_name2, full_page } = args;
23209
- const page2 = await getPage(page_name2);
23316
+ const page2 = await getPage2(page_name2);
23210
23317
  const screenshotBuffer = await page2.screenshot({
23211
23318
  fullPage: full_page ?? false,
23212
23319
  type: "jpeg",
@@ -23223,7 +23330,7 @@ ${result.content}`;
23223
23330
  }
23224
23331
  case "browser_evaluate": {
23225
23332
  const { script: script2, page_name: page_name2 } = args;
23226
- const page2 = await getPage(page_name2);
23333
+ const page2 = await getPage2(page_name2);
23227
23334
  const wrappedScript = `(async () => { ${script2} })()`;
23228
23335
  const result = await page2.evaluate(wrappedScript);
23229
23336
  return {
@@ -23236,10 +23343,7 @@ ${result.content}`;
23236
23343
  case "browser_pages": {
23237
23344
  const { action, page_name: page_name2 } = args;
23238
23345
  if (action === "list") {
23239
- const res = await fetchWithRetry(`${DEV_BROWSER_URL}/pages`);
23240
- const data = await res.json();
23241
- const taskPrefix = `${TASK_ID}-`;
23242
- const taskPages = data.pages.filter((name2) => name2.startsWith(taskPrefix)).map((name2) => name2.substring(taskPrefix.length));
23346
+ const taskPages = await listPages();
23243
23347
  return {
23244
23348
  content: [{
23245
23349
  type: "text",
@@ -23253,13 +23357,10 @@ ${result.content}`;
23253
23357
  isError: true
23254
23358
  };
23255
23359
  }
23256
- const fullName = getFullPageName(page_name2);
23257
- const res = await fetchWithRetry(`${DEV_BROWSER_URL}/pages/${encodeURIComponent(fullName)}`, {
23258
- method: "DELETE"
23259
- });
23260
- if (!res.ok) {
23360
+ const closed = await closePage(page_name2);
23361
+ if (!closed) {
23261
23362
  return {
23262
- content: [{ type: "text", text: `Error: Failed to close page: ${await res.text()}` }],
23363
+ content: [{ type: "text", text: `Error: Page "${page_name2}" not found` }],
23263
23364
  isError: true
23264
23365
  };
23265
23366
  }
@@ -23274,7 +23375,7 @@ ${result.content}`;
23274
23375
  }
23275
23376
  case "browser_keyboard": {
23276
23377
  const { text, key, typing_delay, page_name: page_name2 } = args;
23277
- const page2 = await getPage(page_name2);
23378
+ const page2 = await getPage2(page_name2);
23278
23379
  if (!text && !key) {
23279
23380
  return {
23280
23381
  content: [{ type: "text", text: "Error: Either text or key must be provided" }],
@@ -23296,7 +23397,7 @@ ${result.content}`;
23296
23397
  }
23297
23398
  case "browser_sequence": {
23298
23399
  const { actions: actions2, page_name: page_name2 } = args;
23299
- const page2 = await getPage(page_name2);
23400
+ const page2 = await getPage2(page_name2);
23300
23401
  const results2 = [];
23301
23402
  for (let i2 = 0; i2 < actions2.length; i2++) {
23302
23403
  const step2 = actions2[i2];
@@ -23377,7 +23478,7 @@ ${results2.join("\n")}` }]
23377
23478
  }
23378
23479
  case "browser_script": {
23379
23480
  const { actions, page_name } = args;
23380
- let page = await getPage(page_name);
23481
+ let page = await getPage2(page_name);
23381
23482
  const results = [];
23382
23483
  let snapshotResult = "";
23383
23484
  let screenshotData = null;
@@ -23567,7 +23668,7 @@ ${snapshotResult}` });
23567
23668
  }
23568
23669
  case "browser_scroll": {
23569
23670
  const { direction, amount, ref, selector, position, page_name: page_name2 } = args;
23570
- const page2 = await getPage(page_name2);
23671
+ const page2 = await getPage2(page_name2);
23571
23672
  if (ref) {
23572
23673
  const element = await selectSnapshotRef(page2, ref);
23573
23674
  if (!element) {
@@ -23642,7 +23743,7 @@ ${snapshotResult}` });
23642
23743
  }
23643
23744
  case "browser_hover": {
23644
23745
  const { ref, selector, x, y, page_name: page_name2 } = args;
23645
- const page2 = await getPage(page_name2);
23746
+ const page2 = await getPage2(page_name2);
23646
23747
  if (x !== void 0 && y !== void 0) {
23647
23748
  await page2.mouse.move(x, y);
23648
23749
  return {
@@ -23675,7 +23776,7 @@ ${snapshotResult}` });
23675
23776
  }
23676
23777
  case "browser_select": {
23677
23778
  const { ref, selector, value, label, index, page_name: page_name2 } = args;
23678
- const page2 = await getPage(page_name2);
23779
+ const page2 = await getPage2(page_name2);
23679
23780
  let selectOption;
23680
23781
  if (value !== void 0) {
23681
23782
  selectOption = { value };
@@ -23721,7 +23822,7 @@ ${snapshotResult}` });
23721
23822
  }
23722
23823
  case "browser_wait": {
23723
23824
  const { condition, selector, script: script2, timeout, page_name: page_name2 } = args;
23724
- const page2 = await getPage(page_name2);
23825
+ const page2 = await getPage2(page_name2);
23725
23826
  const waitTimeout = timeout || 3e4;
23726
23827
  switch (condition) {
23727
23828
  case "selector": {
@@ -23796,7 +23897,7 @@ ${snapshotResult}` });
23796
23897
  }
23797
23898
  case "browser_file_upload": {
23798
23899
  const { ref, selector, files, page_name: page_name2 } = args;
23799
- const page2 = await getPage(page_name2);
23900
+ const page2 = await getPage2(page_name2);
23800
23901
  if (!files || files.length === 0) {
23801
23902
  return {
23802
23903
  content: [{ type: "text", text: "Error: At least one file path is required" }],
@@ -23845,7 +23946,7 @@ ${snapshotResult}` });
23845
23946
  target_y,
23846
23947
  page_name: page_name2
23847
23948
  } = args;
23848
- const page2 = await getPage(page_name2);
23949
+ const page2 = await getPage2(page_name2);
23849
23950
  let sourcePos = null;
23850
23951
  if (source_x !== void 0 && source_y !== void 0) {
23851
23952
  sourcePos = { x: source_x, y: source_y };
@@ -23942,7 +24043,7 @@ ${snapshotResult}` });
23942
24043
  }
23943
24044
  case "browser_get_text": {
23944
24045
  const { ref, selector, page_name: page_name2 } = args;
23945
- const page2 = await getPage(page_name2);
24046
+ const page2 = await getPage2(page_name2);
23946
24047
  let element = null;
23947
24048
  let target;
23948
24049
  if (ref) {
@@ -23984,7 +24085,7 @@ ${snapshotResult}` });
23984
24085
  }
23985
24086
  case "browser_is_visible": {
23986
24087
  const { ref, selector, page_name: page_name2 } = args;
23987
- const page2 = await getPage(page_name2);
24088
+ const page2 = await getPage2(page_name2);
23988
24089
  try {
23989
24090
  if (ref) {
23990
24091
  const element = await selectSnapshotRef(page2, ref);
@@ -24025,7 +24126,7 @@ ${snapshotResult}` });
24025
24126
  }
24026
24127
  case "browser_is_enabled": {
24027
24128
  const { ref, selector, page_name: page_name2 } = args;
24028
- const page2 = await getPage(page_name2);
24129
+ const page2 = await getPage2(page_name2);
24029
24130
  try {
24030
24131
  if (ref) {
24031
24132
  const element = await selectSnapshotRef(page2, ref);
@@ -24066,7 +24167,7 @@ ${snapshotResult}` });
24066
24167
  }
24067
24168
  case "browser_is_checked": {
24068
24169
  const { ref, selector, page_name: page_name2 } = args;
24069
- const page2 = await getPage(page_name2);
24170
+ const page2 = await getPage2(page_name2);
24070
24171
  try {
24071
24172
  if (ref) {
24072
24173
  const element = await selectSnapshotRef(page2, ref);
@@ -24107,7 +24208,7 @@ ${snapshotResult}` });
24107
24208
  }
24108
24209
  case "browser_iframe": {
24109
24210
  const { action, ref, selector, page_name: page_name2 } = args;
24110
- const page2 = await getPage(page_name2);
24211
+ const page2 = await getPage2(page_name2);
24111
24212
  if (action === "enter") {
24112
24213
  let frameElement = null;
24113
24214
  if (ref) {
@@ -24156,7 +24257,7 @@ Note: Use browser_evaluate with frame-aware selectors, or take a snapshot to see
24156
24257
  }
24157
24258
  case "browser_tabs": {
24158
24259
  const { action, index, timeout, page_name: page_name2 } = args;
24159
- const b = await ensureConnected();
24260
+ const b = await ensureConnected2();
24160
24261
  if (action === "list") {
24161
24262
  const allPages = b.contexts().flatMap((ctx) => ctx.pages());
24162
24263
  const pageList = allPages.map((p, i2) => `${i2}: ${p.url()}`).join("\n");
@@ -24252,7 +24353,7 @@ Now use browser_snapshot() to see the content of this tab.` }]
24252
24353
  }
24253
24354
  case "browser_canvas_type": {
24254
24355
  const { text, position, page_name: page_name2 } = args;
24255
- const page2 = await getPage(page_name2);
24356
+ const page2 = await getPage2(page_name2);
24256
24357
  const jumpToStart = position !== "current";
24257
24358
  const viewport = page2.viewportSize();
24258
24359
  const clickX = (viewport?.width || 1280) / 2;
@@ -24273,7 +24374,7 @@ Now use browser_snapshot() to see the content of this tab.` }]
24273
24374
  }
24274
24375
  case "browser_highlight": {
24275
24376
  const { enabled, page_name: page_name2 } = args;
24276
- const page2 = await getPage(page_name2);
24377
+ const page2 = await getPage2(page_name2);
24277
24378
  if (enabled) {
24278
24379
  await injectActiveTabGlow(page2);
24279
24380
  return {
@@ -24308,7 +24409,7 @@ Now use browser_snapshot() to see the content of this tab.` }]
24308
24409
  }
24309
24410
  const BATCH_TIMEOUT_MS = 12e4;
24310
24411
  const MAX_RESULT_SIZE_BYTES = 1048576;
24311
- const page2 = await getPage(page_name2);
24412
+ const page2 = await getPage2(page_name2);
24312
24413
  const batchResults = [];
24313
24414
  const batchStart = Date.now();
24314
24415
  for (const url2 of urls) {
@@ -24385,7 +24486,7 @@ async function main() {
24385
24486
  console.error("[dev-browser-mcp] MCP Server ready and listening for tool calls");
24386
24487
  console.error("[dev-browser-mcp] Connecting to browser for auto-glow setup...");
24387
24488
  try {
24388
- await ensureConnected();
24489
+ await ensureConnected2();
24389
24490
  console.error("[dev-browser-mcp] Browser connected, page listeners active");
24390
24491
  } catch (err) {
24391
24492
  console.error("[dev-browser-mcp] Could not connect to browser yet (will retry on first tool call):", err);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@accomplish_ai/agent-core",
3
- "version": "0.2.2",
3
+ "version": "0.3.1",
4
4
  "description": "Core logic for Accomplish - OpenCode adapter, storage, providers, MCP tools, and skills",
5
5
  "type": "module",
6
6
  "license": "MIT",