@everydaydevopsio/pilot 0.5.2 → 0.6.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.
Files changed (306) hide show
  1. package/.mcp.json +9 -0
  2. package/AGENTS.md +9 -0
  3. package/CHANGELOG.md +64 -0
  4. package/CLAUDE.md +7 -7
  5. package/README.md +282 -69
  6. package/dist/browser/browser-manager.d.ts +60 -0
  7. package/dist/browser/browser-manager.d.ts.map +1 -0
  8. package/dist/browser/browser-manager.js +355 -0
  9. package/dist/browser/browser-manager.js.map +1 -0
  10. package/dist/browser/chrome-launcher.d.ts +31 -0
  11. package/dist/browser/chrome-launcher.d.ts.map +1 -0
  12. package/dist/browser/chrome-launcher.js +225 -0
  13. package/dist/browser/chrome-launcher.js.map +1 -0
  14. package/dist/browser/connection.d.ts +23 -0
  15. package/dist/browser/connection.d.ts.map +1 -0
  16. package/dist/browser/connection.js +53 -0
  17. package/dist/browser/connection.js.map +1 -0
  18. package/dist/browser/events.d.ts +9 -0
  19. package/dist/browser/events.d.ts.map +1 -0
  20. package/dist/browser/events.js +99 -0
  21. package/dist/browser/events.js.map +1 -0
  22. package/dist/browser/index.d.ts +4 -0
  23. package/dist/browser/index.d.ts.map +1 -0
  24. package/dist/browser/index.js +4 -0
  25. package/dist/browser/index.js.map +1 -0
  26. package/dist/browser/inspect/element-ref.d.ts +23 -0
  27. package/dist/browser/inspect/element-ref.d.ts.map +1 -0
  28. package/dist/browser/inspect/element-ref.js +52 -0
  29. package/dist/browser/inspect/element-ref.js.map +1 -0
  30. package/dist/browser/inspect/snapshot.d.ts +11 -0
  31. package/dist/browser/inspect/snapshot.d.ts.map +1 -0
  32. package/dist/browser/inspect/snapshot.js +282 -0
  33. package/dist/browser/inspect/snapshot.js.map +1 -0
  34. package/dist/browser/inspect/styles.d.ts +45 -0
  35. package/dist/browser/inspect/styles.d.ts.map +1 -0
  36. package/dist/browser/inspect/styles.js +190 -0
  37. package/dist/browser/inspect/styles.js.map +1 -0
  38. package/dist/browser/inspect/types.d.ts +35 -0
  39. package/dist/browser/inspect/types.d.ts.map +1 -0
  40. package/dist/browser/inspect/types.js +2 -0
  41. package/dist/browser/inspect/types.js.map +1 -0
  42. package/dist/browser/interaction/dialogs.d.ts +18 -0
  43. package/dist/browser/interaction/dialogs.d.ts.map +1 -0
  44. package/dist/browser/interaction/dialogs.js +35 -0
  45. package/dist/browser/interaction/dialogs.js.map +1 -0
  46. package/dist/browser/interaction/downloads.d.ts +23 -0
  47. package/dist/browser/interaction/downloads.d.ts.map +1 -0
  48. package/dist/browser/interaction/downloads.js +87 -0
  49. package/dist/browser/interaction/downloads.js.map +1 -0
  50. package/dist/browser/interaction/events.d.ts +17 -0
  51. package/dist/browser/interaction/events.d.ts.map +1 -0
  52. package/dist/browser/interaction/events.js +66 -0
  53. package/dist/browser/interaction/events.js.map +1 -0
  54. package/dist/browser/interaction/ref-resolver.d.ts +18 -0
  55. package/dist/browser/interaction/ref-resolver.d.ts.map +1 -0
  56. package/dist/browser/interaction/ref-resolver.js +32 -0
  57. package/dist/browser/interaction/ref-resolver.js.map +1 -0
  58. package/dist/browser/interaction/uploads.d.ts +4 -0
  59. package/dist/browser/interaction/uploads.d.ts.map +1 -0
  60. package/dist/browser/interaction/uploads.js +43 -0
  61. package/dist/browser/interaction/uploads.js.map +1 -0
  62. package/dist/browser/network/network-buffer.d.ts +19 -0
  63. package/dist/browser/network/network-buffer.d.ts.map +1 -0
  64. package/dist/browser/network/network-buffer.js +118 -0
  65. package/dist/browser/network/network-buffer.js.map +1 -0
  66. package/dist/browser/network/network-monitor.d.ts +8 -0
  67. package/dist/browser/network/network-monitor.d.ts.map +1 -0
  68. package/dist/browser/network/network-monitor.js +85 -0
  69. package/dist/browser/network/network-monitor.js.map +1 -0
  70. package/dist/browser/network/redaction.d.ts +3 -0
  71. package/dist/browser/network/redaction.d.ts.map +1 -0
  72. package/dist/browser/network/redaction.js +36 -0
  73. package/dist/browser/network/redaction.js.map +1 -0
  74. package/dist/browser/network/types.d.ts +45 -0
  75. package/dist/browser/network/types.d.ts.map +1 -0
  76. package/dist/browser/network/types.js +2 -0
  77. package/dist/browser/network/types.js.map +1 -0
  78. package/dist/browser/performance/analyze.d.ts +5 -0
  79. package/dist/browser/performance/analyze.d.ts.map +1 -0
  80. package/dist/browser/performance/analyze.js +230 -0
  81. package/dist/browser/performance/analyze.js.map +1 -0
  82. package/dist/browser/performance/trace.d.ts +10 -0
  83. package/dist/browser/performance/trace.d.ts.map +1 -0
  84. package/dist/browser/performance/trace.js +38 -0
  85. package/dist/browser/performance/trace.js.map +1 -0
  86. package/dist/browser/performance/types.d.ts +31 -0
  87. package/dist/browser/performance/types.d.ts.map +1 -0
  88. package/dist/browser/performance/types.js +2 -0
  89. package/dist/browser/performance/types.js.map +1 -0
  90. package/dist/browser/preflight.d.ts +20 -0
  91. package/dist/browser/preflight.d.ts.map +1 -0
  92. package/dist/browser/preflight.js +105 -0
  93. package/dist/browser/preflight.js.map +1 -0
  94. package/dist/browser/security/origins.d.ts +18 -0
  95. package/dist/browser/security/origins.d.ts.map +1 -0
  96. package/dist/browser/security/origins.js +84 -0
  97. package/dist/browser/security/origins.js.map +1 -0
  98. package/dist/browser/tabs.d.ts +15 -0
  99. package/dist/browser/tabs.d.ts.map +1 -0
  100. package/dist/browser/tabs.js +71 -0
  101. package/dist/browser/tabs.js.map +1 -0
  102. package/dist/browser/types.d.ts +32 -0
  103. package/dist/browser/types.d.ts.map +1 -0
  104. package/dist/browser/types.js +2 -0
  105. package/dist/browser/types.js.map +1 -0
  106. package/dist/browser.d.ts +2 -99
  107. package/dist/browser.d.ts.map +1 -1
  108. package/dist/browser.js +3 -653
  109. package/dist/browser.js.map +1 -1
  110. package/dist/cli/init.d.ts +3 -0
  111. package/dist/cli/init.d.ts.map +1 -1
  112. package/dist/cli/init.js +33 -48
  113. package/dist/cli/init.js.map +1 -1
  114. package/dist/cli/linux-check.d.ts +2 -0
  115. package/dist/cli/linux-check.d.ts.map +1 -0
  116. package/dist/cli/linux-check.js +20 -0
  117. package/dist/cli/linux-check.js.map +1 -0
  118. package/dist/cli/skill-template.d.ts +1 -1
  119. package/dist/cli/skill-template.d.ts.map +1 -1
  120. package/dist/cli/skill-template.js +3 -113
  121. package/dist/cli/skill-template.js.map +1 -1
  122. package/dist/commands/check.d.ts +17 -0
  123. package/dist/commands/check.d.ts.map +1 -0
  124. package/dist/commands/check.js +38 -0
  125. package/dist/commands/check.js.map +1 -0
  126. package/dist/commands/click.d.ts +3 -1
  127. package/dist/commands/click.d.ts.map +1 -1
  128. package/dist/commands/click.js +16 -4
  129. package/dist/commands/click.js.map +1 -1
  130. package/dist/commands/connect.d.ts +14 -0
  131. package/dist/commands/connect.d.ts.map +1 -0
  132. package/dist/commands/connect.js +19 -0
  133. package/dist/commands/connect.js.map +1 -0
  134. package/dist/commands/dialog.d.ts +19 -0
  135. package/dist/commands/dialog.d.ts.map +1 -0
  136. package/dist/commands/dialog.js +51 -0
  137. package/dist/commands/dialog.js.map +1 -0
  138. package/dist/commands/downloads.d.ts +30 -0
  139. package/dist/commands/downloads.d.ts.map +1 -0
  140. package/dist/commands/downloads.js +66 -0
  141. package/dist/commands/downloads.js.map +1 -0
  142. package/dist/commands/fill.d.ts +16 -0
  143. package/dist/commands/fill.d.ts.map +1 -0
  144. package/dist/commands/fill.js +15 -0
  145. package/dist/commands/fill.js.map +1 -0
  146. package/dist/commands/find.d.ts +14 -0
  147. package/dist/commands/find.d.ts.map +1 -0
  148. package/dist/commands/find.js +26 -0
  149. package/dist/commands/find.js.map +1 -0
  150. package/dist/commands/hover.d.ts +13 -0
  151. package/dist/commands/hover.d.ts.map +1 -0
  152. package/dist/commands/hover.js +24 -0
  153. package/dist/commands/hover.js.map +1 -0
  154. package/dist/commands/navigate.d.ts.map +1 -1
  155. package/dist/commands/navigate.js +13 -0
  156. package/dist/commands/navigate.js.map +1 -1
  157. package/dist/commands/network.d.ts +33 -0
  158. package/dist/commands/network.d.ts.map +1 -0
  159. package/dist/commands/network.js +84 -0
  160. package/dist/commands/network.js.map +1 -0
  161. package/dist/commands/performance.d.ts +12 -0
  162. package/dist/commands/performance.d.ts.map +1 -0
  163. package/dist/commands/performance.js +26 -0
  164. package/dist/commands/performance.js.map +1 -0
  165. package/dist/commands/press_key.d.ts +10 -0
  166. package/dist/commands/press_key.d.ts.map +1 -0
  167. package/dist/commands/press_key.js +103 -0
  168. package/dist/commands/press_key.js.map +1 -0
  169. package/dist/commands/scroll.d.ts +21 -0
  170. package/dist/commands/scroll.d.ts.map +1 -0
  171. package/dist/commands/scroll.js +54 -0
  172. package/dist/commands/scroll.js.map +1 -0
  173. package/dist/commands/select.d.ts +18 -0
  174. package/dist/commands/select.d.ts.map +1 -0
  175. package/dist/commands/select.js +53 -0
  176. package/dist/commands/select.js.map +1 -0
  177. package/dist/commands/snapshot.d.ts +9 -0
  178. package/dist/commands/snapshot.d.ts.map +1 -0
  179. package/dist/commands/snapshot.js +7 -0
  180. package/dist/commands/snapshot.js.map +1 -0
  181. package/dist/commands/styles.d.ts +13 -0
  182. package/dist/commands/styles.d.ts.map +1 -0
  183. package/dist/commands/styles.js +7 -0
  184. package/dist/commands/styles.js.map +1 -0
  185. package/dist/commands/type.d.ts +3 -1
  186. package/dist/commands/type.d.ts.map +1 -1
  187. package/dist/commands/type.js +11 -2
  188. package/dist/commands/type.js.map +1 -1
  189. package/dist/commands/upload.d.ts +12 -0
  190. package/dist/commands/upload.d.ts.map +1 -0
  191. package/dist/commands/upload.js +13 -0
  192. package/dist/commands/upload.js.map +1 -0
  193. package/dist/mcp/console-buffer.d.ts +9 -0
  194. package/dist/mcp/console-buffer.d.ts.map +1 -1
  195. package/dist/mcp/console-buffer.js.map +1 -1
  196. package/dist/mcp/index.js +20 -2
  197. package/dist/mcp/index.js.map +1 -1
  198. package/dist/mcp/server.d.ts +10 -0
  199. package/dist/mcp/server.d.ts.map +1 -1
  200. package/dist/mcp/server.js +63 -2
  201. package/dist/mcp/server.js.map +1 -1
  202. package/dist/mcp/tools/browser.d.ts.map +1 -1
  203. package/dist/mcp/tools/browser.js +109 -11
  204. package/dist/mcp/tools/browser.js.map +1 -1
  205. package/dist/mcp/tools/connect.d.ts +5 -0
  206. package/dist/mcp/tools/connect.d.ts.map +1 -0
  207. package/dist/mcp/tools/connect.js +48 -0
  208. package/dist/mcp/tools/connect.js.map +1 -0
  209. package/dist/mcp/tools/files.d.ts +4 -0
  210. package/dist/mcp/tools/files.d.ts.map +1 -0
  211. package/dist/mcp/tools/files.js +85 -0
  212. package/dist/mcp/tools/files.js.map +1 -0
  213. package/dist/mcp/tools/interaction.d.ts +4 -0
  214. package/dist/mcp/tools/interaction.d.ts.map +1 -0
  215. package/dist/mcp/tools/interaction.js +176 -0
  216. package/dist/mcp/tools/interaction.js.map +1 -0
  217. package/dist/mcp/tools/names.d.ts +1 -1
  218. package/dist/mcp/tools/names.d.ts.map +1 -1
  219. package/dist/mcp/tools/names.js +19 -1
  220. package/dist/mcp/tools/names.js.map +1 -1
  221. package/dist/mcp/tools/network.d.ts +4 -0
  222. package/dist/mcp/tools/network.d.ts.map +1 -0
  223. package/dist/mcp/tools/network.js +68 -0
  224. package/dist/mcp/tools/network.js.map +1 -0
  225. package/dist/mcp/tools/performance.d.ts +4 -0
  226. package/dist/mcp/tools/performance.d.ts.map +1 -0
  227. package/dist/mcp/tools/performance.js +26 -0
  228. package/dist/mcp/tools/performance.js.map +1 -0
  229. package/dist/mcp/tools/runtime.d.ts +4 -0
  230. package/dist/mcp/tools/runtime.d.ts.map +1 -0
  231. package/dist/mcp/tools/runtime.js +128 -0
  232. package/dist/mcp/tools/runtime.js.map +1 -0
  233. package/dist/mcp/tools/snapshot.d.ts +4 -0
  234. package/dist/mcp/tools/snapshot.d.ts.map +1 -0
  235. package/dist/mcp/tools/snapshot.js +42 -0
  236. package/dist/mcp/tools/snapshot.js.map +1 -0
  237. package/dist/mcp/tools/styles.d.ts +4 -0
  238. package/dist/mcp/tools/styles.d.ts.map +1 -0
  239. package/dist/mcp/tools/styles.js +27 -0
  240. package/dist/mcp/tools/styles.js.map +1 -0
  241. package/dist/util/config.d.ts.map +1 -1
  242. package/dist/util/config.js +3 -2
  243. package/dist/util/config.js.map +1 -1
  244. package/package.json +5 -4
  245. package/skills/pilot/SKILL.md +48 -0
  246. package/src/browser/browser-manager.ts +465 -0
  247. package/src/browser/chrome-launcher.ts +282 -0
  248. package/src/browser/connection.ts +84 -0
  249. package/src/browser/events.ts +121 -0
  250. package/src/browser/index.ts +20 -0
  251. package/src/browser/inspect/element-ref.ts +68 -0
  252. package/src/browser/inspect/snapshot.ts +348 -0
  253. package/src/browser/inspect/styles.ts +258 -0
  254. package/src/browser/inspect/types.ts +37 -0
  255. package/src/browser/interaction/dialogs.ts +54 -0
  256. package/src/browser/interaction/downloads.ts +116 -0
  257. package/src/browser/interaction/events.ts +79 -0
  258. package/src/browser/interaction/ref-resolver.ts +53 -0
  259. package/src/browser/interaction/uploads.ts +60 -0
  260. package/src/browser/network/network-buffer.ts +133 -0
  261. package/src/browser/network/network-monitor.ts +107 -0
  262. package/src/browser/network/redaction.ts +42 -0
  263. package/src/browser/network/types.ts +47 -0
  264. package/src/browser/performance/analyze.ts +298 -0
  265. package/src/browser/performance/trace.ts +60 -0
  266. package/src/browser/performance/types.ts +34 -0
  267. package/src/browser/preflight.ts +144 -0
  268. package/src/browser/security/origins.ts +102 -0
  269. package/src/browser/tabs.ts +110 -0
  270. package/src/browser/types.ts +32 -0
  271. package/src/browser.ts +22 -798
  272. package/src/cli/init.ts +40 -49
  273. package/src/cli/linux-check.ts +23 -0
  274. package/src/cli/skill-template.ts +4 -113
  275. package/src/commands/check.ts +59 -0
  276. package/src/commands/click.ts +18 -4
  277. package/src/commands/connect.ts +40 -0
  278. package/src/commands/dialog.ts +79 -0
  279. package/src/commands/downloads.ts +111 -0
  280. package/src/commands/fill.ts +34 -0
  281. package/src/commands/find.ts +52 -0
  282. package/src/commands/hover.ts +42 -0
  283. package/src/commands/navigate.ts +20 -0
  284. package/src/commands/network.ts +141 -0
  285. package/src/commands/performance.ts +51 -0
  286. package/src/commands/press_key.ts +134 -0
  287. package/src/commands/scroll.ts +79 -0
  288. package/src/commands/select.ts +78 -0
  289. package/src/commands/snapshot.ts +18 -0
  290. package/src/commands/styles.ts +24 -0
  291. package/src/commands/type.ts +12 -2
  292. package/src/commands/upload.ts +36 -0
  293. package/src/mcp/console-buffer.ts +10 -0
  294. package/src/mcp/index.ts +24 -2
  295. package/src/mcp/server.ts +74 -2
  296. package/src/mcp/tools/browser.ts +125 -9
  297. package/src/mcp/tools/connect.ts +62 -0
  298. package/src/mcp/tools/files.ts +120 -0
  299. package/src/mcp/tools/interaction.ts +232 -0
  300. package/src/mcp/tools/names.ts +19 -1
  301. package/src/mcp/tools/network.ts +86 -0
  302. package/src/mcp/tools/performance.ts +40 -0
  303. package/src/mcp/tools/runtime.ts +164 -0
  304. package/src/mcp/tools/snapshot.ts +64 -0
  305. package/src/mcp/tools/styles.ts +41 -0
  306. package/src/util/config.ts +3 -2
