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
@@ -0,0 +1,18 @@
1
+ # Video Assembly Instructions
2
+
3
+ ## Assets
4
+
5
+ - Manifest: `manifest.json`
6
+ - Product metadata: `product.json`
7
+ - Pricing: `pricing.json`
8
+ - Copy and features: `copy.md`, `features.md`
9
+ - Visuals: `images/*`, `screenshots/*`
10
+ - Claim evidence map: `claims-evidence-map.md`
11
+
12
+ ## Assembly Steps
13
+
14
+ 1. Build script from top 3 verified benefits.
15
+ 2. Match each line to one visual asset.
16
+ 3. Create sequence: hook -> proof -> CTA.
17
+ 4. Verify all price/discount statements against `pricing.json`.
18
+ 5. Mark `claims-evidence-map.md` rows as verified before publishing.
@@ -0,0 +1,6 @@
1
+ {
2
+ "product_url": "https://example.com/product/123",
3
+ "include_screenshots": true,
4
+ "include_all_images": true,
5
+ "include_copy": true
6
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "run_id": "example-run-id",
3
+ "created_at": "2026-02-16T00:00:00.000Z",
4
+ "source_url": "https://example.com/product/123",
5
+ "provider": "shopping/others",
6
+ "product": {
7
+ "title": "Example Product",
8
+ "brand": "Example",
9
+ "price": { "amount": 29.99, "currency": "USD", "retrieved_at": "2026-02-16T00:00:00.000Z" },
10
+ "features": ["Feature 1", "Feature 2"],
11
+ "copy": "Example copy"
12
+ },
13
+ "assets": {
14
+ "images": ["images/image-01.jpg"],
15
+ "screenshots": ["screenshots/screenshot-01.png"],
16
+ "raw": ["raw/source-record.json"]
17
+ }
18
+ }
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ if [[ $# -lt 1 ]]; then
5
+ echo "Usage: capture-screenshots.sh <product-url>"
6
+ exit 1
7
+ fi
8
+
9
+ opendevbrowser product-video run --product-url "$1" --include-screenshots --include-all-images=false
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ if [[ $# -lt 1 ]]; then
5
+ echo "Usage: collect-product.sh <product-url|product-name>"
6
+ exit 1
7
+ fi
8
+
9
+ VALUE="$1"
10
+ if [[ "$VALUE" == http* ]]; then
11
+ opendevbrowser product-video run --product-url "$VALUE"
12
+ else
13
+ opendevbrowser product-video run --product-name "$VALUE"
14
+ fi
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ if [[ $# -lt 1 ]]; then
5
+ echo "Usage: download-images.sh <product-url>"
6
+ exit 1
7
+ fi
8
+
9
+ opendevbrowser product-video run --product-url "$1" --include-all-images --include-screenshots=false
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ if [[ $# -lt 1 ]]; then
5
+ echo "Usage: render-video-brief.sh <manifest-json> [output-dir]" >&2
6
+ exit 1
7
+ fi
8
+
9
+ manifest="$1"
10
+ outdir="${2:-$(dirname "$manifest")}"
11
+ mkdir -p "$outdir"
12
+
13
+ node - "$manifest" "$outdir" <<'NODE'
14
+ const fs = require("fs");
15
+ const path = require("path");
16
+
17
+ const manifestPath = process.argv[2];
18
+ const outdir = process.argv[3];
19
+
20
+ const data = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
21
+ const product = data.product || {};
22
+ const pricing = product.price || {};
23
+
24
+ const title = product.title || "Unknown product";
25
+ const brand = product.brand || "Unknown brand";
26
+ const amount = typeof pricing.amount === "number" ? pricing.amount.toFixed(2) : "N/A";
27
+ const currency = pricing.currency || "USD";
28
+ const features = Array.isArray(product.features) ? product.features.slice(0, 5) : [];
29
+ const copy = typeof product.copy === "string" ? product.copy.trim().slice(0, 600) : "";
30
+ const images = Array.isArray(data?.assets?.images) ? data.assets.images : [];
31
+ const screenshots = Array.isArray(data?.assets?.screenshots) ? data.assets.screenshots : [];
32
+
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>";
35
+ return `| ${claim} | ${evidence} | product.features[${index}] | no |`;
36
+ });
37
+
38
+ const videoBrief = [
39
+ "# Video Brief",
40
+ "",
41
+ `- Product: ${title}`,
42
+ `- Brand: ${brand}`,
43
+ `- Price: ${amount} ${currency}`,
44
+ "",
45
+ "## Verified Features",
46
+ ...(features.length ? features.map((entry) => `- ${entry}`) : ["- Add verified feature bullets"]),
47
+ "",
48
+ "## Suggested Hook",
49
+ `- "${title} solves <problem> faster with <core benefit>."`,
50
+ "",
51
+ "## Copy Input",
52
+ copy ? copy : "(No copy captured)",
53
+ "",
54
+ "## Assets",
55
+ `- Images: ${images.length}`,
56
+ `- Screenshots: ${screenshots.length}`,
57
+ "- Claims evidence map: claims-evidence-map.md"
58
+ ].join("\n");
59
+
60
+ const shotList = [
61
+ "# Shot List",
62
+ "",
63
+ "| Scene | Goal | Asset | Voiceover | Duration |",
64
+ "|---|---|---|---|---:|",
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 |`
68
+ ].join("\n");
69
+
70
+ const ugcBrief = [
71
+ "# UGC Brief",
72
+ "",
73
+ "## Creator Direction",
74
+ "- Speak as a real user solving a real problem.",
75
+ "- Show product in use before listing specs.",
76
+ "- Keep claims aligned with captured assets and manifest data.",
77
+ "",
78
+ "## CTA",
79
+ "- Use one clear CTA tied to the strongest verified benefit."
80
+ ].join("\n");
81
+
82
+ const claimsEvidenceMap = [
83
+ "# Claims Evidence Map",
84
+ "",
85
+ "| Claim | Evidence Asset | Source Field | Verified |",
86
+ "|---|---|---|---|",
87
+ ...claimRows
88
+ ].join("\n");
89
+
90
+ fs.writeFileSync(path.join(outdir, "video-brief.md"), videoBrief);
91
+ fs.writeFileSync(path.join(outdir, "shot-list.md"), shotList);
92
+ fs.writeFileSync(path.join(outdir, "ugc-brief.md"), ugcBrief);
93
+ fs.writeFileSync(path.join(outdir, "claims-evidence-map.md"), claimsEvidenceMap);
94
+
95
+ process.stdout.write(`Video brief files written to ${outdir}\n`);
96
+ NODE
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ skill_file="$root/SKILL.md"
6
+
7
+ required=(
8
+ "artifacts/asset-pack-assembly.md"
9
+ "artifacts/ugc-creative-guide.md"
10
+ "assets/templates/manifest.schema.json"
11
+ "assets/templates/copy.md"
12
+ "assets/templates/features.md"
13
+ "assets/templates/video-assembly.md"
14
+ "assets/templates/user-actions.md"
15
+ "assets/templates/ugc-concepts.md"
16
+ "assets/templates/shot-list.md"
17
+ "assets/templates/claims-evidence-map.md"
18
+ "scripts/collect-product.sh"
19
+ "scripts/capture-screenshots.sh"
20
+ "scripts/download-images.sh"
21
+ "scripts/write-manifest.sh"
22
+ "scripts/render-video-brief.sh"
23
+ "scripts/validate-skill-assets.sh"
24
+ )
25
+
26
+ status=0
27
+ for rel in "${required[@]}"; do
28
+ if [[ ! -f "$root/$rel" ]]; then
29
+ echo "Missing required asset: $rel" >&2
30
+ status=1
31
+ fi
32
+ if ! grep -Fq "$rel" "$skill_file"; then
33
+ echo "SKILL.md missing reference: $rel" >&2
34
+ status=1
35
+ fi
36
+ done
37
+
38
+ for rel in scripts/collect-product.sh scripts/capture-screenshots.sh scripts/download-images.sh scripts/write-manifest.sh scripts/render-video-brief.sh scripts/validate-skill-assets.sh; do
39
+ if [[ -f "$root/$rel" && ! -x "$root/$rel" ]]; then
40
+ echo "Script is not executable: $rel" >&2
41
+ status=1
42
+ fi
43
+ done
44
+
45
+ if [[ -f "$root/assets/templates/manifest.schema.json" ]]; then
46
+ 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
+ echo "Invalid JSON template: assets/templates/manifest.schema.json" >&2
48
+ status=1
49
+ fi
50
+ fi
51
+
52
+ if [[ $status -ne 0 ]]; then
53
+ exit $status
54
+ fi
55
+
56
+ echo "Product presentation asset skill pack validated."
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ if [[ $# -lt 2 ]]; then
5
+ echo "Usage: write-manifest.sh <product-url|product-name> <output-dir>"
6
+ exit 1
7
+ fi
8
+
9
+ VALUE="$1"
10
+ OUTDIR="$2"
11
+ mkdir -p "$OUTDIR"
12
+
13
+ cmd=(opendevbrowser product-video run --output-dir "$OUTDIR" --output-format json)
14
+ if [[ "$VALUE" == http* ]]; then
15
+ cmd+=(--product-url "$VALUE")
16
+ else
17
+ cmd+=(--product-name "$VALUE")
18
+ fi
19
+
20
+ json_output="$("${cmd[@]}")"
21
+ printf '%s\n' "$json_output"
22
+
23
+ bundle_path="$(printf '%s\n' "$json_output" | node -e 'const fs=require("fs");const input=fs.readFileSync(0,"utf8").split(/\r?\n/).map((line)=>line.trim()).filter(Boolean);let payload=null;for(const line of input){try{payload=JSON.parse(line);}catch{}}const p=payload?.data?.path; if(typeof p==="string") process.stdout.write(p);')"
24
+ manifest_out="$OUTDIR/manifest.json"
25
+
26
+ if [[ ! -f "$manifest_out" ]]; then
27
+ source_manifest=""
28
+ if [[ -n "$bundle_path" && -f "$bundle_path/manifest.json" ]]; then
29
+ source_manifest="$bundle_path/manifest.json"
30
+ else
31
+ source_manifest="$(find "$OUTDIR" -maxdepth 6 -type f -name manifest.json | head -n 1)"
32
+ fi
33
+ if [[ -n "$source_manifest" && -f "$source_manifest" ]]; then
34
+ cp "$source_manifest" "$manifest_out"
35
+ fi
36
+ fi
37
+
38
+ if [[ ! -f "$manifest_out" ]]; then
39
+ echo "Manifest not found in output dir: $OUTDIR" >&2
40
+ exit 2
41
+ fi
42
+
43
+ echo "Manifest ready: $manifest_out"
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: opendevbrowser-research
3
+ description: Deterministic multi-source research workflow with strict timebox and artifact outputs.
4
+ version: 2.0.0
5
+ ---
6
+
7
+ # Research Skill
8
+
9
+ Use this skill when you need benchmark-style research across `web|community|social|shopping` with strict timebox semantics and stable output modes.
10
+
11
+ ## Pack Contents
12
+
13
+ - `artifacts/research-workflows.md`
14
+ - `assets/templates/compact.md`
15
+ - `assets/templates/context.json`
16
+ - `assets/templates/report.md`
17
+ - `scripts/run-research.sh`
18
+ - `scripts/render-output.sh`
19
+ - `scripts/write-artifacts.sh`
20
+ - `scripts/validate-skill-assets.sh`
21
+ - Shared robustness matrix: `../opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md`
22
+
23
+ ## Fast Start
24
+
25
+ ```bash
26
+ ./skills/opendevbrowser-research/scripts/validate-skill-assets.sh
27
+ ./skills/opendevbrowser-research/scripts/run-research.sh "browser automation" 30 context
28
+ ./skills/opendevbrowser-research/scripts/render-output.sh "browser automation" compact
29
+ ```
30
+
31
+ ## Core Rules
32
+
33
+ - Define timebox first (`--days` or `--from/--to`).
34
+ - Prefer explicit sources for high-stakes claims.
35
+ - Persist artifacts and return reproducible paths.
36
+ - Mark unsupported claims as tentative; do not overstate certainty.
37
+ - Honor bounded retries and backoff windows under 429 pressure.
38
+
39
+ ## Parallel Multitab Alignment
40
+
41
+ - Apply shared concurrency policy from `../opendevbrowser-best-practices/SKILL.md` ("Parallel Operations").
42
+ - Run research acceptance in `managed`, `extension`, and `cdpConnect` where browser-backed evidence capture is used.
43
+ - Keep provider query orchestration mode-agnostic; isolate browser interaction per session worker.
44
+
45
+ ## Robustness Coverage (Known-Issue Matrix)
46
+
47
+ Matrix source: `../opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md`
48
+
49
+ - `ISSUE-06`: upstream throttling and retry discipline
50
+ - `ISSUE-09`: pagination/result drift across sources
51
+ - `ISSUE-10`: locale/currency normalization consistency
52
+ - `ISSUE-12`: stale evidence and claim traceability
53
+
54
+ ## Workflow
55
+
56
+ 1. Resolve timebox (`days` or `from/to`).
57
+ 2. Choose sources (`auto|web|community|social|shopping|all`).
58
+ 3. Run `opendevbrowser research run`.
59
+ 4. Return requested mode output and artifact path.
60
+
61
+ ## Commands
62
+
63
+ ```bash
64
+ opendevbrowser research run --topic "<topic>" --days 30 --mode context
65
+ opendevbrowser research run --topic "<topic>" --source-selection all --mode json
66
+ opendevbrowser research run --topic "<topic>" --sources web,shopping --mode md
67
+ ```
68
+
69
+ ## Notes
70
+
71
+ - `auto` resolves to `web|community|social` in v1.
72
+ - Use `--source-selection all` or `--sources shopping,...` to include shopping.
73
+ - Use `--mode path` with `scripts/write-artifacts.sh` when you need replayable handoff bundles.
@@ -0,0 +1,29 @@
1
+ # Research Workflows
2
+
3
+ ## Deterministic baseline workflow
4
+
5
+ 1. Define topic and strict time window
6
+ 2. Resolve source selection (`auto|all|explicit`)
7
+ 3. Run research workflow command
8
+ 4. Persist context/report artifacts
9
+ 5. Validate source diversity and freshness
10
+
11
+ ## Cross-source corroboration workflow
12
+
13
+ 1. Identify claims from first-pass output
14
+ 2. Require at least two independent source records for critical claims
15
+ 3. Mark unsupported claims as tentative
16
+ 4. Escalate when corroboration is missing
17
+
18
+ ## Backoff/retry workflow
19
+
20
+ 1. Detect repeated 429/upstream throttling
21
+ 2. Honor retry windows and bounded retries
22
+ 3. Resume from persisted context artifact
23
+ 4. Report partial coverage when limits persist
24
+
25
+ ## Compact handoff workflow
26
+
27
+ 1. Produce compact summary with key findings
28
+ 2. Include unresolved risks and missing evidence
29
+ 3. Attach artifact paths for replay
@@ -0,0 +1,7 @@
1
+ # Compact Research Template
2
+
3
+ - Top findings:
4
+ - Source diversity:
5
+ - Key risks:
6
+ - Rate-limit/backoff notes:
7
+ - Open evidence gaps:
@@ -0,0 +1,18 @@
1
+ {
2
+ "topic": "",
3
+ "timebox": {
4
+ "days": 30
5
+ },
6
+ "issue_ids": [
7
+ "ISSUE-06",
8
+ "ISSUE-09",
9
+ "ISSUE-10",
10
+ "ISSUE-12"
11
+ ],
12
+ "highlights": [],
13
+ "records": [],
14
+ "meta": {
15
+ "source_count": 0,
16
+ "warnings": []
17
+ }
18
+ }
@@ -0,0 +1,9 @@
1
+ # Research Report
2
+
3
+ ## Executive Summary
4
+
5
+ ## Findings
6
+
7
+ ## Confidence and Gaps
8
+
9
+ ## Sources
@@ -0,0 +1,6 @@
1
+ {
2
+ "topic": "ai browser automation",
3
+ "days": 30,
4
+ "sourceSelection": "auto",
5
+ "mode": "context"
6
+ }
@@ -0,0 +1,4 @@
1
+ # Sample Output
2
+
3
+ 1. Example finding one
4
+ 2. Example finding two
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ if [[ $# -lt 2 ]]; then
5
+ echo "Usage: render-output.sh <topic> <mode>"
6
+ exit 1
7
+ fi
8
+
9
+ TOPIC="$1"
10
+ MODE="$2"
11
+
12
+ opendevbrowser research run --topic "$TOPIC" --mode "$MODE"
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ if [[ $# -lt 1 ]]; then
5
+ echo "Usage: run-research.sh <topic> [days] [mode] [source-selection] [sources]"
6
+ exit 1
7
+ fi
8
+
9
+ TOPIC="$1"
10
+ DAYS="${2:-30}"
11
+ MODE="${3:-context}"
12
+ SOURCE_SELECTION="${4:-}"
13
+ SOURCES="${5:-}"
14
+
15
+ cmd=(opendevbrowser research run --topic "$TOPIC" --days "$DAYS" --mode "$MODE")
16
+ if [[ -n "$SOURCE_SELECTION" ]]; then
17
+ cmd+=(--source-selection "$SOURCE_SELECTION")
18
+ fi
19
+ if [[ -n "$SOURCES" ]]; then
20
+ cmd+=(--sources "$SOURCES")
21
+ fi
22
+
23
+ "${cmd[@]}"
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ skill_file="$root/SKILL.md"
6
+
7
+ required=(
8
+ "artifacts/research-workflows.md"
9
+ "assets/templates/compact.md"
10
+ "assets/templates/context.json"
11
+ "assets/templates/report.md"
12
+ "scripts/run-research.sh"
13
+ "scripts/render-output.sh"
14
+ "scripts/write-artifacts.sh"
15
+ "scripts/validate-skill-assets.sh"
16
+ )
17
+
18
+ status=0
19
+ for rel in "${required[@]}"; do
20
+ if [[ ! -f "$root/$rel" ]]; then
21
+ echo "Missing required asset: $rel" >&2
22
+ status=1
23
+ fi
24
+ if ! grep -Fq "$rel" "$skill_file"; then
25
+ echo "SKILL.md missing reference: $rel" >&2
26
+ status=1
27
+ fi
28
+ done
29
+
30
+ for rel in scripts/run-research.sh scripts/render-output.sh scripts/write-artifacts.sh scripts/validate-skill-assets.sh; do
31
+ if [[ -f "$root/$rel" && ! -x "$root/$rel" ]]; then
32
+ echo "Script is not executable: $rel" >&2
33
+ status=1
34
+ fi
35
+ done
36
+
37
+ if [[ -f "$root/assets/templates/context.json" ]]; then
38
+ 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
+ echo "Invalid JSON template: assets/templates/context.json" >&2
40
+ status=1
41
+ fi
42
+ fi
43
+
44
+ if [[ $status -ne 0 ]]; then
45
+ exit $status
46
+ fi
47
+
48
+ echo "Research skill assets validated."
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ if [[ $# -lt 2 ]]; then
5
+ echo "Usage: write-artifacts.sh <topic> <output-dir>"
6
+ exit 1
7
+ fi
8
+
9
+ TOPIC="$1"
10
+ OUTDIR="$2"
11
+
12
+ json_output="$(opendevbrowser research run --topic "$TOPIC" --mode path --output-dir "$OUTDIR" --output-format json)"
13
+ printf '%s\n' "$json_output"
14
+
15
+ 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);')"
16
+ if [[ -z "$artifact_path" || ! -d "$artifact_path" ]]; then
17
+ manifest_path="$(find "$OUTDIR" -maxdepth 4 -type f -name bundle-manifest.json 2>/dev/null | head -n 1)"
18
+ if [[ -n "$manifest_path" ]]; then
19
+ artifact_path="$(dirname "$manifest_path")"
20
+ fi
21
+ fi
22
+
23
+ if [[ -z "$artifact_path" || ! -d "$artifact_path" ]]; then
24
+ echo "Artifact path not found for output dir: $OUTDIR" >&2
25
+ exit 2
26
+ fi
27
+
28
+ node -e 'console.log(JSON.stringify({ data: { path: process.argv[1] } }));' "$artifact_path"
29
+ echo "Artifacts ready: $artifact_path"
@@ -0,0 +1,118 @@
1
+ ---
2
+ name: opendevbrowser-shopping
3
+ description: Deterministic multi-provider shopping and deal-comparison workflow.
4
+ version: 2.0.0
5
+ ---
6
+
7
+ # Shopping Skill
8
+
9
+ Use this skill for robust deal hunting across providers with market-baseline validation and savings analysis.
10
+
11
+ ## Pack Contents
12
+
13
+ - `artifacts/deal-hunting-workflows.md`
14
+ - `assets/templates/deals-context.json`
15
+ - `assets/templates/deals-table.md`
16
+ - `assets/templates/market-analysis.json`
17
+ - `assets/templates/deal-thresholds.json`
18
+ - `scripts/run-shopping.sh`
19
+ - `scripts/normalize-offers.sh`
20
+ - `scripts/render-deals.sh`
21
+ - `scripts/analyze-market.sh`
22
+ - `scripts/run-deal-hunt.sh`
23
+ - `scripts/validate-skill-assets.sh`
24
+ - Shared robustness matrix: `../opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md`
25
+
26
+ ## Fast Start
27
+
28
+ ```bash
29
+ ./skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh
30
+ ./skills/opendevbrowser-shopping/scripts/run-shopping.sh "wireless earbuds" context best_deal
31
+ ./skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh "wireless earbuds" "shopping/amazon,shopping/walmart"
32
+ ```
33
+
34
+ ## Deal-Hunting Model
35
+
36
+ Use a two-layer check for each offer:
37
+
38
+ 1. Provider discount check
39
+ - Compare listed total to provider anchor price (MSRP/list/original) when available.
40
+ - Capture absolute savings and percentage savings.
41
+
42
+ 2. Market baseline check
43
+ - Compare listed total against cross-provider market average and median.
44
+ - Flag offers that are truly cheaper than market, not just marked "on sale".
45
+
46
+ ## Parallel Multitab Alignment
47
+
48
+ - Apply shared concurrency policy from `../opendevbrowser-best-practices/SKILL.md` ("Parallel Operations").
49
+ - Validate shopping workflows across `managed`, `extension`, and `cdpConnect` when browser-backed provider paths are exercised.
50
+ - Keep one session per worker for parallel offer collection and avoid session-level target contention.
51
+
52
+ ## Savings Math
53
+
54
+ Per offer:
55
+ - `total_price = item_price + shipping`
56
+ - `anchor_savings_abs = max(anchor_price - total_price, 0)`
57
+ - `anchor_savings_pct = anchor_savings_abs / anchor_price * 100`
58
+
59
+ Per market group (same currency):
60
+ - `market_avg = average(total_price)`
61
+ - `market_median = median(total_price)`
62
+ - `market_savings_abs = market_avg - offer_total`
63
+ - `market_savings_pct = market_savings_abs / market_avg * 100`
64
+
65
+ This captures both:
66
+ - high-percentage discounts (for example 50% off)
67
+ - high-absolute savings (for example $500 saved)
68
+
69
+ ## Robustness Coverage (Known-Issue Matrix)
70
+
71
+ Matrix source: `../opendevbrowser-best-practices/artifacts/browser-agent-known-issues-matrix.md`
72
+
73
+ - `ISSUE-06`: rate-limit/backoff handling while collecting offers
74
+ - `ISSUE-09`: dedupe and pagination drift controls in offer collection
75
+ - `ISSUE-10`: currency normalization and same-currency grouping
76
+ - `ISSUE-11`: weak/missing anchor price detection
77
+ - `ISSUE-12`: stale price and unsupported claim controls
78
+
79
+ ## Canonical Workflow
80
+
81
+ 1. Run shopping search across selected providers.
82
+ 2. Normalize offers into stable records.
83
+ 3. Compute market analysis with `analyze-market.sh`.
84
+ 4. Render markdown/json summary for user decision.
85
+
86
+ ```bash
87
+ opendevbrowser shopping run --query "<query>" --providers shopping/amazon,shopping/walmart --mode json --output-format json
88
+ ```
89
+
90
+ ## Classification Heuristics
91
+
92
+ Default tags from analysis script:
93
+ - `high_percent` when anchor discount percent exceeds threshold.
94
+ - `high_absolute` when anchor discount absolute exceeds threshold.
95
+ - `high_value` when both are true.
96
+ - `market_beating` when offer is materially below market average.
97
+
98
+ Threshold defaults are in `assets/templates/deal-thresholds.json`.
99
+
100
+ Confidence model:
101
+ - score combines sample size, anchor coverage, and freshness coverage.
102
+ - warnings call out low-sample, missing-anchor, and stale/missing timestamp risk.
103
+
104
+ ## Good Deal Decision Rules
105
+
106
+ Mark as strong only when at least one is true:
107
+ - anchor discount is material and market gap is positive
108
+ - market price is materially below average/median even without anchor
109
+
110
+ Avoid false positives:
111
+ - anchor discount exists but market total is not competitive
112
+ - low total due to unavailable stock or hidden constraints
113
+
114
+ ## References
115
+
116
+ - FTC Guides Against Deceptive Pricing (16 CFR 233): https://www.ecfr.gov/current/title-16/chapter-I/subchapter-B/part-233
117
+ - NIST SP 1181 (unit pricing and value comparison): https://www.nist.gov/publications/unit-pricing-guide
118
+ - Schema.org Offer (price metadata): https://schema.org/Offer