opendevbrowser 0.0.15 → 0.0.17

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 (646) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +262 -43
  3. package/dist/annotate/direct-annotator.d.ts +22 -0
  4. package/dist/annotate/direct-annotator.d.ts.map +1 -0
  5. package/dist/annotate/output.d.ts +10 -0
  6. package/dist/annotate/output.d.ts.map +1 -0
  7. package/dist/browser/annotation-manager.d.ts +33 -0
  8. package/dist/browser/annotation-manager.d.ts.map +1 -0
  9. package/dist/browser/browser-manager.d.ts +402 -0
  10. package/dist/browser/browser-manager.d.ts.map +1 -0
  11. package/dist/browser/canvas-client.d.ts +53 -0
  12. package/dist/browser/canvas-client.d.ts.map +1 -0
  13. package/dist/browser/canvas-code-sync-manager.d.ts +79 -0
  14. package/dist/browser/canvas-code-sync-manager.d.ts.map +1 -0
  15. package/dist/browser/canvas-manager.d.ts +94 -0
  16. package/dist/browser/canvas-manager.d.ts.map +1 -0
  17. package/dist/browser/canvas-runtime-preview-bridge.d.ts +20 -0
  18. package/dist/browser/canvas-runtime-preview-bridge.d.ts.map +1 -0
  19. package/dist/browser/canvas-session-sync-manager.d.ts +21 -0
  20. package/dist/browser/canvas-session-sync-manager.d.ts.map +1 -0
  21. package/dist/browser/fingerprint/adapters.d.ts +26 -0
  22. package/dist/browser/fingerprint/adapters.d.ts.map +1 -0
  23. package/dist/browser/fingerprint/canary.d.ts +25 -0
  24. package/dist/browser/fingerprint/canary.d.ts.map +1 -0
  25. package/dist/browser/fingerprint/profiles.d.ts +16 -0
  26. package/dist/browser/fingerprint/profiles.d.ts.map +1 -0
  27. package/dist/browser/fingerprint/tier1-coherence.d.ts +36 -0
  28. package/dist/browser/fingerprint/tier1-coherence.d.ts.map +1 -0
  29. package/dist/browser/fingerprint/tier2-runtime.d.ts +40 -0
  30. package/dist/browser/fingerprint/tier2-runtime.d.ts.map +1 -0
  31. package/dist/browser/fingerprint/tier3-adaptive.d.ts +30 -0
  32. package/dist/browser/fingerprint/tier3-adaptive.d.ts.map +1 -0
  33. package/dist/browser/manager-types.d.ts +15 -0
  34. package/dist/browser/manager-types.d.ts.map +1 -0
  35. package/dist/browser/ops-browser-manager.d.ts +141 -0
  36. package/dist/browser/ops-browser-manager.d.ts.map +1 -0
  37. package/dist/browser/ops-client.d.ts +56 -0
  38. package/dist/browser/ops-client.d.ts.map +1 -0
  39. package/dist/browser/parallelism-governor.d.ts +31 -0
  40. package/dist/browser/parallelism-governor.d.ts.map +1 -0
  41. package/dist/browser/script-runner.d.ts +23 -0
  42. package/dist/browser/script-runner.d.ts.map +1 -0
  43. package/dist/browser/session-store.d.ts +63 -0
  44. package/dist/browser/session-store.d.ts.map +1 -0
  45. package/dist/browser/target-manager.d.ts +36 -0
  46. package/dist/browser/target-manager.d.ts.map +1 -0
  47. package/dist/cache/chrome-locator.d.ts +2 -0
  48. package/dist/cache/chrome-locator.d.ts.map +1 -0
  49. package/dist/cache/downloader.d.ts +6 -0
  50. package/dist/cache/downloader.d.ts.map +1 -0
  51. package/dist/cache/paths.d.ts +9 -0
  52. package/dist/cache/paths.d.ts.map +1 -0
  53. package/dist/canvas/code-sync/apply-tsx.d.ts +23 -0
  54. package/dist/canvas/code-sync/apply-tsx.d.ts.map +1 -0
  55. package/dist/canvas/code-sync/graph.d.ts +5 -0
  56. package/dist/canvas/code-sync/graph.d.ts.map +1 -0
  57. package/dist/canvas/code-sync/hash.d.ts +3 -0
  58. package/dist/canvas/code-sync/hash.d.ts.map +1 -0
  59. package/dist/canvas/code-sync/import.d.ts +18 -0
  60. package/dist/canvas/code-sync/import.d.ts.map +1 -0
  61. package/dist/canvas/code-sync/manifest.d.ts +5 -0
  62. package/dist/canvas/code-sync/manifest.d.ts.map +1 -0
  63. package/dist/canvas/code-sync/tsx-adapter.d.ts +8 -0
  64. package/dist/canvas/code-sync/tsx-adapter.d.ts.map +1 -0
  65. package/dist/canvas/code-sync/types.d.ts +152 -0
  66. package/dist/canvas/code-sync/types.d.ts.map +1 -0
  67. package/dist/canvas/code-sync/write.d.ts +9 -0
  68. package/dist/canvas/code-sync/write.d.ts.map +1 -0
  69. package/dist/canvas/document-store.d.ts +81 -0
  70. package/dist/canvas/document-store.d.ts.map +1 -0
  71. package/dist/canvas/export.d.ts +12 -0
  72. package/dist/canvas/export.d.ts.map +1 -0
  73. package/dist/canvas/repo-store.d.ts +10 -0
  74. package/dist/canvas/repo-store.d.ts.map +1 -0
  75. package/dist/canvas/surface-palette.d.ts +15 -0
  76. package/dist/canvas/surface-palette.d.ts.map +1 -0
  77. package/dist/canvas/types.d.ts +255 -0
  78. package/dist/canvas/types.d.ts.map +1 -0
  79. package/dist/canvas-runtime-preview-bridge-HBEHXM4T.js +7 -0
  80. package/dist/canvas-runtime-preview-bridge-HBEHXM4T.js.map +1 -0
  81. package/dist/chunk-5J3IFL3X.js +16706 -0
  82. package/dist/chunk-5J3IFL3X.js.map +1 -0
  83. package/dist/chunk-D633UO34.js +8149 -0
  84. package/dist/chunk-D633UO34.js.map +1 -0
  85. package/dist/chunk-FUSXMW3G.js +169 -0
  86. package/dist/chunk-FUSXMW3G.js.map +1 -0
  87. package/dist/chunk-TBUCZX4A.js +34 -0
  88. package/dist/chunk-TBUCZX4A.js.map +1 -0
  89. package/dist/chunk-V7KUDHDG.js +276 -0
  90. package/dist/chunk-V7KUDHDG.js.map +1 -0
  91. package/dist/chunk-Y2KL55OG.js +59 -0
  92. package/dist/chunk-Y2KL55OG.js.map +1 -0
  93. package/dist/cli/args.d.ts +25 -0
  94. package/dist/cli/args.d.ts.map +1 -0
  95. package/dist/cli/client.d.ts +2 -0
  96. package/dist/cli/client.d.ts.map +1 -0
  97. package/dist/cli/commands/annotate.d.ts +38 -0
  98. package/dist/cli/commands/annotate.d.ts.map +1 -0
  99. package/dist/cli/commands/artifacts.d.ts +24 -0
  100. package/dist/cli/commands/artifacts.d.ts.map +1 -0
  101. package/dist/cli/commands/canvas.d.ts +45 -0
  102. package/dist/cli/commands/canvas.d.ts.map +1 -0
  103. package/dist/cli/commands/daemon.d.ts +35 -0
  104. package/dist/cli/commands/daemon.d.ts.map +1 -0
  105. package/dist/cli/commands/devtools/console-poll.d.ts +7 -0
  106. package/dist/cli/commands/devtools/console-poll.d.ts.map +1 -0
  107. package/dist/cli/commands/devtools/debug-trace-snapshot.d.ts +20 -0
  108. package/dist/cli/commands/devtools/debug-trace-snapshot.d.ts.map +1 -0
  109. package/dist/cli/commands/devtools/network-poll.d.ts +7 -0
  110. package/dist/cli/commands/devtools/network-poll.d.ts.map +1 -0
  111. package/dist/cli/commands/devtools/perf.d.ts +7 -0
  112. package/dist/cli/commands/devtools/perf.d.ts.map +1 -0
  113. package/dist/cli/commands/devtools/screenshot.d.ts +18 -0
  114. package/dist/cli/commands/devtools/screenshot.d.ts.map +1 -0
  115. package/dist/cli/commands/dom/attr.d.ts +7 -0
  116. package/dist/cli/commands/dom/attr.d.ts.map +1 -0
  117. package/dist/cli/commands/dom/checked.d.ts +7 -0
  118. package/dist/cli/commands/dom/checked.d.ts.map +1 -0
  119. package/dist/cli/commands/dom/enabled.d.ts +7 -0
  120. package/dist/cli/commands/dom/enabled.d.ts.map +1 -0
  121. package/dist/cli/commands/dom/html.d.ts +7 -0
  122. package/dist/cli/commands/dom/html.d.ts.map +1 -0
  123. package/dist/cli/commands/dom/text.d.ts +7 -0
  124. package/dist/cli/commands/dom/text.d.ts.map +1 -0
  125. package/dist/cli/commands/dom/value.d.ts +7 -0
  126. package/dist/cli/commands/dom/value.d.ts.map +1 -0
  127. package/dist/cli/commands/dom/visible.d.ts +7 -0
  128. package/dist/cli/commands/dom/visible.d.ts.map +1 -0
  129. package/dist/cli/commands/export/clone-component.d.ts +16 -0
  130. package/dist/cli/commands/export/clone-component.d.ts.map +1 -0
  131. package/dist/cli/commands/export/clone-page.d.ts +15 -0
  132. package/dist/cli/commands/export/clone-page.d.ts.map +1 -0
  133. package/dist/cli/commands/interact/check.d.ts +7 -0
  134. package/dist/cli/commands/interact/check.d.ts.map +1 -0
  135. package/dist/cli/commands/interact/click.d.ts +7 -0
  136. package/dist/cli/commands/interact/click.d.ts.map +1 -0
  137. package/dist/cli/commands/interact/hover.d.ts +7 -0
  138. package/dist/cli/commands/interact/hover.d.ts.map +1 -0
  139. package/dist/cli/commands/interact/press.d.ts +7 -0
  140. package/dist/cli/commands/interact/press.d.ts.map +1 -0
  141. package/dist/cli/commands/interact/scroll-into-view.d.ts +7 -0
  142. package/dist/cli/commands/interact/scroll-into-view.d.ts.map +1 -0
  143. package/dist/cli/commands/interact/scroll.d.ts +7 -0
  144. package/dist/cli/commands/interact/scroll.d.ts.map +1 -0
  145. package/dist/cli/commands/interact/select.d.ts +7 -0
  146. package/dist/cli/commands/interact/select.d.ts.map +1 -0
  147. package/dist/cli/commands/interact/type.d.ts +7 -0
  148. package/dist/cli/commands/interact/type.d.ts.map +1 -0
  149. package/dist/cli/commands/interact/uncheck.d.ts +7 -0
  150. package/dist/cli/commands/interact/uncheck.d.ts.map +1 -0
  151. package/dist/cli/commands/macro-resolve.d.ts +18 -0
  152. package/dist/cli/commands/macro-resolve.d.ts.map +1 -0
  153. package/dist/cli/commands/native.d.ts +93 -0
  154. package/dist/cli/commands/native.d.ts.map +1 -0
  155. package/dist/cli/commands/nav/goto.d.ts +7 -0
  156. package/dist/cli/commands/nav/goto.d.ts.map +1 -0
  157. package/dist/cli/commands/nav/snapshot.d.ts +7 -0
  158. package/dist/cli/commands/nav/snapshot.d.ts.map +1 -0
  159. package/dist/cli/commands/nav/wait.d.ts +7 -0
  160. package/dist/cli/commands/nav/wait.d.ts.map +1 -0
  161. package/dist/cli/commands/pages/close.d.ts +6 -0
  162. package/dist/cli/commands/pages/close.d.ts.map +1 -0
  163. package/dist/cli/commands/pages/list.d.ts +7 -0
  164. package/dist/cli/commands/pages/list.d.ts.map +1 -0
  165. package/dist/cli/commands/pages/open.d.ts +7 -0
  166. package/dist/cli/commands/pages/open.d.ts.map +1 -0
  167. package/dist/cli/commands/product-video.d.ts +25 -0
  168. package/dist/cli/commands/product-video.d.ts.map +1 -0
  169. package/dist/cli/commands/registry.d.ts +5 -0
  170. package/dist/cli/commands/registry.d.ts.map +1 -0
  171. package/dist/cli/commands/research.d.ts +27 -0
  172. package/dist/cli/commands/research.d.ts.map +1 -0
  173. package/dist/cli/commands/rpc.d.ts +28 -0
  174. package/dist/cli/commands/rpc.d.ts.map +1 -0
  175. package/dist/cli/commands/run.d.ts +17 -0
  176. package/dist/cli/commands/run.d.ts.map +1 -0
  177. package/dist/cli/commands/serve.d.ts +64 -0
  178. package/dist/cli/commands/serve.d.ts.map +1 -0
  179. package/dist/cli/commands/session/connect.d.ts +9 -0
  180. package/dist/cli/commands/session/connect.d.ts.map +1 -0
  181. package/dist/cli/commands/session/cookie-import.d.ts +31 -0
  182. package/dist/cli/commands/session/cookie-import.d.ts.map +1 -0
  183. package/dist/cli/commands/session/cookie-list.d.ts +17 -0
  184. package/dist/cli/commands/session/cookie-list.d.ts.map +1 -0
  185. package/dist/cli/commands/session/disconnect.d.ts +6 -0
  186. package/dist/cli/commands/session/disconnect.d.ts.map +1 -0
  187. package/dist/cli/commands/session/launch.d.ts +29 -0
  188. package/dist/cli/commands/session/launch.d.ts.map +1 -0
  189. package/dist/cli/commands/session/status.d.ts +7 -0
  190. package/dist/cli/commands/session/status.d.ts.map +1 -0
  191. package/dist/cli/commands/shopping.d.ts +25 -0
  192. package/dist/cli/commands/shopping.d.ts.map +1 -0
  193. package/dist/cli/commands/status.d.ts +24 -0
  194. package/dist/cli/commands/status.d.ts.map +1 -0
  195. package/dist/cli/commands/targets/close.d.ts +6 -0
  196. package/dist/cli/commands/targets/close.d.ts.map +1 -0
  197. package/dist/cli/commands/targets/list.d.ts +7 -0
  198. package/dist/cli/commands/targets/list.d.ts.map +1 -0
  199. package/dist/cli/commands/targets/new.d.ts +7 -0
  200. package/dist/cli/commands/targets/new.d.ts.map +1 -0
  201. package/dist/cli/commands/targets/use.d.ts +7 -0
  202. package/dist/cli/commands/targets/use.d.ts.map +1 -0
  203. package/dist/cli/commands/types.d.ts +13 -0
  204. package/dist/cli/commands/types.d.ts.map +1 -0
  205. package/dist/cli/commands/uninstall.d.ts +14 -0
  206. package/dist/cli/commands/uninstall.d.ts.map +1 -0
  207. package/dist/cli/commands/update.d.ts +7 -0
  208. package/dist/cli/commands/update.d.ts.map +1 -0
  209. package/dist/cli/daemon-autostart.d.ts +46 -0
  210. package/dist/cli/daemon-autostart.d.ts.map +1 -0
  211. package/dist/cli/daemon-client.d.ts +33 -0
  212. package/dist/cli/daemon-client.d.ts.map +1 -0
  213. package/dist/cli/daemon-commands.d.ts +7 -0
  214. package/dist/cli/daemon-commands.d.ts.map +1 -0
  215. package/dist/cli/daemon-state.d.ts +56 -0
  216. package/dist/cli/daemon-state.d.ts.map +1 -0
  217. package/dist/cli/daemon-status.d.ts +19 -0
  218. package/dist/cli/daemon-status.d.ts.map +1 -0
  219. package/dist/cli/daemon.d.ts +29 -0
  220. package/dist/cli/daemon.d.ts.map +1 -0
  221. package/dist/cli/errors.d.ts +20 -0
  222. package/dist/cli/errors.d.ts.map +1 -0
  223. package/dist/cli/help.d.ts +33 -0
  224. package/dist/cli/help.d.ts.map +1 -0
  225. package/dist/cli/index.d.ts +2 -0
  226. package/dist/cli/index.d.ts.map +1 -0
  227. package/dist/cli/index.js +2825 -326
  228. package/dist/cli/index.js.map +1 -1
  229. package/dist/cli/installers/global.d.ts +9 -0
  230. package/dist/cli/installers/global.d.ts.map +1 -0
  231. package/dist/cli/installers/local.d.ts +9 -0
  232. package/dist/cli/installers/local.d.ts.map +1 -0
  233. package/dist/cli/installers/skills.d.ts +19 -0
  234. package/dist/cli/installers/skills.d.ts.map +1 -0
  235. package/dist/cli/output.d.ts +7 -0
  236. package/dist/cli/output.d.ts.map +1 -0
  237. package/dist/cli/remote-canvas-manager.d.ts +8 -0
  238. package/dist/cli/remote-canvas-manager.d.ts.map +1 -0
  239. package/dist/cli/remote-manager.d.ts +98 -0
  240. package/dist/cli/remote-manager.d.ts.map +1 -0
  241. package/dist/cli/remote-relay.d.ts +19 -0
  242. package/dist/cli/remote-relay.d.ts.map +1 -0
  243. package/dist/cli/templates/config.d.ts +7 -0
  244. package/dist/cli/templates/config.d.ts.map +1 -0
  245. package/dist/cli/utils/config.d.ts +20 -0
  246. package/dist/cli/utils/config.d.ts.map +1 -0
  247. package/dist/cli/utils/http.d.ts +5 -0
  248. package/dist/cli/utils/http.d.ts.map +1 -0
  249. package/dist/cli/utils/parse.d.ts +9 -0
  250. package/dist/cli/utils/parse.d.ts.map +1 -0
  251. package/dist/cli/utils/skills.d.ts +12 -0
  252. package/dist/cli/utils/skills.d.ts.map +1 -0
  253. package/dist/config.d.ts +208 -0
  254. package/dist/config.d.ts.map +1 -0
  255. package/dist/core/bootstrap.d.ts +3 -0
  256. package/dist/core/bootstrap.d.ts.map +1 -0
  257. package/dist/core/index.d.ts +3 -0
  258. package/dist/core/index.d.ts.map +1 -0
  259. package/dist/core/logging.d.ts +34 -0
  260. package/dist/core/logging.d.ts.map +1 -0
  261. package/dist/core/types.d.ts +36 -0
  262. package/dist/core/types.d.ts.map +1 -0
  263. package/dist/devtools/console-tracker.d.ts +44 -0
  264. package/dist/devtools/console-tracker.d.ts.map +1 -0
  265. package/dist/devtools/exception-tracker.d.ts +42 -0
  266. package/dist/devtools/exception-tracker.d.ts.map +1 -0
  267. package/dist/devtools/network-tracker.d.ts +34 -0
  268. package/dist/devtools/network-tracker.d.ts.map +1 -0
  269. package/dist/export/css-extract.d.ts +5 -0
  270. package/dist/export/css-extract.d.ts.map +1 -0
  271. package/dist/export/dom-capture.d.ts +15 -0
  272. package/dist/export/dom-capture.d.ts.map +1 -0
  273. package/dist/export/react-emitter.d.ts +11 -0
  274. package/dist/export/react-emitter.d.ts.map +1 -0
  275. package/dist/extension-extractor.d.ts +3 -0
  276. package/dist/extension-extractor.d.ts.map +1 -0
  277. package/dist/fs-UMRKOBNN.js +7 -0
  278. package/dist/fs-UMRKOBNN.js.map +1 -0
  279. package/dist/index.d.ts +3 -4
  280. package/dist/index.d.ts.map +1 -0
  281. package/dist/index.js +1028 -123
  282. package/dist/index.js.map +1 -1
  283. package/dist/macros/execute.d.ts +44 -0
  284. package/dist/macros/execute.d.ts.map +1 -0
  285. package/dist/macros/index.d.ts +9 -0
  286. package/dist/macros/index.d.ts.map +1 -0
  287. package/dist/macros/packs/core.d.ts +3 -0
  288. package/dist/macros/packs/core.d.ts.map +1 -0
  289. package/dist/macros/registry.d.ts +48 -0
  290. package/dist/macros/registry.d.ts.map +1 -0
  291. package/dist/macros-ND2M7LWU.js +399 -0
  292. package/dist/macros-ND2M7LWU.js.map +1 -0
  293. package/dist/opendevbrowser.d.ts +3 -4
  294. package/dist/opendevbrowser.d.ts.map +1 -0
  295. package/dist/opendevbrowser.js +1028 -123
  296. package/dist/opendevbrowser.js.map +1 -1
  297. package/dist/providers/adaptive-concurrency.d.ts +42 -0
  298. package/dist/providers/adaptive-concurrency.d.ts.map +1 -0
  299. package/dist/providers/artifacts.d.ts +34 -0
  300. package/dist/providers/artifacts.d.ts.map +1 -0
  301. package/dist/providers/blocker.d.ts +47 -0
  302. package/dist/providers/blocker.d.ts.map +1 -0
  303. package/dist/providers/community/index.d.ts +44 -0
  304. package/dist/providers/community/index.d.ts.map +1 -0
  305. package/dist/providers/enrichment.d.ts +33 -0
  306. package/dist/providers/enrichment.d.ts.map +1 -0
  307. package/dist/providers/errors.d.ts +41 -0
  308. package/dist/providers/errors.d.ts.map +1 -0
  309. package/dist/providers/index.d.ts +121 -0
  310. package/dist/providers/index.d.ts.map +1 -0
  311. package/dist/providers/normalize.d.ts +39 -0
  312. package/dist/providers/normalize.d.ts.map +1 -0
  313. package/dist/providers/policy.d.ts +5 -0
  314. package/dist/providers/policy.d.ts.map +1 -0
  315. package/dist/providers/registry.d.ts +22 -0
  316. package/dist/providers/registry.d.ts.map +1 -0
  317. package/dist/providers/renderer.d.ts +49 -0
  318. package/dist/providers/renderer.d.ts.map +1 -0
  319. package/dist/providers/runtime-factory.d.ts +20 -0
  320. package/dist/providers/runtime-factory.d.ts.map +1 -0
  321. package/dist/providers/safety/prompt-guard.d.ts +34 -0
  322. package/dist/providers/safety/prompt-guard.d.ts.map +1 -0
  323. package/dist/providers/shared/anti-bot-policy.d.ts +51 -0
  324. package/dist/providers/shared/anti-bot-policy.d.ts.map +1 -0
  325. package/dist/providers/shared/post-policy.d.ts +31 -0
  326. package/dist/providers/shared/post-policy.d.ts.map +1 -0
  327. package/dist/providers/shared/request-headers.d.ts +5 -0
  328. package/dist/providers/shared/request-headers.d.ts.map +1 -0
  329. package/dist/providers/shared/traversal-url.d.ts +2 -0
  330. package/dist/providers/shared/traversal-url.d.ts.map +1 -0
  331. package/dist/providers/shopping/index.d.ts +63 -0
  332. package/dist/providers/shopping/index.d.ts.map +1 -0
  333. package/dist/providers/social/bluesky.d.ts +3 -0
  334. package/dist/providers/social/bluesky.d.ts.map +1 -0
  335. package/dist/providers/social/facebook.d.ts +3 -0
  336. package/dist/providers/social/facebook.d.ts.map +1 -0
  337. package/dist/providers/social/index.d.ts +31 -0
  338. package/dist/providers/social/index.d.ts.map +1 -0
  339. package/dist/providers/social/instagram.d.ts +3 -0
  340. package/dist/providers/social/instagram.d.ts.map +1 -0
  341. package/dist/providers/social/linkedin.d.ts +3 -0
  342. package/dist/providers/social/linkedin.d.ts.map +1 -0
  343. package/dist/providers/social/platform.d.ts +40 -0
  344. package/dist/providers/social/platform.d.ts.map +1 -0
  345. package/dist/providers/social/reddit.d.ts +3 -0
  346. package/dist/providers/social/reddit.d.ts.map +1 -0
  347. package/dist/providers/social/threads.d.ts +3 -0
  348. package/dist/providers/social/threads.d.ts.map +1 -0
  349. package/dist/providers/social/tiktok.d.ts +3 -0
  350. package/dist/providers/social/tiktok.d.ts.map +1 -0
  351. package/dist/providers/social/x.d.ts +3 -0
  352. package/dist/providers/social/x.d.ts.map +1 -0
  353. package/dist/providers/social/youtube-resolver.d.ts +78 -0
  354. package/dist/providers/social/youtube-resolver.d.ts.map +1 -0
  355. package/dist/providers/social/youtube.d.ts +34 -0
  356. package/dist/providers/social/youtube.d.ts.map +1 -0
  357. package/dist/providers/tier-router.d.ts +30 -0
  358. package/dist/providers/tier-router.d.ts.map +1 -0
  359. package/dist/providers/timebox.d.ts +20 -0
  360. package/dist/providers/timebox.d.ts.map +1 -0
  361. package/dist/providers/types.d.ts +344 -0
  362. package/dist/providers/types.d.ts.map +1 -0
  363. package/dist/providers/web/crawl-worker.d.ts +36 -0
  364. package/dist/providers/web/crawl-worker.d.ts.map +1 -0
  365. package/dist/providers/web/crawler.d.ts +101 -0
  366. package/dist/providers/web/crawler.d.ts.map +1 -0
  367. package/dist/providers/web/extract.d.ts +11 -0
  368. package/dist/providers/web/extract.d.ts.map +1 -0
  369. package/dist/providers/web/index.d.ts +24 -0
  370. package/dist/providers/web/index.d.ts.map +1 -0
  371. package/dist/providers/web/policy.d.ts +14 -0
  372. package/dist/providers/web/policy.d.ts.map +1 -0
  373. package/dist/providers/workflows.d.ts +67 -0
  374. package/dist/providers/workflows.d.ts.map +1 -0
  375. package/dist/providers-G3LRHQXX.js +121 -0
  376. package/dist/providers-G3LRHQXX.js.map +1 -0
  377. package/dist/relay/protocol.d.ts +399 -0
  378. package/dist/relay/protocol.d.ts.map +1 -0
  379. package/dist/relay/relay-endpoints.d.ts +16 -0
  380. package/dist/relay/relay-endpoints.d.ts.map +1 -0
  381. package/dist/relay/relay-server.d.ts +124 -0
  382. package/dist/relay/relay-server.d.ts.map +1 -0
  383. package/dist/relay/relay-types.d.ts +12 -0
  384. package/dist/relay/relay-types.d.ts.map +1 -0
  385. package/dist/runtime-factory-BICHDPE7.js +13 -0
  386. package/dist/runtime-factory-BICHDPE7.js.map +1 -0
  387. package/dist/skills/continuity-nudge.d.ts +12 -0
  388. package/dist/skills/continuity-nudge.d.ts.map +1 -0
  389. package/dist/skills/skill-loader.d.ts +20 -0
  390. package/dist/skills/skill-loader.d.ts.map +1 -0
  391. package/dist/skills/skill-nudge.d.ts +18 -0
  392. package/dist/skills/skill-nudge.d.ts.map +1 -0
  393. package/dist/skills/types.d.ts +12 -0
  394. package/dist/skills/types.d.ts.map +1 -0
  395. package/dist/snapshot/ops-snapshot.d.ts +16 -0
  396. package/dist/snapshot/ops-snapshot.d.ts.map +1 -0
  397. package/dist/snapshot/refs.d.ts +23 -0
  398. package/dist/snapshot/refs.d.ts.map +1 -0
  399. package/dist/snapshot/snapshotter.d.ts +27 -0
  400. package/dist/snapshot/snapshotter.d.ts.map +1 -0
  401. package/dist/tools/annotate.d.ts +4 -0
  402. package/dist/tools/annotate.d.ts.map +1 -0
  403. package/dist/tools/canvas.d.ts +4 -0
  404. package/dist/tools/canvas.d.ts.map +1 -0
  405. package/dist/tools/check.d.ts +4 -0
  406. package/dist/tools/check.d.ts.map +1 -0
  407. package/dist/tools/click.d.ts +4 -0
  408. package/dist/tools/click.d.ts.map +1 -0
  409. package/dist/tools/clone_component.d.ts +4 -0
  410. package/dist/tools/clone_component.d.ts.map +1 -0
  411. package/dist/tools/clone_page.d.ts +4 -0
  412. package/dist/tools/clone_page.d.ts.map +1 -0
  413. package/dist/tools/close.d.ts +4 -0
  414. package/dist/tools/close.d.ts.map +1 -0
  415. package/dist/tools/connect.d.ts +4 -0
  416. package/dist/tools/connect.d.ts.map +1 -0
  417. package/dist/tools/console_poll.d.ts +4 -0
  418. package/dist/tools/console_poll.d.ts.map +1 -0
  419. package/dist/tools/cookie_import.d.ts +25 -0
  420. package/dist/tools/cookie_import.d.ts.map +1 -0
  421. package/dist/tools/cookie_list.d.ts +9 -0
  422. package/dist/tools/cookie_list.d.ts.map +1 -0
  423. package/dist/tools/debug_trace_snapshot.d.ts +4 -0
  424. package/dist/tools/debug_trace_snapshot.d.ts.map +1 -0
  425. package/dist/tools/deps.d.ts +28 -0
  426. package/dist/tools/deps.d.ts.map +1 -0
  427. package/dist/tools/disconnect.d.ts +4 -0
  428. package/dist/tools/disconnect.d.ts.map +1 -0
  429. package/dist/tools/dom_get_html.d.ts +4 -0
  430. package/dist/tools/dom_get_html.d.ts.map +1 -0
  431. package/dist/tools/dom_get_text.d.ts +4 -0
  432. package/dist/tools/dom_get_text.d.ts.map +1 -0
  433. package/dist/tools/get_attr.d.ts +4 -0
  434. package/dist/tools/get_attr.d.ts.map +1 -0
  435. package/dist/tools/get_value.d.ts +4 -0
  436. package/dist/tools/get_value.d.ts.map +1 -0
  437. package/dist/tools/goto.d.ts +4 -0
  438. package/dist/tools/goto.d.ts.map +1 -0
  439. package/dist/tools/hover.d.ts +4 -0
  440. package/dist/tools/hover.d.ts.map +1 -0
  441. package/dist/tools/index.d.ts +4 -0
  442. package/dist/tools/index.d.ts.map +1 -0
  443. package/dist/tools/is_checked.d.ts +4 -0
  444. package/dist/tools/is_checked.d.ts.map +1 -0
  445. package/dist/tools/is_enabled.d.ts +4 -0
  446. package/dist/tools/is_enabled.d.ts.map +1 -0
  447. package/dist/tools/is_visible.d.ts +4 -0
  448. package/dist/tools/is_visible.d.ts.map +1 -0
  449. package/dist/tools/launch.d.ts +4 -0
  450. package/dist/tools/launch.d.ts.map +1 -0
  451. package/dist/tools/list.d.ts +4 -0
  452. package/dist/tools/list.d.ts.map +1 -0
  453. package/dist/tools/macro_resolve.d.ts +25 -0
  454. package/dist/tools/macro_resolve.d.ts.map +1 -0
  455. package/dist/tools/network_poll.d.ts +4 -0
  456. package/dist/tools/network_poll.d.ts.map +1 -0
  457. package/dist/tools/page.d.ts +4 -0
  458. package/dist/tools/page.d.ts.map +1 -0
  459. package/dist/tools/perf.d.ts +4 -0
  460. package/dist/tools/perf.d.ts.map +1 -0
  461. package/dist/tools/press.d.ts +4 -0
  462. package/dist/tools/press.d.ts.map +1 -0
  463. package/dist/tools/product_video_run.d.ts +4 -0
  464. package/dist/tools/product_video_run.d.ts.map +1 -0
  465. package/dist/tools/prompting_guide.d.ts +4 -0
  466. package/dist/tools/prompting_guide.d.ts.map +1 -0
  467. package/dist/tools/research_run.d.ts +4 -0
  468. package/dist/tools/research_run.d.ts.map +1 -0
  469. package/dist/tools/response.d.ts +19 -0
  470. package/dist/tools/response.d.ts.map +1 -0
  471. package/dist/tools/run.d.ts +4 -0
  472. package/dist/tools/run.d.ts.map +1 -0
  473. package/dist/tools/screenshot.d.ts +4 -0
  474. package/dist/tools/screenshot.d.ts.map +1 -0
  475. package/dist/tools/scroll.d.ts +4 -0
  476. package/dist/tools/scroll.d.ts.map +1 -0
  477. package/dist/tools/scroll_into_view.d.ts +4 -0
  478. package/dist/tools/scroll_into_view.d.ts.map +1 -0
  479. package/dist/tools/select.d.ts +4 -0
  480. package/dist/tools/select.d.ts.map +1 -0
  481. package/dist/tools/shopping_run.d.ts +4 -0
  482. package/dist/tools/shopping_run.d.ts.map +1 -0
  483. package/dist/tools/skill_list.d.ts +4 -0
  484. package/dist/tools/skill_list.d.ts.map +1 -0
  485. package/dist/tools/skill_load.d.ts +4 -0
  486. package/dist/tools/skill_load.d.ts.map +1 -0
  487. package/dist/tools/snapshot.d.ts +4 -0
  488. package/dist/tools/snapshot.d.ts.map +1 -0
  489. package/dist/tools/status.d.ts +4 -0
  490. package/dist/tools/status.d.ts.map +1 -0
  491. package/dist/tools/target_close.d.ts +4 -0
  492. package/dist/tools/target_close.d.ts.map +1 -0
  493. package/dist/tools/target_new.d.ts +4 -0
  494. package/dist/tools/target_new.d.ts.map +1 -0
  495. package/dist/tools/target_use.d.ts +4 -0
  496. package/dist/tools/target_use.d.ts.map +1 -0
  497. package/dist/tools/targets_list.d.ts +4 -0
  498. package/dist/tools/targets_list.d.ts.map +1 -0
  499. package/dist/tools/type.d.ts +4 -0
  500. package/dist/tools/type.d.ts.map +1 -0
  501. package/dist/tools/uncheck.d.ts +4 -0
  502. package/dist/tools/uncheck.d.ts.map +1 -0
  503. package/dist/tools/wait.d.ts +4 -0
  504. package/dist/tools/wait.d.ts.map +1 -0
  505. package/dist/tools/workflow-runtime.d.ts +3 -0
  506. package/dist/tools/workflow-runtime.d.ts.map +1 -0
  507. package/dist/utils/crypto.d.ts +2 -0
  508. package/dist/utils/crypto.d.ts.map +1 -0
  509. package/dist/utils/endpoint-validation.d.ts +2 -0
  510. package/dist/utils/endpoint-validation.d.ts.map +1 -0
  511. package/dist/utils/fs.d.ts +5 -0
  512. package/dist/utils/fs.d.ts.map +1 -0
  513. package/dist/utils/hub-enabled.d.ts +3 -0
  514. package/dist/utils/hub-enabled.d.ts.map +1 -0
  515. package/extension/canvas.html +636 -0
  516. package/extension/dist/annotate-content.css +15 -6
  517. package/extension/dist/annotate-content.js +119 -9
  518. package/extension/dist/annotation-payload.js +163 -0
  519. package/extension/dist/background.js +158 -22
  520. package/extension/dist/canvas/canvas-runtime.js +1061 -0
  521. package/extension/dist/canvas/model.js +213 -0
  522. package/extension/dist/canvas/viewport-fit.js +67 -0
  523. package/extension/dist/canvas-page.js +1801 -0
  524. package/extension/dist/ops/dom-bridge.js +116 -3
  525. package/extension/dist/ops/ops-runtime.js +1014 -48
  526. package/extension/dist/ops/ops-session-store.js +37 -116
  527. package/extension/dist/ops/parallelism-governor.js +117 -0
  528. package/extension/dist/ops/snapshot-shared.js +21 -5
  529. package/extension/dist/ops/target-session-coordinator.js +157 -0
  530. package/extension/dist/popup.js +155 -31
  531. package/extension/dist/services/CDPRouter.js +70 -5
  532. package/extension/dist/services/ConnectionManager.js +22 -3
  533. package/extension/dist/services/RelayClient.js +9 -0
  534. package/extension/dist/services/TabManager.js +35 -12
  535. package/extension/dist/types.js +2 -0
  536. package/extension/icons/icon128.png +0 -0
  537. package/extension/icons/icon16.png +0 -0
  538. package/extension/icons/icon32.png +0 -0
  539. package/extension/icons/icon48.png +0 -0
  540. package/extension/manifest.json +1 -1
  541. package/extension/popup.html +52 -0
  542. package/package.json +30 -19
  543. package/scripts/native/host.cjs +230 -0
  544. package/scripts/native/install.ps1 +73 -0
  545. package/scripts/native/install.sh +66 -0
  546. package/scripts/native/uninstall.ps1 +25 -0
  547. package/scripts/native/uninstall.sh +26 -0
  548. package/skills/AGENTS.md +20 -8
  549. package/skills/opendevbrowser-best-practices/SKILL.md +248 -74
  550. package/skills/opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md +44 -0
  551. package/skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md +141 -0
  552. package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +191 -0
  553. package/skills/opendevbrowser-best-practices/artifacts/debug-trace-playbook.md +36 -0
  554. package/skills/opendevbrowser-best-practices/artifacts/fingerprint-tiers.md +36 -0
  555. package/skills/opendevbrowser-best-practices/artifacts/macro-workflows.md +43 -0
  556. package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +36 -0
  557. package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +89 -0
  558. package/skills/opendevbrowser-best-practices/assets/templates/canvas-blocker-checklist.json +70 -0
  559. package/skills/opendevbrowser-best-practices/assets/templates/canvas-feedback-eval.json +73 -0
  560. package/skills/opendevbrowser-best-practices/assets/templates/canvas-generation-plan.v1.json +67 -0
  561. package/skills/opendevbrowser-best-practices/assets/templates/canvas-handshake-example.json +126 -0
  562. package/skills/opendevbrowser-best-practices/assets/templates/cdp-forward-envelope.json +11 -0
  563. package/skills/opendevbrowser-best-practices/assets/templates/mode-flag-matrix.json +56 -0
  564. package/skills/opendevbrowser-best-practices/assets/templates/ops-request-envelope.json +9 -0
  565. package/skills/opendevbrowser-best-practices/assets/templates/robustness-checklist.json +136 -0
  566. package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +28 -0
  567. package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +170 -0
  568. package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +164 -0
  569. package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +234 -0
  570. package/skills/opendevbrowser-continuity-ledger/SKILL.md +10 -0
  571. package/skills/opendevbrowser-data-extraction/SKILL.md +126 -0
  572. package/skills/opendevbrowser-data-extraction/artifacts/extraction-workflows.md +31 -0
  573. package/skills/opendevbrowser-data-extraction/assets/templates/compliance-checklist.md +7 -0
  574. package/skills/opendevbrowser-data-extraction/assets/templates/extraction-schema.json +17 -0
  575. package/skills/opendevbrowser-data-extraction/assets/templates/pagination-state.json +11 -0
  576. package/skills/opendevbrowser-data-extraction/assets/templates/quality-gates.json +10 -0
  577. package/skills/opendevbrowser-data-extraction/examples/sample-schema.json +19 -0
  578. package/skills/opendevbrowser-data-extraction/scripts/run-extraction-workflow.sh +83 -0
  579. package/skills/opendevbrowser-data-extraction/scripts/validate-skill-assets.sh +49 -0
  580. package/skills/opendevbrowser-form-testing/SKILL.md +143 -0
  581. package/skills/opendevbrowser-form-testing/artifacts/form-workflows.md +37 -0
  582. package/skills/opendevbrowser-form-testing/assets/templates/a11y-assertions.md +7 -0
  583. package/skills/opendevbrowser-form-testing/assets/templates/challenge-decision-tree.json +16 -0
  584. package/skills/opendevbrowser-form-testing/assets/templates/multi-step-state.json +11 -0
  585. package/skills/opendevbrowser-form-testing/assets/templates/validation-matrix.json +24 -0
  586. package/skills/opendevbrowser-form-testing/examples/sample-validation-matrix.json +29 -0
  587. package/skills/opendevbrowser-form-testing/scripts/run-form-workflow.sh +82 -0
  588. package/skills/opendevbrowser-form-testing/scripts/validate-skill-assets.sh +49 -0
  589. package/skills/opendevbrowser-login-automation/SKILL.md +159 -0
  590. package/skills/opendevbrowser-login-automation/artifacts/login-workflows.md +39 -0
  591. package/skills/opendevbrowser-login-automation/assets/templates/auth-signals.json +21 -0
  592. package/skills/opendevbrowser-login-automation/assets/templates/challenge-checkpoint.md +10 -0
  593. package/skills/opendevbrowser-login-automation/assets/templates/login-scenario-matrix.json +26 -0
  594. package/skills/opendevbrowser-login-automation/examples/sample-auth-signals.json +14 -0
  595. package/skills/opendevbrowser-login-automation/scripts/record-auth-signals.sh +18 -0
  596. package/skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh +99 -0
  597. package/skills/opendevbrowser-login-automation/scripts/validate-skill-assets.sh +50 -0
  598. package/skills/opendevbrowser-product-presentation-asset/SKILL.md +98 -0
  599. package/skills/opendevbrowser-product-presentation-asset/artifacts/asset-pack-assembly.md +23 -0
  600. package/skills/opendevbrowser-product-presentation-asset/artifacts/ugc-creative-guide.md +21 -0
  601. package/skills/opendevbrowser-product-presentation-asset/assets/templates/claims-evidence-map.md +5 -0
  602. package/skills/opendevbrowser-product-presentation-asset/assets/templates/copy.md +5 -0
  603. package/skills/opendevbrowser-product-presentation-asset/assets/templates/features.md +4 -0
  604. package/skills/opendevbrowser-product-presentation-asset/assets/templates/manifest.schema.json +14 -0
  605. package/skills/opendevbrowser-product-presentation-asset/assets/templates/shot-list.md +7 -0
  606. package/skills/opendevbrowser-product-presentation-asset/assets/templates/ugc-concepts.md +17 -0
  607. package/skills/opendevbrowser-product-presentation-asset/assets/templates/user-actions.md +7 -0
  608. package/skills/opendevbrowser-product-presentation-asset/assets/templates/video-assembly.md +18 -0
  609. package/skills/opendevbrowser-product-presentation-asset/examples/sample-input.json +6 -0
  610. package/skills/opendevbrowser-product-presentation-asset/examples/sample-manifest.json +18 -0
  611. package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +9 -0
  612. package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +14 -0
  613. package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +9 -0
  614. package/skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh +96 -0
  615. package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +56 -0
  616. package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +43 -0
  617. package/skills/opendevbrowser-research/SKILL.md +73 -0
  618. package/skills/opendevbrowser-research/artifacts/research-workflows.md +29 -0
  619. package/skills/opendevbrowser-research/assets/templates/compact.md +7 -0
  620. package/skills/opendevbrowser-research/assets/templates/context.json +18 -0
  621. package/skills/opendevbrowser-research/assets/templates/report.md +9 -0
  622. package/skills/opendevbrowser-research/examples/sample-input.json +6 -0
  623. package/skills/opendevbrowser-research/examples/sample-output.md +4 -0
  624. package/skills/opendevbrowser-research/scripts/render-output.sh +12 -0
  625. package/skills/opendevbrowser-research/scripts/run-research.sh +23 -0
  626. package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +48 -0
  627. package/skills/opendevbrowser-research/scripts/write-artifacts.sh +29 -0
  628. package/skills/opendevbrowser-shopping/SKILL.md +118 -0
  629. package/skills/opendevbrowser-shopping/artifacts/deal-hunting-workflows.md +37 -0
  630. package/skills/opendevbrowser-shopping/assets/templates/deal-thresholds.json +8 -0
  631. package/skills/opendevbrowser-shopping/assets/templates/deals-context.json +9 -0
  632. package/skills/opendevbrowser-shopping/assets/templates/deals-table.md +4 -0
  633. package/skills/opendevbrowser-shopping/assets/templates/market-analysis.json +30 -0
  634. package/skills/opendevbrowser-shopping/examples/sample-deals.md +4 -0
  635. package/skills/opendevbrowser-shopping/examples/sample-query.json +5 -0
  636. package/skills/opendevbrowser-shopping/scripts/analyze-market.sh +307 -0
  637. package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +28 -0
  638. package/skills/opendevbrowser-shopping/scripts/render-deals.sh +13 -0
  639. package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +32 -0
  640. package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +19 -0
  641. package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +53 -0
  642. package/dist/chunk-JVBMT2O5.js +0 -7173
  643. package/dist/chunk-JVBMT2O5.js.map +0 -1
  644. package/skills/data-extraction/SKILL.md +0 -128
  645. package/skills/form-testing/SKILL.md +0 -106
  646. package/skills/login-automation/SKILL.md +0 -108