package/.mcp.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "mcpServers": {
3
+ "pilot": {
4
+ "type": "stdio",
5
+ "command": "node",
6
+ "args": ["dist/mcp/index.js"]
7
+ }
8
+ }
9
+ }
package/AGENTS.md ADDED
@@ -0,0 +1,9 @@
1
+ # Repository agent instructions
2
+
3
+ ## Local Pilot MCP configuration
4
+
5
+ - Keep `.codex/config.toml` and `.mcp.json` configured to run the compiled local Pilot server with `node dist/mcp/index.js`. Do not replace the local command with the published npm package in this repository.
6
+ - Keep `.codex/config.toml` synchronized with every tool exported by `src/mcp/tools/names.ts`. All listed Pilot tools must remain enabled and use the already-approved approval mode.
7
+ - 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.
8
+ - Build Pilot with `pnpm run build` before testing either MCP configuration so `dist/mcp/index.js` reflects the current source.
9
+ - 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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,64 @@
1
+ # Changelog
2
+
3
+ ## 0.6.0
4
+
5
+ Agent-oriented browser debugging and interaction release. Adds structured accessibility snapshots, element ref-based interaction, network/console/CSS inspection, file operations, performance tracing, security controls, and existing Chrome connection support.
6
+
7
+ ### New Tools (18)
8
+
9
+ - **`browser_snapshot`** — Structured accessibility snapshot with element refs (e1, e2, ...)
10
+ - **`browser_find`** — Find elements by role, name, or text
11
+ - **`browser_fill`** — Replace form field value (React/Vue/Svelte compatible)
12
+ - **`browser_hover`** — Hover over element by ref or coordinates
13
+ - **`browser_press_key`** — Press key or combo (Enter, Tab, Control+a, Meta+c)
14
+ - **`browser_select`** — Select option by value, label, or index
15
+ - **`browser_check`** — Toggle checkbox/radio
16
+ - **`browser_scroll`** — Scroll element into view, by direction, or absolute
17
+ - **`browser_network`** — List/get/clear captured network requests with header redaction
18
+ - **`browser_console`** — List/clear console messages with stack traces
19
+ - **`browser_errors`** — List/clear runtime errors and exceptions
20
+ - **`browser_styles`** — Inspect computed styles, CSS rules, and box model
21
+ - **`browser_dialog`** — Handle alert/confirm/prompt dialogs
22
+ - **`browser_upload`** — Upload files with path validation
23
+ - **`browser_downloads`** — Track file downloads (list/wait/clear)
24
+ - **`browser_performance`** — Start/stop tracing; analyze navigation timing, long tasks
25
+ - **`browser_connect`** — Connect to existing Chrome with remote debugging
26
+ - **`browser_tabs`** — Consolidated tab management (list/new/select/close)
27
+
28
+ ### Enhanced Tools
29
+
30
+ - **`browser_click`** — Now accepts `ref` parameter alongside selector/coordinates
31
+ - **`browser_type`** — Now accepts `ref` parameter alongside selector
32
+ - **`browser_navigate`** — Origin security check before and after navigation (redirect protection)
33
+
34
+ ### Architecture
35
+
36
+ - Split `src/browser.ts` (799 lines) into cohesive modules under `src/browser/`
37
+ - Element ref system: `ElementRefMap` with generation tracking, `STALE_ELEMENT_REFERENCE` errors
38
+ - Network buffer: ring buffer (~1000 records) with lazy body retrieval and header redaction
39
+ - Runtime exceptions: `Runtime.exceptionThrown` capture with full stack frames
40
+ - CSS inspection: lazy `CSS.enable()` per client via `WeakRef` tracking
41
+ - Dialog queue, download tracker, upload validation with allowed-root security
42
+ - Performance tracing: CDP Tracing + Performance.getMetrics with bounded analysis
43
+ - External Chrome lifecycle: `browser_stop` disconnects without killing external Chrome
44
+
45
+ ### Security
46
+
47
+ - `PILOT_ALLOWED_ORIGINS` / `PILOT_BLOCKED_ORIGINS` — origin allow/block lists with wildcard support
48
+ - Block wins over allow; scheme-less patterns match host only
49
+ - Post-navigation redirect check — navigate to `about:blank` on violation
50
+ - `PILOT_REDACT_HEADERS` — configurable header redaction (default: Authorization, Cookie, Set-Cookie, X-Api-Key, Proxy-Authorization)
51
+ - `PILOT_UPLOAD_ROOTS` — allowed directories for file uploads
52
+
53
+ ### Backward Compatibility
54
+
55
+ All 17 original 0.5.x tools remain working unchanged. Legacy tab tools (`browser_list_tabs`, `browser_new_tab`, `browser_close_tab`, `browser_switch_tab`) and error tools (`browser_get_console_logs`, `browser_get_errors`, `browser_clear_errors`) are preserved.
56
+
57
+ ## 0.5.2
58
+
59
+ - Upgraded Ballast to v5.17.2
60
+ - Fixed headless default behavior
61
+
62
+ ## 0.5.1
63
+
64
+ - Initial public release
package/CLAUDE.md CHANGED
@@ -25,7 +25,7 @@ This repository publishes to **npmjs** under the `@everydaydevopsio` scope.
25
25
 
