@everydaydevopsio/pilot 0.6.3 → 0.7.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 (81) hide show
  1. package/AGENTS.md +5 -0
  2. package/CHANGELOG.md +16 -0
  3. package/README.md +19 -2
  4. package/dist/browser/driver/capabilities.d.ts +22 -0
  5. package/dist/browser/driver/capabilities.d.ts.map +1 -0
  6. package/dist/browser/driver/capabilities.js +70 -0
  7. package/dist/browser/driver/capabilities.js.map +1 -0
  8. package/dist/browser/driver/cdp-driver.d.ts +77 -0
  9. package/dist/browser/driver/cdp-driver.d.ts.map +1 -0
  10. package/dist/browser/driver/cdp-driver.js +190 -0
  11. package/dist/browser/driver/cdp-driver.js.map +1 -0
  12. package/dist/browser/driver/factory.d.ts +10 -0
  13. package/dist/browser/driver/factory.d.ts.map +1 -0
  14. package/dist/browser/driver/factory.js +23 -0
  15. package/dist/browser/driver/factory.js.map +1 -0
  16. package/dist/browser/driver/index.d.ts +6 -0
  17. package/dist/browser/driver/index.d.ts.map +1 -0
  18. package/dist/browser/driver/index.js +5 -0
  19. package/dist/browser/driver/index.js.map +1 -0
  20. package/dist/browser/driver/types.d.ts +106 -0
  21. package/dist/browser/driver/types.d.ts.map +1 -0
  22. package/dist/browser/driver/types.js +25 -0
  23. package/dist/browser/driver/types.js.map +1 -0
  24. package/dist/browser/types.d.ts +3 -0
  25. package/dist/browser/types.d.ts.map +1 -1
  26. package/dist/commands/connect.d.ts +2 -2
  27. package/dist/commands/connect.d.ts.map +1 -1
  28. package/dist/commands/connect.js +2 -2
  29. package/dist/commands/connect.js.map +1 -1
  30. package/dist/mcp/server.d.ts +9 -15
  31. package/dist/mcp/server.d.ts.map +1 -1
  32. package/dist/mcp/server.js +32 -74
  33. package/dist/mcp/server.js.map +1 -1
  34. package/dist/mcp/tools/browser.d.ts +2 -3
  35. package/dist/mcp/tools/browser.d.ts.map +1 -1
  36. package/dist/mcp/tools/browser.js +38 -72
  37. package/dist/mcp/tools/browser.js.map +1 -1
  38. package/dist/mcp/tools/connect.d.ts +2 -3
  39. package/dist/mcp/tools/connect.d.ts.map +1 -1
  40. package/dist/mcp/tools/connect.js +9 -9
  41. package/dist/mcp/tools/connect.js.map +1 -1
  42. package/dist/mcp/tools/driver-context.d.ts +14 -0
  43. package/dist/mcp/tools/driver-context.d.ts.map +1 -0
  44. package/dist/mcp/tools/driver-context.js +43 -0
  45. package/dist/mcp/tools/driver-context.js.map +1 -0
  46. package/dist/mcp/tools/files.d.ts.map +1 -1
  47. package/dist/mcp/tools/files.js +5 -15
  48. package/dist/mcp/tools/files.js.map +1 -1
  49. package/dist/mcp/tools/interaction.d.ts.map +1 -1
  50. package/dist/mcp/tools/interaction.js +7 -26
  51. package/dist/mcp/tools/interaction.js.map +1 -1
  52. package/dist/mcp/tools/network.d.ts.map +1 -1
  53. package/dist/mcp/tools/network.js +3 -11
  54. package/dist/mcp/tools/network.js.map +1 -1
  55. package/dist/mcp/tools/performance.d.ts.map +1 -1
  56. package/dist/mcp/tools/performance.js +2 -12
  57. package/dist/mcp/tools/performance.js.map +1 -1
  58. package/dist/mcp/tools/snapshot.d.ts.map +1 -1
  59. package/dist/mcp/tools/snapshot.js +3 -14
  60. package/dist/mcp/tools/snapshot.js.map +1 -1
  61. package/dist/mcp/tools/styles.d.ts.map +1 -1
  62. package/dist/mcp/tools/styles.js +2 -11
  63. package/dist/mcp/tools/styles.js.map +1 -1
  64. package/package.json +1 -1
  65. package/src/browser/driver/capabilities.ts +88 -0
  66. package/src/browser/driver/cdp-driver.ts +260 -0
  67. package/src/browser/driver/factory.ts +33 -0
  68. package/src/browser/driver/index.ts +22 -0
  69. package/src/browser/driver/types.ts +156 -0
  70. package/src/browser/types.ts +3 -0
  71. package/src/commands/connect.ts +3 -3
  72. package/src/mcp/server.ts +48 -91
  73. package/src/mcp/tools/browser.ts +39 -90
  74. package/src/mcp/tools/connect.ts +10 -11
  75. package/src/mcp/tools/driver-context.ts +56 -0
  76. package/src/mcp/tools/files.ts +5 -16
  77. package/src/mcp/tools/interaction.ts +7 -27
  78. package/src/mcp/tools/network.ts +2 -12
  79. package/src/mcp/tools/performance.ts +2 -13
  80. package/src/mcp/tools/snapshot.ts +3 -15
  81. package/src/mcp/tools/styles.ts +2 -12
package/AGENTS.md CHANGED
@@ -13,3 +13,8 @@
13
13
  - When adding, renaming, or removing a Pilot MCP tool, update the Codex tool allowlist and verify the Claude `.mcp.json` local-server configuration in the same change.
