opendevbrowser 0.0.17 → 0.0.19

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 (529) hide show
  1. package/README.md +172 -73
  2. package/dist/annotate/agent-inbox-store.d.ts +58 -0
  3. package/dist/annotate/agent-inbox-store.d.ts.map +1 -0
  4. package/dist/annotate/agent-inbox.d.ts +25 -0
  5. package/dist/annotate/agent-inbox.d.ts.map +1 -0
  6. package/dist/annotate/direct-annotator.d.ts.map +1 -1
  7. package/dist/annotate/timeout-messages.d.ts +4 -0
  8. package/dist/annotate/timeout-messages.d.ts.map +1 -0
  9. package/dist/automation/coordinator.d.ts +55 -0
  10. package/dist/automation/coordinator.d.ts.map +1 -0
  11. package/dist/browser/annotation-manager.d.ts +4 -1
  12. package/dist/browser/annotation-manager.d.ts.map +1 -1
  13. package/dist/browser/browser-manager.d.ts +147 -47
  14. package/dist/browser/browser-manager.d.ts.map +1 -1
  15. package/dist/browser/canvas-client.d.ts +1 -0
  16. package/dist/browser/canvas-client.d.ts.map +1 -1
  17. package/dist/browser/canvas-code-sync-manager.d.ts +9 -1
  18. package/dist/browser/canvas-code-sync-manager.d.ts.map +1 -1
  19. package/dist/browser/canvas-manager.d.ts +29 -1
  20. package/dist/browser/canvas-manager.d.ts.map +1 -1
  21. package/dist/browser/global-challenge-coordinator.d.ts +27 -0
  22. package/dist/browser/global-challenge-coordinator.d.ts.map +1 -0
  23. package/dist/browser/manager-types.d.ts +167 -1
  24. package/dist/browser/manager-types.d.ts.map +1 -1
  25. package/dist/browser/ops-browser-manager.d.ts +103 -3
  26. package/dist/browser/ops-browser-manager.d.ts.map +1 -1
  27. package/dist/browser/ops-client.d.ts +17 -1
  28. package/dist/browser/ops-client.d.ts.map +1 -1
  29. package/dist/browser/playwright-runtime.d.ts +4 -0
  30. package/dist/browser/playwright-runtime.d.ts.map +1 -0
  31. package/dist/browser/review-surface.d.ts +9 -0
  32. package/dist/browser/review-surface.d.ts.map +1 -0
  33. package/dist/browser/screencast-recorder.d.ts +57 -0
  34. package/dist/browser/screencast-recorder.d.ts.map +1 -0
  35. package/dist/browser/session-inspector.d.ts +71 -0
  36. package/dist/browser/session-inspector.d.ts.map +1 -0
  37. package/dist/browser/session-store.d.ts +5 -1
  38. package/dist/browser/session-store.d.ts.map +1 -1
  39. package/dist/browser/system-chrome-cookies.d.ts +46 -0
  40. package/dist/browser/system-chrome-cookies.d.ts.map +1 -0
  41. package/dist/browser/target-manager.d.ts +1 -0
  42. package/dist/browser/target-manager.d.ts.map +1 -1
  43. package/dist/cache/chrome-locator.d.ts.map +1 -1
  44. package/dist/cache/chrome-user-data.d.ts +17 -0
  45. package/dist/cache/chrome-user-data.d.ts.map +1 -0
  46. package/dist/canvas/adapter-plugins/loader.d.ts +13 -0
  47. package/dist/canvas/adapter-plugins/loader.d.ts.map +1 -0
  48. package/dist/canvas/adapter-plugins/manifest.d.ts +146 -0
  49. package/dist/canvas/adapter-plugins/manifest.d.ts.map +1 -0
  50. package/dist/canvas/adapter-plugins/types.d.ts +83 -0
  51. package/dist/canvas/adapter-plugins/types.d.ts.map +1 -0
  52. package/dist/canvas/adapter-plugins/validator.d.ts +10 -0
  53. package/dist/canvas/adapter-plugins/validator.d.ts.map +1 -0
  54. package/dist/canvas/code-sync/apply-tsx.d.ts +3 -1
  55. package/dist/canvas/code-sync/apply-tsx.d.ts.map +1 -1
  56. package/dist/canvas/code-sync/import.d.ts +1 -0
  57. package/dist/canvas/code-sync/import.d.ts.map +1 -1
  58. package/dist/canvas/code-sync/manifest.d.ts +2 -1
  59. package/dist/canvas/code-sync/manifest.d.ts.map +1 -1
  60. package/dist/canvas/code-sync/tsx-adapter.d.ts.map +1 -1
  61. package/dist/canvas/code-sync/types.d.ts +102 -10
  62. package/dist/canvas/code-sync/types.d.ts.map +1 -1
  63. package/dist/canvas/document-store.d.ts +11 -1
  64. package/dist/canvas/document-store.d.ts.map +1 -1
  65. package/dist/canvas/export.d.ts.map +1 -1
  66. package/dist/canvas/framework-adapters/custom-elements-v1.d.ts +3 -0
  67. package/dist/canvas/framework-adapters/custom-elements-v1.d.ts.map +1 -0
  68. package/dist/canvas/framework-adapters/html-static-v1.d.ts +3 -0
  69. package/dist/canvas/framework-adapters/html-static-v1.d.ts.map +1 -0
  70. package/dist/canvas/framework-adapters/markup.d.ts +9 -0
  71. package/dist/canvas/framework-adapters/markup.d.ts.map +1 -0
  72. package/dist/canvas/framework-adapters/react-tsx-v2.d.ts +3 -0
  73. package/dist/canvas/framework-adapters/react-tsx-v2.d.ts.map +1 -0
  74. package/dist/canvas/framework-adapters/registry.d.ts +12 -0
  75. package/dist/canvas/framework-adapters/registry.d.ts.map +1 -0
  76. package/dist/canvas/framework-adapters/svelte-sfc-v1.d.ts +3 -0
  77. package/dist/canvas/framework-adapters/svelte-sfc-v1.d.ts.map +1 -0
  78. package/dist/canvas/framework-adapters/types.d.ts +57 -0
  79. package/dist/canvas/framework-adapters/types.d.ts.map +1 -0
  80. package/dist/canvas/framework-adapters/vue-sfc-v1.d.ts +3 -0
  81. package/dist/canvas/framework-adapters/vue-sfc-v1.d.ts.map +1 -0
  82. package/dist/canvas/kits/catalog.d.ts +5 -0
  83. package/dist/canvas/kits/catalog.d.ts.map +1 -0
  84. package/dist/canvas/library-adapters/react/index.d.ts +3 -0
  85. package/dist/canvas/library-adapters/react/index.d.ts.map +1 -0
  86. package/dist/canvas/library-adapters/registry.d.ts +11 -0
  87. package/dist/canvas/library-adapters/registry.d.ts.map +1 -0
  88. package/dist/canvas/library-adapters/types.d.ts +43 -0
  89. package/dist/canvas/library-adapters/types.d.ts.map +1 -0
  90. package/dist/canvas/repo-store.d.ts +2 -0
  91. package/dist/canvas/repo-store.d.ts.map +1 -1
  92. package/dist/canvas/starters/catalog.d.ts +34 -0
  93. package/dist/canvas/starters/catalog.d.ts.map +1 -0
  94. package/dist/canvas/token-references.d.ts +22 -0
  95. package/dist/canvas/token-references.d.ts.map +1 -0
  96. package/dist/canvas/types.d.ts +345 -6
  97. package/dist/canvas/types.d.ts.map +1 -1
  98. package/dist/challenges/action-loop.d.ts +13 -0
  99. package/dist/challenges/action-loop.d.ts.map +1 -0
  100. package/dist/challenges/capability-matrix.d.ts +3 -0
  101. package/dist/challenges/capability-matrix.d.ts.map +1 -0
  102. package/dist/challenges/evidence-bundle.d.ts +48 -0
  103. package/dist/challenges/evidence-bundle.d.ts.map +1 -0
  104. package/dist/challenges/governed-adapter-gateway.d.ts +4 -0
  105. package/dist/challenges/governed-adapter-gateway.d.ts.map +1 -0
  106. package/dist/challenges/human-yield-gate.d.ts +20 -0
  107. package/dist/challenges/human-yield-gate.d.ts.map +1 -0
  108. package/dist/challenges/index.d.ts +15 -0
  109. package/dist/challenges/index.d.ts.map +1 -0
  110. package/dist/challenges/interpreter.d.ts +3 -0
  111. package/dist/challenges/interpreter.d.ts.map +1 -0
  112. package/dist/challenges/optional-computer-use-bridge.d.ts +9 -0
  113. package/dist/challenges/optional-computer-use-bridge.d.ts.map +1 -0
  114. package/dist/challenges/orchestrator.d.ts +32 -0
  115. package/dist/challenges/orchestrator.d.ts.map +1 -0
  116. package/dist/challenges/outcome-recorder.d.ts +8 -0
  117. package/dist/challenges/outcome-recorder.d.ts.map +1 -0
  118. package/dist/challenges/owned-environment-lane.d.ts +3 -0
  119. package/dist/challenges/owned-environment-lane.d.ts.map +1 -0
  120. package/dist/challenges/policy-gate.d.ts +9 -0
  121. package/dist/challenges/policy-gate.d.ts.map +1 -0
  122. package/dist/challenges/sanctioned-identity-lane.d.ts +3 -0
  123. package/dist/challenges/sanctioned-identity-lane.d.ts.map +1 -0
  124. package/dist/challenges/service-adapter-lane.d.ts +3 -0
  125. package/dist/challenges/service-adapter-lane.d.ts.map +1 -0
  126. package/dist/challenges/strategy-selector.d.ts +10 -0
  127. package/dist/challenges/strategy-selector.d.ts.map +1 -0
  128. package/dist/challenges/types.d.ts +277 -0
  129. package/dist/challenges/types.d.ts.map +1 -0
  130. package/dist/challenges/verification-gate.d.ts +15 -0
  131. package/dist/challenges/verification-gate.d.ts.map +1 -0
  132. package/dist/chunk-5FZQJRBQ.js +15256 -0
  133. package/dist/chunk-5FZQJRBQ.js.map +1 -0
  134. package/dist/chunk-W4IHGDXV.js +33519 -0
  135. package/dist/chunk-W4IHGDXV.js.map +1 -0
  136. package/dist/chunk-YBQECXZX.js +409 -0
  137. package/dist/chunk-YBQECXZX.js.map +1 -0
  138. package/dist/cli/args.d.ts +4 -4
  139. package/dist/cli/args.d.ts.map +1 -1
  140. package/dist/cli/commands/artifacts.d.ts.map +1 -1
  141. package/dist/cli/commands/canvas.d.ts +7 -7
  142. package/dist/cli/commands/canvas.d.ts.map +1 -1
  143. package/dist/cli/commands/daemon.d.ts +7 -0
  144. package/dist/cli/commands/daemon.d.ts.map +1 -1
  145. package/dist/cli/commands/desktop/accessibility-snapshot.d.ts +3 -0
  146. package/dist/cli/commands/desktop/accessibility-snapshot.d.ts.map +1 -0
  147. package/dist/cli/commands/desktop/active-window.d.ts +3 -0
  148. package/dist/cli/commands/desktop/active-window.d.ts.map +1 -0
  149. package/dist/cli/commands/desktop/capture-desktop.d.ts +3 -0
  150. package/dist/cli/commands/desktop/capture-desktop.d.ts.map +1 -0
  151. package/dist/cli/commands/desktop/capture-window.d.ts +3 -0
  152. package/dist/cli/commands/desktop/capture-window.d.ts.map +1 -0
  153. package/dist/cli/commands/desktop/shared.d.ts +19 -0
  154. package/dist/cli/commands/desktop/shared.d.ts.map +1 -0
  155. package/dist/cli/commands/desktop/status.d.ts +3 -0
  156. package/dist/cli/commands/desktop/status.d.ts.map +1 -0
  157. package/dist/cli/commands/desktop/windows.d.ts +3 -0
  158. package/dist/cli/commands/desktop/windows.d.ts.map +1 -0
  159. package/dist/cli/commands/devtools/dialog.d.ts +19 -0
  160. package/dist/cli/commands/devtools/dialog.d.ts.map +1 -0
  161. package/dist/cli/commands/devtools/screencast-start.d.ts +20 -0
  162. package/dist/cli/commands/devtools/screencast-start.d.ts.map +1 -0
  163. package/dist/cli/commands/devtools/screencast-stop.d.ts +17 -0
  164. package/dist/cli/commands/devtools/screencast-stop.d.ts.map +1 -0
  165. package/dist/cli/commands/devtools/screenshot.d.ts +2 -0
  166. package/dist/cli/commands/devtools/screenshot.d.ts.map +1 -1
  167. package/dist/cli/commands/interact/click.d.ts.map +1 -1
  168. package/dist/cli/commands/interact/pointer-down.d.ts +7 -0
  169. package/dist/cli/commands/interact/pointer-down.d.ts.map +1 -0
  170. package/dist/cli/commands/interact/pointer-drag.d.ts +7 -0
  171. package/dist/cli/commands/interact/pointer-drag.d.ts.map +1 -0
  172. package/dist/cli/commands/interact/pointer-move.d.ts +7 -0
  173. package/dist/cli/commands/interact/pointer-move.d.ts.map +1 -0
  174. package/dist/cli/commands/interact/pointer-shared.d.ts +6 -0
  175. package/dist/cli/commands/interact/pointer-shared.d.ts.map +1 -0
  176. package/dist/cli/commands/interact/pointer-up.d.ts +7 -0
  177. package/dist/cli/commands/interact/pointer-up.d.ts.map +1 -0
  178. package/dist/cli/commands/interact/upload.d.ts +18 -0
  179. package/dist/cli/commands/interact/upload.d.ts.map +1 -0
  180. package/dist/cli/commands/macro-resolve.d.ts +2 -0
  181. package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
  182. package/dist/cli/commands/native.d.ts +10 -7
  183. package/dist/cli/commands/native.d.ts.map +1 -1
  184. package/dist/cli/commands/nav/review.d.ts +7 -0
  185. package/dist/cli/commands/nav/review.d.ts.map +1 -0
  186. package/dist/cli/commands/nav/snapshot.d.ts.map +1 -1
  187. package/dist/cli/commands/pages/open.d.ts.map +1 -1
  188. package/dist/cli/commands/product-video.d.ts +2 -0
  189. package/dist/cli/commands/product-video.d.ts.map +1 -1
  190. package/dist/cli/commands/research.d.ts +3 -0
  191. package/dist/cli/commands/research.d.ts.map +1 -1
  192. package/dist/cli/commands/run.d.ts +14 -0
  193. package/dist/cli/commands/run.d.ts.map +1 -1
  194. package/dist/cli/commands/serve.d.ts +1 -26
  195. package/dist/cli/commands/serve.d.ts.map +1 -1
  196. package/dist/cli/commands/session/connect.d.ts.map +1 -1
  197. package/dist/cli/commands/session/disconnect.d.ts.map +1 -1
  198. package/dist/cli/commands/session/inspector.d.ts +21 -0
  199. package/dist/cli/commands/session/inspector.d.ts.map +1 -0
  200. package/dist/cli/commands/session/launch.d.ts.map +1 -1
  201. package/dist/cli/commands/shopping.d.ts +5 -0
  202. package/dist/cli/commands/shopping.d.ts.map +1 -1
  203. package/dist/cli/commands/status.d.ts +2 -14
  204. package/dist/cli/commands/status.d.ts.map +1 -1
  205. package/dist/cli/commands/targets/new.d.ts.map +1 -1
  206. package/dist/cli/daemon-autostart.d.ts +11 -0
  207. package/dist/cli/daemon-autostart.d.ts.map +1 -1
  208. package/dist/cli/daemon-client.d.ts +3 -0
  209. package/dist/cli/daemon-client.d.ts.map +1 -1
  210. package/dist/cli/daemon-commands.d.ts.map +1 -1
  211. package/dist/cli/daemon-state.d.ts +16 -0
  212. package/dist/cli/daemon-state.d.ts.map +1 -1
  213. package/dist/cli/daemon-status.d.ts +7 -2
  214. package/dist/cli/daemon-status.d.ts.map +1 -1
  215. package/dist/cli/daemon.d.ts +1 -0
  216. package/dist/cli/daemon.d.ts.map +1 -1
  217. package/dist/cli/help.d.ts +15 -4
  218. package/dist/cli/help.d.ts.map +1 -1
  219. package/dist/cli/index.js +2476 -1036
  220. package/dist/cli/index.js.map +1 -1
  221. package/dist/cli/install-autostart-output.d.ts +6 -0
  222. package/dist/cli/install-autostart-output.d.ts.map +1 -0
  223. package/dist/cli/install-autostart-reconciliation.d.ts +23 -0
  224. package/dist/cli/install-autostart-reconciliation.d.ts.map +1 -0
  225. package/dist/cli/installers/skills.d.ts +42 -6
  226. package/dist/cli/installers/skills.d.ts.map +1 -1
  227. package/dist/cli/output.d.ts +3 -0
  228. package/dist/cli/output.d.ts.map +1 -1
  229. package/dist/cli/remote-desktop-runtime.d.ts +15 -0
  230. package/dist/cli/remote-desktop-runtime.d.ts.map +1 -0
  231. package/dist/cli/remote-manager.d.ts +24 -2
  232. package/dist/cli/remote-manager.d.ts.map +1 -1
  233. package/dist/cli/transport-timeouts.d.ts +8 -0
  234. package/dist/cli/transport-timeouts.d.ts.map +1 -0
  235. package/dist/cli/utils/http.d.ts +9 -0
  236. package/dist/cli/utils/http.d.ts.map +1 -1
  237. package/dist/cli/utils/parse.d.ts +2 -0
  238. package/dist/cli/utils/parse.d.ts.map +1 -1
  239. package/dist/cli/utils/skills.d.ts +1 -2
  240. package/dist/cli/utils/skills.d.ts.map +1 -1
  241. package/dist/cli/utils/workflow-message.d.ts +2 -0
  242. package/dist/cli/utils/workflow-message.d.ts.map +1 -0
  243. package/dist/config.d.ts +47 -0
  244. package/dist/config.d.ts.map +1 -1
  245. package/dist/core/bootstrap.d.ts.map +1 -1
  246. package/dist/core/index.d.ts +1 -0
  247. package/dist/core/index.d.ts.map +1 -1
  248. package/dist/core/logging.d.ts +3 -1
  249. package/dist/core/logging.d.ts.map +1 -1
  250. package/dist/core/runtime-assemblies.d.ts +22 -0
  251. package/dist/core/runtime-assemblies.d.ts.map +1 -0
  252. package/dist/core/types.d.ts +15 -0
  253. package/dist/core/types.d.ts.map +1 -1
  254. package/dist/desktop/audit.d.ts +37 -0
  255. package/dist/desktop/audit.d.ts.map +1 -0
  256. package/dist/desktop/errors.d.ts +7 -0
  257. package/dist/desktop/errors.d.ts.map +1 -0
  258. package/dist/desktop/index.d.ts +6 -0
  259. package/dist/desktop/index.d.ts.map +1 -0
  260. package/dist/desktop/runtime.d.ts +26 -0
  261. package/dist/desktop/runtime.d.ts.map +1 -0
  262. package/dist/desktop/types.d.ts +76 -0
  263. package/dist/desktop/types.d.ts.map +1 -0
  264. package/dist/extension-extractor.d.ts +6 -0
  265. package/dist/extension-extractor.d.ts.map +1 -1
  266. package/dist/index.d.ts.map +1 -1
  267. package/dist/index.js +1103 -467
  268. package/dist/index.js.map +1 -1
  269. package/dist/integrations/figma/assets.d.ts +13 -0
  270. package/dist/integrations/figma/assets.d.ts.map +1 -0
  271. package/dist/integrations/figma/auth.d.ts +3 -0
  272. package/dist/integrations/figma/auth.d.ts.map +1 -0
  273. package/dist/integrations/figma/client.d.ts +42 -0
  274. package/dist/integrations/figma/client.d.ts.map +1 -0
  275. package/dist/integrations/figma/mappers.d.ts +23 -0
  276. package/dist/integrations/figma/mappers.d.ts.map +1 -0
  277. package/dist/integrations/figma/normalize.d.ts +99 -0
  278. package/dist/integrations/figma/normalize.d.ts.map +1 -0
  279. package/dist/integrations/figma/url.d.ts +17 -0
  280. package/dist/integrations/figma/url.d.ts.map +1 -0
  281. package/dist/integrations/figma/variables.d.ts +21 -0
  282. package/dist/integrations/figma/variables.d.ts.map +1 -0
  283. package/dist/macros/execute-runtime.d.ts +19 -0
  284. package/dist/macros/execute-runtime.d.ts.map +1 -0
  285. package/dist/macros/execute.d.ts +3 -1
  286. package/dist/macros/execute.d.ts.map +1 -1
  287. package/dist/opendevbrowser.d.ts.map +1 -1
  288. package/dist/opendevbrowser.js +1103 -467
  289. package/dist/opendevbrowser.js.map +1 -1
  290. package/dist/providers/blocker.d.ts.map +1 -1
  291. package/dist/providers/browser-fallback.d.ts +30 -0
  292. package/dist/providers/browser-fallback.d.ts.map +1 -0
  293. package/dist/providers/constraint.d.ts +45 -0
  294. package/dist/providers/constraint.d.ts.map +1 -0
  295. package/dist/providers/index.d.ts +11 -2
  296. package/dist/providers/index.d.ts.map +1 -1
  297. package/dist/providers/policy.d.ts.map +1 -1
  298. package/dist/providers/product-video-compiler.d.ts +92 -0
  299. package/dist/providers/product-video-compiler.d.ts.map +1 -0
  300. package/dist/providers/registry.d.ts +37 -1
  301. package/dist/providers/registry.d.ts.map +1 -1
  302. package/dist/providers/renderer.d.ts.map +1 -1
  303. package/dist/providers/research-compiler.d.ts +64 -0
  304. package/dist/providers/research-compiler.d.ts.map +1 -0
  305. package/dist/providers/research-executor.d.ts +27 -0
  306. package/dist/providers/research-executor.d.ts.map +1 -0
  307. package/dist/providers/runtime-bundle.d.ts +26 -0
  308. package/dist/providers/runtime-bundle.d.ts.map +1 -0
  309. package/dist/providers/runtime-factory.d.ts +6 -1
  310. package/dist/providers/runtime-factory.d.ts.map +1 -1
  311. package/dist/providers/runtime-policy.d.ts +24 -0
  312. package/dist/providers/runtime-policy.d.ts.map +1 -0
  313. package/dist/providers/shared/anti-bot-policy.d.ts +3 -2
  314. package/dist/providers/shared/anti-bot-policy.d.ts.map +1 -1
  315. package/dist/providers/shopping/index.d.ts +11 -1
  316. package/dist/providers/shopping/index.d.ts.map +1 -1
  317. package/dist/providers/shopping-compiler.d.ts +51 -0
  318. package/dist/providers/shopping-compiler.d.ts.map +1 -0
  319. package/dist/providers/shopping-executor.d.ts +18 -0
  320. package/dist/providers/shopping-executor.d.ts.map +1 -0
  321. package/dist/providers/shopping-postprocess.d.ts +46 -0
  322. package/dist/providers/shopping-postprocess.d.ts.map +1 -0
  323. package/dist/providers/shopping-workflow.d.ts +33 -0
  324. package/dist/providers/shopping-workflow.d.ts.map +1 -0
  325. package/dist/providers/social/platform.d.ts +2 -1
  326. package/dist/providers/social/platform.d.ts.map +1 -1
  327. package/dist/providers/social/search-quality.d.ts +16 -0
  328. package/dist/providers/social/search-quality.d.ts.map +1 -0
  329. package/dist/providers/social/youtube-resolver.d.ts +2 -1
  330. package/dist/providers/social/youtube-resolver.d.ts.map +1 -1
  331. package/dist/providers/social/youtube.d.ts.map +1 -1
  332. package/dist/providers/types.d.ts +116 -4
  333. package/dist/providers/types.d.ts.map +1 -1
  334. package/dist/providers/web/crawl-worker.d.ts.map +1 -1
  335. package/dist/providers/web/extract.d.ts +16 -0
  336. package/dist/providers/web/extract.d.ts.map +1 -1
  337. package/dist/providers/web/index.d.ts.map +1 -1
  338. package/dist/providers/workflow-contracts.d.ts +53 -0
  339. package/dist/providers/workflow-contracts.d.ts.map +1 -0
  340. package/dist/providers/workflows.d.ts +30 -6
  341. package/dist/providers/workflows.d.ts.map +1 -1
  342. package/dist/{providers-G3LRHQXX.js → providers-G36AM3Z2.js} +2 -2
  343. package/dist/public-surface/generated-manifest.d.ts +1168 -0
  344. package/dist/public-surface/generated-manifest.d.ts.map +1 -0
  345. package/dist/public-surface/source.d.ts +437 -0
  346. package/dist/public-surface/source.d.ts.map +1 -0
  347. package/dist/relay/protocol.d.ts +25 -3
  348. package/dist/relay/protocol.d.ts.map +1 -1
  349. package/dist/relay/relay-endpoints.d.ts +21 -0
  350. package/dist/relay/relay-endpoints.d.ts.map +1 -1
  351. package/dist/relay/relay-server.d.ts +18 -0
  352. package/dist/relay/relay-server.d.ts.map +1 -1
  353. package/dist/skills/bundled-skill-directories.d.ts +8 -0
  354. package/dist/skills/bundled-skill-directories.d.ts.map +1 -0
  355. package/dist/skills/skill-loader.d.ts +9 -1
  356. package/dist/skills/skill-loader.d.ts.map +1 -1
  357. package/dist/skills/skill-loader.js +7 -0
  358. package/dist/skills/skill-nudge.d.ts.map +1 -1
  359. package/dist/skills/types.d.ts +31 -0
  360. package/dist/skills/types.d.ts.map +1 -1
  361. package/dist/snapshot/ops-snapshot.d.ts +1 -1
  362. package/dist/snapshot/ops-snapshot.d.ts.map +1 -1
  363. package/dist/snapshot/refs.d.ts +6 -1
  364. package/dist/snapshot/refs.d.ts.map +1 -1
  365. package/dist/snapshot/snapshotter.d.ts.map +1 -1
  366. package/dist/tools/connect.d.ts.map +1 -1
  367. package/dist/tools/deps.d.ts +4 -0
  368. package/dist/tools/deps.d.ts.map +1 -1
  369. package/dist/tools/desktop-shared.d.ts +6 -0
  370. package/dist/tools/desktop-shared.d.ts.map +1 -0
  371. package/dist/tools/desktop_accessibility_snapshot.d.ts +4 -0
  372. package/dist/tools/desktop_accessibility_snapshot.d.ts.map +1 -0
  373. package/dist/tools/desktop_active_window.d.ts +4 -0
  374. package/dist/tools/desktop_active_window.d.ts.map +1 -0
  375. package/dist/tools/desktop_capture_desktop.d.ts +4 -0
  376. package/dist/tools/desktop_capture_desktop.d.ts.map +1 -0
  377. package/dist/tools/desktop_capture_window.d.ts +4 -0
  378. package/dist/tools/desktop_capture_window.d.ts.map +1 -0
  379. package/dist/tools/desktop_status.d.ts +4 -0
  380. package/dist/tools/desktop_status.d.ts.map +1 -0
  381. package/dist/tools/desktop_windows.d.ts +4 -0
  382. package/dist/tools/desktop_windows.d.ts.map +1 -0
  383. package/dist/tools/dialog.d.ts +4 -0
  384. package/dist/tools/dialog.d.ts.map +1 -0
  385. package/dist/tools/index.d.ts +3 -0
  386. package/dist/tools/index.d.ts.map +1 -1
  387. package/dist/tools/launch.d.ts.map +1 -1
  388. package/dist/tools/macro_resolve.d.ts.map +1 -1
  389. package/dist/tools/pointer_down.d.ts +4 -0
  390. package/dist/tools/pointer_down.d.ts.map +1 -0
  391. package/dist/tools/pointer_drag.d.ts +4 -0
  392. package/dist/tools/pointer_drag.d.ts.map +1 -0
  393. package/dist/tools/pointer_move.d.ts +4 -0
  394. package/dist/tools/pointer_move.d.ts.map +1 -0
  395. package/dist/tools/pointer_up.d.ts +4 -0
  396. package/dist/tools/pointer_up.d.ts.map +1 -0
  397. package/dist/tools/product_video_run.d.ts.map +1 -1
  398. package/dist/tools/prompting_guide.d.ts.map +1 -1
  399. package/dist/tools/research_run.d.ts.map +1 -1
  400. package/dist/tools/review.d.ts +4 -0
  401. package/dist/tools/review.d.ts.map +1 -0
  402. package/dist/tools/screencast_start.d.ts +4 -0
  403. package/dist/tools/screencast_start.d.ts.map +1 -0
  404. package/dist/tools/screencast_stop.d.ts +4 -0
  405. package/dist/tools/screencast_stop.d.ts.map +1 -0
  406. package/dist/tools/screenshot.d.ts.map +1 -1
  407. package/dist/tools/session_inspector.d.ts +4 -0
  408. package/dist/tools/session_inspector.d.ts.map +1 -0
  409. package/dist/tools/shopping_run.d.ts.map +1 -1
  410. package/dist/tools/skill_list.d.ts.map +1 -1
  411. package/dist/tools/skill_load.d.ts.map +1 -1
  412. package/dist/tools/upload.d.ts +4 -0
  413. package/dist/tools/upload.d.ts.map +1 -0
  414. package/dist/tools/workflow-runtime.d.ts +4 -1
  415. package/dist/tools/workflow-runtime.d.ts.map +1 -1
  416. package/dist/utils/package-assets.d.ts +4 -0
  417. package/dist/utils/package-assets.d.ts.map +1 -0
  418. package/extension/canvas.html +379 -9
  419. package/extension/dist/annotate-content.js +62 -32
  420. package/extension/dist/annotation-payload.js +57 -21
  421. package/extension/dist/background.js +406 -61
  422. package/extension/dist/canvas/canvas-runtime.js +481 -52
  423. package/extension/dist/canvas/model.js +129 -1
  424. package/extension/dist/canvas-page.js +1882 -74
  425. package/extension/dist/ops/dom-bridge.js +139 -0
  426. package/extension/dist/ops/ops-runtime.js +2854 -295
  427. package/extension/dist/ops/ops-session-store.js +83 -5
  428. package/extension/dist/ops/snapshot-builder.js +2 -2
  429. package/extension/dist/ops/snapshot-shared.js +2 -2
  430. package/extension/dist/ops/target-session-coordinator.js +5 -3
  431. package/extension/dist/popup.js +50 -15
  432. package/extension/dist/services/CDPRouter.js +1567 -63
  433. package/extension/dist/services/ConnectionManager.js +436 -78
  434. package/extension/dist/services/RelayClient.js +70 -30
  435. package/extension/dist/services/TabManager.js +83 -10
  436. package/extension/dist/services/TargetSessionMap.js +127 -3
  437. package/extension/dist/services/attach-errors.js +20 -0
  438. package/extension/dist/services/cdp-router-commands.js +135 -8
  439. package/extension/dist/services/url-restrictions.js +9 -13
  440. package/extension/manifest.json +2 -2
  441. package/extension/popup.html +7 -6
  442. package/package.json +15 -7
  443. package/skills/AGENTS.md +9 -8
  444. package/skills/opendevbrowser-best-practices/SKILL.md +118 -9
  445. package/skills/opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md +1 -0
  446. package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +26 -12
  447. package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +9 -2
  448. package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +6 -0
  449. package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +58 -0
  450. package/skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json +674 -0
  451. package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +9 -4
  452. package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +89 -20
  453. package/skills/opendevbrowser-best-practices/scripts/resolve-odb-cli.sh +100 -0
  454. package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +1 -0
  455. package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +256 -116
  456. package/skills/opendevbrowser-best-practices/scripts/validator-fixture-cli.sh +208 -0
  457. package/skills/opendevbrowser-continuity-ledger/SKILL.md +14 -1
  458. package/skills/opendevbrowser-continuity-ledger/scripts/validate-skill-assets.sh +61 -0
  459. package/skills/opendevbrowser-data-extraction/SKILL.md +6 -0
  460. package/skills/opendevbrowser-data-extraction/scripts/validate-skill-assets.sh +112 -0
  461. package/skills/opendevbrowser-design-agent/SKILL.md +275 -0
  462. package/skills/opendevbrowser-design-agent/artifacts/app-shell-and-state-wiring.md +84 -0
  463. package/skills/opendevbrowser-design-agent/artifacts/async-search-state-ownership.md +58 -0
  464. package/skills/opendevbrowser-design-agent/artifacts/component-pattern-index.md +130 -0
  465. package/skills/opendevbrowser-design-agent/artifacts/design-contract-playbook.md +157 -0
  466. package/skills/opendevbrowser-design-agent/artifacts/design-release-gate.md +40 -0
  467. package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +153 -0
  468. package/skills/opendevbrowser-design-agent/artifacts/existing-surface-adaptation.md +56 -0
  469. package/skills/opendevbrowser-design-agent/artifacts/external-pattern-synthesis.md +103 -0
  470. package/skills/opendevbrowser-design-agent/artifacts/frontend-evaluation-rubric.md +61 -0
  471. package/skills/opendevbrowser-design-agent/artifacts/implementation-anti-patterns.md +163 -0
  472. package/skills/opendevbrowser-design-agent/artifacts/isolated-preview-validation.md +68 -0
  473. package/skills/opendevbrowser-design-agent/artifacts/loading-and-feedback-surfaces.md +56 -0
  474. package/skills/opendevbrowser-design-agent/artifacts/opendevbrowser-ui-example-map.md +44 -0
  475. package/skills/opendevbrowser-design-agent/artifacts/performance-audit-playbook.md +70 -0
  476. package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +81 -0
  477. package/skills/opendevbrowser-design-agent/artifacts/scroll-reveal-surface-planning.md +64 -0
  478. package/skills/opendevbrowser-design-agent/artifacts/state-ownership-matrix.md +36 -0
  479. package/skills/opendevbrowser-design-agent/artifacts/theming-and-token-ownership.md +43 -0
  480. package/skills/opendevbrowser-design-agent/assets/templates/canvas-generation-plan.design.v1.json +58 -0
  481. package/skills/opendevbrowser-design-agent/assets/templates/design-audit-report.v1.md +34 -0
  482. package/skills/opendevbrowser-design-agent/assets/templates/design-brief.v1.md +40 -0
  483. package/skills/opendevbrowser-design-agent/assets/templates/design-contract.v1.json +226 -0
  484. package/skills/opendevbrowser-design-agent/assets/templates/design-release-gate.v1.json +35 -0
  485. package/skills/opendevbrowser-design-agent/assets/templates/design-review-checklist.json +57 -0
  486. package/skills/opendevbrowser-design-agent/assets/templates/real-surface-design-matrix.json +32 -0
  487. package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +31 -0
  488. package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +171 -0
  489. package/skills/opendevbrowser-design-agent/scripts/extract-canvas-plan.sh +56 -0
  490. package/skills/opendevbrowser-design-agent/scripts/validate-skill-assets.sh +223 -0
  491. package/skills/opendevbrowser-form-testing/SKILL.md +19 -3
  492. package/skills/opendevbrowser-form-testing/artifacts/form-workflows.md +5 -4
  493. package/skills/opendevbrowser-form-testing/assets/templates/challenge-decision-tree.json +2 -0
  494. package/skills/opendevbrowser-form-testing/scripts/validate-skill-assets.sh +109 -0
  495. package/skills/opendevbrowser-login-automation/SKILL.md +21 -3
  496. package/skills/opendevbrowser-login-automation/artifacts/login-workflows.md +5 -4
  497. package/skills/opendevbrowser-login-automation/assets/templates/auth-signals.json +5 -0
  498. package/skills/opendevbrowser-login-automation/assets/templates/login-scenario-matrix.json +3 -2
  499. package/skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh +17 -1
  500. package/skills/opendevbrowser-login-automation/scripts/validate-skill-assets.sh +133 -0
  501. package/skills/opendevbrowser-product-presentation-asset/SKILL.md +23 -11
  502. package/skills/opendevbrowser-product-presentation-asset/artifacts/asset-pack-assembly.md +5 -3
  503. package/skills/opendevbrowser-product-presentation-asset/assets/templates/shot-list.md +2 -0
  504. package/skills/opendevbrowser-product-presentation-asset/assets/templates/video-assembly.md +3 -2
  505. package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +5 -1
  506. package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +6 -2
  507. package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +5 -1
  508. package/skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh +20 -7
  509. package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +39 -0
  510. package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +5 -1
  511. package/skills/opendevbrowser-research/SKILL.md +14 -6
  512. package/skills/opendevbrowser-research/scripts/render-output.sh +5 -1
  513. package/skills/opendevbrowser-research/scripts/run-research.sh +5 -1
  514. package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +45 -0
  515. package/skills/opendevbrowser-research/scripts/write-artifacts.sh +5 -1
  516. package/skills/opendevbrowser-shopping/SKILL.md +20 -1
  517. package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +6 -2
  518. package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +5 -1
  519. package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +5 -1
  520. package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +54 -0
  521. package/dist/chunk-5J3IFL3X.js +0 -16706
  522. package/dist/chunk-5J3IFL3X.js.map +0 -1
  523. package/dist/chunk-D633UO34.js +0 -8149
  524. package/dist/chunk-D633UO34.js.map +0 -1
  525. package/dist/chunk-V7KUDHDG.js +0 -276
  526. package/dist/chunk-V7KUDHDG.js.map +0 -1
  527. package/dist/runtime-factory-BICHDPE7.js +0 -13
  528. /package/dist/{providers-G3LRHQXX.js.map → providers-G36AM3Z2.js.map} +0 -0
  529. /package/dist/{runtime-factory-BICHDPE7.js.map → skills/skill-loader.js.map} +0 -0