26
26
  ## Installed agent rules
27
27
 
28
- Created by [Ballast](https://github.com/everydaydevopsio/ballast) v5.9.2. Do not edit this section.
28
+ Created by [Ballast](https://github.com/everydaydevopsio/ballast) v5.17.2. Do not edit this section.
29
29
 
30
30
  Read and follow these rule files in `.claude/rules/` when they apply:
31
31
 
@@ -36,24 +36,24 @@ Read and follow these rule files in `.claude/rules/` when they apply:
36
36
  - `.claude/rules/docs.md` — Documentation specialist - GitHub Markdown docs by default, or maintain existing Docusaurus sites with publish-docs automation
37
37
  - `.claude/rules/cicd.md` — CI/CD specialist - pipeline design, quality gates, and deployment
38
38
  - `.claude/rules/observability.md` — Observability specialist - logging, tracing, metrics, and SLOs
39
- - `.claude/rules/publishing-api.md` — REST API publishing specialist - Docker CD with Kubernetes health probes and Helm chart update
39
+ - `.claude/rules/publishing-api.md` — REST API publishing specialist - Docker or platform service CD with runtime health checks
40
40
  - `.claude/rules/publishing-apps.md` — App publishing specialist - npmjs for Node apps, PyPI for Python apps, GitHub Releases for Go apps
41
41
  - `.claude/rules/publishing-apt.md` — APT/deb package publishing specialist - GoReleaser nfpms and GitHub Releases
42
42
  - `.claude/rules/publishing-brew.md` — Homebrew tap publishing specialist - GoReleaser brews block and tap repo setup
43
43
  - `.claude/rules/publishing-cli.md` — CLI publishing specialist - GoReleaser for Go, npmjs for Node, PyPI for Python
44
44
  - `.claude/rules/publishing-libraries.md` — Library publishing specialist - npmjs for TypeScript, PyPI for Python, GitHub tags/releases for Go
45
45
  - `.claude/rules/publishing-sdks.md` — SDK publishing specialist - npmjs for TypeScript SDKs, PyPI for Python SDKs, GitHub tags/releases for Go SDKs
46
- - `.claude/rules/publishing-web.md` — Web app publishing specialist - Docker to GHCR/Docker Hub with Helm chart CD on push to main
46
+ - `.claude/rules/publishing-web.md` — Web app publishing specialist - Docker or platform app CD on push to main
47
47
  - `.claude/rules/typescript-linting.md` — TypeScript linting specialist - implements comprehensive linting and code formatting for TypeScript/JavaScript projects
48
48
  - `.claude/rules/typescript-logging.md` — Centralized logging specialist - configures Pino with Fluentd for Node/Next.js, and pino-browser to /api/logs
49
49
  - `.claude/rules/typescript-testing.md` — Testing specialist - sets up Jest (default) or Vitest for Vite projects, 50% coverage, and test step in build GitHub Action
50
- - `.claude/rules/git-hooks.md` — Git hook specialist - configure pre-commit, pre-push, and Husky workflows that match the repository layout
51
- - `.claude/rules/tasks-task-system.md` — Task system integration - use {{taskSystem}} for work items and configure the MCP server
52
- - `.claude/rules/tasks-todo.md` — Branch-local TODO tracking - manage tasks/TODO.md and triage before PR
50
+ - `.claude/rules/git-hooks.md` — Rules for git-hooks
51
+ - `.claude/rules/tasks-task-system.md` — Task system integration - use the configured work item system and configure MCP when active
52
+ - `.claude/rules/tasks-todo.md` — Branch-local TODO tracking - manage tasks/todo.md and triage before PR
53
53
 
54
54
  ## Installed skills
55
55
 
56
- Created by [Ballast](https://github.com/everydaydevopsio/ballast) v5.9.2. Do not edit this section.
56
+ Created by [Ballast](https://github.com/everydaydevopsio/ballast) v5.17.2. Do not edit this section.
57
57
 
58
58
  Read and use these skill files in `.claude/skills/` when they are relevant:
59
59
 
package/README.md CHANGED
@@ -7,9 +7,9 @@
7
7
  [![GitHub Release](https://img.shields.io/github/v/release/everydaydevopsio/pilot)](https://github.com/everydaydevopsio/pilot/releases)
8
8
  [![npm version](https://img.shields.io/npm/v/@everydaydevopsio/pilot.svg)](https://www.npmjs.com/package/@everydaydevopsio/pilot)
9
9
 
10
- A lightweight Node.js/TypeScript MCP server that gives AI agents DevTools-grade control over a running Chrome instance. Connects to Chrome via the Chrome DevTools Protocol (CDP) and exposes MCP tools for screenshots, navigation, clicks, typing, JavaScript evaluation, and live console/network event monitoring.
10
+ A lightweight Node.js/TypeScript MCP server that gives AI agents DevTools-grade control over a running Chrome instance. Connects to Chrome via the Chrome DevTools Protocol (CDP) and exposes 35 MCP tools for browser automation, inspection, and debugging — including structured accessibility snapshots, element ref-based interaction, network/console/CSS inspection, file operations, performance tracing, and security controls.
11
11
 
12
- Use pilot to open a URL and watch for errors — from any AI agent that speaks MCP.
12
+ Use pilot to open a URL, interact with it using semantic element refs, inspect network traffic, diagnose CSS issues, and watch for errors — all from any AI agent that speaks MCP.
13
13
 
14
14
  ## Prerequisites
15
15
 
@@ -55,6 +55,56 @@ pnpm run build
55
55
  pnpm start
56
56
  ```
57
57
 
58
+ ### Linux preflight
59
+
60
+ Before launching Chrome on Linux, verify the browser environment:
61
+
62
+ ```bash
63
+ pilot check
64
+ ```
65
+
66
+ The command checks that Chrome is executable, the Pilot profile directory is
67
+ writable, an ephemeral CDP port can bind on `127.0.0.1`, outbound HTTPS works,
68
+ and a graphical display is available when `PILOT_HEADLESS=false`.
69
+
70
+ Visible Chrome requires `DISPLAY` or `WAYLAND_DISPLAY`. On a Linux server or in
71
+ CI, use `PILOT_HEADLESS=true`. To exercise visible-mode behavior without a real
72
+ desktop, run Pilot under Xvfb:
73
+
74
+ ```bash
75
+ xvfb-run -a npx @everydaydevopsio/pilot
76
+ ```
77
+
78
+ #### Remote Linux sessions
79
+
80
+ When Codex or Claude runs over SSH or in a remote desktop session, the agent's
81
+ MCP process may not inherit the remote display even though applications such as
82
+ `xterm` open successfully. Check the display inside that session with
83
+ `printenv DISPLAY`, forward the value to the Pilot MCP server, and restart the
84
+ agent. With Codex, for example:
85
+
86
+ ```toml
87
+ [mcp_servers.pilot]
88
+ command = "npx"
89
+ args = ["-y", "@everydaydevopsio/pilot"]
90
+ env = { DISPLAY = ":1" }
91
+ ```
92
+
93
+ Replace `:1` with the value from the remote session. Forward `XAUTHORITY` too if
94
+ the X server requires it. For SSH-based display forwarding, start the agent from
95
+ the `ssh -Y` session so it inherits the forwarded display; forwarded display
96
+ values can change between sessions.
97
+
98
+ Sandboxed environments must allow loopback socket binding for Chrome DevTools.
99
+ An `EPERM` error while binding `127.0.0.1` is a host sandbox or container-policy
100
+ restriction, not a Chrome renderer-sandbox failure. Do not work around it with
101
+ `PILOT_CHROME_NO_SANDBOX=true`; allow loopback binding instead. If the home
102
+ directory is read-only, point profiles at a writable location, for example:
103
+
104
+ ```bash
105
+ export XDG_DATA_HOME=/tmp/pilot-data
106
+ ```
107
+
58
108
  ### With Docker
59
109
 
60
110
  To use the MCP server from a Docker container, pass `-i` so stdin stays open for stdio communication:
@@ -64,6 +114,104 @@ docker build -t pilot .
64
114
  claude mcp add pilot -- docker run -i --rm pilot
65
115
  ```
66
116
 
117
+ ## Codex Integration
118
+
119
+ Codex reads MCP server configuration from `config.toml`. Use
120
+ `~/.codex/config.toml` for a user-level install that follows you across repos,
121
+ or `.codex/config.toml` for a project-level install that applies when Codex is
122
+ started from this trusted repo.
123
+
124
+ ### User-level install
125
+
126
+ Add pilot to your user Codex config with the Codex CLI:
127
+
128
+ ```bash
129
+ codex mcp add pilot -- npx -y @everydaydevopsio/pilot
130
+ ```
131
+
132
+ Verify the server is configured:
133
+
134
+ ```bash
135
+ codex mcp list
136
+ ```
137
+
138
+ Restart Codex, then run `/mcp` in the Codex TUI to confirm that `pilot` is
139
+ connected.
140
+
141
+ ### Project-level install
142
+
143
+ To make pilot available for a repo only, add a project-scoped Codex config at
144
+ `.codex/config.toml`. For projects that consume the published package, use the
145
+ portable configuration below:
146
+
147
+ ```toml
148
+ [mcp_servers.pilot]
149
+ command = "npx"
150
+ args = ["-y", "@everydaydevopsio/pilot"]
151
+ ```
152
+
153
+ Project-scoped config is loaded only after you trust the project in Codex. Commit
154
+ `.codex/config.toml` only when it works for all contributors, such as the `npx`
155
+ example above or a repository-relative local build configured by the repository.
156
+ Keep local-build configs with absolute paths in your user config or an
157
+ uncommitted local override.
158
+
159
+ ### Visible Chrome cannot find the Linux display
160
+
161
+ If desktop applications open normally but `browser_start` reports that
162
+ `DISPLAY` or `WAYLAND_DISPLAY` is missing, the Codex MCP process did not inherit
163
+ the graphical session environment. Check the display used by the desktop
164
+ session:
165
+
166
+ ```bash
167
+ printenv DISPLAY
168
+ ```
169
+
170
+ Forward that value to Pilot in the applicable Codex `config.toml`. For example,
171
+ if the command prints `:1`:
172
+
173
+ ```toml
174
+ [mcp_servers.pilot]
175
+ command = "npx"
176
+ args = ["-y", "@everydaydevopsio/pilot"]
177
+ env = { DISPLAY = ":1" }
178
+ ```
179
+
180
+ Restart Codex after changing the configuration so the Pilot MCP server starts
181
+ with the updated environment. If the graphical session requires an Xauthority
182
+ cookie, forward `XAUTHORITY` in the same `env` map.
183
+
184
+ ### Local build
185
+
186
+ When developing pilot itself, build the package first and point Codex at the
187
+ compiled server:
188
+
189
+ This repository commits `.codex/config.toml` with a repository-relative entry
190
+ point. Run the pinned setup before starting Codex from the repository root:
191
+
192
+ ```bash
193
+ make setup
194
+ ```
195
+
196
+ For a local build outside this repository's project config, use an absolute
197
+ path:
198
+
199
+ ```bash
200
+ pnpm run build
201
+ codex mcp add pilot-local -- node /path/to/pilot/dist/mcp/index.js
202
+ ```
203
+
204
+ Or use the equivalent project-scoped config:
205
+
206
+ ```toml
207
+ [mcp_servers.pilot]
208
+ command = "node"
209
+ args = ["/path/to/pilot/dist/mcp/index.js"]
210
+ ```
211
+
212
+ Do not commit project-scoped local-build configs with absolute paths; they are
213
+ machine-specific.
214
+
67
215
  ## Claude Code Integration
68
216
 
69
217
  Add the MCP server to Claude Code:
@@ -94,49 +242,109 @@ Or add to `.mcp.json` in your project:
94
242
 
95
243
  **Browser Lifecycle:**
96
244
 
97
- | Tool | Description |
98
- | --------------- | ------------- |
99
- | `browser_start` | Launch Chrome |
100
- | `browser_stop` | Stop Chrome |
245
+ | Tool | Description |
246
+ | ----------------- | --------------------------------------------------- |
247
+ | `browser_start` | Launch Chrome |
248
+ | `browser_stop` | Stop Chrome (or disconnect from external Chrome) |
249
+ | `browser_connect` | Connect to an existing Chrome with remote debugging |
250
+
251
+ **Snapshot & Find:**
252
+
253
+ | Tool | Description |
254
+ | ------------------ | ------------------------------------------------------ |
255
+ | `browser_snapshot` | Accessibility snapshot with element refs (e1, e2, ...) |
256
+ | `browser_find` | Find elements by role, name, or text |
257
+
258
+ **Interaction (ref-based):**
259
+
260
+ | Tool | Description |
261
+ | ------------------- | --------------------------------------------------- |
262
+ | `browser_click` | Click by ref, CSS selector, or coordinates |
263
+ | `browser_type` | Type text into ref, selector, or focused element |
264
+ | `browser_fill` | Replace field value (React/Vue/Svelte compatible) |
265
+ | `browser_hover` | Hover over element by ref or coordinates |
266
+ | `browser_press_key` | Press key or combo (Enter, Tab, Control+a, etc.) |
267
+ | `browser_select` | Select option by value, label, or index |
268
+ | `browser_check` | Toggle checkbox/radio |
269
+ | `browser_scroll` | Scroll element into view, by direction, or absolute |
270
+
271
+ **Inspection:**
272
+
273
+ | Tool | Description |
274
+ | ------------------------- | ------------------------------------------------- |
275
+ | `browser_screenshot` | Capture viewport or full page screenshot |
276
+ | `browser_navigate` | Navigate to URL (with origin security check) |
277
+ | `browser_evaluate` | Execute JavaScript and return result |
278
+ | `browser_wait` | Wait for selector, network idle, or fixed delay |
279
+ | `browser_page_info` | Get current URL, title, and ready state |
280
+ | `browser_viewport_resize` | Resize the viewport to new dimensions |
281
+ | `browser_styles` | Inspect computed styles, CSS rules, and box model |
282
+
283
+ **Network & Console:**
284
+
285
+ | Tool | Description |
286
+ | ----------------- | --------------------------------------------- |
287
+ | `browser_network` | List/get/clear captured network requests |
288
+ | `browser_console` | List/clear console messages with stack traces |
289
+ | `browser_errors` | List/clear runtime errors and exceptions |
290
+
291
+ **Files & Dialogs:**
101
292
 
102
- **Browser Control:**
293
+ | Tool | Description |
294
+ | ------------------- | -------------------------------------- |
295
+ | `browser_dialog` | Handle alert/confirm/prompt dialogs |
296
+ | `browser_upload` | Upload files to file input elements |
297
+ | `browser_downloads` | Track file downloads (list/wait/clear) |
103
298
 
104
- | Tool | Description |
105
- | ------------------------- | ------------------------------------------------ |
106
- | `browser_screenshot` | Capture viewport or full page screenshot |
107
- | `browser_navigate` | Navigate to URL and wait for load |
108
- | `browser_click` | Click element by CSS selector or coordinates |
109
- | `browser_type` | Type text into focused element or selector |
110
- | `browser_evaluate` | Execute JavaScript and return result |
111
- | `browser_wait` | Wait for selector, network idle, or fixed delay |
112
- | `browser_page_info` | Get current URL, title, and ready state |
113
- | `browser_viewport_resize` | Resize the viewport to new dimensions at runtime |
299
+ **Performance:**
114
300
 
115
- **Error Monitoring:**
301
+ | Tool | Description |
302
+ | --------------------- | ------------------------------------------------------------------------ |
303
+ | `browser_performance` | Start/stop tracing; analyze navigation timing, long tasks, slow requests |
304
+
305
+ **Tab Management:**
306
+
307
+ | Tool | Description |
308
+ | -------------- | ----------------------------------------- |
309
+ | `browser_tabs` | List/new/select/close tabs (consolidated) |
310
+
311
+ <details>
312
+ <summary>Legacy tools (backward compatible)</summary>
116
313
 
117
314
  | Tool | Description |
118
315
  | -------------------------- | -------------------------------------------- |
316
+ | `browser_list_tabs` | List all open tabs |
317
+ | `browser_new_tab` | Open a new tab |
318
+ | `browser_close_tab` | Close a tab |
319
+ | `browser_switch_tab` | Switch to a tab |
119
320
  | `browser_get_console_logs` | Get buffered console messages with filters |
120
321
  | `browser_get_errors` | Get console errors (and optionally warnings) |
121
322
  | `browser_clear_errors` | Clear the console message buffer |
122
323
 
324
+ </details>
325
+
123
326
  ## Configuration
124
327
 
125
328
  All configuration via environment variables.
126
329
 
127
- | Env var | Default | Description |
128
- | ------------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
129
- | `PILOT_CDP_PORT` | `9222` | CDP port when connecting to an existing Chrome (ignored when `browser_start` launches Chrome) |
130
- | `PILOT_CDP_HOST` | `127.0.0.1` | CDP host when connecting to an existing Chrome (ignored when `browser_start` launches Chrome) |
131
- | `PILOT_LOG_LEVEL` | `info` | Pino log level |
132
- | `PILOT_CHROME_PATH` | (auto) | Path to Chrome executable |
133
- | `PILOT_HEADLESS` | `true` | Run Chrome headless |
134
- | `PILOT_MCP_BUFFER_SIZE` | `1000` | Console message buffer size |
135
- | `PILOT_PROFILE_NAME` | `profile1` | Persistent browser profile name. Profiles are stored under `$XDG_DATA_HOME/pilot/<name>` (default `~/.local/share/pilot/<name>`). |
136
- | `PILOT_RESPONSIVE` | (preset) | Responsive viewport mode. When `true`, the page uses real window dimensions and reflows on resize. Desktop presets default to `true`; mobile/tablet presets leave this unset (locked viewport). Set to `false` to lock the viewport with `setDeviceMetricsOverride`. |
137
- | `PILOT_CHROME_NO_SANDBOX` | (auto) | Force `--no-sandbox` on/off. Accepts `true`/`1` or `false`/`0`. When unset, the flag is auto-applied only when running as root on Linux. See [Chrome sandbox](#chrome-sandbox) below. |
138
-
139
- > **Tip — seeing the browser window:** By default Chrome runs headless (no visible window). To watch the browser while the agent works, ask the AI agent: _"set headless to false"_ (or _"run Chrome with a visible window"_). The agent will set `PILOT_HEADLESS=false` before calling `browser_start`, and a Chrome window will appear on your desktop.
330
+ | Env var | Default | Description |
331
+ | ------------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
332
+ | `PILOT_CDP_PORT` | `9222` | CDP port when connecting to an existing Chrome (ignored when `browser_start` launches Chrome) |
333
+ | `PILOT_CDP_HOST` | `127.0.0.1` | CDP host when connecting to an existing Chrome (ignored when `browser_start` launches Chrome) |
334
+ | `PILOT_LOG_LEVEL` | `info` | Pino log level |
335
+ | `PILOT_CHROME_PATH` | (auto) | Path to Chrome executable |
336
+ | `PILOT_HEADLESS` | `false` | Run Chrome headless. Accepts `true`/`1` or `false`/`0`. |
337
+ | `PILOT_MCP_BUFFER_SIZE` | `1000` | Console message buffer size |
338
+ | `PILOT_PROFILE_NAME` | `profile1` | Persistent browser profile name. Profiles are stored under `$XDG_DATA_HOME/pilot/<name>` (default `~/.local/share/pilot/<name>`). |
339
+ | `PILOT_RESPONSIVE` | (preset) | Responsive viewport mode. When `true`, the page uses real window dimensions and reflows on resize. Desktop presets default to `true`; mobile/tablet presets leave this unset (locked viewport). Set to `false` to lock the viewport with `setDeviceMetricsOverride`. |
340
+ | `PILOT_CHROME_NO_SANDBOX` | (auto) | Force `--no-sandbox` on/off. Accepts `true`/`1` or `false`/`0`. When unset, the flag is auto-applied only when running as root on Linux. See [Chrome sandbox](#chrome-sandbox) below. |
341
+ | `PILOT_ALLOWED_ORIGINS` | (none) | Comma-separated origin allow list. Supports wildcards (`*.example.com`). When set, only matching origins can be navigated to. |
342
+ | `PILOT_BLOCKED_ORIGINS` | (none) | Comma-separated origin block list. Block wins over allow. Supports wildcards. |
343
+ | `PILOT_REDACT_HEADERS` | (defaults) | Additional headers to redact in network inspection. Default: Authorization, Cookie, Set-Cookie, X-Api-Key, Proxy-Authorization. |
344
+ | `PILOT_UPLOAD_ROOTS` | (cwd) | Comma-separated allowed directories for file uploads. |
345
+ | `PILOT_DOWNLOAD_DIR` | `<tmpdir>/pilot-downloads` | Directory for tracked downloads. Defaults to a `pilot-downloads` subdirectory under the OS temp dir. |
346
+
347
+ > **Tip — running headless:** By default Chrome opens a visible browser window. To run headless (no visible window), set `PILOT_HEADLESS=true` or ask the AI agent: _"set headless to true"_ (or _"run Chrome headless"_). The agent will set `PILOT_HEADLESS=true` before calling `browser_start`.
140
348
 
141
349
  ### Responsive viewport mode
142
350
 
@@ -189,63 +397,68 @@ pnpm run test:e2e:mcp:docker
189
397
 
190
398
  ```
191
399
  src/
192
- ├── browser.ts # CDP connection + reconnect logic
193
- ├── cli/ # CLI commands
194
- │ ├── init.ts # Init command (creates skill)
195
- │ └── skill-template.ts # SKILL.md template
196
- ├── commands/ # CDP command implementations
197
- │ ├── screenshot.ts
198
- │ ├── navigate.ts
199
- │ ├── click.ts
200
- │ ├── type.ts
201
- │ ├── evaluate.ts
202
- │ ├── wait.ts
203
- │ └── page_info.ts
204
- ├── mcp/ # MCP server (sole entry point)
205
- │ ├── index.ts # Entry point (stdio)
206
- │ ├── server.ts # MCP server setup
207
- │ ├── console-buffer.ts # Console message buffer
208
- │ └── tools/
209
- │ ├── browser.ts # Browser control tools
210
- │ └── errors.ts # Error monitoring tools
211
- └── util/
212
- ├── config.ts # Configuration loading
213
- └── logger.ts # Pino logger setup
214
- ```
215
-
216
- ## Claude Code Skill
217
-
218
- The `init` command creates a Claude Code skill in your project that automates the browser debugging workflow.
400
+ ├── browser.ts # Backward-compatible re-export barrel
401
+ ├── browser/ # Core browser modules
402
+ │ ├── browser-manager.ts # BrowserManager orchestrator
403
+ │ ├── chrome-launcher.ts # Chrome process management
404
+ │ ├── connection.ts # CDP connection + reconnect
405
+ │ ├── events.ts # CDP event listeners
406
+ │ ├── tabs.ts # Tab management
407
+ │ ├── types.ts # Shared types
408
+ │ ├── inspect/ # Snapshot, styles, element refs
409
+ │ ├── interaction/ # Dialogs, uploads, downloads, ref resolver
410
+ │ ├── network/ # Network buffer, monitor, header redaction
411
+ │ ├── performance/ # Tracing + analysis
412
+ │ └── security/ # Origin allow/block lists
413
+ ├── cli/ # CLI commands (init, Linux preflight)
414
+ ├── commands/ # Tool command implementations
415
+ ├── mcp/ # MCP server + tool registrations
416
+ └── util/ # Config, logger
417
+ ```
418
+
419
+ ## Pilot Skill for Claude Code and Codex
420
+
421
+ The `init` command installs a project skill that teaches Claude Code or Codex how
422
+ to run and troubleshoot Pilot.
219
423
 
220
424
  ### Initialize the Skill
221
425
 
222
426
  ```bash
223
427
  # Using npx (no installation required)
224
- npx @everydaydevopsio/pilot init
428
+ npx @everydaydevopsio/pilot init --agent claude
429
+ npx @everydaydevopsio/pilot init --agent codex
430
+
431
+ # Install for both agents
432
+ npx @everydaydevopsio/pilot init --agent both
225
433
 
226
434
  # If installed globally
227
- pilot init
435
+ pilot init --agent codex
228
436
 
229
437
  # Overwrite existing skill
230
- pilot init --force
438
+ pilot init --agent codex --force
231
439
  ```
232
440
 
233
- This creates `.claude/skills/debug-browser/SKILL.md` in your project.
441
+ The Claude target is `.claude/skills/pilot/SKILL.md`; the Codex target is
442
+ `.agents/skills/pilot/SKILL.md`. Omitting `--agent` continues to default to
443
+ Claude for compatibility. Restart the agent after installation if it does not
444
+ detect the skill immediately.
234
445
 
235
446
  ### Using the Skill
236
447
 
237
- In Claude Code, say **"debug in browser"** or use **/debug-browser**. The skill will:
448
+ Ask Claude or Codex to **"use Pilot to open and debug this page"**, or invoke the
449
+ `pilot` skill explicitly. The skill teaches the agent to:
238
450
 
239
- 1. Add the MCP server to your Claude Code session
240
- 2. Call `browser_start` to launch Chrome
241
- 3. Spawn a background sub-agent to watch for console errors
451
+ 1. Start Chrome and navigate with the Pilot MCP tools
452
+ 2. Use accessibility snapshots and stable element refs for interaction
453
+ 3. Inspect console errors, failed requests, styles, and performance data
454
+ 4. Diagnose Linux display, profile, Chrome, and loopback preflight failures
242
455
 
243
456
  ### Error Watching Workflow
244
457
 
245
- 1. Ask Claude: "Use pilot to open localhost:3000 and watch for errors"
246
- 2. Claude clears the error buffer and tells you to proceed
458
+ 1. Ask the agent: "Use pilot to open localhost:3000 and watch for errors"
459
+ 2. The agent clears the error buffer and tells you to proceed
247
460
  3. You interact with the app in Chrome
248
- 4. Claude periodically checks for errors and can fix them in your source code
461
+ 4. The agent checks for errors and can fix them in your source code
249
462
 
250
463
  ## License
251
464
 
@@ -0,0 +1,60 @@
1
+ import type { Client } from 'chrome-remote-interface';
2
+ import type { Config } from '../util/config.js';
3
+ import type { ViewportConfig } from '../viewport.js';
4
+ import type { BrowserEventCallback, BrowserState, LaunchOptions, TabInfo } from './types.js';
5
+ export declare class BrowserManager {
6
+ private readonly config;
7
+ private client;
8
+ private targetId;
9
+ private currentUrl;
10
+ private retryTimer;
11
+ private retryMs;
12
+ private destroyed;
13
+ private intentionalClose;
14
+ private eventCallback;
15
+ private pendingNetworkRequests;
16
+ private networkIdleTimer;
17
+ private networkIdleResolvers;
18
+ private chromeProcess;
19
+ private launchedCdpPort;
20
+ private viewportConfig;
21
+ private launchedUserDataDir;
22
+ private external;
23
+ private externalHost;
24
+ private externalPort;
25
+ constructor(config: Config);
26
+ setEventCallback(cb: BrowserEventCallback): void;
27
+ private emit;
28
+ getState(): BrowserState;
29
+ getClient(): Client | null;
30
+ isConnected(): boolean;
31
+ isLaunched(): boolean;
32
+ isExternalChrome(): boolean;
33
+ getViewportConfig(): ViewportConfig | null;
34
+ setViewportConfig(config: ViewportConfig): void;
35
+ static findChromeExecutable(override?: string): string;
36
+ static findFreePort(): Promise<number>;
37
+ private getConnectionInfo;
38
+ private makeEventListenerOpts;
39
+ launch(opts?: LaunchOptions): Promise<{
40
+ headless: boolean;
41
+ viewport: string;
42
+ }>;
43
+ connect(): Promise<void>;
44
+ connectExisting(opts: {
45
+ host?: string;
46
+ port?: number;
47
+ }): Promise<{
48
+ tabs: TabInfo[];
49
+ }>;
50
+ private checkNetworkIdle;
51
+ waitForNetworkIdle(timeoutMs?: number): Promise<void>;
52
+ listTabs(): Promise<TabInfo[]>;
53
+ createTab(url?: string): Promise<TabInfo>;
54
+ closeTab(targetId: string): Promise<void>;
55
+ switchTab(targetId: string): Promise<void>;
56
+ private scheduleReconnect;
57
+ private cleanupUserDataDir;
58
+ destroy(): Promise<void>;
59
+ }
60
+ //# sourceMappingURL=browser-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-manager.d.ts","sourceRoot":"","sources":["../../src/browser/browser-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAItD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EACV,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,OAAO,EACR,MAAM,YAAY,CAAC;AAyBpB,qBAAa,cAAc;IAoBb,OAAO,CAAC,QAAQ,CAAC,MAAM;IAnBnC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,sBAAsB,CAAqB;IACnD,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,oBAAoB,CAAyB;IACrD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,YAAY,CAAuB;gBAEd,MAAM,EAAE,MAAM;IAI3C,gBAAgB,CAAC,EAAE,EAAE,oBAAoB,GAAG,IAAI;IAIhD,OAAO,CAAC,IAAI;IAIZ,QAAQ,IAAI,YAAY;IASxB,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,WAAW,IAAI,OAAO;IAItB,UAAU,IAAI,OAAO;IAIrB,gBAAgB,IAAI,OAAO;IAI3B,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAI1C,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAI/C,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;WAIzC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5C,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,qBAAqB;IA6BvB,MAAM,CACV,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAuF7C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCxB,eAAe,CAAC,IAAI,EAAE;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAyDhC,OAAO,CAAC,gBAAgB;IAWxB,kBAAkB,CAAC,SAAS,SAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB9C,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAI9B,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BhD,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,kBAAkB;IAOpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAmD/B"}