opendevbrowser 0.0.16 → 0.0.18

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 (616) hide show
  1. package/README.md +201 -79
  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 +7 -1
  12. package/dist/browser/annotation-manager.d.ts.map +1 -1
  13. package/dist/browser/browser-manager.d.ts +153 -48
  14. package/dist/browser/browser-manager.d.ts.map +1 -1
  15. package/dist/browser/canvas-client.d.ts +54 -0
  16. package/dist/browser/canvas-client.d.ts.map +1 -0
  17. package/dist/browser/canvas-code-sync-manager.d.ts +87 -0
  18. package/dist/browser/canvas-code-sync-manager.d.ts.map +1 -0
  19. package/dist/browser/canvas-manager.d.ts +122 -0
  20. package/dist/browser/canvas-manager.d.ts.map +1 -0
  21. package/dist/browser/canvas-runtime-preview-bridge.d.ts +20 -0
  22. package/dist/browser/canvas-runtime-preview-bridge.d.ts.map +1 -0
  23. package/dist/browser/canvas-session-sync-manager.d.ts +21 -0
  24. package/dist/browser/canvas-session-sync-manager.d.ts.map +1 -0
  25. package/dist/browser/global-challenge-coordinator.d.ts +27 -0
  26. package/dist/browser/global-challenge-coordinator.d.ts.map +1 -0
  27. package/dist/browser/manager-types.d.ts +179 -1
  28. package/dist/browser/manager-types.d.ts.map +1 -1
  29. package/dist/browser/ops-browser-manager.d.ts +114 -4
  30. package/dist/browser/ops-browser-manager.d.ts.map +1 -1
  31. package/dist/browser/ops-client.d.ts +17 -1
  32. package/dist/browser/ops-client.d.ts.map +1 -1
  33. package/dist/browser/playwright-runtime.d.ts +4 -0
  34. package/dist/browser/playwright-runtime.d.ts.map +1 -0
  35. package/dist/browser/review-surface.d.ts +9 -0
  36. package/dist/browser/review-surface.d.ts.map +1 -0
  37. package/dist/browser/screencast-recorder.d.ts +57 -0
  38. package/dist/browser/screencast-recorder.d.ts.map +1 -0
  39. package/dist/browser/session-inspector.d.ts +71 -0
  40. package/dist/browser/session-inspector.d.ts.map +1 -0
  41. package/dist/browser/session-store.d.ts +5 -1
  42. package/dist/browser/session-store.d.ts.map +1 -1
  43. package/dist/browser/system-chrome-cookies.d.ts +46 -0
  44. package/dist/browser/system-chrome-cookies.d.ts.map +1 -0
  45. package/dist/browser/target-manager.d.ts +1 -0
  46. package/dist/browser/target-manager.d.ts.map +1 -1
  47. package/dist/cache/chrome-locator.d.ts.map +1 -1
  48. package/dist/cache/chrome-user-data.d.ts +17 -0
  49. package/dist/cache/chrome-user-data.d.ts.map +1 -0
  50. package/dist/canvas/adapter-plugins/loader.d.ts +13 -0
  51. package/dist/canvas/adapter-plugins/loader.d.ts.map +1 -0
  52. package/dist/canvas/adapter-plugins/manifest.d.ts +146 -0
  53. package/dist/canvas/adapter-plugins/manifest.d.ts.map +1 -0
  54. package/dist/canvas/adapter-plugins/types.d.ts +83 -0
  55. package/dist/canvas/adapter-plugins/types.d.ts.map +1 -0
  56. package/dist/canvas/adapter-plugins/validator.d.ts +10 -0
  57. package/dist/canvas/adapter-plugins/validator.d.ts.map +1 -0
  58. package/dist/canvas/code-sync/apply-tsx.d.ts +25 -0
  59. package/dist/canvas/code-sync/apply-tsx.d.ts.map +1 -0
  60. package/dist/canvas/code-sync/graph.d.ts +5 -0
  61. package/dist/canvas/code-sync/graph.d.ts.map +1 -0
  62. package/dist/canvas/code-sync/hash.d.ts +3 -0
  63. package/dist/canvas/code-sync/hash.d.ts.map +1 -0
  64. package/dist/canvas/code-sync/import.d.ts +19 -0
  65. package/dist/canvas/code-sync/import.d.ts.map +1 -0
  66. package/dist/canvas/code-sync/manifest.d.ts +6 -0
  67. package/dist/canvas/code-sync/manifest.d.ts.map +1 -0
  68. package/dist/canvas/code-sync/tsx-adapter.d.ts +8 -0
  69. package/dist/canvas/code-sync/tsx-adapter.d.ts.map +1 -0
  70. package/dist/canvas/code-sync/types.d.ts +244 -0
  71. package/dist/canvas/code-sync/types.d.ts.map +1 -0
  72. package/dist/canvas/code-sync/write.d.ts +9 -0
  73. package/dist/canvas/code-sync/write.d.ts.map +1 -0
  74. package/dist/canvas/document-store.d.ts +91 -0
  75. package/dist/canvas/document-store.d.ts.map +1 -0
  76. package/dist/canvas/export.d.ts +12 -0
  77. package/dist/canvas/export.d.ts.map +1 -0
  78. package/dist/canvas/framework-adapters/custom-elements-v1.d.ts +3 -0
  79. package/dist/canvas/framework-adapters/custom-elements-v1.d.ts.map +1 -0
  80. package/dist/canvas/framework-adapters/html-static-v1.d.ts +3 -0
  81. package/dist/canvas/framework-adapters/html-static-v1.d.ts.map +1 -0
  82. package/dist/canvas/framework-adapters/markup.d.ts +9 -0
  83. package/dist/canvas/framework-adapters/markup.d.ts.map +1 -0
  84. package/dist/canvas/framework-adapters/react-tsx-v2.d.ts +3 -0
  85. package/dist/canvas/framework-adapters/react-tsx-v2.d.ts.map +1 -0
  86. package/dist/canvas/framework-adapters/registry.d.ts +12 -0
  87. package/dist/canvas/framework-adapters/registry.d.ts.map +1 -0
  88. package/dist/canvas/framework-adapters/svelte-sfc-v1.d.ts +3 -0
  89. package/dist/canvas/framework-adapters/svelte-sfc-v1.d.ts.map +1 -0
  90. package/dist/canvas/framework-adapters/types.d.ts +57 -0
  91. package/dist/canvas/framework-adapters/types.d.ts.map +1 -0
  92. package/dist/canvas/framework-adapters/vue-sfc-v1.d.ts +3 -0
  93. package/dist/canvas/framework-adapters/vue-sfc-v1.d.ts.map +1 -0
  94. package/dist/canvas/kits/catalog.d.ts +5 -0
  95. package/dist/canvas/kits/catalog.d.ts.map +1 -0
  96. package/dist/canvas/library-adapters/react/index.d.ts +3 -0
  97. package/dist/canvas/library-adapters/react/index.d.ts.map +1 -0
  98. package/dist/canvas/library-adapters/registry.d.ts +11 -0
  99. package/dist/canvas/library-adapters/registry.d.ts.map +1 -0
  100. package/dist/canvas/library-adapters/types.d.ts +43 -0
  101. package/dist/canvas/library-adapters/types.d.ts.map +1 -0
  102. package/dist/canvas/repo-store.d.ts +12 -0
  103. package/dist/canvas/repo-store.d.ts.map +1 -0
  104. package/dist/canvas/starters/catalog.d.ts +34 -0
  105. package/dist/canvas/starters/catalog.d.ts.map +1 -0
  106. package/dist/canvas/surface-palette.d.ts +15 -0
  107. package/dist/canvas/surface-palette.d.ts.map +1 -0
  108. package/dist/canvas/token-references.d.ts +22 -0
  109. package/dist/canvas/token-references.d.ts.map +1 -0
  110. package/dist/canvas/types.d.ts +594 -0
  111. package/dist/canvas/types.d.ts.map +1 -0
  112. package/dist/canvas-runtime-preview-bridge-HBEHXM4T.js +7 -0
  113. package/dist/canvas-runtime-preview-bridge-HBEHXM4T.js.map +1 -0
  114. package/dist/challenges/action-loop.d.ts +13 -0
  115. package/dist/challenges/action-loop.d.ts.map +1 -0
  116. package/dist/challenges/capability-matrix.d.ts +3 -0
  117. package/dist/challenges/capability-matrix.d.ts.map +1 -0
  118. package/dist/challenges/evidence-bundle.d.ts +48 -0
  119. package/dist/challenges/evidence-bundle.d.ts.map +1 -0
  120. package/dist/challenges/governed-adapter-gateway.d.ts +4 -0
  121. package/dist/challenges/governed-adapter-gateway.d.ts.map +1 -0
  122. package/dist/challenges/human-yield-gate.d.ts +20 -0
  123. package/dist/challenges/human-yield-gate.d.ts.map +1 -0
  124. package/dist/challenges/index.d.ts +15 -0
  125. package/dist/challenges/index.d.ts.map +1 -0
  126. package/dist/challenges/interpreter.d.ts +3 -0
  127. package/dist/challenges/interpreter.d.ts.map +1 -0
  128. package/dist/challenges/optional-computer-use-bridge.d.ts +9 -0
  129. package/dist/challenges/optional-computer-use-bridge.d.ts.map +1 -0
  130. package/dist/challenges/orchestrator.d.ts +32 -0
  131. package/dist/challenges/orchestrator.d.ts.map +1 -0
  132. package/dist/challenges/outcome-recorder.d.ts +8 -0
  133. package/dist/challenges/outcome-recorder.d.ts.map +1 -0
  134. package/dist/challenges/owned-environment-lane.d.ts +3 -0
  135. package/dist/challenges/owned-environment-lane.d.ts.map +1 -0
  136. package/dist/challenges/policy-gate.d.ts +9 -0
  137. package/dist/challenges/policy-gate.d.ts.map +1 -0
  138. package/dist/challenges/sanctioned-identity-lane.d.ts +3 -0
  139. package/dist/challenges/sanctioned-identity-lane.d.ts.map +1 -0
  140. package/dist/challenges/service-adapter-lane.d.ts +3 -0
  141. package/dist/challenges/service-adapter-lane.d.ts.map +1 -0
  142. package/dist/challenges/strategy-selector.d.ts +10 -0
  143. package/dist/challenges/strategy-selector.d.ts.map +1 -0
  144. package/dist/challenges/types.d.ts +277 -0
  145. package/dist/challenges/types.d.ts.map +1 -0
  146. package/dist/challenges/verification-gate.d.ts +15 -0
  147. package/dist/challenges/verification-gate.d.ts.map +1 -0
  148. package/dist/chunk-5FZQJRBQ.js +15256 -0
  149. package/dist/chunk-5FZQJRBQ.js.map +1 -0
  150. package/dist/{chunk-7W3SPXIB.js → chunk-FUSXMW3G.js} +4 -1
  151. package/dist/chunk-L57D35TB.js +33513 -0
  152. package/dist/chunk-L57D35TB.js.map +1 -0
  153. package/dist/chunk-TBUCZX4A.js +34 -0
  154. package/dist/chunk-TBUCZX4A.js.map +1 -0
  155. package/dist/chunk-Y2KL55OG.js +59 -0
  156. package/dist/chunk-Y2KL55OG.js.map +1 -0
  157. package/dist/chunk-YBQECXZX.js +409 -0
  158. package/dist/chunk-YBQECXZX.js.map +1 -0
  159. package/dist/cli/args.d.ts +4 -4
  160. package/dist/cli/args.d.ts.map +1 -1
  161. package/dist/cli/commands/annotate.d.ts +11 -0
  162. package/dist/cli/commands/annotate.d.ts.map +1 -1
  163. package/dist/cli/commands/artifacts.d.ts.map +1 -1
  164. package/dist/cli/commands/canvas.d.ts +45 -0
  165. package/dist/cli/commands/canvas.d.ts.map +1 -0
  166. package/dist/cli/commands/daemon.d.ts +7 -0
  167. package/dist/cli/commands/daemon.d.ts.map +1 -1
  168. package/dist/cli/commands/desktop/accessibility-snapshot.d.ts +3 -0
  169. package/dist/cli/commands/desktop/accessibility-snapshot.d.ts.map +1 -0
  170. package/dist/cli/commands/desktop/active-window.d.ts +3 -0
  171. package/dist/cli/commands/desktop/active-window.d.ts.map +1 -0
  172. package/dist/cli/commands/desktop/capture-desktop.d.ts +3 -0
  173. package/dist/cli/commands/desktop/capture-desktop.d.ts.map +1 -0
  174. package/dist/cli/commands/desktop/capture-window.d.ts +3 -0
  175. package/dist/cli/commands/desktop/capture-window.d.ts.map +1 -0
  176. package/dist/cli/commands/desktop/shared.d.ts +19 -0
  177. package/dist/cli/commands/desktop/shared.d.ts.map +1 -0
  178. package/dist/cli/commands/desktop/status.d.ts +3 -0
  179. package/dist/cli/commands/desktop/status.d.ts.map +1 -0
  180. package/dist/cli/commands/desktop/windows.d.ts +3 -0
  181. package/dist/cli/commands/desktop/windows.d.ts.map +1 -0
  182. package/dist/cli/commands/devtools/dialog.d.ts +19 -0
  183. package/dist/cli/commands/devtools/dialog.d.ts.map +1 -0
  184. package/dist/cli/commands/devtools/perf.d.ts.map +1 -1
  185. package/dist/cli/commands/devtools/screencast-start.d.ts +20 -0
  186. package/dist/cli/commands/devtools/screencast-start.d.ts.map +1 -0
  187. package/dist/cli/commands/devtools/screencast-stop.d.ts +17 -0
  188. package/dist/cli/commands/devtools/screencast-stop.d.ts.map +1 -0
  189. package/dist/cli/commands/devtools/screenshot.d.ts +3 -0
  190. package/dist/cli/commands/devtools/screenshot.d.ts.map +1 -1
  191. package/dist/cli/commands/dom/attr.d.ts.map +1 -1
  192. package/dist/cli/commands/dom/checked.d.ts.map +1 -1
  193. package/dist/cli/commands/dom/enabled.d.ts.map +1 -1
  194. package/dist/cli/commands/dom/html.d.ts.map +1 -1
  195. package/dist/cli/commands/dom/text.d.ts.map +1 -1
  196. package/dist/cli/commands/dom/value.d.ts.map +1 -1
  197. package/dist/cli/commands/dom/visible.d.ts.map +1 -1
  198. package/dist/cli/commands/export/clone-component.d.ts +9 -0
  199. package/dist/cli/commands/export/clone-component.d.ts.map +1 -1
  200. package/dist/cli/commands/export/clone-page.d.ts +8 -0
  201. package/dist/cli/commands/export/clone-page.d.ts.map +1 -1
  202. package/dist/cli/commands/interact/check.d.ts.map +1 -1
  203. package/dist/cli/commands/interact/click.d.ts.map +1 -1
  204. package/dist/cli/commands/interact/hover.d.ts.map +1 -1
  205. package/dist/cli/commands/interact/pointer-down.d.ts +7 -0
  206. package/dist/cli/commands/interact/pointer-down.d.ts.map +1 -0
  207. package/dist/cli/commands/interact/pointer-drag.d.ts +7 -0
  208. package/dist/cli/commands/interact/pointer-drag.d.ts.map +1 -0
  209. package/dist/cli/commands/interact/pointer-move.d.ts +7 -0
  210. package/dist/cli/commands/interact/pointer-move.d.ts.map +1 -0
  211. package/dist/cli/commands/interact/pointer-shared.d.ts +6 -0
  212. package/dist/cli/commands/interact/pointer-shared.d.ts.map +1 -0
  213. package/dist/cli/commands/interact/pointer-up.d.ts +7 -0
  214. package/dist/cli/commands/interact/pointer-up.d.ts.map +1 -0
  215. package/dist/cli/commands/interact/press.d.ts.map +1 -1
  216. package/dist/cli/commands/interact/scroll-into-view.d.ts.map +1 -1
  217. package/dist/cli/commands/interact/scroll.d.ts.map +1 -1
  218. package/dist/cli/commands/interact/select.d.ts.map +1 -1
  219. package/dist/cli/commands/interact/type.d.ts.map +1 -1
  220. package/dist/cli/commands/interact/uncheck.d.ts.map +1 -1
  221. package/dist/cli/commands/interact/upload.d.ts +18 -0
  222. package/dist/cli/commands/interact/upload.d.ts.map +1 -0
  223. package/dist/cli/commands/macro-resolve.d.ts +2 -0
  224. package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
  225. package/dist/cli/commands/native.d.ts +22 -8
  226. package/dist/cli/commands/native.d.ts.map +1 -1
  227. package/dist/cli/commands/nav/goto.d.ts.map +1 -1
  228. package/dist/cli/commands/nav/review.d.ts +7 -0
  229. package/dist/cli/commands/nav/review.d.ts.map +1 -0
  230. package/dist/cli/commands/nav/snapshot.d.ts.map +1 -1
  231. package/dist/cli/commands/nav/wait.d.ts.map +1 -1
  232. package/dist/cli/commands/pages/open.d.ts.map +1 -1
  233. package/dist/cli/commands/product-video.d.ts +2 -0
  234. package/dist/cli/commands/product-video.d.ts.map +1 -1
  235. package/dist/cli/commands/research.d.ts +3 -0
  236. package/dist/cli/commands/research.d.ts.map +1 -1
  237. package/dist/cli/commands/run.d.ts +14 -0
  238. package/dist/cli/commands/run.d.ts.map +1 -1
  239. package/dist/cli/commands/serve.d.ts +1 -21
  240. package/dist/cli/commands/serve.d.ts.map +1 -1
  241. package/dist/cli/commands/session/connect.d.ts.map +1 -1
  242. package/dist/cli/commands/session/disconnect.d.ts.map +1 -1
  243. package/dist/cli/commands/session/inspector.d.ts +21 -0
  244. package/dist/cli/commands/session/inspector.d.ts.map +1 -0
  245. package/dist/cli/commands/session/launch.d.ts.map +1 -1
  246. package/dist/cli/commands/shopping.d.ts +5 -0
  247. package/dist/cli/commands/shopping.d.ts.map +1 -1
  248. package/dist/cli/commands/status.d.ts +2 -9
  249. package/dist/cli/commands/status.d.ts.map +1 -1
  250. package/dist/cli/commands/targets/new.d.ts.map +1 -1
  251. package/dist/cli/daemon-autostart.d.ts +11 -0
  252. package/dist/cli/daemon-autostart.d.ts.map +1 -1
  253. package/dist/cli/daemon-client.d.ts +3 -0
  254. package/dist/cli/daemon-client.d.ts.map +1 -1
  255. package/dist/cli/daemon-commands.d.ts.map +1 -1
  256. package/dist/cli/daemon-state.d.ts +16 -0
  257. package/dist/cli/daemon-state.d.ts.map +1 -1
  258. package/dist/cli/daemon-status.d.ts +7 -2
  259. package/dist/cli/daemon-status.d.ts.map +1 -1
  260. package/dist/cli/daemon.d.ts +1 -0
  261. package/dist/cli/daemon.d.ts.map +1 -1
  262. package/dist/cli/help.d.ts +19 -3
  263. package/dist/cli/help.d.ts.map +1 -1
  264. package/dist/cli/index.js +2927 -932
  265. package/dist/cli/index.js.map +1 -1
  266. package/dist/cli/install-autostart-output.d.ts +6 -0
  267. package/dist/cli/install-autostart-output.d.ts.map +1 -0
  268. package/dist/cli/install-autostart-reconciliation.d.ts +23 -0
  269. package/dist/cli/install-autostart-reconciliation.d.ts.map +1 -0
  270. package/dist/cli/installers/skills.d.ts +42 -6
  271. package/dist/cli/installers/skills.d.ts.map +1 -1
  272. package/dist/cli/output.d.ts +3 -0
  273. package/dist/cli/output.d.ts.map +1 -1
  274. package/dist/cli/remote-canvas-manager.d.ts +8 -0
  275. package/dist/cli/remote-canvas-manager.d.ts.map +1 -0
  276. package/dist/cli/remote-desktop-runtime.d.ts +15 -0
  277. package/dist/cli/remote-desktop-runtime.d.ts.map +1 -0
  278. package/dist/cli/remote-manager.d.ts +27 -3
  279. package/dist/cli/remote-manager.d.ts.map +1 -1
  280. package/dist/cli/remote-relay.d.ts +2 -0
  281. package/dist/cli/remote-relay.d.ts.map +1 -1
  282. package/dist/cli/transport-timeouts.d.ts +8 -0
  283. package/dist/cli/transport-timeouts.d.ts.map +1 -0
  284. package/dist/cli/utils/http.d.ts +9 -0
  285. package/dist/cli/utils/http.d.ts.map +1 -1
  286. package/dist/cli/utils/parse.d.ts +3 -0
  287. package/dist/cli/utils/parse.d.ts.map +1 -1
  288. package/dist/cli/utils/skills.d.ts +1 -2
  289. package/dist/cli/utils/skills.d.ts.map +1 -1
  290. package/dist/cli/utils/workflow-message.d.ts +2 -0
  291. package/dist/cli/utils/workflow-message.d.ts.map +1 -0
  292. package/dist/config.d.ts +47 -0
  293. package/dist/config.d.ts.map +1 -1
  294. package/dist/core/bootstrap.d.ts.map +1 -1
  295. package/dist/core/index.d.ts +1 -0
  296. package/dist/core/index.d.ts.map +1 -1
  297. package/dist/core/logging.d.ts +3 -1
  298. package/dist/core/logging.d.ts.map +1 -1
  299. package/dist/core/runtime-assemblies.d.ts +22 -0
  300. package/dist/core/runtime-assemblies.d.ts.map +1 -0
  301. package/dist/core/types.d.ts +17 -0
  302. package/dist/core/types.d.ts.map +1 -1
  303. package/dist/desktop/audit.d.ts +37 -0
  304. package/dist/desktop/audit.d.ts.map +1 -0
  305. package/dist/desktop/errors.d.ts +7 -0
  306. package/dist/desktop/errors.d.ts.map +1 -0
  307. package/dist/desktop/index.d.ts +6 -0
  308. package/dist/desktop/index.d.ts.map +1 -0
  309. package/dist/desktop/runtime.d.ts +26 -0
  310. package/dist/desktop/runtime.d.ts.map +1 -0
  311. package/dist/desktop/types.d.ts +76 -0
  312. package/dist/desktop/types.d.ts.map +1 -0
  313. package/dist/extension-extractor.d.ts +6 -0
  314. package/dist/extension-extractor.d.ts.map +1 -1
  315. package/dist/fs-UMRKOBNN.js +7 -0
  316. package/dist/fs-UMRKOBNN.js.map +1 -0
  317. package/dist/index.d.ts.map +1 -1
  318. package/dist/index.js +1221 -460
  319. package/dist/index.js.map +1 -1
  320. package/dist/integrations/figma/assets.d.ts +13 -0
  321. package/dist/integrations/figma/assets.d.ts.map +1 -0
  322. package/dist/integrations/figma/auth.d.ts +3 -0
  323. package/dist/integrations/figma/auth.d.ts.map +1 -0
  324. package/dist/integrations/figma/client.d.ts +42 -0
  325. package/dist/integrations/figma/client.d.ts.map +1 -0
  326. package/dist/integrations/figma/mappers.d.ts +23 -0
  327. package/dist/integrations/figma/mappers.d.ts.map +1 -0
  328. package/dist/integrations/figma/normalize.d.ts +99 -0
  329. package/dist/integrations/figma/normalize.d.ts.map +1 -0
  330. package/dist/integrations/figma/url.d.ts +17 -0
  331. package/dist/integrations/figma/url.d.ts.map +1 -0
  332. package/dist/integrations/figma/variables.d.ts +21 -0
  333. package/dist/integrations/figma/variables.d.ts.map +1 -0
  334. package/dist/macros/execute-runtime.d.ts +19 -0
  335. package/dist/macros/execute-runtime.d.ts.map +1 -0
  336. package/dist/macros/execute.d.ts +3 -1
  337. package/dist/macros/execute.d.ts.map +1 -1
  338. package/dist/{macros-NUBRM44Y.js → macros-ND2M7LWU.js} +2 -2
  339. package/dist/opendevbrowser.d.ts.map +1 -1
  340. package/dist/opendevbrowser.js +1221 -460
  341. package/dist/opendevbrowser.js.map +1 -1
  342. package/dist/providers/blocker.d.ts.map +1 -1
  343. package/dist/providers/browser-fallback.d.ts +30 -0
  344. package/dist/providers/browser-fallback.d.ts.map +1 -0
  345. package/dist/providers/constraint.d.ts +45 -0
  346. package/dist/providers/constraint.d.ts.map +1 -0
  347. package/dist/providers/index.d.ts +11 -2
  348. package/dist/providers/index.d.ts.map +1 -1
  349. package/dist/providers/policy.d.ts.map +1 -1
  350. package/dist/providers/product-video-compiler.d.ts +92 -0
  351. package/dist/providers/product-video-compiler.d.ts.map +1 -0
  352. package/dist/providers/registry.d.ts +37 -1
  353. package/dist/providers/registry.d.ts.map +1 -1
  354. package/dist/providers/renderer.d.ts.map +1 -1
  355. package/dist/providers/research-compiler.d.ts +64 -0
  356. package/dist/providers/research-compiler.d.ts.map +1 -0
  357. package/dist/providers/research-executor.d.ts +27 -0
  358. package/dist/providers/research-executor.d.ts.map +1 -0
  359. package/dist/providers/runtime-bundle.d.ts +26 -0
  360. package/dist/providers/runtime-bundle.d.ts.map +1 -0
  361. package/dist/providers/runtime-factory.d.ts +6 -1
  362. package/dist/providers/runtime-factory.d.ts.map +1 -1
  363. package/dist/providers/runtime-policy.d.ts +24 -0
  364. package/dist/providers/runtime-policy.d.ts.map +1 -0
  365. package/dist/providers/shared/anti-bot-policy.d.ts +3 -2
  366. package/dist/providers/shared/anti-bot-policy.d.ts.map +1 -1
  367. package/dist/providers/shopping/index.d.ts +11 -1
  368. package/dist/providers/shopping/index.d.ts.map +1 -1
  369. package/dist/providers/shopping-compiler.d.ts +51 -0
  370. package/dist/providers/shopping-compiler.d.ts.map +1 -0
  371. package/dist/providers/shopping-executor.d.ts +18 -0
  372. package/dist/providers/shopping-executor.d.ts.map +1 -0
  373. package/dist/providers/shopping-postprocess.d.ts +46 -0
  374. package/dist/providers/shopping-postprocess.d.ts.map +1 -0
  375. package/dist/providers/shopping-workflow.d.ts +33 -0
  376. package/dist/providers/shopping-workflow.d.ts.map +1 -0
  377. package/dist/providers/social/platform.d.ts +2 -1
  378. package/dist/providers/social/platform.d.ts.map +1 -1
  379. package/dist/providers/social/search-quality.d.ts +16 -0
  380. package/dist/providers/social/search-quality.d.ts.map +1 -0
  381. package/dist/providers/social/youtube-resolver.d.ts +2 -1
  382. package/dist/providers/social/youtube-resolver.d.ts.map +1 -1
  383. package/dist/providers/social/youtube.d.ts.map +1 -1
  384. package/dist/providers/types.d.ts +116 -4
  385. package/dist/providers/types.d.ts.map +1 -1
  386. package/dist/providers/web/crawl-worker.d.ts.map +1 -1
  387. package/dist/providers/web/extract.d.ts +16 -0
  388. package/dist/providers/web/extract.d.ts.map +1 -1
  389. package/dist/providers/web/index.d.ts.map +1 -1
  390. package/dist/providers/workflow-contracts.d.ts +53 -0
  391. package/dist/providers/workflow-contracts.d.ts.map +1 -0
  392. package/dist/providers/workflows.d.ts +30 -6
  393. package/dist/providers/workflows.d.ts.map +1 -1
  394. package/dist/providers-G36AM3Z2.js +121 -0
  395. package/dist/providers-G36AM3Z2.js.map +1 -0
  396. package/dist/public-surface/generated-manifest.d.ts +1168 -0
  397. package/dist/public-surface/generated-manifest.d.ts.map +1 -0
  398. package/dist/public-surface/source.d.ts +437 -0
  399. package/dist/public-surface/source.d.ts.map +1 -0
  400. package/dist/relay/protocol.d.ts +108 -4
  401. package/dist/relay/protocol.d.ts.map +1 -1
  402. package/dist/relay/relay-endpoints.d.ts +21 -0
  403. package/dist/relay/relay-endpoints.d.ts.map +1 -1
  404. package/dist/relay/relay-server.d.ts +32 -1
  405. package/dist/relay/relay-server.d.ts.map +1 -1
  406. package/dist/relay/relay-types.d.ts +3 -0
  407. package/dist/relay/relay-types.d.ts.map +1 -1
  408. package/dist/skills/bundled-skill-directories.d.ts +8 -0
  409. package/dist/skills/bundled-skill-directories.d.ts.map +1 -0
  410. package/dist/skills/skill-loader.d.ts +9 -1
  411. package/dist/skills/skill-loader.d.ts.map +1 -1
  412. package/dist/skills/skill-loader.js +7 -0
  413. package/dist/skills/skill-loader.js.map +1 -0
  414. package/dist/skills/skill-nudge.d.ts.map +1 -1
  415. package/dist/skills/types.d.ts +31 -0
  416. package/dist/skills/types.d.ts.map +1 -1
  417. package/dist/snapshot/ops-snapshot.d.ts +1 -1
  418. package/dist/snapshot/ops-snapshot.d.ts.map +1 -1
  419. package/dist/snapshot/refs.d.ts +6 -1
  420. package/dist/snapshot/refs.d.ts.map +1 -1
  421. package/dist/snapshot/snapshotter.d.ts.map +1 -1
  422. package/dist/tools/annotate.d.ts.map +1 -1
  423. package/dist/tools/canvas.d.ts +4 -0
  424. package/dist/tools/canvas.d.ts.map +1 -0
  425. package/dist/tools/check.d.ts.map +1 -1
  426. package/dist/tools/click.d.ts.map +1 -1
  427. package/dist/tools/clone_component.d.ts.map +1 -1
  428. package/dist/tools/clone_page.d.ts.map +1 -1
  429. package/dist/tools/connect.d.ts.map +1 -1
  430. package/dist/tools/deps.d.ts +6 -0
  431. package/dist/tools/deps.d.ts.map +1 -1
  432. package/dist/tools/desktop-shared.d.ts +6 -0
  433. package/dist/tools/desktop-shared.d.ts.map +1 -0
  434. package/dist/tools/desktop_accessibility_snapshot.d.ts +4 -0
  435. package/dist/tools/desktop_accessibility_snapshot.d.ts.map +1 -0
  436. package/dist/tools/desktop_active_window.d.ts +4 -0
  437. package/dist/tools/desktop_active_window.d.ts.map +1 -0
  438. package/dist/tools/desktop_capture_desktop.d.ts +4 -0
  439. package/dist/tools/desktop_capture_desktop.d.ts.map +1 -0
  440. package/dist/tools/desktop_capture_window.d.ts +4 -0
  441. package/dist/tools/desktop_capture_window.d.ts.map +1 -0
  442. package/dist/tools/desktop_status.d.ts +4 -0
  443. package/dist/tools/desktop_status.d.ts.map +1 -0
  444. package/dist/tools/desktop_windows.d.ts +4 -0
  445. package/dist/tools/desktop_windows.d.ts.map +1 -0
  446. package/dist/tools/dialog.d.ts +4 -0
  447. package/dist/tools/dialog.d.ts.map +1 -0
  448. package/dist/tools/dom_get_html.d.ts.map +1 -1
  449. package/dist/tools/dom_get_text.d.ts.map +1 -1
  450. package/dist/tools/get_attr.d.ts.map +1 -1
  451. package/dist/tools/get_value.d.ts.map +1 -1
  452. package/dist/tools/goto.d.ts.map +1 -1
  453. package/dist/tools/hover.d.ts.map +1 -1
  454. package/dist/tools/index.d.ts +3 -0
  455. package/dist/tools/index.d.ts.map +1 -1
  456. package/dist/tools/is_checked.d.ts.map +1 -1
  457. package/dist/tools/is_enabled.d.ts.map +1 -1
  458. package/dist/tools/is_visible.d.ts.map +1 -1
  459. package/dist/tools/launch.d.ts.map +1 -1
  460. package/dist/tools/macro_resolve.d.ts.map +1 -1
  461. package/dist/tools/perf.d.ts.map +1 -1
  462. package/dist/tools/pointer_down.d.ts +4 -0
  463. package/dist/tools/pointer_down.d.ts.map +1 -0
  464. package/dist/tools/pointer_drag.d.ts +4 -0
  465. package/dist/tools/pointer_drag.d.ts.map +1 -0
  466. package/dist/tools/pointer_move.d.ts +4 -0
  467. package/dist/tools/pointer_move.d.ts.map +1 -0
  468. package/dist/tools/pointer_up.d.ts +4 -0
  469. package/dist/tools/pointer_up.d.ts.map +1 -0
  470. package/dist/tools/press.d.ts.map +1 -1
  471. package/dist/tools/product_video_run.d.ts.map +1 -1
  472. package/dist/tools/prompting_guide.d.ts.map +1 -1
  473. package/dist/tools/research_run.d.ts.map +1 -1
  474. package/dist/tools/response.d.ts +4 -1
  475. package/dist/tools/response.d.ts.map +1 -1
  476. package/dist/tools/review.d.ts +4 -0
  477. package/dist/tools/review.d.ts.map +1 -0
  478. package/dist/tools/screencast_start.d.ts +4 -0
  479. package/dist/tools/screencast_start.d.ts.map +1 -0
  480. package/dist/tools/screencast_stop.d.ts +4 -0
  481. package/dist/tools/screencast_stop.d.ts.map +1 -0
  482. package/dist/tools/screenshot.d.ts.map +1 -1
  483. package/dist/tools/scroll.d.ts.map +1 -1
  484. package/dist/tools/scroll_into_view.d.ts.map +1 -1
  485. package/dist/tools/select.d.ts.map +1 -1
  486. package/dist/tools/session_inspector.d.ts +4 -0
  487. package/dist/tools/session_inspector.d.ts.map +1 -0
  488. package/dist/tools/shopping_run.d.ts.map +1 -1
  489. package/dist/tools/skill_list.d.ts.map +1 -1
  490. package/dist/tools/skill_load.d.ts.map +1 -1
  491. package/dist/tools/snapshot.d.ts.map +1 -1
  492. package/dist/tools/type.d.ts.map +1 -1
  493. package/dist/tools/uncheck.d.ts.map +1 -1
  494. package/dist/tools/upload.d.ts +4 -0
  495. package/dist/tools/upload.d.ts.map +1 -0
  496. package/dist/tools/wait.d.ts.map +1 -1
  497. package/dist/tools/workflow-runtime.d.ts +4 -2
  498. package/dist/tools/workflow-runtime.d.ts.map +1 -1
  499. package/dist/utils/package-assets.d.ts +4 -0
  500. package/dist/utils/package-assets.d.ts.map +1 -0
  501. package/extension/canvas.html +1006 -0
  502. package/extension/dist/annotate-content.css +15 -6
  503. package/extension/dist/annotate-content.js +175 -35
  504. package/extension/dist/annotation-payload.js +199 -0
  505. package/extension/dist/background.js +544 -69
  506. package/extension/dist/canvas/canvas-runtime.js +1490 -0
  507. package/extension/dist/canvas/model.js +341 -0
  508. package/extension/dist/canvas/viewport-fit.js +67 -0
  509. package/extension/dist/canvas-page.js +3609 -0
  510. package/extension/dist/ops/dom-bridge.js +255 -3
  511. package/extension/dist/ops/ops-runtime.js +3324 -301
  512. package/extension/dist/ops/ops-session-store.js +97 -112
  513. package/extension/dist/ops/snapshot-builder.js +2 -2
  514. package/extension/dist/ops/snapshot-shared.js +2 -2
  515. package/extension/dist/ops/target-session-coordinator.js +159 -0
  516. package/extension/dist/popup.js +201 -42
  517. package/extension/dist/services/CDPRouter.js +1567 -63
  518. package/extension/dist/services/ConnectionManager.js +453 -78
  519. package/extension/dist/services/RelayClient.js +79 -30
  520. package/extension/dist/services/TabManager.js +118 -22
  521. package/extension/dist/services/TargetSessionMap.js +127 -3
  522. package/extension/dist/services/attach-errors.js +20 -0
  523. package/extension/dist/services/cdp-router-commands.js +135 -8
  524. package/extension/dist/services/url-restrictions.js +9 -13
  525. package/extension/dist/types.js +2 -0
  526. package/extension/manifest.json +2 -2
  527. package/extension/popup.html +59 -6
  528. package/package.json +19 -9
  529. package/skills/AGENTS.md +8 -4
  530. package/skills/opendevbrowser-best-practices/SKILL.md +183 -6
  531. package/skills/opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md +1 -0
  532. package/skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md +141 -0
  533. package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +129 -19
  534. package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +9 -2
  535. package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +6 -0
  536. package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +58 -0
  537. package/skills/opendevbrowser-best-practices/assets/templates/canvas-blocker-checklist.json +70 -0
  538. package/skills/opendevbrowser-best-practices/assets/templates/canvas-feedback-eval.json +73 -0
  539. package/skills/opendevbrowser-best-practices/assets/templates/canvas-generation-plan.v1.json +67 -0
  540. package/skills/opendevbrowser-best-practices/assets/templates/canvas-handshake-example.json +126 -0
  541. package/skills/opendevbrowser-best-practices/assets/templates/robustness-checklist.json +57 -0
  542. package/skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json +674 -0
  543. package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +12 -3
  544. package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +107 -12
  545. package/skills/opendevbrowser-best-practices/scripts/resolve-odb-cli.sh +100 -0
  546. package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +83 -1
  547. package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +365 -84
  548. package/skills/opendevbrowser-best-practices/scripts/validator-fixture-cli.sh +208 -0
  549. package/skills/opendevbrowser-continuity-ledger/SKILL.md +14 -1
  550. package/skills/opendevbrowser-continuity-ledger/scripts/validate-skill-assets.sh +61 -0
  551. package/skills/opendevbrowser-data-extraction/SKILL.md +6 -0
  552. package/skills/opendevbrowser-data-extraction/scripts/validate-skill-assets.sh +112 -0
  553. package/skills/opendevbrowser-design-agent/SKILL.md +275 -0
  554. package/skills/opendevbrowser-design-agent/artifacts/app-shell-and-state-wiring.md +84 -0
  555. package/skills/opendevbrowser-design-agent/artifacts/async-search-state-ownership.md +58 -0
  556. package/skills/opendevbrowser-design-agent/artifacts/component-pattern-index.md +130 -0
  557. package/skills/opendevbrowser-design-agent/artifacts/design-contract-playbook.md +157 -0
  558. package/skills/opendevbrowser-design-agent/artifacts/design-release-gate.md +40 -0
  559. package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +153 -0
  560. package/skills/opendevbrowser-design-agent/artifacts/existing-surface-adaptation.md +56 -0
  561. package/skills/opendevbrowser-design-agent/artifacts/external-pattern-synthesis.md +103 -0
  562. package/skills/opendevbrowser-design-agent/artifacts/frontend-evaluation-rubric.md +61 -0
  563. package/skills/opendevbrowser-design-agent/artifacts/implementation-anti-patterns.md +163 -0
  564. package/skills/opendevbrowser-design-agent/artifacts/isolated-preview-validation.md +68 -0
  565. package/skills/opendevbrowser-design-agent/artifacts/loading-and-feedback-surfaces.md +56 -0
  566. package/skills/opendevbrowser-design-agent/artifacts/opendevbrowser-ui-example-map.md +44 -0
  567. package/skills/opendevbrowser-design-agent/artifacts/performance-audit-playbook.md +70 -0
  568. package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +81 -0
  569. package/skills/opendevbrowser-design-agent/artifacts/scroll-reveal-surface-planning.md +64 -0
  570. package/skills/opendevbrowser-design-agent/artifacts/state-ownership-matrix.md +36 -0
  571. package/skills/opendevbrowser-design-agent/artifacts/theming-and-token-ownership.md +43 -0
  572. package/skills/opendevbrowser-design-agent/assets/templates/canvas-generation-plan.design.v1.json +58 -0
  573. package/skills/opendevbrowser-design-agent/assets/templates/design-audit-report.v1.md +34 -0
  574. package/skills/opendevbrowser-design-agent/assets/templates/design-brief.v1.md +40 -0
  575. package/skills/opendevbrowser-design-agent/assets/templates/design-contract.v1.json +226 -0
  576. package/skills/opendevbrowser-design-agent/assets/templates/design-release-gate.v1.json +35 -0
  577. package/skills/opendevbrowser-design-agent/assets/templates/design-review-checklist.json +57 -0
  578. package/skills/opendevbrowser-design-agent/assets/templates/real-surface-design-matrix.json +32 -0
  579. package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +31 -0
  580. package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +171 -0
  581. package/skills/opendevbrowser-design-agent/scripts/extract-canvas-plan.sh +56 -0
  582. package/skills/opendevbrowser-design-agent/scripts/validate-skill-assets.sh +223 -0
  583. package/skills/opendevbrowser-form-testing/SKILL.md +19 -3
  584. package/skills/opendevbrowser-form-testing/artifacts/form-workflows.md +5 -4
  585. package/skills/opendevbrowser-form-testing/assets/templates/challenge-decision-tree.json +2 -0
  586. package/skills/opendevbrowser-form-testing/scripts/validate-skill-assets.sh +109 -0
  587. package/skills/opendevbrowser-login-automation/SKILL.md +21 -3
  588. package/skills/opendevbrowser-login-automation/artifacts/login-workflows.md +5 -4
  589. package/skills/opendevbrowser-login-automation/assets/templates/auth-signals.json +5 -0
  590. package/skills/opendevbrowser-login-automation/assets/templates/login-scenario-matrix.json +3 -2
  591. package/skills/opendevbrowser-login-automation/scripts/run-login-workflow.sh +17 -1
  592. package/skills/opendevbrowser-login-automation/scripts/validate-skill-assets.sh +133 -0
  593. package/skills/opendevbrowser-product-presentation-asset/SKILL.md +23 -11
  594. package/skills/opendevbrowser-product-presentation-asset/artifacts/asset-pack-assembly.md +5 -3
  595. package/skills/opendevbrowser-product-presentation-asset/assets/templates/shot-list.md +2 -0
  596. package/skills/opendevbrowser-product-presentation-asset/assets/templates/video-assembly.md +3 -2
  597. package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +5 -1
  598. package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +6 -2
  599. package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +5 -1
  600. package/skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh +20 -7
  601. package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +39 -0
  602. package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +5 -1
  603. package/skills/opendevbrowser-research/SKILL.md +14 -6
  604. package/skills/opendevbrowser-research/scripts/render-output.sh +5 -1
  605. package/skills/opendevbrowser-research/scripts/run-research.sh +5 -1
  606. package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +45 -0
  607. package/skills/opendevbrowser-research/scripts/write-artifacts.sh +5 -1
  608. package/skills/opendevbrowser-shopping/SKILL.md +20 -1
  609. package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +6 -2
  610. package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +5 -1
  611. package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +5 -1
  612. package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +54 -0
  613. package/dist/chunk-ST7CO5FA.js +0 -18668
  614. package/dist/chunk-ST7CO5FA.js.map +0 -1
  615. /package/dist/{chunk-7W3SPXIB.js.map → chunk-FUSXMW3G.js.map} +0 -0
  616. /package/dist/{macros-NUBRM44Y.js.map → macros-ND2M7LWU.js.map} +0 -0