@@ -1,37 +1,35 @@
1
1
  import {
2
+ AGENT_INBOX_SYSTEM_MARKER,
2
3
  DaemonClient,
3
4
  ScriptRunner,
4
5
  buildAnnotateResult,
6
+ buildBrowserReviewResult,
7
+ buildLoopbackSessionRelayEndpoint,
8
+ classifySessionRelayEndpoint,
9
+ createAutomationCoordinator,
10
+ createCoreRuntimeAssemblies,
5
11
  createOpenDevBrowserCore,
6
- executeMacroResolution,
12
+ executeMacroWithRuntime,
7
13
  extractExtension,
8
14
  fetchDaemonStatusFromMetadata,
9
- shapeExecutionPayload,
15
+ inspectSession,
16
+ onboarding_metadata_default,
17
+ resolveBundledProviderRuntime,
18
+ resolveSessionRelayRoute,
10
19
  startDaemon
11
- } from "./chunk-5J3IFL3X.js";
20
+ } from "./chunk-W4IHGDXV.js";
21
+ import "./chunk-YBQECXZX.js";
12
22
  import "./chunk-Y2KL55OG.js";
13
23
  import "./chunk-TBUCZX4A.js";
14
24
  import {
15
- createBrowserFallbackPort,
16
- createConfiguredProviderRuntime
17
- } from "./chunk-V7KUDHDG.js";
18
- import {
25
+ CHALLENGE_AUTOMATION_MODES,
19
26
  buildBlockerArtifacts,
20
27
  classifyBlockerSignal,
21
28
  createRequestId
22
- } from "./chunk-D633UO34.js";
29
+ } from "./chunk-5FZQJRBQ.js";
23
30
  import "./chunk-FUSXMW3G.js";
24
31
 
25
32
  // src/cli/remote-manager.ts