14
14
  - Build Pilot with `pnpm run build` before testing either MCP configuration so `dist/mcp/index.js` reflects the current source.
15
15
  - Preserve environment entries needed by the local development session, such as the Linux `DISPLAY` value. Do not assume one display number works on every machine or remote session.
16
+
17
+ ## Releases
18
+
19
+ - Always release by running the `publish.yml` workflow with a `release_type` of `patch`, `minor`, or `major`, for example `gh workflow run publish.yml -f release_type=patch`. The workflow computes the version, updates `package.json` and `CHANGELOG.md`, creates and pushes the tag, publishes to npm, and creates the GitHub release.
20
+ - Do not create or push release tags directly, and do not bump the version in `package.json` or edit the release entries in `CHANGELOG.md` by hand.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.7.0] - 2026-11-04
4
+
5
+ ### Highlights
6
+
7
+ - Browser MCP tools now run through a shared `BrowserDriver`, with capability checks to gate tool access based on driver support. (#63)
8
+
9
+ ### Fixes
10
+
11
+ - No standalone bug fixes are included in this release.
12
+
13
+ ### Changes
14
+
15
+ - Updated agent guidance to require releases through the `publish.yml` workflow. (#57)
16
+
17
+ **Full changelog:** [0.6.3...0.7.0](../../compare/0.6.3...0.7.0)
18
+
3
19
  ## [0.6.3] - 2026-11-03
4
20
 
5
21
  This release adds browser session management tools and improves Chrome startup, recovery, and shutdown reliability.
package/README.md CHANGED
@@ -469,6 +469,22 @@ pnpm run test:e2e:mcp
469
469
  pnpm run test:e2e:mcp:docker
470
470
  ```
471
471
 
472
+ ## Browser Support
473
+
474
+ Pilot drives Chrome today. MCP tools call a browser-agnostic `BrowserDriver`
475
+ (`src/browser/driver/`); `CdpDriver` implements it for Chrome over the Chrome
476
+ DevTools Protocol. Each driver declares capabilities, and a tool whose
477
+ capabilities the active browser lacks fails with
478
+ `<tool> is not supported by <browser>`. `browser_status` reports the driven
479
+ browser as `session.browser`.
480
+
481
+ Planned drivers: Firefox on macOS
482
+ ([#58](https://github.com/everydaydevopsio/pilot/issues/58)), Firefox on Linux
483
+ and Windows ([#59](https://github.com/everydaydevopsio/pilot/issues/59)), Safari
484
+ on macOS ([#60](https://github.com/everydaydevopsio/pilot/issues/60)), and
485
+ WebKit via Playwright
486
+ ([#61](https://github.com/everydaydevopsio/pilot/issues/61)).
487
+
472
488
  ## Project Structure
473
489
 
474
490
  ```
@@ -478,6 +494,7 @@ src/
478
494
  │ ├── browser-manager.ts # BrowserManager orchestrator
479
495
  │ ├── chrome-launcher.ts # Chrome process management
480
496
  │ ├── connection.ts # CDP connection + reconnect
497
+ │ ├── driver/ # BrowserDriver interface, CdpDriver, capability gating
481
498
  │ ├── events.ts # CDP event listeners
482
499
  │ ├── sessions.ts # Profile lock status and stop-all
483
500
  │ ├── tabs.ts # Tab management
@@ -488,8 +505,8 @@ src/
488
505
  │ ├── performance/ # Tracing + analysis
489
506
  │ └── security/ # Origin allow/block lists
490
507
  ├── cli/ # CLI commands (init, Linux preflight)
491
- ├── commands/ # Tool command implementations
492
- ├── mcp/ # MCP server + tool registrations
508
+ ├── commands/ # CDP command implementations used by CdpDriver
509
+ ├── mcp/ # MCP server + tool registrations (call BrowserDriver only)
493
510
  └── util/ # Config, logger
494
511
  ```
495
512
 
@@ -0,0 +1,22 @@
1
+ import type { ToolName } from '../../mcp/tools/names.js';
2
+ import type { BrowserKind, Capability } from './types.js';
3
+ /**
4
+ * Capabilities each MCP tool needs from the active driver. Tools mapped to an
5
+ * empty list either manage the session itself (start/stop/status) or only read
6
+ * buffers that every driver fills.
7
+ */
8
+ export declare const TOOL_CAPABILITIES: Readonly<Record<ToolName, readonly Capability[]>>;
9
+ export declare class CapabilityError extends Error {
10
+ readonly tool: ToolName;
11
+ readonly browser: BrowserKind;
12
+ readonly missing: readonly Capability[];
13
+ constructor(tool: ToolName, browser: BrowserKind, missing: readonly Capability[]);
14
+ }
15
+ export declare function missingCapabilities(tool: ToolName, capabilities: ReadonlySet<Capability>): Capability[];
16
+ export declare function assertToolSupported(tool: ToolName, driver: {
17
+ kind: BrowserKind;
18
+ capabilities: ReadonlySet<Capability>;
19
+ }): void;
20
+ /** Tools the given capability set cannot run, for status and docs output. */
21
+ export declare function unsupportedTools(capabilities: ReadonlySet<Capability>): ToolName[];
22
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/browser/driver/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CACtC,MAAM,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC,CAuCxC,CAAC;AAEF,qBAAa,eAAgB,SAAQ,KAAK;IAEtC,QAAQ,CAAC,IAAI,EAAE,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,WAAW;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE;gBAF9B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,SAAS,UAAU,EAAE;CAO1C;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,GACpC,UAAU,EAAE,CAEd;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;CAAE,GACnE,IAAI,CAKN;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,GACpC,QAAQ,EAAE,CAIZ"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Capabilities each MCP tool needs from the active driver. Tools mapped to an
3
+ * empty list either manage the session itself (start/stop/status) or only read
4
+ * buffers that every driver fills.
5
+ */
6
+ export const TOOL_CAPABILITIES = {
7
+ browser_start: [],
8
+ browser_stop: [],
9
+ browser_status: [],
10
+ browser_stop_all: [],
11
+ browser_connect: ['connectExisting'],
12
+ browser_screenshot: ['screenshot'],
13
+ browser_navigate: ['navigation'],
14
+ browser_click: ['input'],
15
+ browser_type: ['input'],
16
+ browser_evaluate: ['evaluate'],
17
+ browser_wait: ['evaluate'],
18
+ browser_page_info: ['evaluate'],
19
+ browser_list_tabs: ['tabs'],
20
+ browser_new_tab: ['tabs'],
21
+ browser_close_tab: ['tabs'],
22
+ browser_switch_tab: ['tabs'],
23
+ browser_tabs: ['tabs'],
24
+ browser_viewport_resize: ['viewport'],
25
+ browser_get_console_logs: ['console'],
26
+ browser_get_errors: ['console'],
27
+ browser_clear_errors: ['console'],
28
+ browser_console: ['console'],
29
+ browser_errors: ['console'],
30
+ browser_snapshot: ['accessibilitySnapshot'],
31
+ browser_find: ['accessibilitySnapshot'],
32
+ browser_fill: ['input'],
33
+ browser_hover: ['input'],
34
+ browser_press_key: ['input'],
35
+ browser_select: ['input'],
36
+ browser_check: ['input'],
37
+ browser_scroll: ['input'],
38
+ browser_network: ['network'],
39
+ browser_styles: ['styles'],
40
+ browser_dialog: ['dialogs'],
41
+ browser_upload: ['uploads'],
42
+ browser_downloads: ['downloads'],
43
+ browser_performance: ['performanceTrace']
44
+ };
45
+ export class CapabilityError extends Error {
46
+ tool;
47
+ browser;
48
+ missing;
49
+ constructor(tool, browser, missing) {
50
+ super(`${tool} is not supported by ${browser} (missing capabilities: ${missing.join(', ')}).`);
51
+ this.tool = tool;
52
+ this.browser = browser;
53
+ this.missing = missing;
54
+ this.name = 'CapabilityError';
55
+ }
56
+ }
57
+ export function missingCapabilities(tool, capabilities) {
58
+ return TOOL_CAPABILITIES[tool].filter((c) => !capabilities.has(c));
59
+ }
60
+ export function assertToolSupported(tool, driver) {
61
+ const missing = missingCapabilities(tool, driver.capabilities);
62
+ if (missing.length > 0) {
63
+ throw new CapabilityError(tool, driver.kind, missing);
64
+ }
65
+ }
66
+ /** Tools the given capability set cannot run, for status and docs output. */
67
+ export function unsupportedTools(capabilities) {
68
+ return Object.keys(TOOL_CAPABILITIES).filter((tool) => missingCapabilities(tool, capabilities).length > 0);
69
+ }
70
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/browser/driver/capabilities.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAE1B;IACF,aAAa,EAAE,EAAE;IACjB,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,EAAE;IAClB,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,CAAC,iBAAiB,CAAC;IACpC,kBAAkB,EAAE,CAAC,YAAY,CAAC;IAClC,gBAAgB,EAAE,CAAC,YAAY,CAAC;IAChC,aAAa,EAAE,CAAC,OAAO,CAAC;IACxB,YAAY,EAAE,CAAC,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,UAAU,CAAC;IAC9B,YAAY,EAAE,CAAC,UAAU,CAAC;IAC1B,iBAAiB,EAAE,CAAC,UAAU,CAAC;IAC/B,iBAAiB,EAAE,CAAC,MAAM,CAAC;IAC3B,eAAe,EAAE,CAAC,MAAM,CAAC;IACzB,iBAAiB,EAAE,CAAC,MAAM,CAAC;IAC3B,kBAAkB,EAAE,CAAC,MAAM,CAAC;IAC5B,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,uBAAuB,EAAE,CAAC,UAAU,CAAC;IACrC,wBAAwB,EAAE,CAAC,SAAS,CAAC;IACrC,kBAAkB,EAAE,CAAC,SAAS,CAAC;IAC/B,oBAAoB,EAAE,CAAC,SAAS,CAAC;IACjC,eAAe,EAAE,CAAC,SAAS,CAAC;IAC5B,cAAc,EAAE,CAAC,SAAS,CAAC;IAC3B,gBAAgB,EAAE,CAAC,uBAAuB,CAAC;IAC3C,YAAY,EAAE,CAAC,uBAAuB,CAAC;IACvC,YAAY,EAAE,CAAC,OAAO,CAAC;IACvB,aAAa,EAAE,CAAC,OAAO,CAAC;IACxB,iBAAiB,EAAE,CAAC,OAAO,CAAC;IAC5B,cAAc,EAAE,CAAC,OAAO,CAAC;IACzB,aAAa,EAAE,CAAC,OAAO,CAAC;IACxB,cAAc,EAAE,CAAC,OAAO,CAAC;IACzB,eAAe,EAAE,CAAC,SAAS,CAAC;IAC5B,cAAc,EAAE,CAAC,QAAQ,CAAC;IAC1B,cAAc,EAAE,CAAC,SAAS,CAAC;IAC3B,cAAc,EAAE,CAAC,SAAS,CAAC;IAC3B,iBAAiB,EAAE,CAAC,WAAW,CAAC;IAChC,mBAAmB,EAAE,CAAC,kBAAkB,CAAC;CAC1C,CAAC;AAEF,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAE7B;IACA;IACA;IAHX,YACW,IAAc,EACd,OAAoB,EACpB,OAA8B;QAEvC,KAAK,CACH,GAAG,IAAI,wBAAwB,OAAO,2BAA2B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CACxF,CAAC;QANO,SAAI,GAAJ,IAAI,CAAU;QACd,YAAO,GAAP,OAAO,CAAa;QACpB,YAAO,GAAP,OAAO,CAAuB;QAKvC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAc,EACd,YAAqC;IAErC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAc,EACd,MAAoE;IAEpE,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAC9B,YAAqC;IAErC,OAAQ,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAgB,CAAC,MAAM,CAC1D,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAC7D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,77 @@
1
+ import { BrowserManager } from '../browser-manager.js';
2
+ import type { LaunchOptions, SessionInfo, TabInfo } from '../types.js';
3
+ import type { Config } from '../../util/config.js';
4
+ import { type ViewportConfig } from '../../viewport.js';
5
+ import { type CheckParams } from '../../commands/check.js';
6
+ import { type ClickParams } from '../../commands/click.js';
7
+ import { type DialogParams } from '../../commands/dialog.js';
8
+ import { type EvaluateParams } from '../../commands/evaluate.js';
9
+ import { type FillParams } from '../../commands/fill.js';
10
+ import { type FindQuery } from '../../commands/find.js';
11
+ import { type HoverParams } from '../../commands/hover.js';
12
+ import { type NavigateParams } from '../../commands/navigate.js';
13
+ import { type NetworkParams } from '../../commands/network.js';
14
+ import { type PerformanceParams } from '../../commands/performance.js';
15
+ import { type PressKeyParams } from '../../commands/press_key.js';
16
+ import { type ScreenshotParams } from '../../commands/screenshot.js';
17
+ import { type ScrollParams } from '../../commands/scroll.js';
18
+ import { type SelectParams } from '../../commands/select.js';
19
+ import { type StylesParams } from '../../commands/styles.js';
20
+ import { type NewTabResult } from '../../commands/tabs.js';
21
+ import { type TypeParams } from '../../commands/type.js';
22
+ import { type UploadParams } from '../../commands/upload.js';
23
+ import { type WaitParams } from '../../commands/wait.js';
24
+ import { type BrowserDriver, type ConnectExistingOptions, type DriverSession, type ViewportResizeParams } from './types.js';
25
+ /**
26
+ * Chrome driver over the Chrome DevTools Protocol. BrowserManager owns the
27
+ * Chrome process and CDP connection; this class wires CDP events into the
28
+ * session buffers and maps driver calls onto the CDP command implementations.
29
+ */
30
+ export declare class CdpDriver implements BrowserDriver {
31
+ private readonly session;
32
+ private readonly manager;
33
+ readonly kind: "chrome";
34
+ readonly capabilities: ReadonlySet<"viewport" | "input" | "evaluate" | "dialogs" | "navigation" | "styles" | "tabs" | "screenshot" | "accessibilitySnapshot" | "console" | "network" | "uploads" | "downloads" | "performanceTrace" | "connectExisting">;
35
+ private monitoredClient;
36
+ constructor(session: DriverSession, manager: BrowserManager);
37
+ static create(config: Config, session: DriverSession): CdpDriver;
38
+ private onBrowserEvent;
39
+ private ensureMonitors;
40
+ private client;
41
+ launch(opts?: LaunchOptions): Promise<{
42
+ headless: boolean;
43
+ viewport: string;
44
+ }>;
45
+ connectExisting(opts: ConnectExistingOptions): Promise<{
46
+ tabs: TabInfo[];
47
+ }>;
48
+ destroy(): Promise<void>;
49
+ isConnected(): boolean;
50
+ getSessionInfo(): SessionInfo;
51
+ listTabs(): Promise<TabInfo[]>;
52
+ newTab(url?: string): Promise<NewTabResult>;
53
+ closeTab(targetId: string): Promise<void>;
54
+ switchTab(targetId: string): Promise<void>;
55
+ navigate(params: NavigateParams): Promise<import("../../commands/navigate.js").NavigateResult>;
56
+ pageInfo(): Promise<import("../../commands/page_info.js").PageInfoResult>;
57
+ evaluate(params: EvaluateParams): Promise<import("../../commands/evaluate.js").EvaluateResult>;
58
+ wait(params: WaitParams): Promise<import("../../commands/wait.js").WaitResult>;
59
+ screenshot(params: ScreenshotParams): Promise<import("../../commands/screenshot.js").ScreenshotResult>;
60
+ resizeViewport(params: ViewportResizeParams): Promise<ViewportConfig>;
61
+ snapshot(): Promise<import("../../commands/snapshot.js").SnapshotCommandResult>;
62
+ find(query: FindQuery): Promise<import("../../commands/find.js").FindCommandResult>;
63
+ styles(params: StylesParams): Promise<import("../../commands/styles.js").StylesCommandResult>;
64
+ click(params: ClickParams): Promise<import("../../commands/click.js").ClickResult>;
65
+ type(params: TypeParams): Promise<import("../../commands/type.js").TypeResult>;
66
+ fill(params: FillParams): Promise<import("../../commands/fill.js").FillResult>;
67
+ hover(params: HoverParams): Promise<import("../../commands/hover.js").HoverResult>;
68
+ pressKey(params: PressKeyParams): Promise<import("../../commands/press_key.js").PressKeyResult>;
69
+ select(params: SelectParams): Promise<import("../../commands/select.js").SelectResult>;
70
+ check(params: CheckParams): Promise<import("../../commands/check.js").CheckResult>;
71
+ scroll(params: ScrollParams): Promise<import("../../commands/scroll.js").ScrollResult>;
72
+ dialog(params: DialogParams): Promise<import("../../commands/dialog.js").DialogResult>;
73
+ upload(params: UploadParams): Promise<import("../../commands/upload.js").UploadResult>;
74
+ network(params: NetworkParams): Promise<import("../../commands/network.js").NetworkResult>;
75
+ performance(params: PerformanceParams): Promise<import("../../commands/performance.js").PerformanceResult>;
76
+ }
77
+ //# sourceMappingURL=cdp-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp-driver.d.ts","sourceRoot":"","sources":["../../../src/browser/driver/cdp-driver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AASvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/E,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE5E,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAC1B,MAAM,YAAY,CAAC;AAIpB;;;;GAIG;AACH,qBAAa,SAAU,YAAW,aAAa;IAM3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,QAAQ,CAAC,YAAY,oOAAoB;IACzC,OAAO,CAAC,eAAe,CAAuB;gBAG3B,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,cAAc;IAK1C,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS;IAIhE,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,MAAM;IAQd,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa;;;;IAI3B,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAI3E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,WAAW,IAAI,OAAO;IAItB,cAAc,IAAI,WAAW;IAI7B,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAI9B,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAI3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,QAAQ,CAAC,MAAM,EAAE,cAAc;IAI/B,QAAQ;IAIR,QAAQ,CAAC,MAAM,EAAE,cAAc;IAI/B,IAAI,CAAC,MAAM,EAAE,UAAU;IAIvB,UAAU,CAAC,MAAM,EAAE,gBAAgB;IAI7B,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAkB3E,QAAQ;IAIR,IAAI,CAAC,KAAK,EAAE,SAAS;IAIrB,MAAM,CAAC,MAAM,EAAE,YAAY;IAI3B,KAAK,CAAC,MAAM,EAAE,WAAW;IAIzB,IAAI,CAAC,MAAM,EAAE,UAAU;IAIvB,IAAI,CAAC,MAAM,EAAE,UAAU;IAIvB,KAAK,CAAC,MAAM,EAAE,WAAW;IAIzB,QAAQ,CAAC,MAAM,EAAE,cAAc;IAI/B,MAAM,CAAC,MAAM,EAAE,YAAY;IAI3B,KAAK,CAAC,MAAM,EAAE,WAAW;IAIzB,MAAM,CAAC,MAAM,EAAE,YAAY;IAI3B,MAAM,CAAC,MAAM,EAAE,YAAY;IAI3B,MAAM,CAAC,MAAM,EAAE,YAAY;IAI3B,OAAO,CAAC,MAAM,EAAE,aAAa;IAI7B,WAAW,CAAC,MAAM,EAAE,iBAAiB;CAGtC"}
@@ -0,0 +1,190 @@
1
+ import { BrowserManager } from '../browser-manager.js';
2
+ import { resetCssState } from '../inspect/styles.js';
3
+ import { attachDialogHandler } from '../interaction/dialogs.js';
4
+ import { attachDownloadHandler, enableDownloads } from '../interaction/downloads.js';
5
+ import { attachNetworkMonitor } from '../network/network-monitor.js';
6
+ import { applyViewport } from '../../viewport.js';
7
+ import { executeCheck } from '../../commands/check.js';
8
+ import { executeClick } from '../../commands/click.js';
9
+ import { executeDialog } from '../../commands/dialog.js';
10
+ import { executeEvaluate } from '../../commands/evaluate.js';
11
+ import { executeFill } from '../../commands/fill.js';
12
+ import { executeFind } from '../../commands/find.js';
13
+ import { executeHover } from '../../commands/hover.js';
14
+ import { executeNavigate } from '../../commands/navigate.js';
15
+ import { executeNetwork } from '../../commands/network.js';
16
+ import { executePageInfo } from '../../commands/page_info.js';
17
+ import { executePerformance } from '../../commands/performance.js';
18
+ import { executePressKey } from '../../commands/press_key.js';
19
+ import { executeScreenshot } from '../../commands/screenshot.js';
20
+ import { executeScroll } from '../../commands/scroll.js';
21
+ import { executeSelect } from '../../commands/select.js';
22
+ import { executeSnapshot } from '../../commands/snapshot.js';
23
+ import { executeStyles } from '../../commands/styles.js';
24
+ import { executeCloseTab, executeListTabs, executeNewTab, executeSwitchTab } from '../../commands/tabs.js';
25
+ import { executeType } from '../../commands/type.js';
26
+ import { executeUpload } from '../../commands/upload.js';
27
+ import { executeWait } from '../../commands/wait.js';
28
+ import { CAPABILITIES } from './types.js';
29
+ const CDP_CAPABILITIES = new Set(CAPABILITIES);
30
+ /**
31
+ * Chrome driver over the Chrome DevTools Protocol. BrowserManager owns the
32
+ * Chrome process and CDP connection; this class wires CDP events into the
33
+ * session buffers and maps driver calls onto the CDP command implementations.
34
+ */
35
+ export class CdpDriver {
36
+ session;
37
+ manager;
38
+ kind = 'chrome';
39
+ capabilities = CDP_CAPABILITIES;
40
+ monitoredClient = null;
41
+ constructor(session, manager) {
42
+ this.session = session;
43
+ this.manager = manager;
44
+ manager.setEventCallback((event, data) => this.onBrowserEvent(event, data));
45
+ }
46
+ static create(config, session) {
47
+ return new CdpDriver(session, new BrowserManager(config));
48
+ }
49
+ onBrowserEvent(event, data) {
50
+ if (event === 'console_message') {
51
+ this.session.consoleBuffer.push(data);
52
+ }
53
+ if (event === 'page_navigated') {
54
+ this.session.elementRefMap.invalidate();
55
+ }
56
+ if (event === 'browser_disconnected') {
57
+ this.monitoredClient = null;
58
+ resetCssState();
59
+ this.session.dialogQueue.clear();
60
+ this.session.downloadTracker.clear();
61
+ return;
62
+ }
63
+ // Covers browser_connected and tab switches, which swap the CDP client
64
+ // without emitting a connect event.
65
+ this.ensureMonitors();
66
+ }
67
+ ensureMonitors() {
68
+ const client = this.manager.getClient();
69
+ if (!client || client === this.monitoredClient)
70
+ return;
71
+ attachNetworkMonitor(client, this.session.networkBuffer);
72
+ attachDialogHandler(client, this.session.dialogQueue);
73
+ attachDownloadHandler(client, this.session.downloadTracker);
74
+ void enableDownloads(client).catch(() => {
75
+ // Download behavior setup may fail in some environments
76
+ });
77
+ this.monitoredClient = client;
78
+ }
79
+ client() {
80
+ const client = this.manager.getClient();
81
+ if (!client) {
82
+ throw new Error('Browser not started. Call browser_start first.');
83
+ }
84
+ return client;
85
+ }
86
+ launch(opts) {
87
+ return this.manager.launch(opts);
88
+ }
89
+ connectExisting(opts) {
90
+ return this.manager.connectExisting(opts);
91
+ }
92
+ destroy() {
93
+ return this.manager.destroy();
94
+ }
95
+ isConnected() {
96
+ return this.manager.isConnected();
97
+ }
98
+ getSessionInfo() {
99
+ return { browser: this.kind, ...this.manager.getSessionInfo() };
100
+ }
101
+ listTabs() {
102
+ return executeListTabs(this.manager);
103
+ }
104
+ newTab(url) {
105
+ return executeNewTab(this.manager, url);
106
+ }
107
+ closeTab(targetId) {
108
+ return executeCloseTab(this.manager, targetId);
109
+ }
110
+ switchTab(targetId) {
111
+ return executeSwitchTab(this.manager, targetId);
112
+ }
113
+ navigate(params) {
114
+ return executeNavigate(this.client(), this.manager, params);
115
+ }
116
+ pageInfo() {
117
+ return executePageInfo(this.client());
118
+ }
119
+ evaluate(params) {
120
+ return executeEvaluate(this.client(), params);
121
+ }
122
+ wait(params) {
123
+ return executeWait(this.client(), this.manager, params);
124
+ }
125
+ screenshot(params) {
126
+ return executeScreenshot(this.client(), params);
127
+ }
128
+ async resizeViewport(params) {
129
+ const client = this.client();
130
+ const current = this.manager.getViewportConfig();
131
+ const mobile = params.mobile ?? current?.mobile ?? false;
132
+ const config = {
133
+ width: params.width,
134
+ height: params.height,
135
+ deviceScaleFactor: params.deviceScaleFactor ?? current?.deviceScaleFactor ?? 1,
136
+ mobile,
137
+ responsive: false,
138
+ ...(mobile && current?.userAgent && { userAgent: current.userAgent })
139
+ };
140
+ await applyViewport(client, config);
141
+ this.manager.setViewportConfig(config);
142
+ return config;
143
+ }
144
+ snapshot() {
145
+ return executeSnapshot(this.client(), this.session.elementRefMap);
146
+ }
147
+ find(query) {
148
+ return executeFind(this.client(), this.session.elementRefMap, query);
149
+ }
150
+ styles(params) {
151
+ return executeStyles(this.client(), this.session.elementRefMap, params);
152
+ }
153
+ click(params) {
154
+ return executeClick(this.client(), params, this.session.elementRefMap);
155
+ }
156
+ type(params) {
157
+ return executeType(this.client(), params, this.session.elementRefMap);
158
+ }
159
+ fill(params) {
160
+ return executeFill(this.client(), this.session.elementRefMap, params);
161
+ }
162
+ hover(params) {
163
+ return executeHover(this.client(), this.session.elementRefMap, params);
164
+ }
165
+ pressKey(params) {
166
+ return executePressKey(this.client(), params);
167
+ }
168
+ select(params) {
169
+ return executeSelect(this.client(), this.session.elementRefMap, params);
170
+ }
171
+ check(params) {
172
+ return executeCheck(this.client(), this.session.elementRefMap, params);
173
+ }
174
+ scroll(params) {
175
+ return executeScroll(this.client(), this.session.elementRefMap, params);
176
+ }
177
+ dialog(params) {
178
+ return executeDialog(this.client(), this.session.dialogQueue, params);
179
+ }
180
+ upload(params) {
181
+ return executeUpload(this.client(), this.session.elementRefMap, params);
182
+ }
183
+ network(params) {
184
+ return executeNetwork(this.client(), this.session.networkBuffer, params);
185
+ }
186
+ performance(params) {
187
+ return executePerformance(this.client(), this.session.traceState, params);
188
+ }
189
+ }
190
+ //# sourceMappingURL=cdp-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp-driver.js","sourceRoot":"","sources":["../../../src/browser/driver/cdp-driver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Config } from '../../util/config.js';
2
+ import type { BrowserDriver, BrowserKind, DriverSession } from './types.js';
3
+ /** Tracking issues for browsers that do not have a driver yet. */
4
+ export declare const PLANNED_DRIVERS: Readonly<Record<Exclude<BrowserKind, 'chrome'>, string>>;
5
+ export declare class UnsupportedBrowserError extends Error {
6
+ readonly browser: Exclude<BrowserKind, 'chrome'>;
7
+ constructor(browser: Exclude<BrowserKind, 'chrome'>);
8
+ }
9
+ export declare function createDriver(kind: BrowserKind, config: Config, session: DriverSession): BrowserDriver;
10
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/browser/driver/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5E,kEAAkE;AAClE,eAAO,MAAM,eAAe,EAAE,QAAQ,CACpC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAK/C,CAAC;AAEF,qBAAa,uBAAwB,SAAQ,KAAK;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC;gBAAvC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC;CAO7D;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,GACrB,aAAa,CAKf"}
@@ -0,0 +1,23 @@
1
+ import { CdpDriver } from './cdp-driver.js';
2
+ /** Tracking issues for browsers that do not have a driver yet. */
3
+ export const PLANNED_DRIVERS = {
4
+ firefox: 'https://github.com/everydaydevopsio/pilot/issues/58',
5
+ safari: 'https://github.com/everydaydevopsio/pilot/issues/60',
6
+ webkit: 'https://github.com/everydaydevopsio/pilot/issues/61'
7
+ };
8
+ export class UnsupportedBrowserError extends Error {
9
+ browser;
10
+ constructor(browser) {
11
+ super(`Pilot does not support ${browser} yet; only chrome is available. ` +
12
+ `Progress is tracked in ${PLANNED_DRIVERS[browser]}.`);
13
+ this.browser = browser;
14
+ this.name = 'UnsupportedBrowserError';
15
+ }
16
+ }
17
+ export function createDriver(kind, config, session) {
18
+ if (kind === 'chrome') {
19
+ return CdpDriver.create(config, session);
20
+ }
21
+ throw new UnsupportedBrowserError(kind);
22
+ }
23
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/browser/driver/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,kEAAkE;AAClE,MAAM,CAAC,MAAM,eAAe,GAExB;IACF,OAAO,EAAE,qDAAqD;IAC9D,MAAM,EAAE,qDAAqD;IAC7D,MAAM,EAAE,qDAAqD;CAC9D,CAAC;AAEF,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC3B;IAArB,YAAqB,OAAuC;QAC1D,KAAK,CACH,0BAA0B,OAAO,kCAAkC;YACjE,0BAA0B,eAAe,CAAC,OAAO,CAAC,GAAG,CACxD,CAAC;QAJiB,YAAO,GAAP,OAAO,CAAgC;QAK1D,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAC1B,IAAiB,EACjB,MAAc,EACd,OAAsB;IAEtB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { CdpDriver } from './cdp-driver.js';
2
+ export { TOOL_CAPABILITIES, CapabilityError, assertToolSupported, missingCapabilities, unsupportedTools } from './capabilities.js';
3
+ export { createDriver, PLANNED_DRIVERS, UnsupportedBrowserError } from './factory.js';
4
+ export { BROWSER_KINDS, CAPABILITIES } from './types.js';
5
+ export type { BrowserDriver, BrowserKind, Capability, ConnectExistingOptions, DriverSession, ViewportResizeParams } from './types.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,eAAe,EACf,uBAAuB,EACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EACV,aAAa,EACb,WAAW,EACX,UAAU,EACV,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACrB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { CdpDriver } from './cdp-driver.js';
2
+ export { TOOL_CAPABILITIES, CapabilityError, assertToolSupported, missingCapabilities, unsupportedTools } from './capabilities.js';
3
+ export { createDriver, PLANNED_DRIVERS, UnsupportedBrowserError } from './factory.js';
4
+ export { BROWSER_KINDS, CAPABILITIES } from './types.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,eAAe,EACf,uBAAuB,EACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,106 @@
1
+ import type { ConsoleBuffer } from '../../mcp/console-buffer.js';
2
+ import type { ElementRefMap } from '../inspect/element-ref.js';
3
+ import type { DialogQueue } from '../interaction/dialogs.js';
4
+ import type { DownloadTracker } from '../interaction/downloads.js';
5
+ import type { NetworkBuffer } from '../network/network-buffer.js';
6
+ import type { TraceState } from '../performance/trace.js';
7
+ import type { LaunchOptions, SessionInfo, TabInfo } from '../types.js';
8
+ import type { ViewportConfig } from '../../viewport.js';
9
+ import type { CheckParams, CheckResult } from '../../commands/check.js';
10
+ import type { ClickParams, ClickResult } from '../../commands/click.js';
11
+ import type { DialogParams, DialogResult } from '../../commands/dialog.js';
12
+ import type { EvaluateParams, EvaluateResult } from '../../commands/evaluate.js';
13
+ import type { FillParams, FillResult } from '../../commands/fill.js';
14
+ import type { FindCommandResult, FindQuery } from '../../commands/find.js';
15
+ import type { HoverParams, HoverResult } from '../../commands/hover.js';
16
+ import type { NavigateParams, NavigateResult } from '../../commands/navigate.js';
17
+ import type { NetworkParams, NetworkResult } from '../../commands/network.js';
18
+ import type { PageInfoResult } from '../../commands/page_info.js';
19
+ import type { PerformanceParams, PerformanceResult } from '../../commands/performance.js';
20
+ import type { PressKeyParams, PressKeyResult } from '../../commands/press_key.js';
21
+ import type { ScreenshotParams, ScreenshotResult } from '../../commands/screenshot.js';
22
+ import type { ScrollParams, ScrollResult } from '../../commands/scroll.js';
23
+ import type { SelectParams, SelectResult } from '../../commands/select.js';
24
+ import type { SnapshotCommandResult } from '../../commands/snapshot.js';
25
+ import type { StylesCommandResult, StylesParams } from '../../commands/styles.js';
26
+ import type { NewTabResult } from '../../commands/tabs.js';
27
+ import type { TypeParams, TypeResult } from '../../commands/type.js';
28
+ import type { UploadParams, UploadResult } from '../../commands/upload.js';
29
+ import type { WaitParams, WaitResult } from '../../commands/wait.js';
30
+ /** Browsers Pilot knows about. Only `chrome` has a driver today. */
31
+ export declare const BROWSER_KINDS: readonly ["chrome", "firefox", "safari", "webkit"];
32
+ export type BrowserKind = (typeof BROWSER_KINDS)[number];
33
+ /**
34
+ * Features a driver may or may not provide. Each MCP tool declares the
35
+ * capabilities it needs (see capabilities.ts); a tool whose capabilities the
36
+ * active driver lacks fails with a CapabilityError before touching the browser.
37
+ */
38
+ export declare const CAPABILITIES: readonly ["tabs", "navigation", "evaluate", "input", "screenshot", "viewport", "accessibilitySnapshot", "styles", "console", "network", "dialogs", "uploads", "downloads", "performanceTrace", "connectExisting"];
39
+ export type Capability = (typeof CAPABILITIES)[number];
40
+ /**
41
+ * Per-session buffers shared between a driver and the MCP tools. The driver
42
+ * fills them from browser events; tools such as browser_console read them
43
+ * directly.
44
+ */
45
+ export interface DriverSession {
46
+ consoleBuffer: ConsoleBuffer;
47
+ elementRefMap: ElementRefMap;
48
+ networkBuffer: NetworkBuffer;
49
+ dialogQueue: DialogQueue;
50
+ downloadTracker: DownloadTracker;
51
+ traceState: TraceState;
52
+ }
53
+ export interface ConnectExistingOptions {
54
+ host?: string;
55
+ port?: number;
56
+ }
57
+ export interface ViewportResizeParams {
58
+ width: number;
59
+ height: number;
60
+ deviceScaleFactor?: number;
61
+ mobile?: boolean;
62
+ }
63
+ /**
64
+ * Browser-agnostic surface the MCP tools call. Each implementation owns its
65
+ * protocol (CDP, WebDriver BiDi, ...) and must not leak protocol types here.
66
+ */
67
+ export interface BrowserDriver {
68
+ readonly kind: BrowserKind;
69
+ readonly capabilities: ReadonlySet<Capability>;
70
+ launch(opts?: LaunchOptions): Promise<{
71
+ headless: boolean;
72
+ viewport: string;
73
+ }>;
74
+ connectExisting(opts: ConnectExistingOptions): Promise<{
75
+ tabs: TabInfo[];
76
+ }>;
77
+ destroy(): Promise<void>;
78
+ isConnected(): boolean;
79
+ getSessionInfo(): SessionInfo;
80
+ listTabs(): Promise<TabInfo[]>;
81
+ newTab(url?: string): Promise<NewTabResult>;
82
+ closeTab(targetId: string): Promise<void>;
83
+ switchTab(targetId: string): Promise<void>;
84
+ navigate(params: NavigateParams): Promise<NavigateResult>;
85
+ pageInfo(): Promise<PageInfoResult>;
86
+ evaluate(params: EvaluateParams): Promise<EvaluateResult>;
87
+ wait(params: WaitParams): Promise<WaitResult>;
88
+ screenshot(params: ScreenshotParams): Promise<ScreenshotResult>;
89
+ resizeViewport(params: ViewportResizeParams): Promise<ViewportConfig>;
90
+ snapshot(): Promise<SnapshotCommandResult>;
91
+ find(query: FindQuery): Promise<FindCommandResult>;
92
+ styles(params: StylesParams): Promise<StylesCommandResult>;
93
+ click(params: ClickParams): Promise<ClickResult>;
94
+ type(params: TypeParams): Promise<TypeResult>;
95
+ fill(params: FillParams): Promise<FillResult>;
96
+ hover(params: HoverParams): Promise<HoverResult>;
97
+ pressKey(params: PressKeyParams): Promise<PressKeyResult>;
98
+ select(params: SelectParams): Promise<SelectResult>;
99
+ check(params: CheckParams): Promise<CheckResult>;
100
+ scroll(params: ScrollParams): Promise<ScrollResult>;
101
+ dialog(params: DialogParams): Promise<DialogResult>;
102
+ upload(params: UploadParams): Promise<UploadResult>;
103
+ network(params: NetworkParams): Promise<NetworkResult>;
104
+ performance(params: PerformanceParams): Promise<PerformanceResult>;
105
+ }
106
+ //# sourceMappingURL=types.d.ts.map