@@ -1,5 +1,6 @@
1
1
  import { DEFAULT_AUTO_CONNECT, DEFAULT_AUTO_PAIR, DEFAULT_DISCOVERY_PORT, DEFAULT_NATIVE_ENABLED, DEFAULT_PAIRING_ENABLED, DEFAULT_PAIRING_TOKEN, DEFAULT_RELAY_PORT } from "./relay-settings.js";
2
2
  import { logError } from "./logging.js";
3
+ import { describeAnnotationItem, filterAnnotationPayload } from "./annotation-payload.js";
3
4
  const statusEl = document.getElementById("status");
4
5
  const statusIndicator = document.getElementById("statusIndicator");
5
6
  const statusPill = document.getElementById("statusPill");
@@ -22,6 +23,9 @@ const nativeEnabledInput = document.getElementById("nativeEnabled");
22
23
  const annotationContextInput = document.getElementById("annotationContext");
23
24
  const annotationStartButton = document.getElementById("annotationStart");
24
25
  const annotationCopyButton = document.getElementById("annotationCopy");
26
+ const annotationSendButton = document.getElementById("annotationSend");
27
+ const annotationRefreshButton = document.getElementById("annotationRefresh");
28
+ const annotationItems = document.getElementById("annotationItems");
25
29
  const annotationNote = document.getElementById("annotationNote");
26
30
  if (!statusEl
27
31
  || !statusIndicator
@@ -45,12 +49,16 @@ if (!statusEl
45
49
  || !annotationContextInput
46
50
  || !annotationStartButton
47
51
  || !annotationCopyButton
52
+ || !annotationSendButton
53
+ || !annotationRefreshButton
54
+ || !annotationItems
48
55
  || !annotationNote) {
49
56
  throw new Error("Popup DOM missing required elements");
50
57
  }
51
58
  const defaultNote = "Local relay only. Tokens stay on-device.";
52
59
  const defaultAnnotationNote = "No annotations captured yet.";
53
60
  const LAST_ANNOTATION_META_KEY = "annotationLastMeta";
61
+ let lastAnnotationPayload = null;
54
62
  const setNote = (message) => {
55
63
  const next = message && message.trim() ? message : defaultNote;
56
64
  statusNote.textContent = next;
@@ -207,13 +215,24 @@ const refreshStatus = async () => {
207
215
  setInjectionStatus(null);
208
216
  }
209
217
  };
210
- const setCopyEnabled = (enabled) => {
218
+ const setAnnotationActionsEnabled = (enabled) => {
211
219
  annotationCopyButton.disabled = !enabled;
220
+ annotationSendButton.disabled = !enabled;
212
221
  };
213
222
  const buildPopupAnnotationOptions = () => {
214
223
  const context = annotationContextInput.value.trim();
215
224
  return context ? { context } : undefined;
216
225
  };
226
+ const withPopupContext = (payload) => {
227
+ const context = annotationContextInput.value.trim();
228
+ if (!context) {
229
+ return payload;
230
+ }
231
+ return {
232
+ ...payload,
233
+ context
234
+ };
235
+ };
217
236
  const fetchTokenFromPlugin = async (port) => {
218
237
  try {
219
238
  const response = await fetch(`http://127.0.0.1:${port}/pair`, {
@@ -332,16 +351,76 @@ const formatAnnotationSummary = (meta) => {
332
351
  const target = meta.url ? ` on ${meta.url}` : "";
333
352
  return `Last annotation: ${count} item${count === 1 ? "" : "s"}${target}.`;
334
353
  };
354
+ const renderAnnotationItems = (payload) => {
355
+ annotationItems.innerHTML = "";
356
+ if (!payload || payload.annotations.length === 0) {
357
+ const empty = document.createElement("div");
358
+ empty.className = "annotation-empty";
359
+ empty.textContent = "No annotation items available.";
360
+ annotationItems.append(empty);
361
+ return;
362
+ }
363
+ for (const item of payload.annotations) {
364
+ const row = document.createElement("div");
365
+ row.className = "annotation-item";
366
+ const summary = document.createElement("div");
367
+ summary.className = "annotation-item-summary";
368
+ summary.textContent = describeAnnotationItem(item);
369
+ const meta = document.createElement("div");
370
+ meta.className = "annotation-item-meta";
371
+ meta.textContent = `${item.tag} • ${Math.round(item.rect.width)}×${Math.round(item.rect.height)}`;
372
+ const actions = document.createElement("div");
373
+ actions.className = "annotation-item-actions";
374
+ const copyButton = document.createElement("button");
375
+ copyButton.className = "secondary";
376
+ copyButton.type = "button";
377
+ copyButton.textContent = "Copy item";
378
+ copyButton.addEventListener("click", () => {
379
+ void copySelectedAnnotation([item.id], "Copied annotation item payload.");
380
+ });
381
+ const sendButton = document.createElement("button");
382
+ sendButton.className = "secondary";
383
+ sendButton.type = "button";
384
+ sendButton.textContent = "Send item";
385
+ sendButton.addEventListener("click", () => {
386
+ void sendSelectedAnnotation([item.id], "popup_item", describeAnnotationItem(item), "Sent annotation item to agent inbox.");
387
+ });
388
+ actions.append(copyButton, sendButton);
389
+ row.append(summary, meta, actions);
390
+ annotationItems.append(row);
391
+ }
392
+ };
393
+ const loadAnnotationPayload = async (preferScreenshots) => {
394
+ let response = await sendMessage({
395
+ type: "annotation:getPayload",
396
+ includeScreenshots: preferScreenshots
397
+ });
398
+ if (!response.payload && preferScreenshots) {
399
+ response = await sendMessage({
400
+ type: "annotation:getPayload",
401
+ includeScreenshots: false
402
+ });
403
+ }
404
+ return response;
405
+ };
406
+ const refreshAnnotationPayload = async () => {
407
+ const response = await loadAnnotationPayload(false);
408
+ lastAnnotationPayload = response.payload ? withPopupContext(response.payload) : null;
409
+ renderAnnotationItems(lastAnnotationPayload);
410
+ };
335
411
  const refreshLastAnnotationMeta = async () => {
336
412
  try {
337
413
  const response = await sendMessage({ type: "annotation:lastMeta" });
338
414
  const meta = response.meta;
339
415
  if (meta && meta.status === "ok") {
340
- setCopyEnabled(true);
416
+ setAnnotationActionsEnabled(true);
341
417
  setAnnotationNote(formatAnnotationSummary(meta));
418
+ await refreshAnnotationPayload();
342
419
  return;
343
420
  }
344
- setCopyEnabled(false);
421
+ setAnnotationActionsEnabled(false);
422
+ lastAnnotationPayload = null;
423
+ renderAnnotationItems(null);
345
424
  if (meta) {
346
425
  setAnnotationNote(formatAnnotationSummary(meta));
347
426
  }
@@ -351,7 +430,9 @@ const refreshLastAnnotationMeta = async () => {
351
430
  }
352
431
  catch (error) {
353
432
  logError("popup.annotation_meta", error, { code: "annotation_meta_failed" });
354
- setCopyEnabled(false);
433
+ setAnnotationActionsEnabled(false);
434
+ lastAnnotationPayload = null;
435
+ renderAnnotationItems(null);
355
436
  setAnnotationNote("Annotation status unavailable.");
356
437
  }
357
438
  };
@@ -377,6 +458,49 @@ const copyTextToClipboard = async (text) => {
377
458
  throw new Error("Clipboard copy failed");
378
459
  }
379
460
  };
461
+ const copyPayloadToClipboard = async (payload, message) => {
462
+ await copyTextToClipboard(JSON.stringify(payload, null, 2));
463
+ setAnnotationNote(message);
464
+ };
465
+ const sendPayloadToAgent = async (payload, source, label, successMessage) => {
466
+ const response = await sendMessage({
467
+ type: "annotation:sendPayload",
468
+ payload,
469
+ source,
470
+ label
471
+ });
472
+ if (!response.ok) {
473
+ throw new Error(response.error?.message ?? "Agent dispatch failed.");
474
+ }
475
+ setAnnotationNote(successMessage);
476
+ };
477
+ const copySelectedAnnotation = async (annotationIds, successMessage = "Copied annotation payload to clipboard.") => {
478
+ const response = await loadAnnotationPayload(true);
479
+ if (!response.payload) {
480
+ setAnnotationActionsEnabled(false);
481
+ setAnnotationNote("No completed annotation payload available.");
482
+ renderAnnotationItems(null);
483
+ return;
484
+ }
485
+ const payload = withPopupContext(annotationIds && annotationIds.length > 0
486
+ ? filterAnnotationPayload(response.payload, annotationIds, { includeScreenshots: Boolean(response.payload.screenshots?.length) })
487
+ : response.payload);
488
+ await copyPayloadToClipboard(payload, response.warning ? `${successMessage} ${response.warning}` : successMessage);
489
+ await refreshLastAnnotationMeta();
490
+ };
491
+ const sendSelectedAnnotation = async (annotationIds, source, label, successMessage) => {
492
+ const response = await loadAnnotationPayload(true);
493
+ if (!response.payload) {
494
+ setAnnotationActionsEnabled(false);
495
+ setAnnotationNote("No completed annotation payload available.");
496
+ renderAnnotationItems(null);
497
+ return;
498
+ }
499
+ const payload = withPopupContext(annotationIds && annotationIds.length > 0
500
+ ? filterAnnotationPayload(response.payload, annotationIds, { includeScreenshots: Boolean(response.payload.screenshots?.length) })
501
+ : response.payload);
502
+ await sendPayloadToAgent(payload, source, label, successMessage);
503
+ };
380
504
  const toggle = async () => {
381
505
  const isConnected = statusEl.textContent === "Connected";
382
506
  setNote();
@@ -445,49 +569,48 @@ annotationStartButton.addEventListener("click", () => {
445
569
  if (!response.ok) {
446
570
  const message = response.error?.message ?? "Annotation start failed.";
447
571
  setAnnotationNote(message);
448
- setCopyEnabled(false);
572
+ setAnnotationActionsEnabled(false);
573
+ lastAnnotationPayload = null;
574
+ renderAnnotationItems(null);
449
575
  return;
450
576
  }
451
577
  setAnnotationNote("Annotation started. Switch to the tab to select elements.");
452
- setCopyEnabled(false);
578
+ setAnnotationActionsEnabled(false);
579
+ lastAnnotationPayload = null;
580
+ renderAnnotationItems(null);
453
581
  void refreshInjectionStatus();
454
582
  })().catch((error) => {
455
583
  const message = error instanceof Error ? error.message : "Annotation start failed.";
456
584
  setAnnotationNote(message);
457
- setCopyEnabled(false);
585
+ setAnnotationActionsEnabled(false);
586
+ lastAnnotationPayload = null;
587
+ renderAnnotationItems(null);
458
588
  });
459
589
  });
460
590
  annotationCopyButton.addEventListener("click", () => {
461
591
  (async () => {
462
592
  setAnnotationNote("Preparing annotation payload...");
463
- let response = await sendMessage({
464
- type: "annotation:getPayload",
465
- includeScreenshots: true
466
- });
467
- if (!response.payload) {
468
- response = await sendMessage({
469
- type: "annotation:getPayload",
470
- includeScreenshots: false
471
- });
472
- }
473
- if (!response.payload) {
474
- setAnnotationNote("No completed annotation payload available.");
475
- setCopyEnabled(false);
476
- return;
477
- }
478
- await copyTextToClipboard(JSON.stringify(response.payload, null, 2));
479
- if (response.warning) {
480
- setAnnotationNote(`Copied payload (${response.warning.replace(/\.$/, "")}).`);
481
- }
482
- else {
483
- setAnnotationNote("Copied annotation payload to clipboard.");
484
- }
485
- await refreshLastAnnotationMeta();
593
+ await copySelectedAnnotation(undefined, "Copied annotation payload to clipboard.");
486
594
  })().catch((error) => {
487
595
  const message = error instanceof Error ? error.message : "Copy failed.";
488
596
  setAnnotationNote(message);
489
597
  });
490
598
  });
599
+ annotationSendButton.addEventListener("click", () => {
600
+ (async () => {
601
+ setAnnotationNote("Sending annotation payload to agent inbox...");
602
+ await sendSelectedAnnotation(undefined, "popup_all", "Popup annotation payload", "Sent annotation payload to agent inbox.");
603
+ })().catch((error) => {
604
+ const message = error instanceof Error ? error.message : "Send failed.";
605
+ setAnnotationNote(message);
606
+ });
607
+ });
608
+ annotationRefreshButton.addEventListener("click", () => {
609
+ refreshLastAnnotationMeta().catch((error) => {
610
+ const message = error instanceof Error ? error.message : "Refresh failed.";
611
+ setAnnotationNote(message);
612
+ });
613
+ });
491
614
  autoPairInput.addEventListener("change", () => {
492
615
  const enabled = autoPairInput.checked;
493
616
  pairingTokenInput.disabled = !pairingEnabledInput.checked || enabled;
@@ -560,7 +683,8 @@ loadSettings().catch((error) => {
560
683
  });
561
684
  refreshLastAnnotationMeta().catch((error) => {
562
685
  logError("popup.annotation_meta", error, { code: "annotation_meta_failed" });
563
- setCopyEnabled(false);
686
+ setAnnotationActionsEnabled(false);
687
+ renderAnnotationItems(null);
564
688
  setAnnotationNote();
565
689
  });
566
690
  chrome.storage.onChanged.addListener((changes, areaName) => {
@@ -64,14 +64,47 @@ export class CDPRouter {
64
64
  }
65
65
  await this.safeDetach(debuggee);
66
66
  if (allowRetry && this.isStaleTabError(error)) {
67
+ const attemptedTabIds = new Set([tabId]);
68
+ let lastStaleError = error;
67
69
  const activeTabId = await this.tabManager.getActiveTabId();
68
- if (activeTabId && activeTabId !== tabId) {
69
- return await this.attachInternal(activeTabId, false);
70
+ if (activeTabId && !attemptedTabIds.has(activeTabId)) {
71
+ attemptedTabIds.add(activeTabId);
72
+ try {
73
+ return await this.attachInternal(activeTabId, false);
74
+ }
75
+ catch (candidateError) {
76
+ if (!this.isStaleTabError(candidateError)) {
77
+ throw candidateError;
78
+ }
79
+ lastStaleError = candidateError;
80
+ }
70
81
  }
71
82
  const fallbackTabId = await this.tabManager.getFirstHttpTabId();
72
- if (fallbackTabId && fallbackTabId !== tabId) {
73
- return await this.attachInternal(fallbackTabId, false);
83
+ if (fallbackTabId && !attemptedTabIds.has(fallbackTabId)) {
84
+ attemptedTabIds.add(fallbackTabId);
85
+ try {
86
+ return await this.attachInternal(fallbackTabId, false);
87
+ }
88
+ catch (candidateError) {
89
+ if (!this.isStaleTabError(candidateError)) {
90
+ throw candidateError;
91
+ }
92
+ lastStaleError = candidateError;
93
+ }
74
94
  }
95
+ try {
96
+ const createdTab = await this.tabManager.createTab("about:blank", true);
97
+ if (typeof createdTab.id === "number" && !attemptedTabIds.has(createdTab.id)) {
98
+ return await this.attachInternal(createdTab.id, false);
99
+ }
100
+ }
101
+ catch (candidateError) {
102
+ if (!this.isStaleTabError(candidateError)) {
103
+ throw candidateError;
104
+ }
105
+ lastStaleError = candidateError;
106
+ }
107
+ throw lastStaleError;
75
108
  }
76
109
  throw error;
77
110
  }
@@ -503,7 +536,23 @@ export class CDPRouter {
503
536
  return sessionId;
504
537
  }
505
538
  async sendCommand(debuggee, method, params) {
506
- return new Promise((resolve, reject) => {
539
+ try {
540
+ return await this.sendCommandOnce(debuggee, method, params);
541
+ }
542
+ catch (error) {
543
+ const hasChildSession = typeof debuggee.sessionId === "string";
544
+ if (!this.isStaleTabError(error) || hasChildSession) {
545
+ throw error;
546
+ }
547
+ const recovered = await this.recoverFromStaleTab(debuggee);
548
+ if (!recovered) {
549
+ throw error;
550
+ }
551
+ return await this.sendCommandOnce(recovered, method, params);
552
+ }
553
+ }
554
+ async sendCommandOnce(debuggee, method, params) {
555
+ return await new Promise((resolve, reject) => {
507
556
  chrome.debugger.sendCommand(debuggee, method, params, (result) => {
508
557
  const lastError = chrome.runtime.lastError;
509
558
  if (lastError) {
@@ -514,6 +563,22 @@ export class CDPRouter {
514
563
  });
515
564
  });
516
565
  }
566
+ async recoverFromStaleTab(debuggee) {
567
+ const staleTabId = typeof debuggee.tabId === "number" ? debuggee.tabId : null;
568
+ if (staleTabId === null) {
569
+ return null;
570
+ }
571
+ this.debuggees.delete(staleTabId);
572
+ this.detachTabState(staleTabId);
573
+ await this.safeDetach({ tabId: staleTabId });
574
+ try {
575
+ await this.attachInternal(staleTabId, true);
576
+ }
577
+ catch {
578
+ return null;
579
+ }
580
+ return this.getPrimaryDebuggee();
581
+ }
517
582
  isStaleTabError(error) {
518
583
  const message = error instanceof Error ? error.message : String(error);
519
584
  return message.includes("No tab with given id");
@@ -29,6 +29,8 @@ const logInfo = (message) => {
29
29
  const logWarn = (message) => {
30
30
  console.warn(`[opendevbrowser] ${message}`);
31
31
  };
32
+ const RECONNECT_INITIAL_DELAY_MS = 12_000;
33
+ const RECONNECT_MAX_DELAY_MS = 30_000;
32
34
  export class ConnectionManager {
33
35
  status = "disconnected";
34
36
  lastError = null;
@@ -41,7 +43,7 @@ export class ConnectionManager {
41
43
  shouldReconnect = false;
42
44
  reconnectTimer = null;
43
45
  reconnectAttempts = 0;
44
- reconnectDelayMs = 500;
46
+ reconnectDelayMs = RECONNECT_INITIAL_DELAY_MS;
45
47
  pairingToken = DEFAULT_PAIRING_TOKEN;
46
48
  pairingEnabled = DEFAULT_PAIRING_ENABLED;
47
49
  relayPort = DEFAULT_RELAY_PORT;
@@ -49,10 +51,11 @@ export class ConnectionManager {
49
51
  relayEpoch = null;
50
52
  relayConfirmedPort = null;
51
53
  relayNotice = null;
52
- maxReconnectDelayMs = 5000;
54
+ maxReconnectDelayMs = RECONNECT_MAX_DELAY_MS;
53
55
  connectPromise = null;
54
56
  annotationHandler = null;
55
57
  opsHandler = null;
58
+ canvasHandler = null;
56
59
  heartbeatTimer = null;
57
60
  heartbeatInFlight = false;
58
61
  heartbeatIntervalMs = 25_000;
@@ -89,6 +92,9 @@ export class ConnectionManager {
89
92
  onOpsMessage(handler) {
90
93
  this.opsHandler = handler;
91
94
  }
95
+ onCanvasMessage(handler) {
96
+ this.canvasHandler = handler;
97
+ }
92
98
  sendAnnotationResponse(response) {
93
99
  if (!this.relay)
94
100
  return;
@@ -119,6 +125,16 @@ export class ConnectionManager {
119
125
  logError("relay.send_ops_message", error, { code: "relay_send_failed" });
120
126
  }
121
127
  }
128
+ sendCanvasMessage(message) {
129
+ if (!this.relay)
130
+ return;
131
+ try {
132
+ this.relay.sendCanvasMessage(message);
133
+ }
134
+ catch (error) {
135
+ logError("relay.send_canvas_message", error, { code: "relay_send_failed" });
136
+ }
137
+ }
122
138
  getCdpRouter() {
123
139
  return this.cdp;
124
140
  }
@@ -368,6 +384,9 @@ export class ConnectionManager {
368
384
  onOpsMessage: (message) => {
369
385
  this.opsHandler?.(message);
370
386
  },
387
+ onCanvasMessage: (message) => {
388
+ this.canvasHandler?.(message);
389
+ },
371
390
  onClose: (detail) => {
372
391
  this.handleRelayClose(detail);
373
392
  }
@@ -405,7 +424,7 @@ export class ConnectionManager {
405
424
  this.setStatus("connected");
406
425
  this.startHeartbeat();
407
426
  this.reconnectAttempts = 0;
408
- this.reconnectDelayMs = 500;
427
+ this.reconnectDelayMs = RECONNECT_INITIAL_DELAY_MS;
409
428
  }
410
429
  catch (error) {
411
430
  const detail = error instanceof Error ? error.message : "Unknown error";
@@ -98,6 +98,9 @@ export class RelayClient {
98
98
  this.handlers.onOpsMessage?.(record);
99
99
  return;
100
100
  }
101
+ if (isCanvasEnvelope(record)) {
102
+ this.handlers.onCanvasMessage?.(record);
103
+ }
101
104
  });
102
105
  this.socket.addEventListener("close", (event) => {
103
106
  if (this.pendingHandshakeAckReject) {
@@ -181,6 +184,9 @@ export class RelayClient {
181
184
  sendOpsMessage(message) {
182
185
  this.send(message);
183
186
  }
187
+ sendCanvasMessage(message) {
188
+ this.send(message);
189
+ }
184
190
  async sendHealthCheck(timeoutMs = 1500) {
185
191
  return await this.sendPing(timeoutMs);
186
192
  }
@@ -272,3 +278,6 @@ const isValidPong = (value) => {
272
278
  const isOpsEnvelope = (value) => {
273
279
  return typeof value.type === "string" && value.type.startsWith("ops_");
274
280
  };
281
+ const isCanvasEnvelope = (value) => {
282
+ return typeof value.type === "string" && value.type.startsWith("canvas_");
283
+ };
@@ -16,33 +16,56 @@ export class TabManager {
16
16
  });
17
17
  }
18
18
  async waitForTabComplete(tabId, timeoutMs = 10000) {
19
- const existing = await this.getTab(tabId);
20
- if (existing?.status === "complete") {
19
+ const isComplete = async () => {
20
+ const current = await this.getTab(tabId);
21
+ return current?.status === "complete";
22
+ };
23
+ if (await isComplete()) {
21
24
  return;
22
25
  }
23
26
  await new Promise((resolve, reject) => {
24
27
  let settled = false;
25
- const timeoutId = setTimeout(() => {
28
+ let pollId = null;
29
+ const settle = (error) => {
26
30
  if (settled)
27
31
  return;
28
32
  settled = true;
33
+ clearTimeout(timeoutId);
34
+ if (pollId !== null) {
35
+ clearInterval(pollId);
36
+ }
29
37
  chrome.tabs.onUpdated.removeListener(listener);
30
- reject(new Error("Tab load timeout"));
38
+ if (error) {
39
+ reject(error);
40
+ return;
41
+ }
42
+ resolve();
43
+ };
44
+ const timeoutId = setTimeout(() => {
45
+ settle(new Error("Tab load timeout"));
31
46
  }, timeoutMs);
32
- const listener = (updatedId, changeInfo) => {
47
+ const listener = (updatedId, changeInfo, tab) => {
33
48
  if (updatedId !== tabId) {
34
49
  return;
35
50
  }
36
- if (changeInfo.status === "complete") {
37
- if (settled)
38
- return;
39
- settled = true;
40
- clearTimeout(timeoutId);
41
- chrome.tabs.onUpdated.removeListener(listener);
42
- resolve();
51
+ if (changeInfo.status === "complete" || tab?.status === "complete") {
52
+ settle();
43
53
  }
44
54
  };
45
55
  chrome.tabs.onUpdated.addListener(listener);
56
+ const poll = () => {
57
+ void isComplete()
58
+ .then((complete) => {
59
+ if (complete) {
60
+ settle();
61
+ }
62
+ })
63
+ .catch(() => {
64
+ // Ignore transient tab lookup failures and let the timeout decide.
65
+ });
66
+ };
67
+ pollId = setInterval(poll, Math.min(250, Math.max(50, Math.floor(timeoutMs / 20))));
68
+ poll();
46
69
  });
47
70
  }
48
71
  async closeTab(tabId) {
@@ -1,3 +1,5 @@
1
1
  export const OPS_PROTOCOL_VERSION = "1";
2
2
  export const MAX_OPS_PAYLOAD_BYTES = 12 * 1024 * 1024;
3
3
  export const MAX_SNAPSHOT_BYTES = 2 * 1024 * 1024;
4
+ export const CANVAS_PROTOCOL_VERSION = "1";
5
+ export const MAX_CANVAS_PAYLOAD_BYTES = 12 * 1024 * 1024;
Binary file
Binary file
Binary file
Binary file
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "OpenDevBrowser Relay",
4
- "version": "0.0.15",
4
+ "version": "0.0.17",
5
5
  "description": "Optional bridge to reuse existing Chrome tabs with OpenDevBrowser.",
6
6
  "permissions": [
7
7
  "debugger",
@@ -376,6 +376,51 @@
376
376
  gap: 10px;
377
377
  }
378
378
 
379
+ .annotation-list {
380
+ display: grid;
381
+ gap: 8px;
382
+ margin-top: 10px;
383
+ max-height: 180px;
384
+ overflow: auto;
385
+ }
386
+
387
+ .annotation-item {
388
+ display: grid;
389
+ gap: 8px;
390
+ padding: 10px;
391
+ border-radius: 12px;
392
+ border: 1px solid var(--stroke);
393
+ background: var(--panel-strong);
394
+ }
395
+
396
+ .annotation-item-summary {
397
+ font-size: 11px;
398
+ color: var(--text);
399
+ line-height: 1.4;
400
+ word-break: break-word;
401
+ }
402
+
403
+ .annotation-item-meta {
404
+ font-size: 10px;
405
+ color: var(--muted);
406
+ }
407
+
408
+ .annotation-item-actions {
409
+ display: grid;
410
+ grid-template-columns: repeat(2, minmax(0, 1fr));
411
+ gap: 8px;
412
+ }
413
+
414
+ .annotation-empty {
415
+ font-size: 10px;
416
+ color: var(--muted);
417
+ text-align: center;
418
+ padding: 12px;
419
+ border-radius: 12px;
420
+ border: 1px dashed var(--stroke);
421
+ background: rgba(255, 255, 255, 0.03);
422
+ }
423
+
379
424
  @media (prefers-reduced-motion: reduce) {
380
425
  * {
381
426
  transition: none !important;
@@ -503,6 +548,13 @@
503
548
  <button id="annotationStart" class="secondary">Annotate</button>
504
549
  <button id="annotationCopy" class="secondary" disabled>Copy payload</button>
505
550
  </div>
551
+ <div class="button-row">
552
+ <button id="annotationSend" class="secondary" disabled>Send to agent</button>
553
+ <button id="annotationRefresh" class="secondary">Refresh payload</button>
554
+ </div>
555
+ <div id="annotationItems" class="annotation-list">
556
+ <div class="annotation-empty">No annotation items available.</div>
557
+ </div>
506
558
  </section>
507
559
 
508
560
  <button id="toggle" class="primary">Connect</button>