26
- function isLegacyRelayEndpoint(wsEndpoint) {
27
- try {
28
- const url = new URL(wsEndpoint);
29
- const path = url.pathname.endsWith("/") ? url.pathname.slice(0, -1) : url.pathname;
30
- return path === "/cdp";
31
- } catch {
32
- return false;
33
- }
34
- }
35
33
  var RemoteManager = class {
36
34
  client;
37
35
  constructor(client) {
@@ -45,14 +43,12 @@ var RemoteManager = class {
45
43
  }
46
44
  connectRelay(wsEndpoint, options) {
47
45
  const startUrl = typeof options?.startUrl === "string" && options.startUrl.trim().length > 0 ? options.startUrl.trim() : void 0;
46
+ const parsedRelayEndpoint = classifySessionRelayEndpoint(wsEndpoint);
48
47
  return this.client.call(
49
48
  "session.connect",
50
- isLegacyRelayEndpoint(wsEndpoint) ? {
51
- wsEndpoint,
52
- extensionLegacy: true,
53
- ...startUrl ? { startUrl } : {}
54
- } : {
49
+ {
55
50
  wsEndpoint,
51
+ ...parsedRelayEndpoint?.inputPath === "/cdp" ? { extensionLegacy: true } : {},
56
52
  ...startUrl ? { startUrl } : {}
57
53
  }
58
54
  );
@@ -253,11 +249,44 @@ var RemoteManager = class {
253
249
  ...typeof targetId === "string" ? { targetId } : {}
254
250
  });
255
251
  }
256
- screenshot(sessionId, path, targetId) {
252
+ screenshot(sessionId, options = {}) {
257
253
  return this.client.call("page.screenshot", {
258
254
  sessionId,
259
- path,
260
- ...typeof targetId === "string" ? { targetId } : {}
255
+ ...typeof options.path === "string" ? { path: options.path } : {},
256
+ ...typeof options.targetId === "string" ? { targetId: options.targetId } : {},
257
+ ...typeof options.ref === "string" ? { ref: options.ref } : {},
258
+ ...options.fullPage === true ? { fullPage: true } : {}
259
+ });
260
+ }
261
+ startScreencast(sessionId, options = {}) {
262
+ return this.client.call("page.screencast.start", {
263
+ sessionId,
264
+ ...typeof options.targetId === "string" ? { targetId: options.targetId } : {},
265
+ ...typeof options.outputDir === "string" ? { outputDir: options.outputDir } : {},
266
+ ...typeof options.intervalMs === "number" ? { intervalMs: options.intervalMs } : {},
267
+ ...typeof options.maxFrames === "number" ? { maxFrames: options.maxFrames } : {}
268
+ });
269
+ }
270
+ stopScreencast(sessionId, screencastId) {
271
+ return this.client.call("page.screencast.stop", {
272
+ sessionId,
273
+ screencastId
274
+ });
275
+ }
276
+ upload(sessionId, input) {
277
+ return this.client.call("interact.upload", {
278
+ sessionId,
279
+ ref: input.ref,
280
+ files: input.files,
281
+ ...typeof input.targetId === "string" ? { targetId: input.targetId } : {}
282
+ });
283
+ }
284
+ dialog(sessionId, input = {}) {
285
+ return this.client.call("page.dialog", {
286
+ sessionId,
287
+ action: input.action ?? "status",
288
+ ...typeof input.promptText === "string" ? { promptText: input.promptText } : {},
289
+ ...typeof input.targetId === "string" ? { targetId: input.targetId } : {}
261
290
  });
262
291
  }
263
292
  consolePoll(sessionId, sinceSeq, max = 50) {
@@ -266,6 +295,59 @@ var RemoteManager = class {
266
295
  networkPoll(sessionId, sinceSeq, max = 50) {
267
296
  return this.client.call("devtools.networkPoll", { sessionId, sinceSeq, max });
268
297
  }
298
+ debugTraceSnapshot(sessionId, options = {}) {
299
+ return this.client.call("devtools.debugTraceSnapshot", {
300
+ sessionId,
301
+ ...options
302
+ });
303
+ }
304
+ createSessionInspector() {
305
+ return {
306
+ status: (sessionId) => this.status(sessionId),
307
+ listTargets: (sessionId, includeUrls) => this.listTargets(sessionId, includeUrls),
308
+ consolePoll: (sessionId, sinceSeq, max) => this.consolePoll(sessionId, sinceSeq, max),
309
+ networkPoll: (sessionId, sinceSeq, max) => this.networkPoll(sessionId, sinceSeq, max),
310
+ debugTraceSnapshot: (sessionId, options) => this.debugTraceSnapshot(sessionId, options)
311
+ };
312
+ }
313
+ pointerMove(sessionId, x, y, targetId, steps) {
314
+ return this.client.call("pointer.move", {
315
+ sessionId,
316
+ x,
317
+ y,
318
+ ...typeof steps === "number" ? { steps } : {},
319
+ ...typeof targetId === "string" ? { targetId } : {}
320
+ });
321
+ }
322
+ pointerDown(sessionId, x, y, targetId, button = "left", clickCount = 1) {
323
+ return this.client.call("pointer.down", {
324
+ sessionId,
325
+ x,
326
+ y,
327
+ button,
328
+ clickCount,
329
+ ...typeof targetId === "string" ? { targetId } : {}
330
+ });
331
+ }
332
+ pointerUp(sessionId, x, y, targetId, button = "left", clickCount = 1) {
333
+ return this.client.call("pointer.up", {
334
+ sessionId,
335
+ x,
336
+ y,
337
+ button,
338
+ clickCount,
339
+ ...typeof targetId === "string" ? { targetId } : {}
340
+ });
341
+ }
342
+ drag(sessionId, from, to, targetId, steps) {
343
+ return this.client.call("pointer.drag", {
344
+ sessionId,
345
+ from,
346
+ to,
347
+ ...typeof steps === "number" ? { steps } : {},
348
+ ...typeof targetId === "string" ? { targetId } : {}
349
+ });
350
+ }
269
351
  listTargets(sessionId, includeUrls = false) {
270
352
  return this.client.call("targets.list", { sessionId, includeUrls });
271
353
  }
@@ -303,6 +385,42 @@ var RemoteCanvasManager = class {
303
385
  }
304
386
  };
305
387
 
388
+ // src/cli/remote-desktop-runtime.ts
389
+ var RemoteDesktopRuntime = class {
390
+ client;
391
+ constructor(client) {
392
+ this.client = client;
393
+ }
394
+ status() {
395
+ return this.client.call("desktop.status");
396
+ }
397
+ listWindows(reason) {
398
+ return this.client.call("desktop.windows.list", {
399
+ ...reason ? { reason } : {}
400
+ });
401
+ }
402
+ activeWindow(reason) {
403
+ return this.client.call("desktop.window.active", {
404
+ ...reason ? { reason } : {}
405
+ });
406
+ }
407
+ captureDesktop(input) {
408
+ return this.client.call("desktop.capture.desktop", { reason: input.reason });
409
+ }
410
+ captureWindow(windowId, input) {
411
+ return this.client.call("desktop.capture.window", {
412
+ windowId,
413
+ reason: input.reason
414
+ });
415
+ }
416
+ accessibilitySnapshot(reason, windowId) {
417
+ return this.client.call("desktop.accessibility.snapshot", {
418
+ reason,
419
+ ...windowId ? { windowId } : {}
420
+ });
421
+ }
422
+ };
423
+
306
424
  // src/cli/remote-relay.ts
307
425
  var emptyStatus = {
308
426
  running: false,
@@ -376,7 +494,7 @@ var RemoteRelay = class {
376
494
 
377
495
  // src/skills/skill-nudge.ts
378
496
  var SKILL_NUDGE_MARKER = "[opendevbrowser:skill-nudge]";
379
- var SKILL_NUDGE_MESSAGE = `${SKILL_NUDGE_MARKER} If this task likely matches a skill, start with skill("opendevbrowser-best-practices", "quick start"). Use another skill only when it is more relevant.`;
497
+ var SKILL_NUDGE_MESSAGE = `${SKILL_NUDGE_MARKER} If this task likely matches a skill, start with skill("${onboarding_metadata_default.skillName}", "${onboarding_metadata_default.skillTopic}"). For frontend, UI, screenshot-to-code, or /canvas design work, then load skill("${onboarding_metadata_default.designSkillName}"). Use the canonical opendevbrowser-* packs and start with the bundled quick-start lane before low-level browser commands.`;
380
498
  function createSkillNudgeState() {
381
499
  return { pending: false, requestedAtMs: null };
382
500
  }
@@ -501,7 +619,7 @@ function createLaunchTool(deps) {
501
619
  let relayUrl = extensionLegacy ? deps.relay?.getCdpUrl() ?? null : deps.relay?.getOpsUrl?.() ?? null;
502
620
  const relayPort = relayStatus?.port;
503
621
  if (!relayUrl && isValidPort(relayPort)) {
504
- relayUrl = `ws://127.0.0.1:${relayPort}/${extensionLegacy ? "cdp" : "ops"}`;
622
+ relayUrl = buildLoopbackSessionRelayEndpoint(relayPort, { extensionLegacy });
505
623
  }
506
624
  const waitTimeoutMs = clampWaitTimeout(args.waitTimeoutMs ?? 3e4);
507
625
  const headlessExplicit = args.headless === true;
@@ -526,7 +644,7 @@ function createLaunchTool(deps) {
526
644
  const observedStatus = shouldFetchObserved ? await fetchRelayObservedStatus(observedPort) : null;
527
645
  if (!relayUrl) {
528
646
  const fallbackPort = isValidPort(observedStatus?.port) ? observedStatus?.port : observedPort;
529
- relayUrl = fallbackPort ? `ws://127.0.0.1:${fallbackPort}/${extensionLegacy ? "cdp" : "ops"}` : null;
647
+ relayUrl = fallbackPort ? buildLoopbackSessionRelayEndpoint(fallbackPort, { extensionLegacy }) : null;
530
648
  }
531
649
  const extensionReady = Boolean(
532
650
  relayUrl && (relayStatus?.extensionHandshakeComplete || relayStatus?.extensionConnected || observedStatus?.extensionHandshakeComplete || observedStatus?.extensionConnected)
@@ -783,21 +901,6 @@ async function fetchRelayObservedStatus(port) {
783
901
  // src/tools/connect.ts
784
902
  import { tool as tool2 } from "@opencode-ai/plugin";
785
903
  var z2 = tool2.schema;
786
- function normalizeRelayEndpoint(wsEndpoint, path, allowBase) {
787
- if (!wsEndpoint) return null;
788
- try {
789
- const url = new URL(wsEndpoint);
790
- if (url.protocol !== "ws:" && url.protocol !== "wss:") return null;
791
- if (url.hostname !== "127.0.0.1" && url.hostname !== "localhost") return null;
792
- if (!url.port || !/^\d+$/.test(url.port)) return null;
793
- const normalizedPath = url.pathname.endsWith("/") ? url.pathname.slice(0, -1) : url.pathname;
794
- if (!allowBase && normalizedPath === "") return null;
795
- if (normalizedPath && normalizedPath !== `/${path}`) return null;
796
- return `${url.protocol}//${url.hostname}:${url.port}/${path}`;
797
- } catch {
798
- return null;
799
- }
800
- }
801
904
  function createConnectTool(deps) {
802
905
  return tool2({
803
906
  description: "Connect to an existing Chrome CDP endpoint or extension relay.",
@@ -816,15 +919,16 @@ function createConnectTool(deps) {
816
919
  const startUrl = typeof args.startUrl === "string" && args.startUrl.trim().length > 0 ? args.startUrl.trim() : void 0;
817
920
  const hasExplicitCdp = Boolean(wsEndpoint || args.host || args.port);
818
921
  const relayUrl = extensionLegacy ? deps.relay?.getCdpUrl() ?? null : deps.relay?.getOpsUrl?.() ?? null;
819
- const normalizedOpsEndpoint = normalizeRelayEndpoint(wsEndpoint, "ops", true);
820
- const normalizedLegacyEndpoint = normalizeRelayEndpoint(wsEndpoint, "cdp", extensionLegacy);
821
- if (normalizedLegacyEndpoint && !extensionLegacy) {
822
- return failure("Legacy extension relay (/cdp) requires extensionLegacy=true.", "extension_legacy_required");
922
+ const parsedRelayEndpoint = classifySessionRelayEndpoint(wsEndpoint);
923
+ const resolvedRelayEndpoint = parsedRelayEndpoint ? resolveSessionRelayRoute(parsedRelayEndpoint, { extensionLegacy }) : null;
924
+ if (resolvedRelayEndpoint && "code" in resolvedRelayEndpoint) {
925
+ return failure(resolvedRelayEndpoint.message, resolvedRelayEndpoint.code);
823
926
  }
824
- const relayEndpoint = relayUrl && wsEndpoint === relayUrl ? relayUrl : extensionLegacy ? normalizedLegacyEndpoint ?? normalizedOpsEndpoint : normalizedOpsEndpoint;
927
+ const relayEndpoint = relayUrl && wsEndpoint === relayUrl ? relayUrl : resolvedRelayEndpoint?.normalizedEndpoint ?? null;
928
+ const preferredRelayEndpoint = relayEndpoint ?? (!hasExplicitCdp ? relayUrl : null);
825
929
  let result;
826
- if (relayEndpoint || !hasExplicitCdp && relayUrl) {
827
- result = startUrl ? await deps.manager.connectRelay(relayEndpoint ?? relayUrl ?? "", { startUrl }) : await deps.manager.connectRelay(relayEndpoint ?? relayUrl ?? "");
930
+ if (preferredRelayEndpoint) {
931
+ result = startUrl ? await deps.manager.connectRelay(preferredRelayEndpoint, { startUrl }) : await deps.manager.connectRelay(preferredRelayEndpoint);
828
932
  } else {
829
933
  if (!hasExplicitCdp) {
830
934
  return failure("Extension relay not available. Connect the extension or pass wsEndpoint/host/port.", "extension_not_connected");
@@ -985,15 +1089,56 @@ function createStatusTool(deps) {
985
1089
  });
986
1090
  }
987
1091
 
988
- // src/tools/targets_list.ts
1092
+ // src/tools/session_inspector.ts
989
1093
  import { tool as tool5 } from "@opencode-ai/plugin";
990
1094
  var z5 = tool5.schema;
991
- function createTargetsListTool(deps) {
1095
+ function createSessionInspectorTool(deps) {
992
1096
  return tool5({
993
- description: "List targets (tabs) in the current session.",
1097
+ description: "Capture a session-first diagnostic bundle with relay health, trace proof, and a suggested next action.",
994
1098
  args: {
995
1099
  sessionId: z5.string().describe("Session id"),
996
- includeUrls: z5.boolean().optional().describe("Include target URLs")
1100
+ includeUrls: z5.boolean().optional().describe("Include target URLs in the targets summary"),
1101
+ sinceConsoleSeq: z5.number().int().optional().describe("Resume cursor for console events"),
1102
+ sinceNetworkSeq: z5.number().int().optional().describe("Resume cursor for network events"),
1103
+ sinceExceptionSeq: z5.number().int().optional().describe("Resume cursor for exception events"),
1104
+ max: z5.number().int().optional().describe("Max events per diagnostics channel"),
1105
+ requestId: z5.string().optional().describe("Optional trace request id")
1106
+ },
1107
+ async execute(args) {
1108
+ try {
1109
+ const inspector = deps.manager.createSessionInspector?.();
1110
+ if (!inspector) {
1111
+ return failure("Session inspector is unavailable for the current runtime.", "session_inspector_unavailable");
1112
+ }
1113
+ await deps.relay?.refresh?.().catch(() => void 0);
1114
+ const relayStatus = deps.relay?.status?.() ?? null;
1115
+ const result = await inspectSession(inspector, {
1116
+ sessionId: args.sessionId,
1117
+ includeUrls: args.includeUrls,
1118
+ sinceConsoleSeq: args.sinceConsoleSeq,
1119
+ sinceNetworkSeq: args.sinceNetworkSeq,
1120
+ sinceExceptionSeq: args.sinceExceptionSeq,
1121
+ max: args.max,
1122
+ requestId: args.requestId,
1123
+ relayStatus
1124
+ });
1125
+ return ok(result);
1126
+ } catch (error) {
1127
+ return failure(serializeError(error).message, "session_inspector_failed");
1128
+ }
1129
+ }
1130
+ });
1131
+ }
1132
+
1133
+ // src/tools/targets_list.ts
1134
+ import { tool as tool6 } from "@opencode-ai/plugin";
1135
+ var z6 = tool6.schema;
1136
+ function createTargetsListTool(deps) {
1137
+ return tool6({
1138
+ description: "List targets (tabs) in the current session.",
1139
+ args: {
1140
+ sessionId: z6.string().describe("Session id"),
1141
+ includeUrls: z6.boolean().optional().describe("Include target URLs")
997
1142
  },
998
1143
  async execute(args) {
999
1144
  try {
@@ -1010,14 +1155,14 @@ function createTargetsListTool(deps) {
1010
1155
  }
1011
1156
 
1012
1157
  // src/tools/target_use.ts
1013
- import { tool as tool6 } from "@opencode-ai/plugin";
1014
- var z6 = tool6.schema;
1158
+ import { tool as tool7 } from "@opencode-ai/plugin";
1159
+ var z7 = tool7.schema;
1015
1160
  function createTargetUseTool(deps) {
1016
- return tool6({
1161
+ return tool7({
1017
1162
  description: "Set the active target (tab).",
1018
1163
  args: {
1019
- sessionId: z6.string().describe("Session id"),
1020
- targetId: z6.string().describe("Target id")
1164
+ sessionId: z7.string().describe("Session id"),
1165
+ targetId: z7.string().describe("Target id")
1021
1166
  },
1022
1167
  async execute(args) {
1023
1168
  try {
@@ -1035,14 +1180,14 @@ function createTargetUseTool(deps) {
1035
1180
  }
1036
1181
 
1037
1182
  // src/tools/target_new.ts
1038
- import { tool as tool7 } from "@opencode-ai/plugin";
1039
- var z7 = tool7.schema;
1183
+ import { tool as tool8 } from "@opencode-ai/plugin";
1184
+ var z8 = tool8.schema;
1040
1185
  function createTargetNewTool(deps) {
1041
- return tool7({
1186
+ return tool8({
1042
1187
  description: "Open a new target (tab).",
1043
1188
  args: {
1044
- sessionId: z7.string().describe("Session id"),
1045
- url: z7.string().optional().describe("Optional URL to open")
1189
+ sessionId: z8.string().describe("Session id"),
1190
+ url: z8.string().optional().describe("Optional URL to open")
1046
1191
  },
1047
1192
  async execute(args) {
1048
1193
  try {
@@ -1056,14 +1201,14 @@ function createTargetNewTool(deps) {
1056
1201
  }
1057
1202
 
1058
1203
  // src/tools/target_close.ts
1059
- import { tool as tool8 } from "@opencode-ai/plugin";
1060
- var z8 = tool8.schema;
1204
+ import { tool as tool9 } from "@opencode-ai/plugin";
1205
+ var z9 = tool9.schema;
1061
1206
  function createTargetCloseTool(deps) {
1062
- return tool8({
1207
+ return tool9({
1063
1208
  description: "Close a target (tab).",
1064
1209
  args: {
1065
- sessionId: z8.string().describe("Session id"),
1066
- targetId: z8.string().describe("Target id")
1210
+ sessionId: z9.string().describe("Session id"),
1211
+ targetId: z9.string().describe("Target id")
1067
1212
  },
1068
1213
  async execute(args) {
1069
1214
  try {
@@ -1077,15 +1222,15 @@ function createTargetCloseTool(deps) {
1077
1222
  }
1078
1223
 
1079
1224
  // src/tools/page.ts
1080
- import { tool as tool9 } from "@opencode-ai/plugin";
1081
- var z9 = tool9.schema;
1225
+ import { tool as tool10 } from "@opencode-ai/plugin";
1226
+ var z10 = tool10.schema;
1082
1227
  function createPageTool(deps) {
1083
- return tool9({
1228
+ return tool10({
1084
1229
  description: "Open or focus a named page, optionally navigating to a URL.",
1085
1230
  args: {
1086
- sessionId: z9.string().describe("Active browser session id"),
1087
- name: z9.string().describe("Stable page name"),
1088
- url: z9.string().optional().describe("Optional URL to open")
1231
+ sessionId: z10.string().describe("Active browser session id"),
1232
+ name: z10.string().describe("Stable page name"),
1233
+ url: z10.string().optional().describe("Optional URL to open")
1089
1234
  },
1090
1235
  async execute(args) {
1091
1236
  try {
@@ -1104,13 +1249,13 @@ function createPageTool(deps) {
1104
1249
  }
1105
1250
 
1106
1251
  // src/tools/list.ts
1107
- import { tool as tool10 } from "@opencode-ai/plugin";
1108
- var z10 = tool10.schema;
1252
+ import { tool as tool11 } from "@opencode-ai/plugin";
1253
+ var z11 = tool11.schema;
1109
1254
  function createListTool(deps) {
1110
- return tool10({
1255
+ return tool11({
1111
1256
  description: "List named pages in the current session.",
1112
1257
  args: {
1113
- sessionId: z10.string().describe("Active browser session id")
1258
+ sessionId: z11.string().describe("Active browser session id")
1114
1259
  },
1115
1260
  async execute(args) {
1116
1261
  try {
@@ -1124,14 +1269,14 @@ function createListTool(deps) {
1124
1269
  }
1125
1270
 
1126
1271
  // src/tools/close.ts
1127
- import { tool as tool11 } from "@opencode-ai/plugin";
1128
- var z11 = tool11.schema;
1272
+ import { tool as tool12 } from "@opencode-ai/plugin";
1273
+ var z12 = tool12.schema;
1129
1274
  function createCloseTool(deps) {
1130
- return tool11({
1275
+ return tool12({
1131
1276
  description: "Close a named page within the current session.",
1132
1277
  args: {
1133
- sessionId: z11.string().describe("Active browser session id"),
1134
- name: z11.string().describe("Named page to close")
1278
+ sessionId: z12.string().describe("Active browser session id"),
1279
+ name: z12.string().describe("Named page to close")
1135
1280
  },
1136
1281
  async execute(args) {
1137
1282
  try {
@@ -1145,18 +1290,18 @@ function createCloseTool(deps) {
1145
1290
  }
1146
1291
 
1147
1292
  // src/tools/goto.ts
1148
- import { tool as tool12 } from "@opencode-ai/plugin";
1149
- var z12 = tool12.schema;
1150
- var waitUntilSchema = z12.enum(["domcontentloaded", "load", "networkidle"]);
1293
+ import { tool as tool13 } from "@opencode-ai/plugin";
1294
+ var z13 = tool13.schema;
1295
+ var waitUntilSchema = z13.enum(["domcontentloaded", "load", "networkidle"]);
1151
1296
  function createGotoTool(deps) {
1152
- return tool12({
1297
+ return tool13({
1153
1298
  description: "Navigate the active target to a URL.",
1154
1299
  args: {
1155
- sessionId: z12.string().describe("Session id"),
1156
- url: z12.string().describe("URL to navigate to"),
1157
- targetId: z12.string().optional().describe("Optional target id"),
1300
+ sessionId: z13.string().describe("Session id"),
1301
+ url: z13.string().describe("URL to navigate to"),
1302
+ targetId: z13.string().optional().describe("Optional target id"),
1158
1303
  waitUntil: waitUntilSchema.optional().describe("Load state to wait for"),
1159
- timeoutMs: z12.number().int().optional().describe("Timeout in milliseconds")
1304
+ timeoutMs: z13.number().int().optional().describe("Timeout in milliseconds")
1160
1305
  },
1161
1306
  async execute(args) {
1162
1307
  try {
@@ -1177,20 +1322,20 @@ function createGotoTool(deps) {
1177
1322
  }
1178
1323
 
1179
1324
  // src/tools/wait.ts
1180
- import { tool as tool13 } from "@opencode-ai/plugin";
1181
- var z13 = tool13.schema;
1182
- var waitUntilSchema2 = z13.enum(["domcontentloaded", "load", "networkidle"]);
1183
- var waitStateSchema = z13.enum(["attached", "visible", "hidden"]);
1325
+ import { tool as tool14 } from "@opencode-ai/plugin";
1326
+ var z14 = tool14.schema;
1327
+ var waitUntilSchema2 = z14.enum(["domcontentloaded", "load", "networkidle"]);
1328
+ var waitStateSchema = z14.enum(["attached", "visible", "hidden"]);
1184
1329
  function createWaitTool(deps) {
1185
- return tool13({
1330
+ return tool14({
1186
1331
  description: "Wait for a load state or a ref state.",
1187
1332
  args: {
1188
- sessionId: z13.string().describe("Session id"),
1189
- targetId: z13.string().optional().describe("Optional target id"),
1333
+ sessionId: z14.string().describe("Session id"),
1334
+ targetId: z14.string().optional().describe("Optional target id"),
1190
1335
  until: waitUntilSchema2.optional().describe("Load state to wait for"),
1191
- ref: z13.string().optional().describe("Ref to wait for"),
1336
+ ref: z14.string().optional().describe("Ref to wait for"),
1192
1337
  state: waitStateSchema.optional().describe("Ref state to wait for"),
1193
- timeoutMs: z13.number().int().optional().describe("Timeout in milliseconds")
1338
+ timeoutMs: z14.number().int().optional().describe("Timeout in milliseconds")
1194
1339
  },
1195
1340
  async execute(args) {
1196
1341
  try {
@@ -1222,18 +1367,18 @@ function createWaitTool(deps) {
1222
1367
  }
1223
1368
 
1224
1369
  // src/tools/snapshot.ts
1225
- import { tool as tool14 } from "@opencode-ai/plugin";
1226
- var z14 = tool14.schema;
1227
- var formatSchema = z14.enum(["outline", "actionables"]);
1370
+ import { tool as tool15 } from "@opencode-ai/plugin";
1371
+ var z15 = tool15.schema;
1372
+ var formatSchema = z15.enum(["outline", "actionables"]);
1228
1373
  function createSnapshotTool(deps) {
1229
- return tool14({
1374
+ return tool15({
1230
1375
  description: "Capture a snapshot of the current page and return refs.",
1231
1376
  args: {
1232
- sessionId: z14.string().describe("Session id"),
1233
- targetId: z14.string().optional().describe("Optional target id"),
1377
+ sessionId: z15.string().describe("Session id"),
1378
+ targetId: z15.string().optional().describe("Optional target id"),
1234
1379
  format: formatSchema.optional().describe("Snapshot format"),
1235
- maxChars: z14.number().int().optional().describe("Max characters for snapshot output"),
1236
- cursor: z14.string().optional().describe("Cursor for paging")
1380
+ maxChars: z15.number().int().optional().describe("Max characters for snapshot output"),
1381
+ cursor: z15.string().optional().describe("Cursor for paging")
1237
1382
  },
1238
1383
  async execute(args) {
1239
1384
  try {
@@ -1253,16 +1398,46 @@ function createSnapshotTool(deps) {
1253
1398
  });
1254
1399
  }
1255
1400
 
1401
+ // src/tools/review.ts
1402
+ import { tool as tool16 } from "@opencode-ai/plugin";
1403
+ var z16 = tool16.schema;
1404
+ function createReviewTool(deps) {
1405
+ return tool16({
1406
+ description: "Capture a first-class review payload with status and actionables.",
1407
+ args: {
1408
+ sessionId: z16.string().describe("Session id"),
1409
+ targetId: z16.string().optional().describe("Optional target id"),
1410
+ maxChars: z16.number().int().optional().describe("Max characters for review output"),
1411
+ cursor: z16.string().optional().describe("Cursor for paging")
1412
+ },
1413
+ async execute(args) {
1414
+ try {
1415
+ const config = deps.config.get();
1416
+ const result = await buildBrowserReviewResult({
1417
+ manager: deps.manager,
1418
+ sessionId: args.sessionId,
1419
+ targetId: args.targetId,
1420
+ maxChars: args.maxChars ?? config.snapshot.maxChars,
1421
+ cursor: args.cursor
1422
+ });
1423
+ return ok(result);
1424
+ } catch (error) {
1425
+ return failure(serializeError(error).message, "review_failed");
1426
+ }
1427
+ }
1428
+ });
1429
+ }
1430
+
1256
1431
  // src/tools/click.ts
1257
- import { tool as tool15 } from "@opencode-ai/plugin";
1258
- var z15 = tool15.schema;
1432
+ import { tool as tool17 } from "@opencode-ai/plugin";
1433
+ var z17 = tool17.schema;
1259
1434
  function createClickTool(deps) {
1260
- return tool15({
1435
+ return tool17({
1261
1436
  description: "Click a referenced element.",
1262
1437
  args: {
1263
- sessionId: z15.string().describe("Session id"),
1264
- targetId: z15.string().optional().describe("Optional target id"),
1265
- ref: z15.string().describe("Element ref")
1438
+ sessionId: z17.string().describe("Session id"),
1439
+ targetId: z17.string().optional().describe("Optional target id"),
1440
+ ref: z17.string().describe("Element ref")
1266
1441
  },
1267
1442
  async execute(args) {
1268
1443
  try {
@@ -1276,15 +1451,15 @@ function createClickTool(deps) {
1276
1451
  }
1277
1452
 
1278
1453
  // src/tools/hover.ts
1279
- import { tool as tool16 } from "@opencode-ai/plugin";
1280
- var z16 = tool16.schema;
1454
+ import { tool as tool18 } from "@opencode-ai/plugin";
1455
+ var z18 = tool18.schema;
1281
1456
  function createHoverTool(deps) {
1282
- return tool16({
1457
+ return tool18({
1283
1458
  description: "Hover over an element by ref.",
1284
1459
  args: {
1285
- sessionId: z16.string().describe("Active browser session id"),
1286
- targetId: z16.string().optional().describe("Optional target id"),
1287
- ref: z16.string().describe("Element ref from snapshot")
1460
+ sessionId: z18.string().describe("Active browser session id"),
1461
+ targetId: z18.string().optional().describe("Optional target id"),
1462
+ ref: z18.string().describe("Element ref from snapshot")
1288
1463
  },
1289
1464
  async execute(args) {
1290
1465
  try {
@@ -1298,16 +1473,16 @@ function createHoverTool(deps) {
1298
1473
  }
1299
1474
 
1300
1475
  // src/tools/press.ts
1301
- import { tool as tool17 } from "@opencode-ai/plugin";
1302
- var z17 = tool17.schema;
1476
+ import { tool as tool19 } from "@opencode-ai/plugin";
1477
+ var z19 = tool19.schema;
1303
1478
  function createPressTool(deps) {
1304
- return tool17({
1479
+ return tool19({
1305
1480
  description: "Press a keyboard key, optionally focusing a ref first.",
1306
1481
  args: {
1307
- sessionId: z17.string().describe("Active browser session id"),
1308
- targetId: z17.string().optional().describe("Optional target id"),
1309
- key: z17.string().describe("Keyboard key to press, e.g. Enter or ArrowDown"),
1310
- ref: z17.string().optional().describe("Optional element ref to focus first")
1482
+ sessionId: z19.string().describe("Active browser session id"),
1483
+ targetId: z19.string().optional().describe("Optional target id"),
1484
+ key: z19.string().describe("Keyboard key to press, e.g. Enter or ArrowDown"),
1485
+ ref: z19.string().optional().describe("Optional element ref to focus first")
1311
1486
  },
1312
1487
  async execute(args) {
1313
1488
  try {
@@ -1321,15 +1496,15 @@ function createPressTool(deps) {
1321
1496
  }
1322
1497
 
1323
1498
  // src/tools/check.ts
1324
- import { tool as tool18 } from "@opencode-ai/plugin";
1325
- var z18 = tool18.schema;
1499
+ import { tool as tool20 } from "@opencode-ai/plugin";
1500
+ var z20 = tool20.schema;
1326
1501
  function createCheckTool(deps) {
1327
- return tool18({
1502
+ return tool20({
1328
1503
  description: "Check a checkbox or toggle by ref.",
1329
1504
  args: {
1330
- sessionId: z18.string().describe("Active browser session id"),
1331
- targetId: z18.string().optional().describe("Optional target id"),
1332
- ref: z18.string().describe("Element ref from snapshot")
1505
+ sessionId: z20.string().describe("Active browser session id"),
1506
+ targetId: z20.string().optional().describe("Optional target id"),
1507
+ ref: z20.string().describe("Element ref from snapshot")
1333
1508
  },
1334
1509
  async execute(args) {
1335
1510
  try {
@@ -1343,15 +1518,15 @@ function createCheckTool(deps) {
1343
1518
  }
1344
1519
 
1345
1520
  // src/tools/uncheck.ts
1346
- import { tool as tool19 } from "@opencode-ai/plugin";
1347
- var z19 = tool19.schema;
1521
+ import { tool as tool21 } from "@opencode-ai/plugin";
1522
+ var z21 = tool21.schema;
1348
1523
  function createUncheckTool(deps) {
1349
- return tool19({
1524
+ return tool21({
1350
1525
  description: "Uncheck a checkbox or toggle by ref.",
1351
1526
  args: {
1352
- sessionId: z19.string().describe("Active browser session id"),
1353
- targetId: z19.string().optional().describe("Optional target id"),
1354
- ref: z19.string().describe("Element ref from snapshot")
1527
+ sessionId: z21.string().describe("Active browser session id"),
1528
+ targetId: z21.string().optional().describe("Optional target id"),
1529
+ ref: z21.string().describe("Element ref from snapshot")
1355
1530
  },
1356
1531
  async execute(args) {
1357
1532
  try {
@@ -1365,18 +1540,18 @@ function createUncheckTool(deps) {
1365
1540
  }
1366
1541
 
1367
1542
  // src/tools/type.ts
1368
- import { tool as tool20 } from "@opencode-ai/plugin";
1369
- var z20 = tool20.schema;
1543
+ import { tool as tool22 } from "@opencode-ai/plugin";
1544
+ var z22 = tool22.schema;
1370
1545
  function createTypeTool(deps) {
1371
- return tool20({
1546
+ return tool22({
1372
1547
  description: "Type text into a referenced input.",
1373
1548
  args: {
1374
- sessionId: z20.string().describe("Session id"),
1375
- targetId: z20.string().optional().describe("Optional target id"),
1376
- ref: z20.string().describe("Element ref"),
1377
- text: z20.string().describe("Text to type"),
1378
- clear: z20.boolean().optional().describe("Clear before typing"),
1379
- submit: z20.boolean().optional().describe("Press Enter after typing")
1549
+ sessionId: z22.string().describe("Session id"),
1550
+ targetId: z22.string().optional().describe("Optional target id"),
1551
+ ref: z22.string().describe("Element ref"),
1552
+ text: z22.string().describe("Text to type"),
1553
+ clear: z22.boolean().optional().describe("Clear before typing"),
1554
+ submit: z22.boolean().optional().describe("Press Enter after typing")
1380
1555
  },
1381
1556
  async execute(args) {
1382
1557
  try {
@@ -1397,16 +1572,16 @@ function createTypeTool(deps) {
1397
1572
  }
1398
1573
 
1399
1574
  // src/tools/select.ts
1400
- import { tool as tool21 } from "@opencode-ai/plugin";
1401
- var z21 = tool21.schema;
1575
+ import { tool as tool23 } from "@opencode-ai/plugin";
1576
+ var z23 = tool23.schema;
1402
1577
  function createSelectTool(deps) {
1403
- return tool21({
1578
+ return tool23({
1404
1579
  description: "Select options in a referenced select element.",
1405
1580
  args: {
1406
- sessionId: z21.string().describe("Session id"),
1407
- targetId: z21.string().optional().describe("Optional target id"),
1408
- ref: z21.string().describe("Element ref"),
1409
- values: z21.array(z21.string()).describe("Values to select")
1581
+ sessionId: z23.string().describe("Session id"),
1582
+ targetId: z23.string().optional().describe("Optional target id"),
1583
+ ref: z23.string().describe("Element ref"),
1584
+ values: z23.array(z23.string()).describe("Values to select")
1410
1585
  },
1411
1586
  async execute(args) {
1412
1587
  try {
@@ -1420,17 +1595,17 @@ function createSelectTool(deps) {
1420
1595
  }
1421
1596
 
1422
1597
  // src/tools/scroll.ts
1423
- import { tool as tool22 } from "@opencode-ai/plugin";
1424
- var z22 = tool22.schema;
1598
+ import { tool as tool24 } from "@opencode-ai/plugin";
1599
+ var z24 = tool24.schema;
1425
1600
  function createScrollTool(deps) {
1426
- return tool22({
1601
+ return tool24({
1427
1602
  description: "Scroll the page or a referenced element.",
1428
1603
  args: {
1429
- sessionId: z22.string().describe("Session id"),
1430
- targetId: z22.string().optional().describe("Optional target id"),
1431
- dy: z22.number().describe("Scroll delta in pixels"),
1432
- ref: z22.string().optional().describe("Optional element ref to scroll")
1433
- },
1604
+ sessionId: z24.string().describe("Session id"),
1605
+ targetId: z24.string().optional().describe("Optional target id"),
1606
+ dy: z24.number().describe("Scroll delta in pixels"),
1607
+ ref: z24.string().optional().describe("Optional element ref to scroll")
1608
+ },
1434
1609
  async execute(args) {
1435
1610
  try {
1436
1611
  await deps.manager.scroll(args.sessionId, args.dy, args.ref, args.targetId);
@@ -1443,15 +1618,15 @@ function createScrollTool(deps) {
1443
1618
  }
1444
1619
 
1445
1620
  // src/tools/scroll_into_view.ts
1446
- import { tool as tool23 } from "@opencode-ai/plugin";
1447
- var z23 = tool23.schema;
1621
+ import { tool as tool25 } from "@opencode-ai/plugin";
1622
+ var z25 = tool25.schema;
1448
1623
  function createScrollIntoViewTool(deps) {
1449
- return tool23({
1624
+ return tool25({
1450
1625
  description: "Scroll an element into view by ref.",
1451
1626
  args: {
1452
- sessionId: z23.string().describe("Active browser session id"),
1453
- targetId: z23.string().optional().describe("Optional target id"),
1454
- ref: z23.string().describe("Element ref from snapshot")
1627
+ sessionId: z25.string().describe("Active browser session id"),
1628
+ targetId: z25.string().optional().describe("Optional target id"),
1629
+ ref: z25.string().describe("Element ref from snapshot")
1455
1630
  },
1456
1631
  async execute(args) {
1457
1632
  try {
@@ -1464,17 +1639,164 @@ function createScrollIntoViewTool(deps) {
1464
1639
  });
1465
1640
  }
1466
1641
 
1642
+ // src/tools/upload.ts
1643
+ import { tool as tool26 } from "@opencode-ai/plugin";
1644
+ var z26 = tool26.schema;
1645
+ function createUploadTool(deps) {
1646
+ return tool26({
1647
+ description: "Upload files to an input or chooser by ref.",
1648
+ args: {
1649
+ sessionId: z26.string().describe("Active browser session id"),
1650
+ targetId: z26.string().optional().describe("Optional target id"),
1651
+ ref: z26.string().describe("Element ref"),
1652
+ files: z26.array(z26.string()).min(1).describe("Local host file paths")
1653
+ },
1654
+ async execute(args) {
1655
+ try {
1656
+ const result = await deps.manager.upload(args.sessionId, {
1657
+ targetId: args.targetId,
1658
+ ref: args.ref,
1659
+ files: args.files
1660
+ });
1661
+ return ok(result);
1662
+ } catch (error) {
1663
+ return failure(serializeError(error).message, "upload_failed");
1664
+ }
1665
+ }
1666
+ });
1667
+ }
1668
+
1669
+ // src/tools/pointer_move.ts
1670
+ import { tool as tool27 } from "@opencode-ai/plugin";
1671
+ var z27 = tool27.schema;
1672
+ function createPointerMoveTool(deps) {
1673
+ return tool27({
1674
+ description: "Move the pointer to viewport coordinates.",
1675
+ args: {
1676
+ sessionId: z27.string().describe("Active browser session id"),
1677
+ targetId: z27.string().optional().describe("Optional target id"),
1678
+ x: z27.number().describe("Viewport x coordinate"),
1679
+ y: z27.number().describe("Viewport y coordinate"),
1680
+ steps: z27.number().int().positive().optional().describe("Optional move interpolation step count")
1681
+ },
1682
+ async execute(args) {
1683
+ try {
1684
+ const result = await deps.manager.pointerMove(args.sessionId, args.x, args.y, args.targetId, args.steps);
1685
+ return ok(result);
1686
+ } catch (error) {
1687
+ return failure(serializeError(error).message, "pointer_move_failed");
1688
+ }
1689
+ }
1690
+ });
1691
+ }
1692
+
1693
+ // src/tools/pointer_down.ts
1694
+ import { tool as tool28 } from "@opencode-ai/plugin";
1695
+ var z28 = tool28.schema;
1696
+ function createPointerDownTool(deps) {
1697
+ return tool28({
1698
+ description: "Move to viewport coordinates and press a mouse button.",
1699
+ args: {
1700
+ sessionId: z28.string().describe("Active browser session id"),
1701
+ targetId: z28.string().optional().describe("Optional target id"),
1702
+ x: z28.number().describe("Viewport x coordinate"),
1703
+ y: z28.number().describe("Viewport y coordinate"),
1704
+ button: z28.enum(["left", "middle", "right"]).optional().describe("Mouse button to press"),
1705
+ clickCount: z28.number().int().positive().optional().describe("Associated click count")
1706
+ },
1707
+ async execute(args) {
1708
+ try {
1709
+ const result = await deps.manager.pointerDown(
1710
+ args.sessionId,
1711
+ args.x,
1712
+ args.y,
1713
+ args.targetId,
1714
+ args.button,
1715
+ args.clickCount
1716
+ );
1717
+ return ok(result);
1718
+ } catch (error) {
1719
+ return failure(serializeError(error).message, "pointer_down_failed");
1720
+ }
1721
+ }
1722
+ });
1723
+ }
1724
+
1725
+ // src/tools/pointer_up.ts
1726
+ import { tool as tool29 } from "@opencode-ai/plugin";
1727
+ var z29 = tool29.schema;
1728
+ function createPointerUpTool(deps) {
1729
+ return tool29({
1730
+ description: "Move to viewport coordinates and release a mouse button.",
1731
+ args: {
1732
+ sessionId: z29.string().describe("Active browser session id"),
1733
+ targetId: z29.string().optional().describe("Optional target id"),
1734
+ x: z29.number().describe("Viewport x coordinate"),
1735
+ y: z29.number().describe("Viewport y coordinate"),
1736
+ button: z29.enum(["left", "middle", "right"]).optional().describe("Mouse button to release"),
1737
+ clickCount: z29.number().int().positive().optional().describe("Associated click count")
1738
+ },
1739
+ async execute(args) {
1740
+ try {
1741
+ const result = await deps.manager.pointerUp(
1742
+ args.sessionId,
1743
+ args.x,
1744
+ args.y,
1745
+ args.targetId,
1746
+ args.button,
1747
+ args.clickCount
1748
+ );
1749
+ return ok(result);
1750
+ } catch (error) {
1751
+ return failure(serializeError(error).message, "pointer_up_failed");
1752
+ }
1753
+ }
1754
+ });
1755
+ }
1756
+
1757
+ // src/tools/pointer_drag.ts
1758
+ import { tool as tool30 } from "@opencode-ai/plugin";
1759
+ var z30 = tool30.schema;
1760
+ function createPointerDragTool(deps) {
1761
+ return tool30({
1762
+ description: "Drag the pointer between two viewport coordinates.",
1763
+ args: {
1764
+ sessionId: z30.string().describe("Active browser session id"),
1765
+ targetId: z30.string().optional().describe("Optional target id"),
1766
+ fromX: z30.number().describe("Start x coordinate"),
1767
+ fromY: z30.number().describe("Start y coordinate"),
1768
+ toX: z30.number().describe("End x coordinate"),
1769
+ toY: z30.number().describe("End y coordinate"),
1770
+ steps: z30.number().int().positive().optional().describe("Optional drag interpolation step count")
1771
+ },
1772
+ async execute(args) {
1773
+ try {
1774
+ const result = await deps.manager.drag(
1775
+ args.sessionId,
1776
+ { x: args.fromX, y: args.fromY },
1777
+ { x: args.toX, y: args.toY },
1778
+ args.targetId,
1779
+ args.steps
1780
+ );
1781
+ return ok(result);
1782
+ } catch (error) {
1783
+ return failure(serializeError(error).message, "pointer_drag_failed");
1784
+ }
1785
+ }
1786
+ });
1787
+ }
1788
+
1467
1789
  // src/tools/dom_get_html.ts
1468
- import { tool as tool24 } from "@opencode-ai/plugin";
1469
- var z24 = tool24.schema;
1790
+ import { tool as tool31 } from "@opencode-ai/plugin";
1791
+ var z31 = tool31.schema;
1470
1792
  function createDomGetHtmlTool(deps) {
1471
- return tool24({
1793
+ return tool31({
1472
1794
  description: "Get outerHTML for a referenced element.",
1473
1795
  args: {
1474
- sessionId: z24.string().describe("Session id"),
1475
- targetId: z24.string().optional().describe("Optional target id"),
1476
- ref: z24.string().describe("Element ref"),
1477
- maxChars: z24.number().int().optional().describe("Max characters")
1796
+ sessionId: z31.string().describe("Session id"),
1797
+ targetId: z31.string().optional().describe("Optional target id"),
1798
+ ref: z31.string().describe("Element ref"),
1799
+ maxChars: z31.number().int().optional().describe("Max characters")
1478
1800
  },
1479
1801
  async execute(args) {
1480
1802
  try {
@@ -1497,16 +1819,16 @@ function createDomGetHtmlTool(deps) {
1497
1819
  }
1498
1820
 
1499
1821
  // src/tools/dom_get_text.ts
1500
- import { tool as tool25 } from "@opencode-ai/plugin";
1501
- var z25 = tool25.schema;
1822
+ import { tool as tool32 } from "@opencode-ai/plugin";
1823
+ var z32 = tool32.schema;
1502
1824
  function createDomGetTextTool(deps) {
1503
- return tool25({
1825
+ return tool32({
1504
1826
  description: "Get inner text for a referenced element.",
1505
1827
  args: {
1506
- sessionId: z25.string().describe("Session id"),
1507
- targetId: z25.string().optional().describe("Optional target id"),
1508
- ref: z25.string().describe("Element ref"),
1509
- maxChars: z25.number().int().optional().describe("Max characters")
1828
+ sessionId: z32.string().describe("Session id"),
1829
+ targetId: z32.string().optional().describe("Optional target id"),
1830
+ ref: z32.string().describe("Element ref"),
1831
+ maxChars: z32.number().int().optional().describe("Max characters")
1510
1832
  },
1511
1833
  async execute(args) {
1512
1834
  try {
@@ -1529,16 +1851,16 @@ function createDomGetTextTool(deps) {
1529
1851
  }
1530
1852
 
1531
1853
  // src/tools/get_attr.ts
1532
- import { tool as tool26 } from "@opencode-ai/plugin";
1533
- var z26 = tool26.schema;
1854
+ import { tool as tool33 } from "@opencode-ai/plugin";
1855
+ var z33 = tool33.schema;
1534
1856
  function createGetAttrTool(deps) {
1535
- return tool26({
1857
+ return tool33({
1536
1858
  description: "Get a DOM attribute value by ref.",
1537
1859
  args: {
1538
- sessionId: z26.string().describe("Active browser session id"),
1539
- targetId: z26.string().optional().describe("Optional target id"),
1540
- ref: z26.string().describe("Element ref from snapshot"),
1541
- name: z26.string().describe("Attribute name, e.g. href or aria-label")
1860
+ sessionId: z33.string().describe("Active browser session id"),
1861
+ targetId: z33.string().optional().describe("Optional target id"),
1862
+ ref: z33.string().describe("Element ref from snapshot"),
1863
+ name: z33.string().describe("Attribute name, e.g. href or aria-label")
1542
1864
  },
1543
1865
  async execute(args) {
1544
1866
  try {
@@ -1552,15 +1874,15 @@ function createGetAttrTool(deps) {
1552
1874
  }
1553
1875
 
1554
1876
  // src/tools/get_value.ts
1555
- import { tool as tool27 } from "@opencode-ai/plugin";
1556
- var z27 = tool27.schema;
1877
+ import { tool as tool34 } from "@opencode-ai/plugin";
1878
+ var z34 = tool34.schema;
1557
1879
  function createGetValueTool(deps) {
1558
- return tool27({
1880
+ return tool34({
1559
1881
  description: "Get the input value for an element by ref.",
1560
1882
  args: {
1561
- sessionId: z27.string().describe("Active browser session id"),
1562
- targetId: z27.string().optional().describe("Optional target id"),
1563
- ref: z27.string().describe("Element ref from snapshot")
1883
+ sessionId: z34.string().describe("Active browser session id"),
1884
+ targetId: z34.string().optional().describe("Optional target id"),
1885
+ ref: z34.string().describe("Element ref from snapshot")
1564
1886
  },
1565
1887
  async execute(args) {
1566
1888
  try {
@@ -1574,15 +1896,15 @@ function createGetValueTool(deps) {
1574
1896
  }
1575
1897
 
1576
1898
  // src/tools/is_visible.ts
1577
- import { tool as tool28 } from "@opencode-ai/plugin";
1578
- var z28 = tool28.schema;
1899
+ import { tool as tool35 } from "@opencode-ai/plugin";
1900
+ var z35 = tool35.schema;
1579
1901
  function createIsVisibleTool(deps) {
1580
- return tool28({
1902
+ return tool35({
1581
1903
  description: "Check if an element is visible by ref.",
1582
1904
  args: {
1583
- sessionId: z28.string().describe("Active browser session id"),
1584
- targetId: z28.string().optional().describe("Optional target id"),
1585
- ref: z28.string().describe("Element ref from snapshot")
1905
+ sessionId: z35.string().describe("Active browser session id"),
1906
+ targetId: z35.string().optional().describe("Optional target id"),
1907
+ ref: z35.string().describe("Element ref from snapshot")
1586
1908
  },
1587
1909
  async execute(args) {
1588
1910
  try {
@@ -1596,15 +1918,15 @@ function createIsVisibleTool(deps) {
1596
1918
  }
1597
1919
 
1598
1920
  // src/tools/is_enabled.ts
1599
- import { tool as tool29 } from "@opencode-ai/plugin";
1600
- var z29 = tool29.schema;
1921
+ import { tool as tool36 } from "@opencode-ai/plugin";
1922
+ var z36 = tool36.schema;
1601
1923
  function createIsEnabledTool(deps) {
1602
- return tool29({
1924
+ return tool36({
1603
1925
  description: "Check if an element is enabled by ref.",
1604
1926
  args: {
1605
- sessionId: z29.string().describe("Active browser session id"),
1606
- targetId: z29.string().optional().describe("Optional target id"),
1607
- ref: z29.string().describe("Element ref from snapshot")
1927
+ sessionId: z36.string().describe("Active browser session id"),
1928
+ targetId: z36.string().optional().describe("Optional target id"),
1929
+ ref: z36.string().describe("Element ref from snapshot")
1608
1930
  },
1609
1931
  async execute(args) {
1610
1932
  try {
@@ -1618,15 +1940,15 @@ function createIsEnabledTool(deps) {
1618
1940
  }
1619
1941
 
1620
1942
  // src/tools/is_checked.ts
1621
- import { tool as tool30 } from "@opencode-ai/plugin";
1622
- var z30 = tool30.schema;
1943
+ import { tool as tool37 } from "@opencode-ai/plugin";
1944
+ var z37 = tool37.schema;
1623
1945
  function createIsCheckedTool(deps) {
1624
- return tool30({
1946
+ return tool37({
1625
1947
  description: "Check if an element is checked by ref.",
1626
1948
  args: {
1627
- sessionId: z30.string().describe("Active browser session id"),
1628
- targetId: z30.string().optional().describe("Optional target id"),
1629
- ref: z30.string().describe("Element ref from snapshot")
1949
+ sessionId: z37.string().describe("Active browser session id"),
1950
+ targetId: z37.string().optional().describe("Optional target id"),
1951
+ ref: z37.string().describe("Element ref from snapshot")
1630
1952
  },
1631
1953
  async execute(args) {
1632
1954
  try {
@@ -1640,20 +1962,20 @@ function createIsCheckedTool(deps) {
1640
1962
  }
1641
1963
 
1642
1964
  // src/tools/run.ts
1643
- import { tool as tool31 } from "@opencode-ai/plugin";
1644
- var z31 = tool31.schema;
1645
- var stepSchema = z31.object({
1646
- action: z31.string().describe("Action name"),
1647
- args: z31.record(z31.string(), z31.unknown()).optional().describe("Action arguments")
1965
+ import { tool as tool38 } from "@opencode-ai/plugin";
1966
+ var z38 = tool38.schema;
1967
+ var stepSchema = z38.object({
1968
+ action: z38.string().describe("Action name"),
1969
+ args: z38.record(z38.string(), z38.unknown()).optional().describe("Action arguments")
1648
1970
  });
1649
1971
  function createRunTool(deps) {
1650
- return tool31({
1972
+ return tool38({
1651
1973
  description: "Run multiple actions in a single tool call.",
1652
1974
  args: {
1653
- sessionId: z31.string().describe("Session id"),
1654
- steps: z31.array(stepSchema).describe("Steps to execute"),
1655
- stopOnError: z31.boolean().optional().describe("Stop when a step fails"),
1656
- maxSnapshotChars: z31.number().int().optional().describe("Default maxChars for snapshot steps")
1975
+ sessionId: z38.string().describe("Session id"),
1976
+ steps: z38.array(stepSchema).describe("Steps to execute"),
1977
+ stopOnError: z38.boolean().optional().describe("Stop when a step fails"),
1978
+ maxSnapshotChars: z38.number().int().optional().describe("Default maxChars for snapshot steps")
1657
1979
  },
1658
1980
  async execute(args) {
1659
1981
  try {
@@ -1686,13 +2008,13 @@ function normalizeSteps(steps, maxSnapshotChars) {
1686
2008
  }
1687
2009
 
1688
2010
  // src/tools/prompting_guide.ts
1689
- import { tool as tool32 } from "@opencode-ai/plugin";
1690
- var z32 = tool32.schema;
2011
+ import { tool as tool39 } from "@opencode-ai/plugin";
2012
+ var z39 = tool39.schema;
1691
2013
  function createPromptingGuideTool(deps) {
1692
- return tool32({
1693
- description: "Return best-practice prompting guidance for OpenDevBrowser.",
2014
+ return tool39({
2015
+ description: `Start here for first-contact OpenDevBrowser guidance, including ${onboarding_metadata_default.skillName} ${onboarding_metadata_default.skillTopic}.`,
1694
2016
  args: {
1695
- topic: z32.string().optional().describe("Optional topic for guidance")
2017
+ topic: z39.string().optional().describe("Optional topic for guidance")
1696
2018
  },
1697
2019
  async execute(args) {
1698
2020
  try {
@@ -1706,15 +2028,15 @@ function createPromptingGuideTool(deps) {
1706
2028
  }
1707
2029
 
1708
2030
  // src/tools/console_poll.ts
1709
- import { tool as tool33 } from "@opencode-ai/plugin";
1710
- var z33 = tool33.schema;
2031
+ import { tool as tool40 } from "@opencode-ai/plugin";
2032
+ var z40 = tool40.schema;
1711
2033
  function createConsolePollTool(deps) {
1712
- return tool33({
2034
+ return tool40({
1713
2035
  description: "Poll console events for the active target.",
1714
2036
  args: {
1715
- sessionId: z33.string().describe("Session id"),
1716
- sinceSeq: z33.number().int().optional().describe("Sequence to resume from"),
1717
- max: z33.number().int().optional().describe("Max events to return")
2037
+ sessionId: z40.string().describe("Session id"),
2038
+ sinceSeq: z40.number().int().optional().describe("Sequence to resume from"),
2039
+ max: z40.number().int().optional().describe("Max events to return")
1718
2040
  },
1719
2041
  async execute(args) {
1720
2042
  try {
@@ -1732,15 +2054,15 @@ function createConsolePollTool(deps) {
1732
2054
  }
1733
2055
 
1734
2056
  // src/tools/network_poll.ts
1735
- import { tool as tool34 } from "@opencode-ai/plugin";
1736
- var z34 = tool34.schema;
2057
+ import { tool as tool41 } from "@opencode-ai/plugin";
2058
+ var z41 = tool41.schema;
1737
2059
  function createNetworkPollTool(deps) {
1738
- return tool34({
2060
+ return tool41({
1739
2061
  description: "Poll network events for the active target.",
1740
2062
  args: {
1741
- sessionId: z34.string().describe("Session id"),
1742
- sinceSeq: z34.number().int().optional().describe("Sequence to resume from"),
1743
- max: z34.number().int().optional().describe("Max events to return")
2063
+ sessionId: z41.string().describe("Session id"),
2064
+ sinceSeq: z41.number().int().optional().describe("Sequence to resume from"),
2065
+ max: z41.number().int().optional().describe("Max events to return")
1744
2066
  },
1745
2067
  async execute(args) {
1746
2068
  try {
@@ -1758,18 +2080,18 @@ function createNetworkPollTool(deps) {
1758
2080
  }
1759
2081
 
1760
2082
  // src/tools/debug_trace_snapshot.ts
1761
- import { tool as tool35 } from "@opencode-ai/plugin";
1762
- var z35 = tool35.schema;
2083
+ import { tool as tool42 } from "@opencode-ai/plugin";
2084
+ var z42 = tool42.schema;
1763
2085
  function createDebugTraceSnapshotTool(deps) {
1764
- return tool35({
2086
+ return tool42({
1765
2087
  description: "Capture a combined debug trace snapshot (page + console + network + exceptions).",
1766
2088
  args: {
1767
- sessionId: z35.string().describe("Session id"),
1768
- sinceConsoleSeq: z35.number().int().optional().describe("Resume cursor for console events"),
1769
- sinceNetworkSeq: z35.number().int().optional().describe("Resume cursor for network events"),
1770
- sinceExceptionSeq: z35.number().int().optional().describe("Resume cursor for exception events"),
1771
- max: z35.number().int().optional().describe("Max events per channel"),
1772
- requestId: z35.string().optional().describe("Optional trace request id")
2089
+ sessionId: z42.string().describe("Session id"),
2090
+ sinceConsoleSeq: z42.number().int().optional().describe("Resume cursor for console events"),
2091
+ sinceNetworkSeq: z42.number().int().optional().describe("Resume cursor for network events"),
2092
+ sinceExceptionSeq: z42.number().int().optional().describe("Resume cursor for exception events"),
2093
+ max: z42.number().int().optional().describe("Max events per channel"),
2094
+ requestId: z42.string().optional().describe("Optional trace request id")
1773
2095
  },
1774
2096
  async execute(args) {
1775
2097
  try {
@@ -1879,8 +2201,8 @@ function extractHosts(events) {
1879
2201
  }
1880
2202
 
1881
2203
  // src/tools/cookie_import.ts
1882
- import { tool as tool36 } from "@opencode-ai/plugin";
1883
- var z36 = tool36.schema;
2204
+ import { tool as tool43 } from "@opencode-ai/plugin";
2205
+ var z43 = tool43.schema;
1884
2206
  function validateCookieRecord(cookie) {
1885
2207
  const name = cookie.name?.trim();
1886
2208
  if (!name) {
@@ -1959,23 +2281,23 @@ function validateCookieRecord(cookie) {
1959
2281
  };
1960
2282
  }
1961
2283
  function createCookieImportTool(deps) {
1962
- return tool36({
2284
+ return tool43({
1963
2285
  description: "Import validated cookies into the current session context.",
1964
2286
  args: {
1965
- sessionId: z36.string().describe("Session id"),
1966
- cookies: z36.array(z36.object({
1967
- name: z36.string().min(1),
1968
- value: z36.string(),
1969
- url: z36.string().optional(),
1970
- domain: z36.string().optional(),
1971
- path: z36.string().optional(),
1972
- expires: z36.number().optional(),
1973
- httpOnly: z36.boolean().optional(),
1974
- secure: z36.boolean().optional(),
1975
- sameSite: z36.enum(["Strict", "Lax", "None"]).optional()
2287
+ sessionId: z43.string().describe("Session id"),
2288
+ cookies: z43.array(z43.object({
2289
+ name: z43.string().min(1),
2290
+ value: z43.string(),
2291
+ url: z43.string().optional(),
2292
+ domain: z43.string().optional(),
2293
+ path: z43.string().optional(),
2294
+ expires: z43.number().optional(),
2295
+ httpOnly: z43.boolean().optional(),
2296
+ secure: z43.boolean().optional(),
2297
+ sameSite: z43.enum(["Strict", "Lax", "None"]).optional()
1976
2298
  })).min(1).describe("Cookies to import"),
1977
- strict: z36.boolean().optional().describe("Reject on first invalid cookie (default true)"),
1978
- requestId: z36.string().optional().describe("Optional trace request id")
2299
+ strict: z43.boolean().optional().describe("Reject on first invalid cookie (default true)"),
2300
+ requestId: z43.string().optional().describe("Optional trace request id")
1979
2301
  },
1980
2302
  async execute(args) {
1981
2303
  try {
@@ -2017,8 +2339,8 @@ function createCookieImportTool(deps) {
2017
2339
  }
2018
2340
 
2019
2341
  // src/tools/cookie_list.ts
2020
- import { tool as tool37 } from "@opencode-ai/plugin";
2021
- var z37 = tool37.schema;
2342
+ import { tool as tool44 } from "@opencode-ai/plugin";
2343
+ var z44 = tool44.schema;
2022
2344
  function normalizeCookieUrls(urls) {
2023
2345
  if (!urls || urls.length === 0) {
2024
2346
  return void 0;
@@ -2049,12 +2371,12 @@ function normalizeCookieUrls(urls) {
2049
2371
  return normalized;
2050
2372
  }
2051
2373
  function createCookieListTool(deps) {
2052
- return tool37({
2374
+ return tool44({
2053
2375
  description: "List cookies in the current session context with optional URL filtering.",
2054
2376
  args: {
2055
- sessionId: z37.string().describe("Session id"),
2056
- urls: z37.array(z37.string().min(1)).optional().describe("Optional URL filters for cookie scoping"),
2057
- requestId: z37.string().optional().describe("Optional trace request id")
2377
+ sessionId: z44.string().describe("Session id"),
2378
+ urls: z44.array(z44.string().min(1)).optional().describe("Optional URL filters for cookie scoping"),
2379
+ requestId: z44.string().optional().describe("Optional trace request id")
2058
2380
  },
2059
2381
  async execute(args) {
2060
2382
  try {
@@ -2094,8 +2416,21 @@ function createCookieListTool(deps) {
2094
2416
  }
2095
2417
 
2096
2418
  // src/tools/macro_resolve.ts
2097
- import { tool as tool38 } from "@opencode-ai/plugin";
2098
- var z38 = tool38.schema;
2419
+ import { tool as tool45 } from "@opencode-ai/plugin";
2420
+
2421
+ // src/tools/workflow-runtime.ts
2422
+ var resolveProviderRuntime = async (deps, options) => {
2423
+ return resolveBundledProviderRuntime({
2424
+ existingRuntime: deps.providerRuntime,
2425
+ config: deps.config?.get?.(),
2426
+ manager: deps.manager,
2427
+ browserFallbackPort: deps.browserFallbackPort,
2428
+ init: options?.init
2429
+ });
2430
+ };
2431
+
2432
+ // src/tools/macro_resolve.ts
2433
+ var z45 = tool45.schema;
2099
2434
  async function loadMacroRuntime() {
2100
2435
  try {
2101
2436
  const module = await import("./macros-ND2M7LWU.js");
@@ -2104,17 +2439,6 @@ async function loadMacroRuntime() {
2104
2439
  return null;
2105
2440
  }
2106
2441
  }
2107
- async function resolveMacroProviderRuntime(deps) {
2108
- if (deps.providerRuntime) {
2109
- return deps.providerRuntime;
2110
- }
2111
- const { createConfiguredProviderRuntime: createConfiguredProviderRuntime2 } = await import("./runtime-factory-BICHDPE7.js");
2112
- return createConfiguredProviderRuntime2({
2113
- config: deps.config?.get?.(),
2114
- manager: deps.manager,
2115
- browserFallbackPort: deps.browserFallbackPort
2116
- });
2117
- }
2118
2442
  function parseFallbackMacro(expression, defaultProvider) {
2119
2443
  const raw = expression.trim();
2120
2444
  if (!raw.startsWith("@")) {
@@ -2154,13 +2478,13 @@ function parseFallbackMacro(expression, defaultProvider) {
2154
2478
  };
2155
2479
  }
2156
2480
  function createMacroResolveTool(deps) {
2157
- return tool38({
2481
+ return tool45({
2158
2482
  description: "Resolve a macro expression to a provider action with provenance metadata.",
2159
2483
  args: {
2160
- expression: z38.string().min(2).describe('Macro expression, e.g. @web.search("query")'),
2161
- defaultProvider: z38.string().optional().describe("Default provider fallback"),
2162
- includeCatalog: z38.boolean().optional().describe("Include available runtime macro names"),
2163
- execute: z38.boolean().optional().describe("Execute the resolved provider action and include execution payload")
2484
+ expression: z45.string().min(2).describe('Macro expression, e.g. @web.search("query")'),
2485
+ defaultProvider: z45.string().optional().describe("Default provider fallback"),
2486
+ includeCatalog: z45.boolean().optional().describe("Include available runtime macro names"),
2487
+ execute: z45.boolean().optional().describe("Execute the resolved provider action and include execution payload")
2164
2488
  },
2165
2489
  async execute(args) {
2166
2490
  try {
@@ -2189,10 +2513,11 @@ function createMacroResolveTool(deps) {
2189
2513
  ...catalog ? { catalog } : {}
2190
2514
  });
2191
2515
  }
2192
- const providerRuntime = await resolveMacroProviderRuntime(deps);
2193
- const execution = shapeExecutionPayload(
2194
- await executeMacroResolution(resolution, providerRuntime)
2195
- );
2516
+ const providerRuntime = await resolveProviderRuntime(deps);
2517
+ const execution = await executeMacroWithRuntime({
2518
+ resolution,
2519
+ runtime: providerRuntime
2520
+ });
2196
2521
  return ok({
2197
2522
  runtime: resolvedRuntime,
2198
2523
  resolution,
@@ -2207,14 +2532,14 @@ function createMacroResolveTool(deps) {
2207
2532
  }
2208
2533
 
2209
2534
  // src/tools/clone_page.ts
2210
- import { tool as tool39 } from "@opencode-ai/plugin";
2211
- var z39 = tool39.schema;
2535
+ import { tool as tool46 } from "@opencode-ai/plugin";
2536
+ var z46 = tool46.schema;
2212
2537
  function createClonePageTool(deps) {
2213
- return tool39({
2538
+ return tool46({
2214
2539
  description: "Export the active page as a React component and CSS bundle.",
2215
2540
  args: {
2216
- sessionId: z39.string().describe("Active browser session id"),
2217
- targetId: z39.string().optional().describe("Optional target id")
2541
+ sessionId: z46.string().describe("Active browser session id"),
2542
+ targetId: z46.string().optional().describe("Optional target id")
2218
2543
  },
2219
2544
  async execute(args) {
2220
2545
  try {
@@ -2228,15 +2553,15 @@ function createClonePageTool(deps) {
2228
2553
  }
2229
2554
 
2230
2555
  // src/tools/clone_component.ts
2231
- import { tool as tool40 } from "@opencode-ai/plugin";
2232
- var z40 = tool40.schema;
2556
+ import { tool as tool47 } from "@opencode-ai/plugin";
2557
+ var z47 = tool47.schema;
2233
2558
  function createCloneComponentTool(deps) {
2234
- return tool40({
2559
+ return tool47({
2235
2560
  description: "Export a selected element subtree as a React component and CSS bundle.",
2236
2561
  args: {
2237
- sessionId: z40.string().describe("Active browser session id"),
2238
- targetId: z40.string().optional().describe("Optional target id"),
2239
- ref: z40.string().describe("Element ref from snapshot")
2562
+ sessionId: z47.string().describe("Active browser session id"),
2563
+ targetId: z47.string().optional().describe("Optional target id"),
2564
+ ref: z47.string().describe("Element ref from snapshot")
2240
2565
  },
2241
2566
  async execute(args) {
2242
2567
  try {
@@ -2250,14 +2575,14 @@ function createCloneComponentTool(deps) {
2250
2575
  }
2251
2576
 
2252
2577
  // src/tools/perf.ts
2253
- import { tool as tool41 } from "@opencode-ai/plugin";
2254
- var z41 = tool41.schema;
2578
+ import { tool as tool48 } from "@opencode-ai/plugin";
2579
+ var z48 = tool48.schema;
2255
2580
  function createPerfTool(deps) {
2256
- return tool41({
2581
+ return tool48({
2257
2582
  description: "Fetch lightweight performance metrics from the active page.",
2258
2583
  args: {
2259
- sessionId: z41.string().describe("Active browser session id"),
2260
- targetId: z41.string().optional().describe("Optional target id")
2584
+ sessionId: z48.string().describe("Active browser session id"),
2585
+ targetId: z48.string().optional().describe("Optional target id")
2261
2586
  },
2262
2587
  async execute(args) {
2263
2588
  try {
@@ -2271,19 +2596,26 @@ function createPerfTool(deps) {
2271
2596
  }
2272
2597
 
2273
2598
  // src/tools/screenshot.ts
2274
- import { tool as tool42 } from "@opencode-ai/plugin";
2275
- var z42 = tool42.schema;
2599
+ import { tool as tool49 } from "@opencode-ai/plugin";
2600
+ var z49 = tool49.schema;
2276
2601
  function createScreenshotTool(deps) {
2277
- return tool42({
2602
+ return tool49({
2278
2603
  description: "Capture a screenshot of the active page.",
2279
2604
  args: {
2280
- sessionId: z42.string().describe("Active browser session id"),
2281
- targetId: z42.string().optional().describe("Optional target id"),
2282
- path: z42.string().optional().describe("Optional output file path")
2605
+ sessionId: z49.string().describe("Active browser session id"),
2606
+ targetId: z49.string().optional().describe("Optional target id"),
2607
+ path: z49.string().optional().describe("Optional output file path"),
2608
+ ref: z49.string().optional().describe("Optional snapshot ref for an element capture"),
2609
+ fullPage: z49.boolean().optional().describe("Capture the full scrollable page")
2283
2610
  },
2284
2611
  async execute(args) {
2285
2612
  try {
2286
- const result = await deps.manager.screenshot(args.sessionId, args.path, args.targetId);
2613
+ const result = await deps.manager.screenshot(args.sessionId, {
2614
+ targetId: args.targetId,
2615
+ path: args.path,
2616
+ ref: args.ref,
2617
+ fullPage: args.fullPage
2618
+ });
2287
2619
  return ok(result);
2288
2620
  } catch (error) {
2289
2621
  return failure(serializeError(error).message, "screenshot_failed");
@@ -2292,31 +2624,273 @@ function createScreenshotTool(deps) {
2292
2624
  });
2293
2625
  }
2294
2626
 
2627
+ // src/tools/screencast_start.ts
2628
+ import { tool as tool50 } from "@opencode-ai/plugin";
2629
+ var z50 = tool50.schema;
2630
+ function createScreencastStartTool(deps) {
2631
+ return tool50({
2632
+ description: "Start a browser screencast replay capture.",
2633
+ args: {
2634
+ sessionId: z50.string().describe("Active browser session id"),
2635
+ targetId: z50.string().optional().describe("Optional target id"),
2636
+ outputDir: z50.string().optional().describe("Optional screencast output directory"),
2637
+ intervalMs: z50.number().int().min(250).optional().describe("Frame capture interval in milliseconds"),
2638
+ maxFrames: z50.number().int().min(1).optional().describe("Maximum frame count before auto-stop")
2639
+ },
2640
+ async execute(args) {
2641
+ try {
2642
+ const result = await deps.manager.startScreencast(args.sessionId, {
2643
+ targetId: args.targetId,
2644
+ outputDir: args.outputDir,
2645
+ intervalMs: args.intervalMs,
2646
+ maxFrames: args.maxFrames
2647
+ });
2648
+ return ok(result);
2649
+ } catch (error) {
2650
+ return failure(serializeError(error).message, "screencast_start_failed");
2651
+ }
2652
+ }
2653
+ });
2654
+ }
2655
+
2656
+ // src/tools/screencast_stop.ts
2657
+ import { tool as tool51 } from "@opencode-ai/plugin";
2658
+ var z51 = tool51.schema;
2659
+ function createScreencastStopTool(deps) {
2660
+ return tool51({
2661
+ description: "Stop a browser screencast replay capture.",
2662
+ args: {
2663
+ sessionId: z51.string().describe("Browser session id that owns the screencast"),
2664
+ screencastId: z51.string().describe("Active screencast id")
2665
+ },
2666
+ async execute(args) {
2667
+ try {
2668
+ const result = await deps.manager.stopScreencast(args.sessionId, args.screencastId);
2669
+ return ok(result);
2670
+ } catch (error) {
2671
+ return failure(serializeError(error).message, "screencast_stop_failed");
2672
+ }
2673
+ }
2674
+ });
2675
+ }
2676
+
2677
+ // src/tools/dialog.ts
2678
+ import { tool as tool52 } from "@opencode-ai/plugin";
2679
+ var z52 = tool52.schema;
2680
+ function createDialogTool(deps) {
2681
+ return tool52({
2682
+ description: "Inspect or handle a JavaScript dialog.",
2683
+ args: {
2684
+ sessionId: z52.string().describe("Active browser session id"),
2685
+ targetId: z52.string().optional().describe("Optional target id"),
2686
+ action: z52.enum(["status", "accept", "dismiss"]).optional().describe("Dialog action"),
2687
+ promptText: z52.string().optional().describe("Prompt text to submit when accepting a prompt dialog")
2688
+ },
2689
+ async execute(args) {
2690
+ try {
2691
+ const result = await deps.manager.dialog(args.sessionId, {
2692
+ targetId: args.targetId,
2693
+ action: args.action,
2694
+ promptText: args.promptText
2695
+ });
2696
+ return ok(result);
2697
+ } catch (error) {
2698
+ return failure(serializeError(error).message, "dialog_failed");
2699
+ }
2700
+ }
2701
+ });
2702
+ }
2703
+
2704
+ // src/tools/desktop_status.ts
2705
+ import { tool as tool53 } from "@opencode-ai/plugin";
2706
+
2707
+ // src/tools/desktop-shared.ts
2708
+ function isRecord(value) {
2709
+ return typeof value === "object" && value !== null && !Array.isArray(value);
2710
+ }
2711
+ function requireDesktopRuntime(deps) {
2712
+ if (deps.desktopRuntime) {
2713
+ return deps.desktopRuntime;
2714
+ }
2715
+ return failure("Desktop runtime unavailable.", "desktop_runtime_unavailable");
2716
+ }
2717
+ function desktopResult(result) {
2718
+ if (result.ok) {
2719
+ const payload = isRecord(result.value) ? { ok: true, ...result.value, audit: result.audit } : { ok: true, value: result.value, audit: result.audit };
2720
+ return JSON.stringify(payload);
2721
+ }
2722
+ return JSON.stringify({
2723
+ ok: false,
2724
+ code: result.code,
2725
+ message: result.message,
2726
+ audit: result.audit
2727
+ });
2728
+ }
2729
+ function desktopToolFailure(error, code) {
2730
+ return failure(serializeError(error).message, code);
2731
+ }
2732
+
2733
+ // src/tools/desktop_status.ts
2734
+ function createDesktopStatusTool(deps) {
2735
+ return tool53({
2736
+ description: "Inspect sibling desktop observation availability.",
2737
+ args: {},
2738
+ async execute() {
2739
+ const runtime = requireDesktopRuntime(deps);
2740
+ if (typeof runtime === "string") {
2741
+ return runtime;
2742
+ }
2743
+ try {
2744
+ return ok(await runtime.status());
2745
+ } catch (error) {
2746
+ return desktopToolFailure(error, "desktop_status_failed");
2747
+ }
2748
+ }
2749
+ });
2750
+ }
2751
+
2752
+ // src/tools/desktop_windows.ts
2753
+ import { tool as tool54 } from "@opencode-ai/plugin";
2754
+ var z53 = tool54.schema;
2755
+ function createDesktopWindowsTool(deps) {
2756
+ return tool54({
2757
+ description: "List observable desktop windows.",
2758
+ args: {
2759
+ reason: z53.string().optional().describe("Optional audit reason")
2760
+ },
2761
+ async execute(args) {
2762
+ const runtime = requireDesktopRuntime(deps);
2763
+ if (typeof runtime === "string") {
2764
+ return runtime;
2765
+ }
2766
+ try {
2767
+ return desktopResult(await runtime.listWindows(args.reason));
2768
+ } catch (error) {
2769
+ return desktopToolFailure(error, "desktop_windows_failed");
2770
+ }
2771
+ }
2772
+ });
2773
+ }
2774
+
2775
+ // src/tools/desktop_active_window.ts
2776
+ import { tool as tool55 } from "@opencode-ai/plugin";
2777
+ var z54 = tool55.schema;
2778
+ function createDesktopActiveWindowTool(deps) {
2779
+ return tool55({
2780
+ description: "Inspect the active desktop window.",
2781
+ args: {
2782
+ reason: z54.string().optional().describe("Optional audit reason")
2783
+ },
2784
+ async execute(args) {
2785
+ const runtime = requireDesktopRuntime(deps);
2786
+ if (typeof runtime === "string") {
2787
+ return runtime;
2788
+ }
2789
+ try {
2790
+ return desktopResult(await runtime.activeWindow(args.reason));
2791
+ } catch (error) {
2792
+ return desktopToolFailure(error, "desktop_active_window_failed");
2793
+ }
2794
+ }
2795
+ });
2796
+ }
2797
+
2798
+ // src/tools/desktop_capture_desktop.ts
2799
+ import { tool as tool56 } from "@opencode-ai/plugin";
2800
+ var z55 = tool56.schema;
2801
+ function createDesktopCaptureDesktopTool(deps) {
2802
+ return tool56({
2803
+ description: "Capture the current desktop surface.",
2804
+ args: {
2805
+ reason: z55.string().describe("Audit reason for the capture")
2806
+ },
2807
+ async execute(args) {
2808
+ const runtime = requireDesktopRuntime(deps);
2809
+ if (typeof runtime === "string") {
2810
+ return runtime;
2811
+ }
2812
+ try {
2813
+ return desktopResult(await runtime.captureDesktop({ reason: args.reason }));
2814
+ } catch (error) {
2815
+ return desktopToolFailure(error, "desktop_capture_desktop_failed");
2816
+ }
2817
+ }
2818
+ });
2819
+ }
2820
+
2821
+ // src/tools/desktop_capture_window.ts
2822
+ import { tool as tool57 } from "@opencode-ai/plugin";
2823
+ var z56 = tool57.schema;
2824
+ function createDesktopCaptureWindowTool(deps) {
2825
+ return tool57({
2826
+ description: "Capture a specific desktop window.",
2827
+ args: {
2828
+ windowId: z56.string().describe("Desktop window id"),
2829
+ reason: z56.string().describe("Audit reason for the capture")
2830
+ },
2831
+ async execute(args) {
2832
+ const runtime = requireDesktopRuntime(deps);
2833
+ if (typeof runtime === "string") {
2834
+ return runtime;
2835
+ }
2836
+ try {
2837
+ return desktopResult(await runtime.captureWindow(args.windowId, { reason: args.reason }));
2838
+ } catch (error) {
2839
+ return desktopToolFailure(error, "desktop_capture_window_failed");
2840
+ }
2841
+ }
2842
+ });
2843
+ }
2844
+
2845
+ // src/tools/desktop_accessibility_snapshot.ts
2846
+ import { tool as tool58 } from "@opencode-ai/plugin";
2847
+ var z57 = tool58.schema;
2848
+ function createDesktopAccessibilitySnapshotTool(deps) {
2849
+ return tool58({
2850
+ description: "Capture desktop accessibility state.",
2851
+ args: {
2852
+ reason: z57.string().describe("Audit reason for the accessibility snapshot"),
2853
+ windowId: z57.string().optional().describe("Optional desktop window id")
2854
+ },
2855
+ async execute(args) {
2856
+ const runtime = requireDesktopRuntime(deps);
2857
+ if (typeof runtime === "string") {
2858
+ return runtime;
2859
+ }
2860
+ try {
2861
+ return desktopResult(await runtime.accessibilitySnapshot(args.reason, args.windowId));
2862
+ } catch (error) {
2863
+ return desktopToolFailure(error, "desktop_accessibility_snapshot_failed");
2864
+ }
2865
+ }
2866
+ });
2867
+ }
2868
+
2295
2869
  // src/tools/annotate.ts
2296
- import { tool as tool43 } from "@opencode-ai/plugin";
2297
- var z43 = tool43.schema;
2298
- var screenshotModeSchema = z43.enum(["visible", "full", "none"]);
2299
- var transportSchema = z43.enum(["auto", "direct", "relay"]);
2870
+ import { tool as tool59 } from "@opencode-ai/plugin";
2871
+ var z58 = tool59.schema;
2872
+ var screenshotModeSchema = z58.enum(["visible", "full", "none"]);
2873
+ var transportSchema = z58.enum(["auto", "direct", "relay"]);
2300
2874
  function createAnnotateTool(deps) {
2301
- return tool43({
2875
+ return tool59({
2302
2876
  description: "Request interactive annotations via direct (CDP) or relay transport.",
2303
2877
  args: {
2304
- sessionId: z43.string().describe("Session id"),
2305
- stored: z43.boolean().optional().describe("Fetch the latest payload explicitly sent from popup/canvas surfaces"),
2306
- includeScreenshots: z43.boolean().optional().describe("When fetching stored payloads, prefer screenshots if still available in memory"),
2878
+ sessionId: z58.string().describe("Session id"),
2879
+ stored: z58.boolean().optional().describe("Fetch the latest payload explicitly sent from popup/canvas surfaces"),
2880
+ includeScreenshots: z58.boolean().optional().describe("When fetching stored payloads, prefer screenshots if still available in memory"),
2307
2881
  transport: transportSchema.optional().describe("auto | direct | relay (default: auto)"),
2308
- targetId: z43.string().optional().describe("Optional target id for direct mode"),
2309
- tabId: z43.number().int().optional().describe("Optional Chrome tab id for relay mode"),
2310
- url: z43.string().optional().describe("Optional URL to open before annotating"),
2882
+ targetId: z58.string().optional().describe("Optional target id for direct mode"),
2883
+ tabId: z58.number().int().optional().describe("Optional Chrome tab id for relay mode"),
2884
+ url: z58.string().optional().describe("Optional URL to open before annotating"),
2311
2885
  screenshotMode: screenshotModeSchema.optional().describe("visible | full | none (default: visible)"),
2312
- debug: z43.boolean().optional().describe("Include debug metadata"),
2313
- context: z43.string().optional().describe("Optional context for the annotator"),
2314
- timeoutMs: z43.number().int().optional().describe("Timeout in milliseconds")
2886
+ debug: z58.boolean().optional().describe("Include debug metadata"),
2887
+ context: z58.string().optional().describe("Optional context for the annotator"),
2888
+ timeoutMs: z58.number().int().optional().describe("Timeout in milliseconds")
2315
2889
  },
2316
2890
  async execute(args) {
2317
2891
  try {
2318
2892
  const transport = args.stored ? "relay" : args.transport ?? "auto";
2319
- if (transport === "relay") {
2893
+ if (transport === "relay" && !args.stored) {
2320
2894
  const status = await deps.manager.status(args.sessionId);
2321
2895
  if (status.mode !== "extension") {
2322
2896
  return failure("Annotations require extension mode (relay).", "annotate_requires_extension");
@@ -2360,49 +2934,36 @@ function createAnnotateTool(deps) {
2360
2934
  }
2361
2935
 
2362
2936
  // src/tools/research_run.ts
2363
- import { tool as tool44 } from "@opencode-ai/plugin";
2364
-
2365
- // src/tools/workflow-runtime.ts
2366
- var resolveProviderRuntime = async (deps) => {
2367
- if (deps.providerRuntime) {
2368
- return deps.providerRuntime;
2369
- }
2370
- const { createConfiguredProviderRuntime: createConfiguredProviderRuntime2 } = await import("./runtime-factory-BICHDPE7.js");
2371
- return createConfiguredProviderRuntime2({
2372
- config: deps.config?.get?.(),
2373
- manager: deps.manager,
2374
- browserFallbackPort: deps.browserFallbackPort
2375
- });
2376
- };
2377
-
2378
- // src/tools/research_run.ts
2379
- var z44 = tool44.schema;
2380
- var sourceSelectionSchema = z44.enum(["auto", "web", "community", "social", "shopping", "all"]);
2381
- var sourceSchema = z44.enum(["web", "community", "social", "shopping"]);
2382
- var modeSchema = z44.enum(["compact", "json", "md", "context", "path"]);
2383
- var cookiePolicySchema = z44.enum(["off", "auto", "required"]);
2937
+ import { tool as tool60 } from "@opencode-ai/plugin";
2938
+ var z59 = tool60.schema;
2939
+ var sourceSelectionSchema = z59.enum(["auto", "web", "community", "social", "shopping", "all"]);
2940
+ var sourceSchema = z59.enum(["web", "community", "social", "shopping"]);
2941
+ var modeSchema = z59.enum(["compact", "json", "md", "context", "path"]);
2942
+ var cookiePolicySchema = z59.enum(["off", "auto", "required"]);
2943
+ var challengeAutomationModeSchema = z59.enum(CHALLENGE_AUTOMATION_MODES);
2384
2944
  function createResearchRunTool(deps) {
2385
- return tool44({
2945
+ return tool60({
2386
2946
  description: "Run cross-source research with strict timebox and artifact outputs.",
2387
2947
  args: {
2388
- topic: z44.string().min(1).describe("Research topic"),
2389
- days: z44.number().int().positive().optional().describe("Timebox in days"),
2390
- from: z44.string().optional().describe("ISO start date"),
2391
- to: z44.string().optional().describe("ISO end date"),
2948
+ topic: z59.string().min(1).describe("Research topic"),
2949
+ days: z59.number().int().positive().optional().describe("Timebox in days"),
2950
+ from: z59.string().optional().describe("ISO start date"),
2951
+ to: z59.string().optional().describe("ISO end date"),
2392
2952
  sourceSelection: sourceSelectionSchema.optional().describe("auto|web|community|social|shopping|all"),
2393
- sources: z44.array(sourceSchema).optional().describe("Explicit source list"),
2953
+ sources: z59.array(sourceSchema).optional().describe("Explicit source list"),
2394
2954
  mode: modeSchema.optional().describe("compact|json|md|context|path"),
2395
- includeEngagement: z44.boolean().optional().describe("Include engagement enrichment"),
2396
- limitPerSource: z44.number().int().positive().optional().describe("Result limit per source"),
2397
- outputDir: z44.string().optional().describe("Optional artifact output directory"),
2398
- ttlHours: z44.number().int().positive().optional().describe("Artifact retention TTL in hours"),
2399
- useCookies: z44.boolean().optional().describe("Enable/disable provider cookie injection for this run"),
2955
+ includeEngagement: z59.boolean().optional().describe("Include engagement enrichment"),
2956
+ limitPerSource: z59.number().int().positive().optional().describe("Result limit per source"),
2957
+ outputDir: z59.string().optional().describe("Optional artifact output directory"),
2958
+ ttlHours: z59.number().int().positive().optional().describe("Artifact retention TTL in hours"),
2959
+ useCookies: z59.boolean().optional().describe("Enable/disable provider cookie injection for this run"),
2960
+ challengeAutomationMode: challengeAutomationModeSchema.optional().describe("Challenge automation mode: off|browser|browser_with_helper"),
2400
2961
  cookiePolicyOverride: cookiePolicySchema.optional().describe("Override cookie policy: off|auto|required")
2401
2962
  },
2402
2963
  async execute(args) {
2403
2964
  try {
2404
2965
  const runtime = await resolveProviderRuntime(deps);
2405
- const { runResearchWorkflow } = await import("./providers-G3LRHQXX.js");
2966
+ const { runResearchWorkflow } = await import("./providers-G36AM3Z2.js");
2406
2967
  const result = await runResearchWorkflow(runtime, {
2407
2968
  topic: args.topic,
2408
2969
  days: args.days,
@@ -2416,6 +2977,7 @@ function createResearchRunTool(deps) {
2416
2977
  outputDir: args.outputDir,
2417
2978
  ttlHours: args.ttlHours,
2418
2979
  useCookies: args.useCookies,
2980
+ challengeAutomationMode: args.challengeAutomationMode,
2419
2981
  cookiePolicyOverride: args.cookiePolicyOverride
2420
2982
  });
2421
2983
  return ok(result);
@@ -2427,30 +2989,32 @@ function createResearchRunTool(deps) {
2427
2989
  }
2428
2990
 
2429
2991
  // src/tools/shopping_run.ts
2430
- import { tool as tool45 } from "@opencode-ai/plugin";
2431
- var z45 = tool45.schema;
2432
- var sortSchema = z45.enum(["best_deal", "lowest_price", "highest_rating", "fastest_shipping"]);
2433
- var modeSchema2 = z45.enum(["compact", "json", "md", "context", "path"]);
2434
- var cookiePolicySchema2 = z45.enum(["off", "auto", "required"]);
2992
+ import { tool as tool61 } from "@opencode-ai/plugin";
2993
+ var z60 = tool61.schema;
2994
+ var sortSchema = z60.enum(["best_deal", "lowest_price", "highest_rating", "fastest_shipping"]);
2995
+ var modeSchema2 = z60.enum(["compact", "json", "md", "context", "path"]);
2996
+ var cookiePolicySchema2 = z60.enum(["off", "auto", "required"]);
2997
+ var challengeAutomationModeSchema2 = z60.enum(CHALLENGE_AUTOMATION_MODES);
2435
2998
  function createShoppingRunTool(deps) {
2436
- return tool45({
2999
+ return tool61({
2437
3000
  description: "Run shopping/deal intelligence across shopping providers.",
2438
3001
  args: {
2439
- query: z45.string().min(1).describe("Shopping query"),
2440
- providers: z45.array(z45.string()).optional().describe("Optional provider allow-list"),
2441
- budget: z45.number().positive().optional().describe("Optional budget amount"),
2442
- region: z45.string().optional().describe("Region hint"),
3002
+ query: z60.string().min(1).describe("Shopping query"),
3003
+ providers: z60.array(z60.string()).optional().describe("Optional provider allow-list"),
3004
+ budget: z60.number().positive().optional().describe("Optional budget amount"),
3005
+ region: z60.string().optional().describe("Region hint"),
2443
3006
  sort: sortSchema.optional().describe("best_deal|lowest_price|highest_rating|fastest_shipping"),
2444
3007
  mode: modeSchema2.optional().describe("compact|json|md|context|path"),
2445
- outputDir: z45.string().optional().describe("Optional artifact output directory"),
2446
- ttlHours: z45.number().int().positive().optional().describe("Artifact retention TTL in hours"),
2447
- useCookies: z45.boolean().optional().describe("Enable/disable provider cookie injection for this run"),
3008
+ outputDir: z60.string().optional().describe("Optional artifact output directory"),
3009
+ ttlHours: z60.number().int().positive().optional().describe("Artifact retention TTL in hours"),
3010
+ useCookies: z60.boolean().optional().describe("Enable/disable provider cookie injection for this run"),
3011
+ challengeAutomationMode: challengeAutomationModeSchema2.optional().describe("Challenge automation mode: off|browser|browser_with_helper"),
2448
3012
  cookiePolicyOverride: cookiePolicySchema2.optional().describe("Override cookie policy: off|auto|required")
2449
3013
  },
2450
3014
  async execute(args) {
2451
3015
  try {
2452
3016
  const runtime = await resolveProviderRuntime(deps);
2453
- const { runShoppingWorkflow } = await import("./providers-G3LRHQXX.js");
3017
+ const { runShoppingWorkflow } = await import("./providers-G36AM3Z2.js");
2454
3018
  const result = await runShoppingWorkflow(runtime, {
2455
3019
  query: args.query,
2456
3020
  providers: args.providers,
@@ -2461,6 +3025,7 @@ function createShoppingRunTool(deps) {
2461
3025
  outputDir: args.outputDir,
2462
3026
  ttlHours: args.ttlHours,
2463
3027
  useCookies: args.useCookies,
3028
+ challengeAutomationMode: args.challengeAutomationMode,
2464
3029
  cookiePolicyOverride: args.cookiePolicyOverride
2465
3030
  });
2466
3031
  return ok(result);
@@ -2472,9 +3037,10 @@ function createShoppingRunTool(deps) {
2472
3037
  }
2473
3038
 
2474
3039
  // src/tools/product_video_run.ts
2475
- import { tool as tool46 } from "@opencode-ai/plugin";
2476
- var z46 = tool46.schema;
2477
- var cookiePolicySchema3 = z46.enum(["off", "auto", "required"]);
3040
+ import { tool as tool62 } from "@opencode-ai/plugin";
3041
+ var z61 = tool62.schema;
3042
+ var cookiePolicySchema3 = z61.enum(["off", "auto", "required"]);
3043
+ var challengeAutomationModeSchema3 = z61.enum(CHALLENGE_AUTOMATION_MODES);
2478
3044
  async function captureScreenshotBuffer(deps, url) {
2479
3045
  let sessionId = null;
2480
3046
  try {
@@ -2498,24 +3064,26 @@ async function captureScreenshotBuffer(deps, url) {
2498
3064
  }
2499
3065
  }
2500
3066
  function createProductVideoRunTool(deps) {
2501
- return tool46({
3067
+ return tool62({
2502
3068
  description: "Collect a product presentation asset pack for video/UGC workflows.",
2503
3069
  args: {
2504
- product_url: z46.string().optional().describe("Product URL"),
2505
- product_name: z46.string().optional().describe("Product name"),
2506
- provider_hint: z46.string().optional().describe("Optional provider hint"),
2507
- include_screenshots: z46.boolean().optional().describe("Include screenshots (default true)"),
2508
- include_all_images: z46.boolean().optional().describe("Include all discovered images (default true)"),
2509
- include_copy: z46.boolean().optional().describe("Include product copy extraction (default true)"),
2510
- output_dir: z46.string().optional().describe("Optional output directory"),
2511
- ttl_hours: z46.number().int().positive().optional().describe("Artifact retention TTL in hours"),
2512
- useCookies: z46.boolean().optional().describe("Enable/disable provider cookie injection for this run"),
3070
+ product_url: z61.string().optional().describe("Product URL"),
3071
+ product_name: z61.string().optional().describe("Product name"),
3072
+ provider_hint: z61.string().optional().describe("Optional provider hint"),
3073
+ include_screenshots: z61.boolean().optional().describe("Include screenshots (default true)"),
3074
+ include_all_images: z61.boolean().optional().describe("Include all discovered images (default true)"),
3075
+ include_copy: z61.boolean().optional().describe("Include product copy extraction (default true)"),
3076
+ output_dir: z61.string().optional().describe("Optional output directory"),
3077
+ ttl_hours: z61.number().int().positive().optional().describe("Artifact retention TTL in hours"),
3078
+ timeoutMs: z61.number().int().positive().optional().describe("Workflow timeout in milliseconds"),
3079
+ useCookies: z61.boolean().optional().describe("Enable/disable provider cookie injection for this run"),
3080
+ challengeAutomationMode: challengeAutomationModeSchema3.optional().describe("Challenge automation mode: off|browser|browser_with_helper"),
2513
3081
  cookiePolicyOverride: cookiePolicySchema3.optional().describe("Override cookie policy: off|auto|required")
2514
3082
  },
2515
3083
  async execute(args) {
2516
3084
  try {
2517
3085
  const runtime = await resolveProviderRuntime(deps);
2518
- const { runProductVideoWorkflow } = await import("./providers-G3LRHQXX.js");
3086
+ const { runProductVideoWorkflow } = await import("./providers-G36AM3Z2.js");
2519
3087
  const includeScreenshots = args.include_screenshots ?? true;
2520
3088
  const result = await runProductVideoWorkflow(runtime, {
2521
3089
  product_url: args.product_url,
@@ -2526,7 +3094,9 @@ function createProductVideoRunTool(deps) {
2526
3094
  include_copy: args.include_copy,
2527
3095
  output_dir: args.output_dir,
2528
3096
  ttl_hours: args.ttl_hours,
3097
+ timeoutMs: args.timeoutMs,
2529
3098
  useCookies: args.useCookies,
3099
+ challengeAutomationMode: args.challengeAutomationMode,
2530
3100
  cookiePolicyOverride: args.cookiePolicyOverride
2531
3101
  }, {
2532
3102
  captureScreenshot: includeScreenshots ? async (url) => captureScreenshotBuffer(deps, url) : void 0
@@ -2540,14 +3110,14 @@ function createProductVideoRunTool(deps) {
2540
3110
  }
2541
3111
 
2542
3112
  // src/tools/canvas.ts
2543
- import { tool as tool47 } from "@opencode-ai/plugin";
2544
- var z47 = tool47.schema;
3113
+ import { tool as tool63 } from "@opencode-ai/plugin";
3114
+ var z62 = tool63.schema;
2545
3115
  function createCanvasTool(deps) {
2546
- return tool47({
2547
- description: "Execute a typed design-canvas command such as canvas.session.open or canvas.document.patch.",
3116
+ return tool63({
3117
+ description: "Execute a typed design-canvas command such as canvas.session.open, canvas.feedback.next, or canvas.document.patch.",
2548
3118
  args: {
2549
- command: z47.string().min(1).describe("Canvas command name"),
2550
- params: z47.record(z47.string(), z47.unknown()).optional().describe("Canvas command payload")
3119
+ command: z62.string().min(1).describe("Canvas command name"),
3120
+ params: z62.record(z62.string(), z62.unknown()).optional().describe("Canvas command payload")
2551
3121
  },
2552
3122
  async execute(args) {
2553
3123
  if (!deps.canvasManager) {
@@ -2571,10 +3141,10 @@ function createCanvasTool(deps) {
2571
3141
  }
2572
3142
 
2573
3143
  // src/tools/skill_list.ts
2574
- import { tool as tool48 } from "@opencode-ai/plugin";
3144
+ import { tool as tool64 } from "@opencode-ai/plugin";
2575
3145
  function createSkillListTool(deps) {
2576
- return tool48({
2577
- description: "List available skills from OpenCode skill directories (compatibility wrapper)",
3146
+ return tool64({
3147
+ description: "List bundled and discovered skill packs before choosing a local onboarding or workflow lane.",
2578
3148
  args: {},
2579
3149
  async execute() {
2580
3150
  const skills = await deps.skills.listSkills();
@@ -2583,20 +3153,23 @@ function createSkillListTool(deps) {
2583
3153
  description: s.description,
2584
3154
  version: s.version
2585
3155
  }));
2586
- return ok({ skills: skillList, count: skillList.length });
3156
+ return ok({
3157
+ skills: skillList,
3158
+ count: skillList.length
3159
+ });
2587
3160
  }
2588
3161
  });
2589
3162
  }
2590
3163
 
2591
3164
  // src/tools/skill_load.ts
2592
- import { tool as tool49 } from "@opencode-ai/plugin";
2593
- var z48 = tool49.schema;
3165
+ import { tool as tool65 } from "@opencode-ai/plugin";
3166
+ var z63 = tool65.schema;
2594
3167
  function createSkillLoadTool(deps) {
2595
- return tool49({
2596
- description: "Load a specific skill by name from OpenCode skill directories (compatibility wrapper)",
3168
+ return tool65({
3169
+ description: `Load a local skill directly; start with ${onboarding_metadata_default.skillName} ${onboarding_metadata_default.skillTopic} before low-level browser commands.`,
2597
3170
  args: {
2598
- name: z48.string().describe("Name of the skill to load (e.g., 'opendevbrowser-login-automation', 'opendevbrowser-form-testing')"),
2599
- topic: z48.string().optional().describe("Optional topic to filter the skill content")
3171
+ name: z63.string().describe("Name of the skill to load (e.g., 'opendevbrowser-login-automation', 'opendevbrowser-form-testing')"),
3172
+ topic: z63.string().optional().describe("Optional topic to filter the skill content")
2600
3173
  },
2601
3174
  async execute(args) {
2602
3175
  try {
@@ -2611,9 +3184,10 @@ function createSkillLoadTool(deps) {
2611
3184
  }
2612
3185
 
2613
3186
  // src/tools/index.ts
3187
+ var LOCAL_ONLY_TOOL_NAMES = new Set(onboarding_metadata_default.localOnlyToolNames);
2614
3188
  function createTools(deps) {
2615
- const wrap = (definition) => {
2616
- if (!deps.ensureHub) return definition;
3189
+ const wrap = (name, definition) => {
3190
+ if (!deps.ensureHub || LOCAL_ONLY_TOOL_NAMES.has(name)) return definition;
2617
3191
  return {
2618
3192
  ...definition,
2619
3193
  execute: async (args, context) => {
@@ -2626,67 +3200,88 @@ function createTools(deps) {
2626
3200
  };
2627
3201
  };
2628
3202
  return {
2629
- opendevbrowser_launch: wrap(createLaunchTool(deps)),
2630
- opendevbrowser_connect: wrap(createConnectTool(deps)),
2631
- opendevbrowser_disconnect: wrap(createDisconnectTool(deps)),
2632
- opendevbrowser_status: wrap(createStatusTool(deps)),
2633
- opendevbrowser_targets_list: wrap(createTargetsListTool(deps)),
2634
- opendevbrowser_target_use: wrap(createTargetUseTool(deps)),
2635
- opendevbrowser_target_new: wrap(createTargetNewTool(deps)),
2636
- opendevbrowser_target_close: wrap(createTargetCloseTool(deps)),
2637
- opendevbrowser_page: wrap(createPageTool(deps)),
2638
- opendevbrowser_list: wrap(createListTool(deps)),
2639
- opendevbrowser_close: wrap(createCloseTool(deps)),
2640
- opendevbrowser_goto: wrap(createGotoTool(deps)),
2641
- opendevbrowser_wait: wrap(createWaitTool(deps)),
2642
- opendevbrowser_snapshot: wrap(createSnapshotTool(deps)),
2643
- opendevbrowser_click: wrap(createClickTool(deps)),
2644
- opendevbrowser_hover: wrap(createHoverTool(deps)),
2645
- opendevbrowser_press: wrap(createPressTool(deps)),
2646
- opendevbrowser_check: wrap(createCheckTool(deps)),
2647
- opendevbrowser_uncheck: wrap(createUncheckTool(deps)),
2648
- opendevbrowser_type: wrap(createTypeTool(deps)),
2649
- opendevbrowser_select: wrap(createSelectTool(deps)),
2650
- opendevbrowser_scroll: wrap(createScrollTool(deps)),
2651
- opendevbrowser_scroll_into_view: wrap(createScrollIntoViewTool(deps)),
2652
- opendevbrowser_dom_get_html: wrap(createDomGetHtmlTool(deps)),
2653
- opendevbrowser_dom_get_text: wrap(createDomGetTextTool(deps)),
2654
- opendevbrowser_get_attr: wrap(createGetAttrTool(deps)),
2655
- opendevbrowser_get_value: wrap(createGetValueTool(deps)),
2656
- opendevbrowser_is_visible: wrap(createIsVisibleTool(deps)),
2657
- opendevbrowser_is_enabled: wrap(createIsEnabledTool(deps)),
2658
- opendevbrowser_is_checked: wrap(createIsCheckedTool(deps)),
2659
- opendevbrowser_run: wrap(createRunTool(deps)),
2660
- opendevbrowser_prompting_guide: wrap(createPromptingGuideTool(deps)),
2661
- opendevbrowser_console_poll: wrap(createConsolePollTool(deps)),
2662
- opendevbrowser_network_poll: wrap(createNetworkPollTool(deps)),
2663
- opendevbrowser_debug_trace_snapshot: wrap(createDebugTraceSnapshotTool(deps)),
2664
- opendevbrowser_cookie_import: wrap(createCookieImportTool(deps)),
2665
- opendevbrowser_cookie_list: wrap(createCookieListTool(deps)),
2666
- opendevbrowser_macro_resolve: wrap(createMacroResolveTool(deps)),
2667
- opendevbrowser_research_run: wrap(createResearchRunTool(deps)),
2668
- opendevbrowser_shopping_run: wrap(createShoppingRunTool(deps)),
2669
- opendevbrowser_product_video_run: wrap(createProductVideoRunTool(deps)),
2670
- opendevbrowser_canvas: wrap(createCanvasTool(deps)),
2671
- opendevbrowser_clone_page: wrap(createClonePageTool(deps)),
2672
- opendevbrowser_clone_component: wrap(createCloneComponentTool(deps)),
2673
- opendevbrowser_perf: wrap(createPerfTool(deps)),
2674
- opendevbrowser_screenshot: wrap(createScreenshotTool(deps)),
2675
- opendevbrowser_annotate: wrap(createAnnotateTool(deps)),
2676
- opendevbrowser_skill_list: wrap(createSkillListTool(deps)),
2677
- opendevbrowser_skill_load: wrap(createSkillLoadTool(deps))
3203
+ opendevbrowser_launch: wrap("opendevbrowser_launch", createLaunchTool(deps)),
3204
+ opendevbrowser_connect: wrap("opendevbrowser_connect", createConnectTool(deps)),
3205
+ opendevbrowser_disconnect: wrap("opendevbrowser_disconnect", createDisconnectTool(deps)),
3206
+ opendevbrowser_status: wrap("opendevbrowser_status", createStatusTool(deps)),
3207
+ opendevbrowser_session_inspector: wrap("opendevbrowser_session_inspector", createSessionInspectorTool(deps)),
3208
+ opendevbrowser_targets_list: wrap("opendevbrowser_targets_list", createTargetsListTool(deps)),
3209
+ opendevbrowser_target_use: wrap("opendevbrowser_target_use", createTargetUseTool(deps)),
3210
+ opendevbrowser_target_new: wrap("opendevbrowser_target_new", createTargetNewTool(deps)),
3211
+ opendevbrowser_target_close: wrap("opendevbrowser_target_close", createTargetCloseTool(deps)),
3212
+ opendevbrowser_page: wrap("opendevbrowser_page", createPageTool(deps)),
3213
+ opendevbrowser_list: wrap("opendevbrowser_list", createListTool(deps)),
3214
+ opendevbrowser_close: wrap("opendevbrowser_close", createCloseTool(deps)),
3215
+ opendevbrowser_goto: wrap("opendevbrowser_goto", createGotoTool(deps)),
3216
+ opendevbrowser_wait: wrap("opendevbrowser_wait", createWaitTool(deps)),
3217
+ opendevbrowser_snapshot: wrap("opendevbrowser_snapshot", createSnapshotTool(deps)),
3218
+ opendevbrowser_review: wrap("opendevbrowser_review", createReviewTool(deps)),
3219
+ opendevbrowser_click: wrap("opendevbrowser_click", createClickTool(deps)),
3220
+ opendevbrowser_hover: wrap("opendevbrowser_hover", createHoverTool(deps)),
3221
+ opendevbrowser_press: wrap("opendevbrowser_press", createPressTool(deps)),
3222
+ opendevbrowser_check: wrap("opendevbrowser_check", createCheckTool(deps)),
3223
+ opendevbrowser_uncheck: wrap("opendevbrowser_uncheck", createUncheckTool(deps)),
3224
+ opendevbrowser_type: wrap("opendevbrowser_type", createTypeTool(deps)),
3225
+ opendevbrowser_select: wrap("opendevbrowser_select", createSelectTool(deps)),
3226
+ opendevbrowser_scroll: wrap("opendevbrowser_scroll", createScrollTool(deps)),
3227
+ opendevbrowser_scroll_into_view: wrap("opendevbrowser_scroll_into_view", createScrollIntoViewTool(deps)),
3228
+ opendevbrowser_upload: wrap("opendevbrowser_upload", createUploadTool(deps)),
3229
+ opendevbrowser_pointer_move: wrap("opendevbrowser_pointer_move", createPointerMoveTool(deps)),
3230
+ opendevbrowser_pointer_down: wrap("opendevbrowser_pointer_down", createPointerDownTool(deps)),
3231
+ opendevbrowser_pointer_up: wrap("opendevbrowser_pointer_up", createPointerUpTool(deps)),
3232
+ opendevbrowser_pointer_drag: wrap("opendevbrowser_pointer_drag", createPointerDragTool(deps)),
3233
+ opendevbrowser_dom_get_html: wrap("opendevbrowser_dom_get_html", createDomGetHtmlTool(deps)),
3234
+ opendevbrowser_dom_get_text: wrap("opendevbrowser_dom_get_text", createDomGetTextTool(deps)),
3235
+ opendevbrowser_get_attr: wrap("opendevbrowser_get_attr", createGetAttrTool(deps)),
3236
+ opendevbrowser_get_value: wrap("opendevbrowser_get_value", createGetValueTool(deps)),
3237
+ opendevbrowser_is_visible: wrap("opendevbrowser_is_visible", createIsVisibleTool(deps)),
3238
+ opendevbrowser_is_enabled: wrap("opendevbrowser_is_enabled", createIsEnabledTool(deps)),
3239
+ opendevbrowser_is_checked: wrap("opendevbrowser_is_checked", createIsCheckedTool(deps)),
3240
+ opendevbrowser_run: wrap("opendevbrowser_run", createRunTool(deps)),
3241
+ opendevbrowser_prompting_guide: wrap("opendevbrowser_prompting_guide", createPromptingGuideTool(deps)),
3242
+ opendevbrowser_console_poll: wrap("opendevbrowser_console_poll", createConsolePollTool(deps)),
3243
+ opendevbrowser_network_poll: wrap("opendevbrowser_network_poll", createNetworkPollTool(deps)),
3244
+ opendevbrowser_debug_trace_snapshot: wrap("opendevbrowser_debug_trace_snapshot", createDebugTraceSnapshotTool(deps)),
3245
+ opendevbrowser_cookie_import: wrap("opendevbrowser_cookie_import", createCookieImportTool(deps)),
3246
+ opendevbrowser_cookie_list: wrap("opendevbrowser_cookie_list", createCookieListTool(deps)),
3247
+ opendevbrowser_macro_resolve: wrap("opendevbrowser_macro_resolve", createMacroResolveTool(deps)),
3248
+ opendevbrowser_research_run: wrap("opendevbrowser_research_run", createResearchRunTool(deps)),
3249
+ opendevbrowser_shopping_run: wrap("opendevbrowser_shopping_run", createShoppingRunTool(deps)),
3250
+ opendevbrowser_product_video_run: wrap("opendevbrowser_product_video_run", createProductVideoRunTool(deps)),
3251
+ opendevbrowser_canvas: wrap("opendevbrowser_canvas", createCanvasTool(deps)),
3252
+ opendevbrowser_clone_page: wrap("opendevbrowser_clone_page", createClonePageTool(deps)),
3253
+ opendevbrowser_clone_component: wrap("opendevbrowser_clone_component", createCloneComponentTool(deps)),
3254
+ opendevbrowser_perf: wrap("opendevbrowser_perf", createPerfTool(deps)),
3255
+ opendevbrowser_screenshot: wrap("opendevbrowser_screenshot", createScreenshotTool(deps)),
3256
+ opendevbrowser_screencast_start: wrap("opendevbrowser_screencast_start", createScreencastStartTool(deps)),
3257
+ opendevbrowser_screencast_stop: wrap("opendevbrowser_screencast_stop", createScreencastStopTool(deps)),
3258
+ opendevbrowser_dialog: wrap("opendevbrowser_dialog", createDialogTool(deps)),
3259
+ opendevbrowser_desktop_status: wrap("opendevbrowser_desktop_status", createDesktopStatusTool(deps)),
3260
+ opendevbrowser_desktop_windows: wrap("opendevbrowser_desktop_windows", createDesktopWindowsTool(deps)),
3261
+ opendevbrowser_desktop_active_window: wrap("opendevbrowser_desktop_active_window", createDesktopActiveWindowTool(deps)),
3262
+ opendevbrowser_desktop_capture_desktop: wrap("opendevbrowser_desktop_capture_desktop", createDesktopCaptureDesktopTool(deps)),
3263
+ opendevbrowser_desktop_capture_window: wrap("opendevbrowser_desktop_capture_window", createDesktopCaptureWindowTool(deps)),
3264
+ opendevbrowser_desktop_accessibility_snapshot: wrap(
3265
+ "opendevbrowser_desktop_accessibility_snapshot",
3266
+ createDesktopAccessibilitySnapshotTool(deps)
3267
+ ),
3268
+ opendevbrowser_annotate: wrap("opendevbrowser_annotate", createAnnotateTool(deps)),
3269
+ opendevbrowser_skill_list: wrap("opendevbrowser_skill_list", createSkillListTool(deps)),
3270
+ opendevbrowser_skill_load: wrap("opendevbrowser_skill_load", createSkillLoadTool(deps))
2678
3271
  };
2679
3272
  }
2680
3273
 
2681
3274
  // src/index.ts
2682
3275
  var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
2683
3276
  const core = createOpenDevBrowserCore({ directory, worktree });
2684
- const { config, configStore, skills, ensureRelay, cleanup, getExtensionPath } = core;
3277
+ const { config, configStore, skills, ensureRelay, cleanup, getExtensionPath, agentInbox } = core;
2685
3278
  let relay = core.relay;
2686
3279
  let manager = core.manager;
2687
3280
  let canvasManager = core.canvasManager;
2688
3281
  let runner = core.runner;
2689
3282
  let annotationManager = core.annotationManager;
3283
+ let desktopRuntime = core.desktopRuntime;
3284
+ let automationCoordinator = core.automationCoordinator;
2690
3285
  let providerRuntime = core.providerRuntime;
2691
3286
  let browserFallbackPort = core.browserFallbackPort;
2692
3287
  let hubStop = null;
@@ -2708,6 +3303,8 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
2708
3303
  runner,
2709
3304
  config: configStore,
2710
3305
  skills,
3306
+ desktopRuntime,
3307
+ automationCoordinator,
2711
3308
  providerRuntime,
2712
3309
  browserFallbackPort,
2713
3310
  relay,
@@ -2719,20 +3316,29 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
2719
3316
  }
2720
3317
  manager = new RemoteManager(daemonClient);
2721
3318
  canvasManager = new RemoteCanvasManager(daemonClient);
3319
+ desktopRuntime = new RemoteDesktopRuntime(daemonClient);
2722
3320
  relay = new RemoteRelay(daemonClient);
2723
3321
  annotationManager.setRelay(relay);
2724
3322
  annotationManager.setBrowserManager(manager);
2725
3323
  runner = new ScriptRunner(manager);
2726
- browserFallbackPort = createBrowserFallbackPort(manager);
2727
- providerRuntime = createConfiguredProviderRuntime({
3324
+ ({
3325
+ providerRuntime,
3326
+ browserFallbackPort
3327
+ } = createCoreRuntimeAssemblies({
3328
+ cacheRoot: core.cacheRoot,
2728
3329
  config: configStore.get(),
3330
+ manager
3331
+ }));
3332
+ automationCoordinator = createAutomationCoordinator({
2729
3333
  manager,
2730
- browserFallbackPort
3334
+ desktopRuntime
2731
3335
  });
2732
3336
  toolDeps.manager = manager;
2733
3337
  toolDeps.canvasManager = canvasManager;
2734
3338
  toolDeps.relay = relay;
2735
3339
  toolDeps.runner = runner;
3340
+ toolDeps.desktopRuntime = desktopRuntime;
3341
+ toolDeps.automationCoordinator = automationCoordinator;
2736
3342
  toolDeps.providerRuntime = providerRuntime;
2737
3343
  toolDeps.browserFallbackPort = browserFallbackPort;
2738
3344
  };
@@ -2795,11 +3401,30 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
2795
3401
  process.on("SIGINT", cleanupAll);
2796
3402
  process.on("SIGTERM", cleanupAll);
2797
3403
  process.on("beforeExit", cleanupAll);
3404
+ const registerAgentInboxScope = (sessionID, registration) => {
3405
+ if (!sessionID) {
3406
+ return;
3407
+ }
3408
+ try {
3409
+ agentInbox.registerScope(sessionID, registration);
3410
+ } catch (error) {
3411
+ console.warn(
3412
+ "[opendevbrowser] Failed to register agent inbox scope:",
3413
+ error instanceof Error ? error.message : String(error)
3414
+ );
3415
+ }
3416
+ };
2798
3417
  return {
2799
3418
  tool: createTools(toolDeps),
2800
- "chat.message": async (_input, output) => {
3419
+ "chat.message": async (input, output) => {
2801
3420
  const config2 = configStore.get();
2802
3421
  if (output.message.role !== "user") return;
3422
+ registerAgentInboxScope(input.sessionID, {
3423
+ messageId: input.messageID ?? null,
3424
+ agent: input.agent ?? null,
3425
+ model: input.model ?? null,
3426
+ variant: input.variant ?? null
3427
+ });
2803
3428
  const text = extractTextFromParts(output.parts);
2804
3429
  if (!text) return;
2805
3430
  if (config2.skills.nudge.enabled && shouldTriggerSkillNudge(text, config2.skills.nudge.keywords)) {
@@ -2811,11 +3436,22 @@ var OpenDevBrowserPlugin = async ({ directory, worktree }) => {
2811
3436
  }
2812
3437
  }
2813
3438
  },
2814
- "experimental.chat.system.transform": async (_input, output) => {
3439
+ "experimental.chat.system.transform": async (input, output) => {
2815
3440
  const config2 = configStore.get();
2816
3441
  const systemEntries = output.system ?? [];
2817
3442
  let nextEntries = systemEntries;
2818
3443
  let changed = false;
3444
+ registerAgentInboxScope(input.sessionID, {
3445
+ model: null
3446
+ });
3447
+ if (input.sessionID && !systemEntries.some((entry) => entry.includes(AGENT_INBOX_SYSTEM_MARKER))) {
3448
+ const injection = agentInbox.buildSystemInjection(input.sessionID);
3449
+ if (injection) {
3450
+ nextEntries = [...nextEntries, injection.systemBlock];
3451
+ agentInbox.acknowledge(injection.receiptIds);
3452
+ changed = true;
3453
+ }
3454
+ }
2819
3455
  if (config2.skills.nudge.enabled) {
2820
3456
  if (systemEntries.some((entry) => entry.includes(SKILL_NUDGE_MARKER))) {
2821
3457
  clearSkillNudge(skillNudgeState);