@@ -16,6 +16,16 @@ required=(
16
16
 
17
17
  status=0
18
18
 
19
+ require_marker() {
20
+ local label="$1"
21
+ local output="$2"
22
+ local marker="$3"
23
+ if [[ "$output" != *"$marker"* ]]; then
24
+ echo "$label missing marker: $marker" >&2
25
+ status=1
26
+ fi
27
+ }
28
+
19
29
  for rel in "${required[@]}"; do
20
30
  if [[ ! -f "$root/$rel" ]]; then
21
31
  echo "Missing required asset: $rel" >&2
@@ -43,6 +53,129 @@ for rel in assets/templates/login-scenario-matrix.json assets/templates/auth-sig
43
53
  fi
44
54
  done
45
55
 
56
+ list_output="$("$root/scripts/run-login-workflow.sh" list)"
57
+ for workflow_name in \
58
+ password \
59
+ mfa \
60
+ sso-popup \
61
+ challenge-checkpoint \
62
+ pointer-checkpoint \
63
+ challenge-loop-guard \
64
+ lockout-recovery \
65
+ session-persistence
66
+ do
67
+ require_marker "workflow list" "$list_output" "$workflow_name"
68
+ done
69
+
70
+ password_output="$("$root/scripts/run-login-workflow.sh" password)"
71
+ require_marker "password workflow" "$password_output" "opendevbrowser_type"
72
+ require_marker "password workflow" "$password_output" "opendevbrowser_network_poll"
73
+
74
+ mfa_output="$("$root/scripts/run-login-workflow.sh" mfa)"
75
+ require_marker "mfa workflow" "$mfa_output" "opendevbrowser_type"
76
+ require_marker "mfa workflow" "$mfa_output" "mfa-input-ref"
77
+
78
+ challenge_output="$("$root/scripts/run-login-workflow.sh" challenge-checkpoint)"
79
+ require_marker "challenge-checkpoint workflow" "$challenge_output" "manual checkpoint required"
80
+ require_marker "challenge-checkpoint workflow" "$challenge_output" "opendevbrowser_click"
81
+
82
+ pointer_output="$("$root/scripts/run-login-workflow.sh" pointer-checkpoint)"
83
+ require_marker "pointer-checkpoint workflow" "$pointer_output" "opendevbrowser_pointer_drag"
84
+ require_marker "pointer-checkpoint workflow" "$pointer_output" "steps=12"
85
+
86
+ challenge_loop_output="$("$root/scripts/run-login-workflow.sh" challenge-loop-guard)"
87
+ require_marker "challenge-loop-guard workflow" "$challenge_loop_output" "Retry-After"
88
+ require_marker "challenge-loop-guard workflow" "$challenge_loop_output" "opendevbrowser_network_poll"
89
+
90
+ lockout_output="$("$root/scripts/run-login-workflow.sh" lockout-recovery)"
91
+ require_marker "lockout-recovery workflow" "$lockout_output" "lockout/rate-limit banner"
92
+ require_marker "lockout-recovery workflow" "$lockout_output" "opendevbrowser_network_poll"
93
+
94
+ session_persistence_output="$("$root/scripts/run-login-workflow.sh" session-persistence)"
95
+ require_marker "session-persistence workflow" "$session_persistence_output" "persistProfile=true"
96
+ require_marker "session-persistence workflow" "$session_persistence_output" "profile=\"auth-test\""
97
+
98
+ tmpdir="$(mktemp -d)"
99
+ trap 'rm -rf "$tmpdir"' EXIT
100
+ signals_output="$tmpdir/auth-signals.json"
101
+ "$root/scripts/record-auth-signals.sh" "$root/examples/sample-auth-signals.json" "$signals_output" >/dev/null
102
+ if ! cmp -s "$root/examples/sample-auth-signals.json" "$signals_output"; then
103
+ echo "record-auth-signals.sh did not preserve the auth-signals fixture." >&2
104
+ status=1
105
+ fi
106
+
107
+ if ! node - "$root" <<'NODE'
108
+ const fs = require("node:fs");
109
+ const path = require("node:path");
110
+
111
+ const [root] = process.argv.slice(2);
112
+ const failures = [];
113
+
114
+ const matrix = JSON.parse(fs.readFileSync(path.join(root, "assets/templates/login-scenario-matrix.json"), "utf8"));
115
+ const authSignals = JSON.parse(fs.readFileSync(path.join(root, "assets/templates/auth-signals.json"), "utf8"));
116
+ const sampleSignals = JSON.parse(fs.readFileSync(path.join(root, "examples/sample-auth-signals.json"), "utf8"));
117
+
118
+ if (!Array.isArray(matrix.issue_ids) || matrix.issue_ids.length < 7) {
119
+ failures.push("login-scenario-matrix.json must enumerate the workflow issue ids.");
120
+ }
121
+ for (const marker of ["url_changed", "auth_shell_visible", "auth_network_success", "pointer_gate_complete_when_required"]) {
122
+ if (!Array.isArray(matrix.expected_signals) || !matrix.expected_signals.includes(marker)) {
123
+ failures.push(`login-scenario-matrix.json missing expected signal: ${marker}`);
124
+ }
125
+ }
126
+ for (const marker of ["invalid_credentials_ui_or_network", "anti_bot_challenge", "rate_limited", "lockout"]) {
127
+ if (!Array.isArray(matrix.failure_signals) || !matrix.failure_signals.includes(marker)) {
128
+ failures.push(`login-scenario-matrix.json missing failure signal: ${marker}`);
129
+ }
130
+ }
131
+ if (matrix.max_automated_retries !== 2) {
132
+ failures.push("login-scenario-matrix.json must cap automated retries at 2.");
133
+ }
134
+ if (typeof matrix.requires_manual_checkpoint !== "boolean") {
135
+ failures.push("login-scenario-matrix.json must define requires_manual_checkpoint as a boolean.");
136
+ }
137
+
138
+ for (const key of [
139
+ "invalid_credentials_ui_seen",
140
+ "invalid_credentials_network_seen",
141
+ "pointer_gate_detected",
142
+ "pointer_gate_completed",
143
+ "challenge_checkpoint_count",
144
+ "mfa_detected",
145
+ "issue_ids",
146
+ "result"
147
+ ]) {
148
+ if (!(key in authSignals)) {
149
+ failures.push(`auth-signals.json missing key: ${key}`);
150
+ }
151
+ }
152
+ if (!authSignals.network || typeof authSignals.network.retry_after_seconds !== "number") {
153
+ failures.push("auth-signals.json must define network.retry_after_seconds.");
154
+ }
155
+ if (!Array.isArray(authSignals.network?.status_codes)) {
156
+ failures.push("auth-signals.json must define network.status_codes as an array.");
157
+ }
158
+ if (!Array.isArray(sampleSignals.network?.status_codes) || sampleSignals.network.status_codes[0] !== 200) {
159
+ failures.push("sample-auth-signals.json must retain a successful login status code example.");
160
+ }
161
+ if (sampleSignals.result !== "authenticated") {
162
+ failures.push("sample-auth-signals.json must demonstrate an authenticated result.");
163
+ }
164
+ if (sampleSignals.mfa_detected !== true) {
165
+ failures.push("sample-auth-signals.json must preserve the MFA branch example.");
166
+ }
167
+
168
+ if (failures.length > 0) {
169
+ for (const failure of failures) {
170
+ console.error(failure);
171
+ }
172
+ process.exit(1);
173
+ }
174
+ NODE
175
+ then
176
+ status=1
177
+ fi
178
+
46
179
  if [[ $status -ne 0 ]]; then
47
180
  exit $status
48
181
  fi
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: opendevbrowser-product-presentation-asset
3
- description: Collects product screenshots, images, copy, and metadata into a local folder pack for video workflows.
3
+ description: Collects product metadata, copy, and optional visual assets into a local folder pack for video workflows.
4
4
  version: 2.0.0
5
5
  ---
6
6
 
@@ -36,16 +36,26 @@ Use this skill to build complete product-video input packs and assembly instruct
36
36
  ./skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh /path/to/manifest.json /tmp/product-video-brief
37
37
  ```
38
38
 
39
+ ## Supporting Surfaces
40
+
41
+ - Use browser replay (`screencast-start` / `screencast-stop`) when a product flow needs temporal UI proof before you decide which screenshots to keep.
42
+ - Use desktop observation only for read-only evidence around external windows or OS-owned dialogs that affected capture.
43
+ - Use `--challenge-automation-mode off|browser|browser_with_helper` for bounded browser-scoped computer use on provider or auth walls; it is not a desktop agent.
44
+
39
45
  ## Final Assets Produced
40
46
 
41
- Expected output pack includes:
47
+ Expected output pack always includes:
42
48
  - `manifest.json` with canonical product metadata
43
49
  - `product.json` and `pricing.json`
44
- - `images/` for product stills
45
- - `screenshots/` for page context and UI proof
46
50
  - `copy.md` and `features.md`
47
51
  - `raw/source-record.json` for auditability
48
52
 
53
+ When visual capture succeeds, the pack may also include:
54
+ - `images/` for product stills
55
+ - `screenshots/` for page context and UI proof
56
+
57
+ Metadata-first packs with `0` images and `0` screenshots are still valid intermediate outputs when the workflow captured canonical product data, copy, and pricing. Those packs need additional visual sourcing before final video publication.
58
+
49
59
  The `render-video-brief.sh` helper adds:
50
60
  - `video-brief.md`
51
61
  - `shot-list.md`
@@ -56,9 +66,10 @@ The `render-video-brief.sh` helper adds:
56
66
 
57
67
  1. Pick product URL or product name.
58
68
  2. Run collection workflow and confirm output pack path.
59
- 3. Review generated manifest/copy/features for accuracy.
60
- 4. Run `render-video-brief.sh` to generate production instructions.
61
- 5. Hand the brief and assets to editor/creator pipeline.
69
+ 3. Review generated manifest/copy/features for accuracy and check whether the pack is visual-ready or metadata-first.
70
+ 4. Run `render-video-brief.sh` to generate production instructions and visual sourcing notes.
71
+ Canonical helper path: `scripts/render-video-brief.sh`.
72
+ 5. If no visuals were captured, source or capture visuals before handing the brief to the editor/creator pipeline.
62
73
 
63
74
  ## Parallel Multitab Alignment
64
75
 
@@ -70,10 +81,11 @@ The `render-video-brief.sh` helper adds:
70
81
 
71
82
  1. Use `manifest.json` as source of truth.
72
83
  2. Build hooks and claims from `copy.md` + `features.md`.
73
- 3. Pair each claim with supporting asset (`images` or `screenshots`).
74
- 4. Sequence assets using `shot-list.md`.
75
- 5. Validate pricing/availability freshness before publishing.
76
- 6. Validate every claim appears in `claims-evidence-map.md` before publish.
84
+ 3. Pair each claim with supporting asset (`images` or `screenshots`) when available.
85
+ 4. If the pack is metadata-first, source visuals before final edit and update `shot-list.md` plus `claims-evidence-map.md` with the new asset paths.
86
+ 5. Sequence assets using `shot-list.md`.
87
+ 6. Validate pricing/availability freshness before publishing.
88
+ 7. Validate every claim appears in `claims-evidence-map.md` before publish.
77
89
 
78
90
  ## Robustness Coverage (Known-Issue Matrix)
79
91
 
@@ -9,15 +9,17 @@
9
9
  ## Build sequence
10
10
 
11
11
  1. Collect base product pack (`collect-product.sh`)
12
- 2. Ensure screenshots/images exist
12
+ 2. Inspect the capture summary and classify the pack as visual-ready or metadata-first
13
13
  3. Validate manifest schema fields
14
14
  4. Generate video brief (`render-video-brief.sh`)
15
15
  5. Review claim-to-evidence mapping (`claims-evidence-map.md`)
16
- 6. Review shot sequence and CTA consistency
16
+ 6. If visuals are missing, source or capture them before final publication
17
+ 7. Review shot sequence and CTA consistency
17
18
 
18
19
  ## Release checks
19
20
 
20
21
  - pricing timestamp is recent
21
- - screenshot/image files are present and readable
22
+ - screenshot/image files are readable when present
23
+ - metadata-first packs are marked for additional visual sourcing before publish
22
24
  - copy claims map to feature evidence
23
25
  - every promoted claim is backed by a concrete asset path
@@ -1,5 +1,7 @@
1
1
  # Shot List
2
2
 
3
+ Use captured screenshots or images when present. For metadata-first packs, replace the sample asset paths with sourced visuals before publishing.
4
+
3
5
  | Scene | Goal | Asset | Voiceover | Duration |
4
6
  |---|---|---|---|---:|
5
7
  | 1 | Hook | screenshots/screenshot-01.png | | 2s |
@@ -6,13 +6,14 @@
6
6
  - Product metadata: `product.json`
7
7
  - Pricing: `pricing.json`
8
8
  - Copy and features: `copy.md`, `features.md`
9
- - Visuals: `images/*`, `screenshots/*`
9
+ - Visuals: `images/*`, `screenshots/*` when capture succeeds
10
10
  - Claim evidence map: `claims-evidence-map.md`
11
11
 
12
12
  ## Assembly Steps
13
13
 
14
14
  1. Build script from top 3 verified benefits.
15
- 2. Match each line to one visual asset.
15
+ 2. Match each line to one visual asset when visuals exist.
16
16
  3. Create sequence: hook -> proof -> CTA.
17
17
  4. Verify all price/discount statements against `pricing.json`.
18
18
  5. Mark `claims-evidence-map.md` rows as verified before publishing.
19
+ 6. If the pack is metadata-first, source visuals and update the shot list before final edit.
@@ -6,4 +6,8 @@ if [[ $# -lt 1 ]]; then
6
6
  exit 1
7
7
  fi
8
8
 
9
- opendevbrowser product-video run --product-url "$1" --include-screenshots --include-all-images=false
9
+ script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+ # shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
11
+ source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
12
+
13
+ "${ODB_CLI[@]}" product-video run --product-url "$1" --include-screenshots --include-all-images=false
@@ -7,8 +7,12 @@ if [[ $# -lt 1 ]]; then
7
7
  fi
8
8
 
9
9
  VALUE="$1"
10
+ script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
+ # shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
12
+ source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
13
+
10
14
  if [[ "$VALUE" == http* ]]; then
11
- opendevbrowser product-video run --product-url "$VALUE"
15
+ "${ODB_CLI[@]}" product-video run --product-url "$VALUE"
12
16
  else
13
- opendevbrowser product-video run --product-name "$VALUE"
17
+ "${ODB_CLI[@]}" product-video run --product-name "$VALUE"
14
18
  fi
@@ -6,4 +6,8 @@ if [[ $# -lt 1 ]]; then
6
6
  exit 1
7
7
  fi
8
8
 
9
- opendevbrowser product-video run --product-url "$1" --include-all-images --include-screenshots=false
9
+ script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+ # shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
11
+ source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
12
+
13
+ "${ODB_CLI[@]}" product-video run --product-url "$1" --include-all-images --include-screenshots=false
@@ -29,9 +29,18 @@ const features = Array.isArray(product.features) ? product.features.slice(0, 5)
29
29
  const copy = typeof product.copy === "string" ? product.copy.trim().slice(0, 600) : "";
30
30
  const images = Array.isArray(data?.assets?.images) ? data.assets.images : [];
31
31
  const screenshots = Array.isArray(data?.assets?.screenshots) ? data.assets.screenshots : [];
32
+ const noVisualAsset = "metadata-only-pack:no-captured-visual";
33
+ const hasVisuals = images.length > 0 || screenshots.length > 0;
34
+ const featureClaims = features.length > 0
35
+ ? features
36
+ : ["Review manifest data and add only evidence-backed feature claims"];
32
37
 
33
- const claimRows = (features.length ? features : ["Add verified feature claims"]).map((claim, index) => {
34
- const evidence = screenshots[index] || images[index] || images[0] || screenshots[0] || "<asset>";
38
+ function pickVisual(...candidates) {
39
+ return candidates.find((entry) => typeof entry === "string" && entry.length > 0) || noVisualAsset;
40
+ }
41
+
42
+ const claimRows = featureClaims.map((claim, index) => {
43
+ const evidence = pickVisual(screenshots[index], images[index], images[0], screenshots[0]);
35
44
  return `| ${claim} | ${evidence} | product.features[${index}] | no |`;
36
45
  });
37
46
 
@@ -41,12 +50,15 @@ const videoBrief = [
41
50
  `- Product: ${title}`,
42
51
  `- Brand: ${brand}`,
43
52
  `- Price: ${amount} ${currency}`,
53
+ `- Visual capture status: ${hasVisuals ? "visual-ready" : "metadata-first"}`,
44
54
  "",
45
55
  "## Verified Features",
46
- ...(features.length ? features.map((entry) => `- ${entry}`) : ["- Add verified feature bullets"]),
56
+ ...featureClaims.map((entry) => `- ${entry}`),
47
57
  "",
48
58
  "## Suggested Hook",
49
- `- "${title} solves <problem> faster with <core benefit>."`,
59
+ hasVisuals
60
+ ? `- "${title} from ${brand} should open on its strongest verified benefit and immediate proof."`
61
+ : `- "${title} from ${brand}: finalize visuals first, then lead with the strongest verified benefit."`,
50
62
  "",
51
63
  "## Copy Input",
52
64
  copy ? copy : "(No copy captured)",
@@ -54,6 +66,7 @@ const videoBrief = [
54
66
  "## Assets",
55
67
  `- Images: ${images.length}`,
56
68
  `- Screenshots: ${screenshots.length}`,
69
+ `- Additional visual sourcing required: ${hasVisuals ? "no" : "yes"}`,
57
70
  "- Claims evidence map: claims-evidence-map.md"
58
71
  ].join("\n");
59
72
 
@@ -62,9 +75,9 @@ const shotList = [
62
75
  "",
63
76
  "| Scene | Goal | Asset | Voiceover | Duration |",
64
77
  "|---|---|---|---|---:|",
65
- `| 1 | Hook | ${screenshots[0] || images[0] || "<asset>"} | Problem + promise | 2s |`,
66
- `| 2 | Feature demo | ${images[0] || screenshots[0] || "<asset>"} | Show proof | 4s |`,
67
- `| 3 | Outcome + CTA | ${images[1] || screenshots[1] || images[0] || "<asset>"} | Benefit + CTA | 4s |`
78
+ `| 1 | Hook | ${pickVisual(screenshots[0], images[0])} | Problem + promise | 2s |`,
79
+ `| 2 | Feature demo | ${pickVisual(images[0], screenshots[0])} | Show proof | 4s |`,
80
+ `| 3 | Outcome + CTA | ${pickVisual(images[1], screenshots[1], images[0], screenshots[0])} | Benefit + CTA | 4s |`
68
81
  ].join("\n");
69
82
 
70
83
  const ugcBrief = [
@@ -24,6 +24,16 @@ required=(
24
24
  )
25
25
 
26
26
  status=0
27
+ tmpdir="$(mktemp -d)"
28
+ trap 'rm -rf "$tmpdir"' EXIT
29
+
30
+ metadata_manifest="$tmpdir/metadata-only-manifest.json"
31
+ node -e '
32
+ const fs = require("fs");
33
+ const input = JSON.parse(fs.readFileSync(process.argv[1], "utf8"));
34
+ input.assets = { images: [], screenshots: [], raw: input.assets?.raw || [] };
35
+ fs.writeFileSync(process.argv[2], JSON.stringify(input, null, 2));
36
+ ' "$root/examples/sample-manifest.json" "$metadata_manifest"
27
37
  for rel in "${required[@]}"; do
28
38
  if [[ ! -f "$root/$rel" ]]; then
29
39
  echo "Missing required asset: $rel" >&2
@@ -42,6 +52,19 @@ for rel in scripts/collect-product.sh scripts/capture-screenshots.sh scripts/dow
42
52
  fi
43
53
  done
44
54
 
55
+ for rel in scripts/collect-product.sh scripts/capture-screenshots.sh scripts/download-images.sh scripts/write-manifest.sh; do
56
+ if [[ -f "$root/$rel" ]]; then
57
+ if ! grep -Fq "resolve-odb-cli.sh" "$root/$rel"; then
58
+ echo "Workflow wrapper missing shared CLI resolver: $rel" >&2
59
+ status=1
60
+ fi
61
+ if ! grep -Fq "ODB_CLI" "$root/$rel"; then
62
+ echo "Workflow wrapper missing ODB_CLI invocation: $rel" >&2
63
+ status=1
64
+ fi
65
+ fi
66
+ done
67
+
45
68
  if [[ -f "$root/assets/templates/manifest.schema.json" ]]; then
46
69
  if ! node -e 'const fs=require("fs"); JSON.parse(fs.readFileSync(process.argv[1], "utf8"));' "$root/assets/templates/manifest.schema.json" >/dev/null 2>&1; then
47
70
  echo "Invalid JSON template: assets/templates/manifest.schema.json" >&2
@@ -49,6 +72,22 @@ if [[ -f "$root/assets/templates/manifest.schema.json" ]]; then
49
72
  fi
50
73
  fi
51
74
 
75
+ "$root/scripts/render-video-brief.sh" "$metadata_manifest" "$tmpdir/brief" >/dev/null
76
+ for generated in video-brief.md shot-list.md ugc-brief.md claims-evidence-map.md; do
77
+ if [[ ! -f "$tmpdir/brief/$generated" ]]; then
78
+ echo "render-video-brief.sh missing generated file: $generated" >&2
79
+ status=1
80
+ fi
81
+ done
82
+ if [[ -f "$tmpdir/brief/video-brief.md" ]] && ! grep -Fq "metadata-first" "$tmpdir/brief/video-brief.md"; then
83
+ echo "render-video-brief.sh did not preserve metadata-first output when visuals are absent." >&2
84
+ status=1
85
+ fi
86
+ if [[ -f "$tmpdir/brief/claims-evidence-map.md" ]] && ! grep -Fq "metadata-only-pack:no-captured-visual" "$tmpdir/brief/claims-evidence-map.md"; then
87
+ echo "render-video-brief.sh did not emit the metadata-only evidence placeholder." >&2
88
+ status=1
89
+ fi
90
+
52
91
  if [[ $status -ne 0 ]]; then
53
92
  exit $status
54
93
  fi
@@ -10,7 +10,11 @@ VALUE="$1"
10
10
  OUTDIR="$2"
11
11
  mkdir -p "$OUTDIR"
12
12
 
13
- cmd=(opendevbrowser product-video run --output-dir "$OUTDIR" --output-format json)
13
+ script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
14
+ # shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
15
+ source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
16
+
17
+ cmd=("${ODB_CLI[@]}" product-video run --output-dir "$OUTDIR" --output-format json)
14
18
  if [[ "$VALUE" == http* ]]; then
15
19
  cmd+=(--product-url "$VALUE")
16
20
  else
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: opendevbrowser-research
3
3
  description: Deterministic multi-source research workflow with strict timebox and artifact outputs.
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  ---
6
6
 
7
7
  # Research Skill
8
8
 
9
- Use this skill when you need benchmark-style research across `web|community|social|shopping` with strict timebox semantics and stable output modes.
9
+ Use this skill when you need benchmark-style research across public `web|community|social` sources by default, with explicit shopping opt-in only for commercial comparison tasks.
10
10
 
11
11
  ## Pack Contents
12
12
 
@@ -28,6 +28,12 @@ Use this skill when you need benchmark-style research across `web|community|soci
28
28
  ./skills/opendevbrowser-research/scripts/render-output.sh "browser automation" compact
29
29
  ```
30
30
 
31
+ ## Supporting Surfaces
32
+
33
+ - Use browser replay (`screencast-start` / `screencast-stop`) when claim review needs temporal UI evidence or parity proof from browser-backed runs.
34
+ - Use desktop observation only for read-only external-window or native-dialog evidence that materially affects the research artifact chain.
35
+ - Use `--challenge-automation-mode off|browser|browser_with_helper` for bounded browser-scoped computer use in research workflows; it is not a desktop agent.
36
+
31
37
  ## Core Rules
32
38
 
33
39
  - Define timebox first (`--days` or `--from/--to`).
@@ -61,13 +67,15 @@ Matrix source: `../opendevbrowser-best-practices/artifacts/browser-agent-known-i
61
67
  ## Commands
62
68
 
63
69
  ```bash
64
- opendevbrowser research run --topic "<topic>" --days 30 --mode context
65
- opendevbrowser research run --topic "<topic>" --source-selection all --mode json
70
+ opendevbrowser research run --topic "<topic>" --days 30 --source-selection auto --mode context
71
+ opendevbrowser research run --topic "<topic>" --source-selection auto --mode json
66
72
  opendevbrowser research run --topic "<topic>" --sources web,shopping --mode md
67
73
  ```
68
74
 
69
75
  ## Notes
70
76
 
71
- - `auto` resolves to `web|community|social` in v1.
72
- - Use `--source-selection all` or `--sources shopping,...` to include shopping.
77
+ - `auto` is the recommended default for topical research.
78
+ - In the current contract, both `auto` and `all` resolve to `web|community|social`.
79
+ - Use `--source-selection shopping` or explicit `--sources ...shopping...` to include shopping only when commercial intent is explicit.
73
80
  - Use `--mode path` with `scripts/write-artifacts.sh` when you need replayable handoff bundles.
81
+ - For browser-backed release proof and mode sweeps, follow the canonical direct-run evidence policy in `../opendevbrowser-best-practices/SKILL.md`.
@@ -9,4 +9,8 @@ fi
9
9
  TOPIC="$1"
10
10
  MODE="$2"
11
11
 
12
- opendevbrowser research run --topic "$TOPIC" --mode "$MODE"
12
+ script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+ # shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
14
+ source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
15
+
16
+ "${ODB_CLI[@]}" research run --topic "$TOPIC" --mode "$MODE"
@@ -12,7 +12,11 @@ MODE="${3:-context}"
12
12
  SOURCE_SELECTION="${4:-}"
13
13
  SOURCES="${5:-}"
14
14
 
15
- cmd=(opendevbrowser research run --topic "$TOPIC" --days "$DAYS" --mode "$MODE")
15
+ script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
+ # shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
17
+ source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
18
+
19
+ cmd=("${ODB_CLI[@]}" research run --topic "$TOPIC" --days "$DAYS" --mode "$MODE")
16
20
  if [[ -n "$SOURCE_SELECTION" ]]; then
17
21
  cmd+=(--source-selection "$SOURCE_SELECTION")
18
22
  fi
@@ -16,6 +16,18 @@ required=(
16
16
  )
17
17
 
18
18
  status=0
19
+ validator_cli="$root/../opendevbrowser-best-practices/scripts/validator-fixture-cli.sh"
20
+ export ODB_CLI_VALIDATOR_OVERRIDE="$validator_cli"
21
+
22
+ require_marker() {
23
+ local label="$1"
24
+ local output="$2"
25
+ local marker="$3"
26
+ if [[ "$output" != *"$marker"* ]]; then
27
+ echo "$label missing marker: $marker" >&2
28
+ status=1
29
+ fi
30
+ }
19
31
  for rel in "${required[@]}"; do
20
32
  if [[ ! -f "$root/$rel" ]]; then
21
33
  echo "Missing required asset: $rel" >&2
@@ -34,6 +46,19 @@ for rel in scripts/run-research.sh scripts/render-output.sh scripts/write-artifa
34
46
  fi
35
47
  done
36
48
 
49
+ for rel in scripts/run-research.sh scripts/render-output.sh scripts/write-artifacts.sh; do
50
+ if [[ -f "$root/$rel" ]]; then
51
+ if ! grep -Fq "resolve-odb-cli.sh" "$root/$rel"; then
52
+ echo "Workflow wrapper missing shared CLI resolver: $rel" >&2
53
+ status=1
54
+ fi
55
+ if ! grep -Fq "ODB_CLI" "$root/$rel"; then
56
+ echo "Workflow wrapper missing ODB_CLI invocation: $rel" >&2
57
+ status=1
58
+ fi
59
+ fi
60
+ done
61
+
37
62
  if [[ -f "$root/assets/templates/context.json" ]]; then
38
63
  if ! node -e 'const fs=require("fs"); JSON.parse(fs.readFileSync(process.argv[1], "utf8"));' "$root/assets/templates/context.json" >/dev/null 2>&1; then
39
64
  echo "Invalid JSON template: assets/templates/context.json" >&2
@@ -41,6 +66,26 @@ if [[ -f "$root/assets/templates/context.json" ]]; then
41
66
  fi
42
67
  fi
43
68
 
69
+ context_output="$("$root/scripts/run-research.sh" "ai browser automation" 30 context auto "web,docs")"
70
+ require_marker "run-research context" "$context_output" "# Research Context"
71
+ require_marker "run-research context" "$context_output" "ISSUE-09"
72
+
73
+ report_output="$("$root/scripts/render-output.sh" "ai browser automation" report)"
74
+ require_marker "render-output report" "$report_output" "# Research Report"
75
+ require_marker "render-output report" "$report_output" "Source selection"
76
+
77
+ tmpdir="$(mktemp -d)"
78
+ trap 'rm -rf "$tmpdir"' EXIT
79
+ artifact_output="$("$root/scripts/write-artifacts.sh" "ai browser automation" "$tmpdir")"
80
+ artifact_path="$(printf '%s\n' "$artifact_output" | node -e 'const fs=require("fs");const lines=fs.readFileSync(0,"utf8").split(/\r?\n/).map((line)=>line.trim()).filter(Boolean);let payload=null;for(const line of lines){try{payload=JSON.parse(line);}catch{}}const value=payload?.data?.path; if(typeof value==="string") process.stdout.write(value);')"
81
+ if [[ -z "$artifact_path" || ! -d "$artifact_path" ]]; then
82
+ echo "write-artifacts.sh did not produce a valid artifact directory." >&2
83
+ status=1
84
+ elif [[ ! -f "$artifact_path/bundle-manifest.json" || ! -f "$artifact_path/report.md" ]]; then
85
+ echo "write-artifacts.sh did not write the expected research bundle files." >&2
86
+ status=1
87
+ fi
88
+
44
89
  if [[ $status -ne 0 ]]; then
45
90
  exit $status
46
91
  fi
@@ -9,7 +9,11 @@ fi
9
9
  TOPIC="$1"
10
10
  OUTDIR="$2"
11
11
 
12
- json_output="$(opendevbrowser research run --topic "$TOPIC" --mode path --output-dir "$OUTDIR" --output-format json)"
12
+ script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+ # shellcheck source=../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh
14
+ source "$script_dir/../../opendevbrowser-best-practices/scripts/resolve-odb-cli.sh"
15
+
16
+ json_output="$("${ODB_CLI[@]}" research run --topic "$TOPIC" --mode path --output-dir "$OUTDIR" --output-format json)"
13
17
  printf '%s\n' "$json_output"
14
18
 
15
19
  artifact_path="$(printf '%s\n' "$json_output" | node -e 'const fs=require("fs");const lines=fs.readFileSync(0,"utf8").split(/\r?\n/).map((line)=>line.trim()).filter(Boolean);let payload=null;for(const line of lines){try{payload=JSON.parse(line);}catch{}}const p=payload?.data?.path; if(typeof p==="string") process.stdout.write(p);')"
@@ -1,13 +1,18 @@
1
1
  ---
2
2
  name: opendevbrowser-shopping
3
3
  description: Deterministic multi-provider shopping and deal-comparison workflow.
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  ---
6
6
 
7
7
  # Shopping Skill
8
8
 
9
9
  Use this skill for robust deal hunting across providers with market-baseline validation and savings analysis.
10
10
 
11
+ Reliable defaults:
12
+ - start with explicit providers for reproducible reruns
13
+ - prefer `--browser-mode managed` unless relay-backed session state is required
14
+ - treat `--region` as advisory unless workflow output reports `meta.selection.region_authoritative=true`
15
+
11
16
  ## Pack Contents
12
17
 
13
18
  - `artifacts/deal-hunting-workflows.md`
@@ -31,6 +36,12 @@ Use this skill for robust deal hunting across providers with market-baseline val
31
36
  ./skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh "wireless earbuds" "shopping/amazon,shopping/walmart"
32
37
  ```
33
38
 
39
+ ## Supporting Surfaces
40
+
41
+ - Use browser replay (`screencast-start` / `screencast-stop`) when offer churn, price changes, or challenge timing needs temporal evidence.
42
+ - Use desktop observation only for read-only evidence around sibling desktop surfaces; provider collection stays browser-first.
43
+ - Use `--challenge-automation-mode off|browser|browser_with_helper` for bounded browser-scoped computer use on provider challenge branches; it is not desktop automation.
44
+
34
45
  ## Deal-Hunting Model
35
46
 
36
47
  Use a two-layer check for each offer:
@@ -48,6 +59,7 @@ Use a two-layer check for each offer:
48
59
  - Apply shared concurrency policy from `../opendevbrowser-best-practices/SKILL.md` ("Parallel Operations").
49
60
  - Validate shopping workflows across `managed`, `extension`, and `cdpConnect` when browser-backed provider paths are exercised.
50
61
  - Keep one session per worker for parallel offer collection and avoid session-level target contention.
62
+ - For browser-backed release proof and mode sweeps, follow the canonical direct-run evidence policy in `../opendevbrowser-best-practices/SKILL.md`.
51
63
 
52
64
  ## Savings Math
53
65
 
@@ -85,8 +97,15 @@ Matrix source: `../opendevbrowser-best-practices/artifacts/browser-agent-known-i
85
97
 
86
98
  ```bash
87
99
  opendevbrowser shopping run --query "<query>" --providers shopping/amazon,shopping/walmart --mode json --output-format json
100
+ opendevbrowser shopping run --query "wireless ergonomic mouse" --providers shopping/bestbuy,shopping/ebay --budget 150 --browser-mode managed --mode json --output-format json
101
+ opendevbrowser shopping run --query "27 inch 4k monitor" --providers shopping/bestbuy,shopping/ebay --budget 350 --sort lowest_price --browser-mode managed --mode json --output-format json
88
102
  ```
89
103
 
104
+ Diagnostics rules:
105
+ - inspect `meta.primaryConstraintSummary` before classifying a zero-offer run as a provider failure
106
+ - inspect `meta.offerFilterDiagnostics` to see whether zero price, budget, or region-currency filters removed the candidate offers
107
+ - if `meta.alerts` includes `reasonCode=region_unenforced`, do not present the output as a trustworthy regional comparison
108
+
90
109
  ## Classification Heuristics
91
110
 
92
111
  Default tags from analysis script: