opendevbrowser 0.0.33 → 0.0.35

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 (301) hide show
  1. package/README.md +1 -1
  2. package/dist/{accessibility-snapshot-JSPFVWZ6.js → accessibility-snapshot-TAFPVLZN.js} +9 -9
  3. package/dist/{active-window-2OB2MSCR.js → active-window-MHFMC6NQ.js} +9 -9
  4. package/dist/{annotate-VDZBZBKZ.js → annotate-5ZFRFQ4B.js} +8 -8
  5. package/dist/{attr-7XIO4MCH.js → attr-MBF2UCRF.js} +8 -8
  6. package/dist/browser/browser-manager.d.ts +6 -1
  7. package/dist/browser/browser-manager.d.ts.map +1 -1
  8. package/dist/browser/manager-types.d.ts +51 -0
  9. package/dist/browser/manager-types.d.ts.map +1 -1
  10. package/dist/browser/ops-browser-manager.d.ts +2 -1
  11. package/dist/browser/ops-browser-manager.d.ts.map +1 -1
  12. package/dist/browser/screencast-recorder.d.ts +1 -0
  13. package/dist/browser/screencast-recorder.d.ts.map +1 -1
  14. package/dist/{canvas-N4PAA274.js → canvas-CAMD22YU.js} +8 -8
  15. package/dist/{capture-desktop-T5YO3EBI.js → capture-desktop-TMZSFA5R.js} +9 -9
  16. package/dist/{capture-window-UKEUBWKH.js → capture-window-NZDKD2AE.js} +9 -9
  17. package/dist/{check-PQB6KKMN.js → check-MO33GTQ4.js} +8 -8
  18. package/dist/{checked-RNZIMCU6.js → checked-3HDF5X2M.js} +8 -8
  19. package/dist/{chunk-YRRRUGSQ.js → chunk-32ZSOZND.js} +2 -2
  20. package/dist/{chunk-EOX6U6Q4.js → chunk-AHQC4A6P.js} +896 -118
  21. package/dist/chunk-AHQC4A6P.js.map +1 -0
  22. package/dist/{chunk-IBIHDGTZ.js → chunk-B5XIJQXO.js} +32 -4
  23. package/dist/chunk-B5XIJQXO.js.map +1 -0
  24. package/dist/{chunk-FDBUB7BM.js → chunk-BHZLEFXW.js} +2 -2
  25. package/dist/{chunk-JROW6ZNN.js → chunk-FJZY3Z3X.js} +3 -3
  26. package/dist/{chunk-J3KYGJRQ.js → chunk-G6NQ7WYD.js} +2 -2
  27. package/dist/{chunk-27W46IKI.js → chunk-HM4CO3EW.js} +38 -23
  28. package/dist/chunk-HM4CO3EW.js.map +1 -0
  29. package/dist/{chunk-SKFB5ICF.js → chunk-TI5I6UWY.js} +8 -3
  30. package/dist/chunk-TI5I6UWY.js.map +1 -0
  31. package/dist/{chunk-52ZIOWVU.js → chunk-UEAXTWGT.js} +3 -3
  32. package/dist/{chunk-ZGCTC5YM.js → chunk-UVD34RA2.js} +33 -1
  33. package/dist/chunk-UVD34RA2.js.map +1 -0
  34. package/dist/{chunk-W6YPVNDX.js → chunk-VTGG5ZU2.js} +2 -2
  35. package/dist/{chunk-FBKPDILE.js → chunk-WTWSBEBW.js} +5954 -436
  36. package/dist/chunk-WTWSBEBW.js.map +1 -0
  37. package/dist/{chunk-NURQB55J.js → chunk-WY72GYAH.js} +2 -2
  38. package/dist/{chunk-MJF67OTH.js → chunk-XSSPNVMS.js} +3 -3
  39. package/dist/{chunk-MJF67OTH.js.map → chunk-XSSPNVMS.js.map} +1 -1
  40. package/dist/{chunk-HMRANSDX.js → chunk-Z3ADLR7I.js} +698 -18
  41. package/dist/chunk-Z3ADLR7I.js.map +1 -0
  42. package/dist/cli/commands/inspiredesign.d.ts +12 -1
  43. package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
  44. package/dist/cli/daemon-commands.d.ts.map +1 -1
  45. package/dist/cli/help.d.ts.map +1 -1
  46. package/dist/cli/index.js +76 -76
  47. package/dist/cli/index.js.map +1 -1
  48. package/dist/cli/utils/parse.d.ts +1 -0
  49. package/dist/cli/utils/parse.d.ts.map +1 -1
  50. package/dist/cli/utils/workflow-message.d.ts.map +1 -1
  51. package/dist/{click-U7ZFKSB4.js → click-SWZPJO2U.js} +8 -8
  52. package/dist/{clone-component-SWYAORTU.js → clone-component-YTB46YU4.js} +7 -7
  53. package/dist/{clone-page-WJ6UJOJG.js → clone-page-5FMPHQ3A.js} +7 -7
  54. package/dist/{close-NAVIHZ2T.js → close-22SNMDX3.js} +7 -7
  55. package/dist/{close-VKIGIKVT.js → close-ORQZCZ2E.js} +7 -7
  56. package/dist/{connect-XVG2MOZL.js → connect-EWYITNQU.js} +8 -8
  57. package/dist/{console-poll-XI5BZPL7.js → console-poll-LJR6ZTDK.js} +8 -8
  58. package/dist/{cookie-import-QELKE7TK.js → cookie-import-PTAIWPEC.js} +7 -7
  59. package/dist/{cookie-list-QDA6KWIY.js → cookie-list-76C35B5B.js} +7 -7
  60. package/dist/{daemon-CA4UIIZQ.js → daemon-UKJMDLCB.js} +6 -6
  61. package/dist/daemon-fingerprint.json +1 -1
  62. package/dist/{debug-trace-snapshot-AT4GAO57.js → debug-trace-snapshot-PQ5FJART.js} +8 -8
  63. package/dist/{dialog-O3V2IBFH.js → dialog-WLJDWJV4.js} +8 -8
  64. package/dist/{disconnect-NAX5TPTG.js → disconnect-FNB4JC2U.js} +7 -7
  65. package/dist/{enabled-VT4FJXDX.js → enabled-PYMCOQPC.js} +8 -8
  66. package/dist/{goto-GBJG5NC4.js → goto-UNTEW4VI.js} +8 -8
  67. package/dist/guidance/context.d.ts +10 -0
  68. package/dist/guidance/context.d.ts.map +1 -1
  69. package/dist/guidance/readiness.d.ts.map +1 -1
  70. package/dist/guidance/recipes/generic.d.ts.map +1 -1
  71. package/dist/guidance/recipes/pinterest.d.ts.map +1 -1
  72. package/dist/guidance/recipes/site-recipe-validation.d.ts +27 -0
  73. package/dist/guidance/recipes/site-recipe-validation.d.ts.map +1 -0
  74. package/dist/guidance/types.d.ts +5 -0
  75. package/dist/guidance/types.d.ts.map +1 -1
  76. package/dist/{help-SUI4H77K.js → help-QOLCIB3P.js} +8 -7
  77. package/dist/{help-SUI4H77K.js.map → help-QOLCIB3P.js.map} +1 -1
  78. package/dist/{hover-476ZNQZE.js → hover-ZWY4YOM4.js} +8 -8
  79. package/dist/{html-5C4TXOV3.js → html-M46YBFT3.js} +8 -8
  80. package/dist/index.js +83 -23
  81. package/dist/index.js.map +1 -1
  82. package/dist/{inspector-73ARPCIV.js → inspector-6YAOI74U.js} +10 -10
  83. package/dist/{inspector-audit-QT6QY7KS.js → inspector-audit-PF64X6SJ.js} +12 -12
  84. package/dist/{inspector-plan-JRNSGN2Z.js → inspector-plan-IUGTQV3Q.js} +10 -10
  85. package/dist/inspiredesign/capture-mode.d.ts +8 -0
  86. package/dist/inspiredesign/capture-mode.d.ts.map +1 -1
  87. package/dist/inspiredesign/capture.d.ts +36 -1
  88. package/dist/inspiredesign/capture.d.ts.map +1 -1
  89. package/dist/inspiredesign/contract.d.ts +25 -0
  90. package/dist/inspiredesign/contract.d.ts.map +1 -1
  91. package/dist/inspiredesign/handoff.d.ts +6 -2
  92. package/dist/inspiredesign/handoff.d.ts.map +1 -1
  93. package/dist/inspiredesign/media-analysis/analyzer.d.ts +13 -0
  94. package/dist/inspiredesign/media-analysis/analyzer.d.ts.map +1 -0
  95. package/dist/inspiredesign/media-analysis/design-guidance.d.ts +11 -0
  96. package/dist/inspiredesign/media-analysis/design-guidance.d.ts.map +1 -0
  97. package/dist/inspiredesign/media-analysis/ffmpeg.d.ts +21 -0
  98. package/dist/inspiredesign/media-analysis/ffmpeg.d.ts.map +1 -0
  99. package/dist/inspiredesign/media-analysis/ffprobe.d.ts +8 -0
  100. package/dist/inspiredesign/media-analysis/ffprobe.d.ts.map +1 -0
  101. package/dist/inspiredesign/media-analysis/index.d.ts +10 -0
  102. package/dist/inspiredesign/media-analysis/index.d.ts.map +1 -0
  103. package/dist/inspiredesign/media-analysis/persist.d.ts +6 -0
  104. package/dist/inspiredesign/media-analysis/persist.d.ts.map +1 -0
  105. package/dist/inspiredesign/media-analysis/pixel.d.ts +9 -0
  106. package/dist/inspiredesign/media-analysis/pixel.d.ts.map +1 -0
  107. package/dist/inspiredesign/media-analysis/types.d.ts +163 -0
  108. package/dist/inspiredesign/media-analysis/types.d.ts.map +1 -0
  109. package/dist/inspiredesign/media-analysis/typography-structure.d.ts +3 -0
  110. package/dist/inspiredesign/media-analysis/typography-structure.d.ts.map +1 -0
  111. package/dist/inspiredesign/meta-prompt.d.ts.map +1 -1
  112. package/dist/inspiredesign/motion-evidence.d.ts +73 -0
  113. package/dist/inspiredesign/motion-evidence.d.ts.map +1 -0
  114. package/dist/inspiredesign/pinterest-media-classification.d.ts +27 -0
  115. package/dist/inspiredesign/pinterest-media-classification.d.ts.map +1 -0
  116. package/dist/inspiredesign/pinterest-pin-media-evidence.d.ts +151 -0
  117. package/dist/inspiredesign/pinterest-pin-media-evidence.d.ts.map +1 -0
  118. package/dist/inspiredesign/product-readiness.d.ts +97 -0
  119. package/dist/inspiredesign/product-readiness.d.ts.map +1 -0
  120. package/dist/inspiredesign/reference-pattern-board.d.ts +32 -2
  121. package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
  122. package/dist/inspiredesign/visual-evidence.d.ts +5 -0
  123. package/dist/inspiredesign/visual-evidence.d.ts.map +1 -1
  124. package/dist/{inspiredesign-IPVZDLSQ.js → inspiredesign-GZIEXETS.js} +101 -31
  125. package/dist/inspiredesign-GZIEXETS.js.map +1 -0
  126. package/dist/{launch-B35YDRQC.js → launch-I7WNLWLY.js} +8 -8
  127. package/dist/{list-YETWKTKY.js → list-BAECFJI7.js} +7 -7
  128. package/dist/{list-JV55JVGB.js → list-BCF4HZ2K.js} +7 -7
  129. package/dist/{macro-resolve-DQK4B3W3.js → macro-resolve-4GNZYHHW.js} +9 -9
  130. package/dist/{network-poll-4GWHCJXI.js → network-poll-DCZ5ZNLP.js} +8 -8
  131. package/dist/{new-XDCQPIEG.js → new-6KZYJTJG.js} +7 -7
  132. package/dist/{open-GIM3ZCSV.js → open-JPGEAJHJ.js} +7 -7
  133. package/dist/opendevbrowser.js +83 -23
  134. package/dist/opendevbrowser.js.map +1 -1
  135. package/dist/{perf-26VBXDPI.js → perf-5X367PRP.js} +8 -8
  136. package/dist/{pointer-down-O3VSNAXW.js → pointer-down-5OAUDDNR.js} +9 -9
  137. package/dist/{pointer-drag-WQ5QGE6J.js → pointer-drag-LIW5PY5P.js} +9 -9
  138. package/dist/{pointer-move-4N4D7JY2.js → pointer-move-7AMURLJD.js} +9 -9
  139. package/dist/{pointer-up-CQC4NPDX.js → pointer-up-EY652YWL.js} +9 -9
  140. package/dist/{press-XGJD45CU.js → press-UIAE5XEF.js} +8 -8
  141. package/dist/{product-video-HD4ZOUI7.js → product-video-B6TLS7VC.js} +10 -10
  142. package/dist/providers/browser-native-discovery.d.ts.map +1 -1
  143. package/dist/providers/browser-output-artifacts.d.ts +13 -0
  144. package/dist/providers/browser-output-artifacts.d.ts.map +1 -0
  145. package/dist/providers/renderer.d.ts +10 -1
  146. package/dist/providers/renderer.d.ts.map +1 -1
  147. package/dist/providers/workflows.d.ts +53 -2
  148. package/dist/providers/workflows.d.ts.map +1 -1
  149. package/dist/{providers-KKNPJSQK.js → providers-AERTX6X4.js} +5 -3
  150. package/dist/public-surface/generated-manifest.d.ts +4 -4
  151. package/dist/public-surface/generated-manifest.d.ts.map +1 -1
  152. package/dist/public-surface/source.d.ts +2 -2
  153. package/dist/public-surface/source.d.ts.map +1 -1
  154. package/dist/{research-VUWWEQ4R.js → research-AJH6ECYW.js} +10 -10
  155. package/dist/{review-LZ3TA7U7.js → review-RN6XF2YB.js} +9 -9
  156. package/dist/{review-desktop-LAO7U7T3.js → review-desktop-UJOUS7K2.js} +9 -9
  157. package/dist/{rpc-HKNIVFGC.js → rpc-VS5Y5FUT.js} +8 -8
  158. package/dist/{run-SHCF53FO.js → run-EVRIQW7S.js} +6 -6
  159. package/dist/{screencast-start-JHMQZVWJ.js → screencast-start-U6J4FYU4.js} +8 -8
  160. package/dist/{screencast-stop-RWQTWWQS.js → screencast-stop-EQUPRGMP.js} +8 -8
  161. package/dist/{screenshot-QHFYO6PB.js → screenshot-BENYGC36.js} +8 -8
  162. package/dist/{scroll-L3FTMAV4.js → scroll-3OALQLX2.js} +8 -8
  163. package/dist/{scroll-into-view-JVDHX4WU.js → scroll-into-view-SNZKBIVB.js} +8 -8
  164. package/dist/{select-X4BO7GTB.js → select-JDZDDC3Y.js} +8 -8
  165. package/dist/{serve-JIMIBCNO.js → serve-LOC6ESJ4.js} +7 -7
  166. package/dist/{shopping-EGSDP2GL.js → shopping-267OAYGM.js} +10 -10
  167. package/dist/{snapshot-QGJ7RDNV.js → snapshot-ASYI5UFR.js} +8 -8
  168. package/dist/{status-CKGPNYIH.js → status-47CI4LJX.js} +7 -7
  169. package/dist/{status-LEBY2X7N.js → status-N4O6DJTF.js} +9 -9
  170. package/dist/{status-capabilities-6QTWNGKM.js → status-capabilities-C777JZG4.js} +9 -9
  171. package/dist/{text-VUZU7D3L.js → text-MS2653MW.js} +8 -8
  172. package/dist/tools/inspiredesign_run.d.ts.map +1 -1
  173. package/dist/tools/product_video_run.d.ts.map +1 -1
  174. package/dist/{type-N5SURP74.js → type-UMPSDACC.js} +8 -8
  175. package/dist/{uncheck-JFMK3SSY.js → uncheck-2OZ56D42.js} +8 -8
  176. package/dist/{upload-KFUYLL7M.js → upload-CD7PRH54.js} +8 -8
  177. package/dist/{use-CNMPP2ED.js → use-MO67AGG7.js} +7 -7
  178. package/dist/{value-J335MPZE.js → value-4GI2LRUY.js} +8 -8
  179. package/dist/{visible-YQZWWPBZ.js → visible-VSUFGRFZ.js} +8 -8
  180. package/dist/{wait-IC7YJJPJ.js → wait-OQYMFENT.js} +8 -8
  181. package/dist/{windows-AGVQ3KX3.js → windows-75W2JCW7.js} +9 -9
  182. package/extension/manifest.json +1 -1
  183. package/package.json +1 -1
  184. package/skills/opendevbrowser-best-practices/SKILL.md +41 -30
  185. package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +12 -8
  186. package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +1 -0
  187. package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +19 -0
  188. package/skills/opendevbrowser-best-practices/assets/templates/mode-flag-matrix.json +23 -13
  189. package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +3 -1
  190. package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +62 -21
  191. package/skills/opendevbrowser-best-practices/scripts/resolve-odb-cli.sh +28 -0
  192. package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +15 -0
  193. package/skills/opendevbrowser-best-practices/scripts/validator-fixture-cli.sh +13 -0
  194. package/skills/opendevbrowser-design-agent/SKILL.md +2 -0
  195. package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +15 -13
  196. package/skills/opendevbrowser-design-agent/artifacts/isolated-preview-validation.md +1 -1
  197. package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +14 -7
  198. package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +1 -0
  199. package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +10 -7
  200. package/skills/opendevbrowser-motion-design/SKILL.md +1 -1
  201. package/skills/opendevbrowser-product-presentation-asset/SKILL.md +5 -4
  202. package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +1 -0
  203. package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +1 -0
  204. package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +1 -0
  205. package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +4 -0
  206. package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +1 -0
  207. package/skills/opendevbrowser-research/SKILL.md +1 -0
  208. package/skills/opendevbrowser-research/scripts/render-output.sh +1 -0
  209. package/skills/opendevbrowser-research/scripts/run-research.sh +1 -0
  210. package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +4 -0
  211. package/skills/opendevbrowser-research/scripts/write-artifacts.sh +1 -0
  212. package/skills/opendevbrowser-shopping/SKILL.md +1 -0
  213. package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +1 -0
  214. package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +1 -0
  215. package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +1 -0
  216. package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +4 -0
  217. package/dist/chunk-27W46IKI.js.map +0 -1
  218. package/dist/chunk-EOX6U6Q4.js.map +0 -1
  219. package/dist/chunk-FBKPDILE.js.map +0 -1
  220. package/dist/chunk-HMRANSDX.js.map +0 -1
  221. package/dist/chunk-IBIHDGTZ.js.map +0 -1
  222. package/dist/chunk-SKFB5ICF.js.map +0 -1
  223. package/dist/chunk-ZGCTC5YM.js.map +0 -1
  224. package/dist/inspiredesign-IPVZDLSQ.js.map +0 -1
  225. /package/dist/{accessibility-snapshot-JSPFVWZ6.js.map → accessibility-snapshot-TAFPVLZN.js.map} +0 -0
  226. /package/dist/{active-window-2OB2MSCR.js.map → active-window-MHFMC6NQ.js.map} +0 -0
  227. /package/dist/{annotate-VDZBZBKZ.js.map → annotate-5ZFRFQ4B.js.map} +0 -0
  228. /package/dist/{attr-7XIO4MCH.js.map → attr-MBF2UCRF.js.map} +0 -0
  229. /package/dist/{canvas-N4PAA274.js.map → canvas-CAMD22YU.js.map} +0 -0
  230. /package/dist/{capture-desktop-T5YO3EBI.js.map → capture-desktop-TMZSFA5R.js.map} +0 -0
  231. /package/dist/{capture-window-UKEUBWKH.js.map → capture-window-NZDKD2AE.js.map} +0 -0
  232. /package/dist/{check-PQB6KKMN.js.map → check-MO33GTQ4.js.map} +0 -0
  233. /package/dist/{checked-RNZIMCU6.js.map → checked-3HDF5X2M.js.map} +0 -0
  234. /package/dist/{chunk-YRRRUGSQ.js.map → chunk-32ZSOZND.js.map} +0 -0
  235. /package/dist/{chunk-FDBUB7BM.js.map → chunk-BHZLEFXW.js.map} +0 -0
  236. /package/dist/{chunk-JROW6ZNN.js.map → chunk-FJZY3Z3X.js.map} +0 -0
  237. /package/dist/{chunk-J3KYGJRQ.js.map → chunk-G6NQ7WYD.js.map} +0 -0
  238. /package/dist/{chunk-52ZIOWVU.js.map → chunk-UEAXTWGT.js.map} +0 -0
  239. /package/dist/{chunk-W6YPVNDX.js.map → chunk-VTGG5ZU2.js.map} +0 -0
  240. /package/dist/{chunk-NURQB55J.js.map → chunk-WY72GYAH.js.map} +0 -0
  241. /package/dist/{click-U7ZFKSB4.js.map → click-SWZPJO2U.js.map} +0 -0
  242. /package/dist/{clone-component-SWYAORTU.js.map → clone-component-YTB46YU4.js.map} +0 -0
  243. /package/dist/{clone-page-WJ6UJOJG.js.map → clone-page-5FMPHQ3A.js.map} +0 -0
  244. /package/dist/{close-NAVIHZ2T.js.map → close-22SNMDX3.js.map} +0 -0
  245. /package/dist/{close-VKIGIKVT.js.map → close-ORQZCZ2E.js.map} +0 -0
  246. /package/dist/{connect-XVG2MOZL.js.map → connect-EWYITNQU.js.map} +0 -0
  247. /package/dist/{console-poll-XI5BZPL7.js.map → console-poll-LJR6ZTDK.js.map} +0 -0
  248. /package/dist/{cookie-import-QELKE7TK.js.map → cookie-import-PTAIWPEC.js.map} +0 -0
  249. /package/dist/{cookie-list-QDA6KWIY.js.map → cookie-list-76C35B5B.js.map} +0 -0
  250. /package/dist/{daemon-CA4UIIZQ.js.map → daemon-UKJMDLCB.js.map} +0 -0
  251. /package/dist/{debug-trace-snapshot-AT4GAO57.js.map → debug-trace-snapshot-PQ5FJART.js.map} +0 -0
  252. /package/dist/{dialog-O3V2IBFH.js.map → dialog-WLJDWJV4.js.map} +0 -0
  253. /package/dist/{disconnect-NAX5TPTG.js.map → disconnect-FNB4JC2U.js.map} +0 -0
  254. /package/dist/{enabled-VT4FJXDX.js.map → enabled-PYMCOQPC.js.map} +0 -0
  255. /package/dist/{goto-GBJG5NC4.js.map → goto-UNTEW4VI.js.map} +0 -0
  256. /package/dist/{hover-476ZNQZE.js.map → hover-ZWY4YOM4.js.map} +0 -0
  257. /package/dist/{html-5C4TXOV3.js.map → html-M46YBFT3.js.map} +0 -0
  258. /package/dist/{inspector-73ARPCIV.js.map → inspector-6YAOI74U.js.map} +0 -0
  259. /package/dist/{inspector-audit-QT6QY7KS.js.map → inspector-audit-PF64X6SJ.js.map} +0 -0
  260. /package/dist/{inspector-plan-JRNSGN2Z.js.map → inspector-plan-IUGTQV3Q.js.map} +0 -0
  261. /package/dist/{launch-B35YDRQC.js.map → launch-I7WNLWLY.js.map} +0 -0
  262. /package/dist/{list-YETWKTKY.js.map → list-BAECFJI7.js.map} +0 -0
  263. /package/dist/{list-JV55JVGB.js.map → list-BCF4HZ2K.js.map} +0 -0
  264. /package/dist/{macro-resolve-DQK4B3W3.js.map → macro-resolve-4GNZYHHW.js.map} +0 -0
  265. /package/dist/{network-poll-4GWHCJXI.js.map → network-poll-DCZ5ZNLP.js.map} +0 -0
  266. /package/dist/{new-XDCQPIEG.js.map → new-6KZYJTJG.js.map} +0 -0
  267. /package/dist/{open-GIM3ZCSV.js.map → open-JPGEAJHJ.js.map} +0 -0
  268. /package/dist/{perf-26VBXDPI.js.map → perf-5X367PRP.js.map} +0 -0
  269. /package/dist/{pointer-down-O3VSNAXW.js.map → pointer-down-5OAUDDNR.js.map} +0 -0
  270. /package/dist/{pointer-drag-WQ5QGE6J.js.map → pointer-drag-LIW5PY5P.js.map} +0 -0
  271. /package/dist/{pointer-move-4N4D7JY2.js.map → pointer-move-7AMURLJD.js.map} +0 -0
  272. /package/dist/{pointer-up-CQC4NPDX.js.map → pointer-up-EY652YWL.js.map} +0 -0
  273. /package/dist/{press-XGJD45CU.js.map → press-UIAE5XEF.js.map} +0 -0
  274. /package/dist/{product-video-HD4ZOUI7.js.map → product-video-B6TLS7VC.js.map} +0 -0
  275. /package/dist/{providers-KKNPJSQK.js.map → providers-AERTX6X4.js.map} +0 -0
  276. /package/dist/{research-VUWWEQ4R.js.map → research-AJH6ECYW.js.map} +0 -0
  277. /package/dist/{review-LZ3TA7U7.js.map → review-RN6XF2YB.js.map} +0 -0
  278. /package/dist/{review-desktop-LAO7U7T3.js.map → review-desktop-UJOUS7K2.js.map} +0 -0
  279. /package/dist/{rpc-HKNIVFGC.js.map → rpc-VS5Y5FUT.js.map} +0 -0
  280. /package/dist/{run-SHCF53FO.js.map → run-EVRIQW7S.js.map} +0 -0
  281. /package/dist/{screencast-start-JHMQZVWJ.js.map → screencast-start-U6J4FYU4.js.map} +0 -0
  282. /package/dist/{screencast-stop-RWQTWWQS.js.map → screencast-stop-EQUPRGMP.js.map} +0 -0
  283. /package/dist/{screenshot-QHFYO6PB.js.map → screenshot-BENYGC36.js.map} +0 -0
  284. /package/dist/{scroll-L3FTMAV4.js.map → scroll-3OALQLX2.js.map} +0 -0
  285. /package/dist/{scroll-into-view-JVDHX4WU.js.map → scroll-into-view-SNZKBIVB.js.map} +0 -0
  286. /package/dist/{select-X4BO7GTB.js.map → select-JDZDDC3Y.js.map} +0 -0
  287. /package/dist/{serve-JIMIBCNO.js.map → serve-LOC6ESJ4.js.map} +0 -0
  288. /package/dist/{shopping-EGSDP2GL.js.map → shopping-267OAYGM.js.map} +0 -0
  289. /package/dist/{snapshot-QGJ7RDNV.js.map → snapshot-ASYI5UFR.js.map} +0 -0
  290. /package/dist/{status-CKGPNYIH.js.map → status-47CI4LJX.js.map} +0 -0
  291. /package/dist/{status-LEBY2X7N.js.map → status-N4O6DJTF.js.map} +0 -0
  292. /package/dist/{status-capabilities-6QTWNGKM.js.map → status-capabilities-C777JZG4.js.map} +0 -0
  293. /package/dist/{text-VUZU7D3L.js.map → text-MS2653MW.js.map} +0 -0
  294. /package/dist/{type-N5SURP74.js.map → type-UMPSDACC.js.map} +0 -0
  295. /package/dist/{uncheck-JFMK3SSY.js.map → uncheck-2OZ56D42.js.map} +0 -0
  296. /package/dist/{upload-KFUYLL7M.js.map → upload-CD7PRH54.js.map} +0 -0
  297. /package/dist/{use-CNMPP2ED.js.map → use-MO67AGG7.js.map} +0 -0
  298. /package/dist/{value-J335MPZE.js.map → value-4GI2LRUY.js.map} +0 -0
  299. /package/dist/{visible-YQZWWPBZ.js.map → visible-VSUFGRFZ.js.map} +0 -0
  300. /package/dist/{wait-IC7YJJPJ.js.map → wait-OQYMFENT.js.map} +0 -0
  301. /package/dist/{windows-AGVQ3KX3.js.map → windows-75W2JCW7.js.map} +0 -0
@@ -7,7 +7,7 @@ import {
7
7
  readCookiesFromSource,
8
8
  resolveBundledProviderRuntime,
9
9
  resolveSessionRelayRoute
10
- } from "./chunk-EOX6U6Q4.js";
10
+ } from "./chunk-AHQC4A6P.js";
11
11
  import {
12
12
  loadGlobalConfig,
13
13
  resolveConfig
@@ -17,14 +17,16 @@ import {
17
17
  } from "./chunk-ASMHEEKY.js";
18
18
  import {
19
19
  buildMacroResolveSuccessHandoff,
20
+ classifyPinterestCandidate,
20
21
  detectSocialSearchShell,
22
+ isCanonicalPinterestPinUrl,
21
23
  isChallengeAutomationMode,
22
24
  resolveWorkflowArtifactRoot,
23
25
  runInspiredesignWorkflow,
24
26
  runProductVideoWorkflow,
25
27
  runResearchWorkflow,
26
28
  runShoppingWorkflow
27
- } from "./chunk-FBKPDILE.js";
29
+ } from "./chunk-WTWSBEBW.js";
28
30
  import {
29
31
  buildBlockerArtifacts,
30
32
  classifyBlockerSignal,
@@ -171,11 +173,14 @@ import { createServer } from "http";
171
173
  import { createHash, timingSafeEqual } from "crypto";
172
174
  import { mkdirSync, readFileSync, writeFileSync, unlinkSync, existsSync } from "fs";
173
175
  import { homedir } from "os";
174
- import { basename, dirname as dirname2, join, resolve as resolve2 } from "path";
176
+ import { basename, dirname as dirname2, join as join2, resolve as resolve2 } from "path";
175
177
  import { fileURLToPath } from "url";
176
178
 
177
179
  // src/cli/daemon-commands.ts
178
180
  import { randomUUID as randomUUID3 } from "crypto";
181
+ import { mkdtemp, readFile, rm } from "fs/promises";
182
+ import { tmpdir } from "os";
183
+ import { join } from "path";
179
184
 
180
185
  // src/browser/session-inspector.ts
181
186
  import { randomUUID } from "crypto";
@@ -416,15 +421,31 @@ import { mkdir } from "fs/promises";
416
421
  import { dirname, resolve } from "path";
417
422
  var INSPIREDESIGN_CAPTURE_TIMEOUT_MS = 3e4;
418
423
  var INSPIREDESIGN_CAPTURE_MAX_CHARS = 12e3;
424
+ var INSPIREDESIGN_MOTION_INTERVAL_MS = 500;
425
+ var INSPIREDESIGN_MOTION_MAX_FRAMES = 3;
426
+ var INSPIREDESIGN_LATE_SCREENCAST_STOP_TIMEOUT_MS = 1e3;
427
+ var INSPIREDESIGN_PIN_MEDIA_CAPTURE_TIMEOUT_MS = 9e4;
428
+ var PINTEREST_PIN_MEDIA_EXTENSION_WARMUP_TIMEOUT_MS = 3e4;
429
+ var PINTEREST_PIN_MEDIA_NETWORK_IDLE_TIMEOUT_MS = 5e3;
430
+ var EXACT_CANONICAL_PINTEREST_PIN_HOST = "www.pinterest.com";
419
431
  var ACTIVE_SESSION_COOKIE_REUSE_UNAVAILABLE_MESSAGE = "Deep capture only honors configured provider cookie sources; active session cookies are not reused.";
420
432
  var DOM_CAPTURE_HELPER_UNAVAILABLE_MESSAGE = "DOM capture helper unavailable in this execution lane.";
421
433
  var VISUAL_CAPTURE_HELPER_UNAVAILABLE_MESSAGE = "Visual evidence screenshot helper unavailable in this execution lane.";
422
434
  var VISUAL_CAPTURE_PATH_UNAVAILABLE_MESSAGE = "Visual evidence path was not configured for screenshot capture.";
423
435
  var VISUAL_CAPTURE_EMPTY_MESSAGE = "Visual evidence screenshot did not return a file path.";
436
+ var PIN_MEDIA_CAPTURE_HELPER_UNAVAILABLE_MESSAGE = "Pinterest pin media capture helper unavailable in this execution lane.";
437
+ var PIN_MEDIA_CAPTURE_PATH_UNAVAILABLE_MESSAGE = "Pinterest pin media evidence path was not configured.";
438
+ var PIN_MEDIA_CAPTURE_NOT_FOUND_MESSAGE = "Pinterest pin media capture did not find a primary media candidate.";
439
+ var PIN_MEDIA_CAPTURE_PATH_MISMATCH_MESSAGE = "Pinterest pin media evidence temp path did not match the requested artifact path.";
440
+ var PRIMARY_CAPTURE_SESSION_UNAVAILABLE_MESSAGE = "Primary media capture session helper unavailable in this execution lane.";
441
+ var VISUAL_VIEWPORT_PROBE_FAILED_WARNING = "viewport_url_unverified";
442
+ var PINTEREST_VIEWPORT_LOGIN_WARNING = "login_or_challenge_state";
443
+ var PINTEREST_VIEWPORT_CHROME_WARNING = "interface_chrome_shell";
424
444
  var SNAPSHOT_CAPTURE_EMPTY_MESSAGE = "Snapshot capture returned empty content.";
425
445
  var CLONE_CAPTURE_EMPTY_MESSAGE = "Clone capture returned empty component and CSS previews.";
426
446
  var DOM_CAPTURE_EMPTY_MESSAGE = "DOM capture returned empty HTML.";
427
447
  var SKIPPED_AFTER_TRANSPORT_TIMEOUT_SUFFIX = "transport timeout.";
448
+ var PINTEREST_VIEWPORT_MEDIA_PROBE_MAX_NODES = 400;
428
449
  var createRemainingCaptureTimeout = (timeoutMs) => {
429
450
  const startedAtMs = Date.now();
430
451
  let firstRead = true;
@@ -436,10 +457,18 @@ var createRemainingCaptureTimeout = (timeoutMs) => {
436
457
  return Math.max(1, timeoutMs - Math.max(0, Date.now() - startedAtMs));
437
458
  };
438
459
  };
460
+ var createCappedRemainingCaptureTimeout = (remainingTimeoutMs, capMs) => {
461
+ const cappedRemainingTimeoutMs = createRemainingCaptureTimeout(capMs);
462
+ return () => Math.min(remainingTimeoutMs(), cappedRemainingTimeoutMs());
463
+ };
439
464
  var clampInspiredesignCaptureTimeout = (timeoutMs) => {
440
465
  if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs)) return INSPIREDESIGN_CAPTURE_TIMEOUT_MS;
441
466
  return Math.max(1, Math.min(timeoutMs, INSPIREDESIGN_CAPTURE_TIMEOUT_MS));
442
467
  };
468
+ var clampInspiredesignPinMediaCaptureTimeout = (timeoutMs) => {
469
+ if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs)) return INSPIREDESIGN_PIN_MEDIA_CAPTURE_TIMEOUT_MS;
470
+ return Math.max(1, Math.min(timeoutMs, INSPIREDESIGN_PIN_MEDIA_CAPTURE_TIMEOUT_MS));
471
+ };
443
472
  function sanitizeInspiredesignCaptureText(value) {
444
473
  if (value === void 0) return void 0;
445
474
  const redacted = redactSensitive(value);
@@ -473,6 +502,61 @@ var buildSkippedAfterTransportTimeoutAttempt = (label) => {
473
502
  var hasUsableCaptureText = (value) => {
474
503
  return typeof value === "string" && value.trim().length > 0;
475
504
  };
505
+ var isPinterestUrl = (value) => {
506
+ if (!value) return false;
507
+ try {
508
+ const hostname = new URL(value).hostname.toLowerCase();
509
+ return hostname === "pinterest.com" || hostname.endsWith(".pinterest.com");
510
+ } catch {
511
+ return false;
512
+ }
513
+ };
514
+ var pinterestViewportClassification = (args) => {
515
+ if (!isPinterestUrl(args.url)) return void 0;
516
+ return classifyPinterestCandidate({
517
+ url: args.url,
518
+ title: args.title,
519
+ content: [
520
+ args.content,
521
+ ...args.warnings ?? []
522
+ ].filter((value) => typeof value === "string" && value.trim().length > 0).join(" "),
523
+ html: args.html
524
+ });
525
+ };
526
+ var pinterestViewportWarnings = (args) => {
527
+ const quality = pinterestViewportClassification(args)?.sourcePageQuality;
528
+ if (quality === "login_challenge") return [PINTEREST_VIEWPORT_LOGIN_WARNING];
529
+ if (quality === "search_shell" || quality === "chrome_only") return [PINTEREST_VIEWPORT_CHROME_WARNING];
530
+ return [];
531
+ };
532
+ var pinterestViewportPageQuality = (args) => {
533
+ return pinterestViewportClassification(args)?.sourcePageQuality;
534
+ };
535
+ var normalizeMotionSourceUrlForComparison = (value) => {
536
+ if (!value) return void 0;
537
+ try {
538
+ const url = new URL(value);
539
+ if (url.protocol !== "http:" && url.protocol !== "https:") return void 0;
540
+ url.hash = "";
541
+ url.search = "";
542
+ return url.toString();
543
+ } catch {
544
+ return void 0;
545
+ }
546
+ };
547
+ var motionSourceDiagnosticReasons = (startedProbe, endedProbe) => {
548
+ const startedUrl = normalizeMotionSourceUrlForComparison(startedProbe.sourceUrl);
549
+ const endedUrl = normalizeMotionSourceUrlForComparison(endedProbe.sourceUrl);
550
+ if (!startedUrl || !endedUrl) return ["motion_source_unverified"];
551
+ return startedUrl === endedUrl ? [] : ["motion_source_changed"];
552
+ };
553
+ var motionPageQualityDiagnosticReasons = (startedProbe, endedProbe) => {
554
+ const qualities = [
555
+ { sourceUrl: startedProbe.sourceUrl, quality: startedProbe.pinterestPageQuality },
556
+ { sourceUrl: endedProbe.sourceUrl, quality: endedProbe.pinterestPageQuality }
557
+ ];
558
+ return qualities.some((entry) => isPinterestUrl(entry.sourceUrl) && entry.quality !== "pin_media") ? ["motion_source_page_quality_not_pin_media"] : [];
559
+ };
476
560
  var resolveInspiredesignCaptureCookiePolicy = (options) => {
477
561
  if (options.cookiePolicyOverride) return options.cookiePolicyOverride;
478
562
  return options.useCookies === false ? "off" : "auto";
@@ -529,6 +613,25 @@ var importConfiguredCaptureCookies = async (manager, sessionId, source, timeoutM
529
613
  sourceMessage: loaded.message
530
614
  };
531
615
  };
616
+ var prepareCaptureSessionState = async ({
617
+ manager,
618
+ sessionId,
619
+ url,
620
+ remainingTimeoutMs,
621
+ options
622
+ }) => {
623
+ const cookiePolicy = resolveInspiredesignCaptureCookiePolicy(options);
624
+ const importState = cookiePolicy === "off" ? { sourceConfigured: false, sourceAvailable: false } : await importConfiguredCaptureCookies(
625
+ manager,
626
+ sessionId,
627
+ options.cookieSource,
628
+ remainingTimeoutMs()
629
+ );
630
+ if (cookiePolicy === "required") {
631
+ await verifyRequiredCaptureCookies(manager, sessionId, url, importState, remainingTimeoutMs());
632
+ }
633
+ manager.setSessionChallengeAutomationMode?.(sessionId, options.challengeAutomationMode);
634
+ };
532
635
  var captureSnapshotArtifact = async (manager, sessionId, remainingTimeoutMs) => {
533
636
  try {
534
637
  const snapshot = await withCaptureDeadline(
@@ -628,15 +731,145 @@ var captureDomArtifact = async (manager, sessionId, remainingTimeoutMs) => {
628
731
  };
629
732
  }
630
733
  };
631
- var buildVisualEvidenceMetadata = (status, detail, warnings = [], tempPath) => ({
734
+ var buildVisualEvidenceMetadata = (status, detail, warnings = [], tempPath, sourceUrl, pinterestPageQuality) => ({
632
735
  status,
633
736
  kind: "viewport",
634
737
  fullPage: false,
635
738
  capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
739
+ ...sourceUrl ? { sourceUrl } : {},
740
+ ...pinterestPageQuality ? { pinterestPageQuality } : {},
636
741
  ...tempPath ? { tempPath } : {},
637
742
  warnings,
638
743
  ...detail ? { failure: sanitizeInspiredesignCaptureText(detail) } : {}
639
744
  });
745
+ var collectPinterestPinMediaNotFoundReasons = (result) => {
746
+ const reasons = result.rejectedCandidates.flatMap((candidate) => candidate.reasons);
747
+ return [...new Set(reasons.length > 0 ? reasons : ["pin_media_candidate_not_found"])].map((reason) => sanitizeInspiredesignCaptureText(reason)).filter((reason) => Boolean(reason));
748
+ };
749
+ var buildPinMediaEvidenceMetadata = (status, referenceId, url, detail, options = {}) => ({
750
+ status,
751
+ kind: options.kind ?? "image",
752
+ capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
753
+ referenceId,
754
+ url,
755
+ ...options.sourceUrl ? { sourceUrl: options.sourceUrl } : {},
756
+ ...options.startedSourceUrl ? { startedSourceUrl: options.startedSourceUrl } : {},
757
+ ...options.endedSourceUrl ? { endedSourceUrl: options.endedSourceUrl } : {},
758
+ ...options.pinterestPageQuality ? { pinterestPageQuality: options.pinterestPageQuality } : {},
759
+ ...options.mediaUrl ? { mediaUrl: options.mediaUrl } : {},
760
+ ...options.candidateSelector ? { candidateSelector: options.candidateSelector } : {},
761
+ ...options.candidateRole ? { candidateRole: options.candidateRole } : {},
762
+ ...options.candidateAlt ? { candidateAlt: options.candidateAlt } : {},
763
+ ...options.width ? { width: options.width } : {},
764
+ ...options.height ? { height: options.height } : {},
765
+ ...options.contentType ? { contentType: options.contentType } : {},
766
+ ...options.tempPath ? { tempPath: options.tempPath } : {},
767
+ warnings: options.warnings ?? [],
768
+ ...detail ? { failure: sanitizeInspiredesignCaptureText(detail) } : {},
769
+ rejectionReasons: options.rejectionReasons ?? []
770
+ });
771
+ var mergePinMediaWarnings = (viewportProbe, result) => [...viewportProbe.warnings, ...result.warnings ?? []];
772
+ var viewportProbeFromPinMediaResult = (result) => ({
773
+ ...result.sourceUrl ? { sourceUrl: result.sourceUrl } : {},
774
+ warnings: []
775
+ });
776
+ var hasCapturedPinMediaDirectProof = (result, sourceUrl) => Boolean(sourceUrl && result.mediaUrl && result.path);
777
+ var buildCapturedPinMediaMetadata = (result, referenceId, url, requestedPath, viewportProbe, fallbackPageQuality) => {
778
+ const sourceUrl = result.sourceUrl || viewportProbe.sourceUrl;
779
+ if (!result.path || resolve(result.path) !== resolve(requestedPath)) {
780
+ return buildPinMediaEvidenceMetadata(
781
+ "failed",
782
+ referenceId,
783
+ url,
784
+ PIN_MEDIA_CAPTURE_PATH_MISMATCH_MESSAGE,
785
+ {
786
+ kind: result.kind ?? "image",
787
+ sourceUrl,
788
+ endedSourceUrl: sourceUrl,
789
+ pinterestPageQuality: viewportProbe.pinterestPageQuality ?? fallbackPageQuality,
790
+ warnings: [...mergePinMediaWarnings(viewportProbe, result), "pin_media_temp_path_mismatch"],
791
+ rejectionReasons: ["pin_media_temp_path_mismatch"]
792
+ }
793
+ );
794
+ }
795
+ const pinterestPageQuality = hasCapturedPinMediaDirectProof(result, sourceUrl) ? "pin_media" : viewportProbe.pinterestPageQuality ?? fallbackPageQuality ?? "unknown";
796
+ return buildPinMediaEvidenceMetadata("captured", referenceId, url, void 0, {
797
+ kind: result.kind ?? "image",
798
+ tempPath: requestedPath,
799
+ sourceUrl,
800
+ endedSourceUrl: sourceUrl,
801
+ pinterestPageQuality,
802
+ mediaUrl: result.mediaUrl,
803
+ candidateSelector: result.candidateSelector,
804
+ candidateRole: result.candidateRole,
805
+ candidateAlt: result.alt,
806
+ width: result.naturalWidth ?? result.width,
807
+ height: result.naturalHeight ?? result.height,
808
+ contentType: result.contentType,
809
+ warnings: mergePinMediaWarnings(viewportProbe, result)
810
+ });
811
+ };
812
+ var capturePinterestViewportHtml = async (manager, sessionId, sourceUrl, remainingTimeoutMs) => {
813
+ if (!isPinterestUrl(sourceUrl) || typeof manager.clonePageHtmlWithOptions !== "function") return void 0;
814
+ const timeoutMs = remainingTimeoutMs();
815
+ if (timeoutMs <= 1) return void 0;
816
+ try {
817
+ const clone = await withCaptureDeadline(
818
+ manager.clonePageHtmlWithOptions(
819
+ sessionId,
820
+ void 0,
821
+ {
822
+ maxNodes: PINTEREST_VIEWPORT_MEDIA_PROBE_MAX_NODES,
823
+ inlineStyles: false
824
+ },
825
+ timeoutMs
826
+ ),
827
+ timeoutMs,
828
+ "Pinterest viewport media probe"
829
+ );
830
+ return sanitizeInspiredesignCaptureText(clone.html);
831
+ } catch {
832
+ return void 0;
833
+ }
834
+ };
835
+ var captureViewportSourceUrl = async (manager, sessionId, remainingTimeoutMs) => {
836
+ try {
837
+ const snapshot = await withCaptureDeadline(
838
+ manager.snapshot(sessionId, "outline", 1e3, void 0, void 0, remainingTimeoutMs()),
839
+ remainingTimeoutMs(),
840
+ "visual evidence viewport probe"
841
+ );
842
+ const warnings = [
843
+ ...snapshot.url ? [] : [VISUAL_VIEWPORT_PROBE_FAILED_WARNING],
844
+ ...pinterestViewportWarnings({
845
+ url: snapshot.url,
846
+ title: snapshot.title,
847
+ content: snapshot.content,
848
+ warnings: snapshot.warnings
849
+ })
850
+ ];
851
+ const html = await capturePinterestViewportHtml(
852
+ manager,
853
+ sessionId,
854
+ snapshot.url,
855
+ remainingTimeoutMs
856
+ );
857
+ const pinterestPageQuality = pinterestViewportPageQuality({
858
+ url: snapshot.url,
859
+ title: snapshot.title,
860
+ content: snapshot.content,
861
+ html,
862
+ warnings: snapshot.warnings
863
+ });
864
+ return {
865
+ ...snapshot.url ? { sourceUrl: snapshot.url } : {},
866
+ ...pinterestPageQuality ? { pinterestPageQuality } : {},
867
+ warnings
868
+ };
869
+ } catch {
870
+ return { warnings: [VISUAL_VIEWPORT_PROBE_FAILED_WARNING] };
871
+ }
872
+ };
640
873
  var captureVisualEvidenceArtifact = async (manager, sessionId, options, remainingTimeoutMs) => {
641
874
  const visualEvidence = options.visualEvidence ?? "off";
642
875
  if (visualEvidence === "off") return void 0;
@@ -654,6 +887,7 @@ var captureVisualEvidenceArtifact = async (manager, sessionId, options, remainin
654
887
  }
655
888
  try {
656
889
  await mkdir(dirname(options.visualEvidencePath), { recursive: true });
890
+ const viewportProbe = await captureViewportSourceUrl(manager, sessionId, remainingTimeoutMs);
657
891
  const screenshot = await withCaptureDeadline(
658
892
  manager.screenshot(sessionId, {
659
893
  path: options.visualEvidencePath,
@@ -668,7 +902,14 @@ var captureVisualEvidenceArtifact = async (manager, sessionId, options, remainin
668
902
  if (resolve(screenshot.path) !== resolve(options.visualEvidencePath)) {
669
903
  return buildVisualEvidenceMetadata("failed", "Visual evidence screenshot path did not match the requested artifact path.");
670
904
  }
671
- return buildVisualEvidenceMetadata("captured", void 0, screenshot.warnings ?? [], options.visualEvidencePath);
905
+ return buildVisualEvidenceMetadata(
906
+ "captured",
907
+ void 0,
908
+ [...viewportProbe.warnings, ...screenshot.warnings ?? []],
909
+ options.visualEvidencePath,
910
+ viewportProbe.sourceUrl,
911
+ viewportProbe.pinterestPageQuality
912
+ );
672
913
  } catch (error) {
673
914
  return buildVisualEvidenceMetadata(
674
915
  "failed",
@@ -715,6 +956,412 @@ var captureInspiredesignArtifacts = async (manager, sessionId, remainingTimeoutM
715
956
  const visual = await captureVisualEvidenceArtifact(manager, sessionId, options, remainingTimeoutMs);
716
957
  return buildCaptureEvidence(snapshot, clone, dom, visual);
717
958
  };
959
+ var delay = (ms) => new Promise((resolveDelay) => setTimeout(resolveDelay, ms));
960
+ var shouldForceManagedPrimaryCapture = (browserMode) => browserMode === "managed";
961
+ var exactCanonicalPinterestPinCaptureUrl = (url) => {
962
+ const trimmed = url.trim();
963
+ try {
964
+ const parsed = new URL(trimmed);
965
+ if (parsed.protocol !== "https:" && parsed.protocol !== "http:") return void 0;
966
+ if (!isCanonicalPinterestPinUrl(trimmed)) return void 0;
967
+ const pathSegments = parsed.pathname.split("/").filter(Boolean);
968
+ const pinId = pathSegments[1];
969
+ if (pathSegments[0] !== "pin" || typeof pinId !== "string") return void 0;
970
+ return `https://${EXACT_CANONICAL_PINTEREST_PIN_HOST}/pin/${pinId}/`;
971
+ } catch {
972
+ return void 0;
973
+ }
974
+ };
975
+ var shouldWarmCanonicalPinterestPinInExtension = (url, browserMode) => exactCanonicalPinterestPinCaptureUrl(url) !== void 0 && resolveCanonicalPinterestPinCaptureBrowserMode(url, browserMode) === "extension";
976
+ var captureNetworkIdleWaitTimeout = (remainingTimeoutMs, maxNetworkIdleWaitMs) => {
977
+ const remaining = remainingTimeoutMs();
978
+ if (maxNetworkIdleWaitMs === void 0) return remaining;
979
+ return Math.max(1, Math.min(remaining, maxNetworkIdleWaitMs));
980
+ };
981
+ var resolveCanonicalPinterestPinCaptureBrowserMode = (url, browserMode) => {
982
+ if (exactCanonicalPinterestPinCaptureUrl(url) === void 0) return browserMode;
983
+ return browserMode === "managed" ? "managed" : "extension";
984
+ };
985
+ var warmCanonicalPinterestPinInExtension = async (manager, url, remainingTimeoutMs, options) => {
986
+ if (!shouldWarmCanonicalPinterestPinInExtension(url, options.browserMode)) return;
987
+ const launchTimeoutMs = remainingTimeoutMs();
988
+ const session = await withCaptureDeadline(
989
+ manager.launch({
990
+ headless: false,
991
+ startUrl: "about:blank",
992
+ persistProfile: false,
993
+ noExtension: false
994
+ }, launchTimeoutMs),
995
+ launchTimeoutMs,
996
+ "Pinterest canonical pin extension warmup launch"
997
+ );
998
+ try {
999
+ await prepareCaptureSessionState({
1000
+ manager,
1001
+ sessionId: session.sessionId,
1002
+ url,
1003
+ remainingTimeoutMs,
1004
+ options
1005
+ });
1006
+ const gotoTimeoutMs = remainingTimeoutMs();
1007
+ await withCaptureDeadline(
1008
+ manager.goto(session.sessionId, url, "load", gotoTimeoutMs),
1009
+ gotoTimeoutMs,
1010
+ "Pinterest canonical pin extension warmup navigation"
1011
+ );
1012
+ const waitTimeoutMs = captureNetworkIdleWaitTimeout(remainingTimeoutMs, options.maxNetworkIdleWaitMs);
1013
+ try {
1014
+ await withCaptureDeadline(
1015
+ manager.waitForLoad(session.sessionId, "networkidle", waitTimeoutMs),
1016
+ waitTimeoutMs,
1017
+ "Pinterest canonical pin extension warmup network idle wait"
1018
+ );
1019
+ } catch (error) {
1020
+ if (!isIgnorableNetworkIdleWaitError(error)) throw error;
1021
+ }
1022
+ } finally {
1023
+ await manager.disconnect(session.sessionId, false).catch(() => void 0);
1024
+ }
1025
+ };
1026
+ var launchPrimaryCaptureSession = async (manager, url, remainingTimeoutMs, options) => {
1027
+ const launchTimeoutMs = remainingTimeoutMs();
1028
+ const session = await withCaptureDeadline(
1029
+ manager.launch({
1030
+ headless: options.browserMode !== "extension",
1031
+ startUrl: "about:blank",
1032
+ persistProfile: false,
1033
+ noExtension: shouldForceManagedPrimaryCapture(options.browserMode)
1034
+ }, launchTimeoutMs),
1035
+ launchTimeoutMs,
1036
+ "primary media capture session launch"
1037
+ );
1038
+ try {
1039
+ await prepareCaptureSessionState({
1040
+ manager,
1041
+ sessionId: session.sessionId,
1042
+ url,
1043
+ remainingTimeoutMs,
1044
+ options
1045
+ });
1046
+ const gotoTimeoutMs = remainingTimeoutMs();
1047
+ await withCaptureDeadline(
1048
+ manager.goto(session.sessionId, url, "load", gotoTimeoutMs),
1049
+ gotoTimeoutMs,
1050
+ "primary media capture navigation"
1051
+ );
1052
+ const waitTimeoutMs = captureNetworkIdleWaitTimeout(remainingTimeoutMs, options.maxNetworkIdleWaitMs);
1053
+ try {
1054
+ await withCaptureDeadline(
1055
+ manager.waitForLoad(session.sessionId, "networkidle", waitTimeoutMs),
1056
+ waitTimeoutMs,
1057
+ "primary media capture network idle wait"
1058
+ );
1059
+ } catch (error) {
1060
+ if (!isIgnorableNetworkIdleWaitError(error)) throw error;
1061
+ }
1062
+ } catch (error) {
1063
+ await manager.disconnect(session.sessionId, true).catch(() => void 0);
1064
+ throw error;
1065
+ }
1066
+ return session;
1067
+ };
1068
+ async function captureInspiredesignPrimaryVisualEvidenceFromManager(manager, url, options) {
1069
+ if (typeof manager.launch !== "function") {
1070
+ return buildVisualEvidenceMetadata(
1071
+ "failed",
1072
+ PRIMARY_CAPTURE_SESSION_UNAVAILABLE_MESSAGE,
1073
+ ["primary_capture_session_unavailable"]
1074
+ );
1075
+ }
1076
+ const captureTimeoutMs = clampInspiredesignCaptureTimeout(options.timeoutMs);
1077
+ const remainingTimeoutMs = createRemainingCaptureTimeout(captureTimeoutMs);
1078
+ let session;
1079
+ try {
1080
+ session = await launchPrimaryCaptureSession(
1081
+ manager,
1082
+ url,
1083
+ remainingTimeoutMs,
1084
+ options
1085
+ );
1086
+ } catch (error) {
1087
+ return buildVisualEvidenceMetadata(
1088
+ "failed",
1089
+ detailFromCaptureError(error, "Primary visual evidence setup failed."),
1090
+ ["primary_capture_setup_failed"]
1091
+ );
1092
+ }
1093
+ try {
1094
+ return await captureVisualEvidenceArtifact(manager, session.sessionId, {
1095
+ visualEvidence: "required",
1096
+ visualEvidencePath: options.visualEvidencePath
1097
+ }, remainingTimeoutMs);
1098
+ } finally {
1099
+ await manager.disconnect(session.sessionId, true).catch(() => void 0);
1100
+ }
1101
+ }
1102
+ async function captureInspiredesignPrimaryPinMediaEvidenceFromManager(manager, url, options) {
1103
+ if (!options.pinMediaEvidencePath) {
1104
+ return buildPinMediaEvidenceMetadata(
1105
+ "failed",
1106
+ options.referenceId,
1107
+ url,
1108
+ PIN_MEDIA_CAPTURE_PATH_UNAVAILABLE_MESSAGE,
1109
+ { rejectionReasons: ["pin_media_path_unavailable"] }
1110
+ );
1111
+ }
1112
+ if (typeof manager.launch !== "function") {
1113
+ return buildPinMediaEvidenceMetadata(
1114
+ "failed",
1115
+ options.referenceId,
1116
+ url,
1117
+ PRIMARY_CAPTURE_SESSION_UNAVAILABLE_MESSAGE,
1118
+ {
1119
+ warnings: ["primary_capture_session_unavailable"],
1120
+ rejectionReasons: ["primary_capture_session_unavailable"]
1121
+ }
1122
+ );
1123
+ }
1124
+ if (typeof manager.capturePinterestPinMedia !== "function") {
1125
+ return buildPinMediaEvidenceMetadata(
1126
+ "failed",
1127
+ options.referenceId,
1128
+ url,
1129
+ PIN_MEDIA_CAPTURE_HELPER_UNAVAILABLE_MESSAGE,
1130
+ {
1131
+ warnings: ["pin_media_capture_helper_unavailable"],
1132
+ rejectionReasons: ["pin_media_capture_helper_unavailable"]
1133
+ }
1134
+ );
1135
+ }
1136
+ const captureTimeoutMs = clampInspiredesignPinMediaCaptureTimeout(options.timeoutMs);
1137
+ const captureUrl = exactCanonicalPinterestPinCaptureUrl(url) ?? url;
1138
+ const resolvedBrowserMode = resolveCanonicalPinterestPinCaptureBrowserMode(captureUrl, options.browserMode);
1139
+ const captureOptions = resolvedBrowserMode === options.browserMode ? options : { ...options, browserMode: resolvedBrowserMode };
1140
+ const pinMediaCaptureOptions = {
1141
+ ...captureOptions,
1142
+ maxNetworkIdleWaitMs: PINTEREST_PIN_MEDIA_NETWORK_IDLE_TIMEOUT_MS
1143
+ };
1144
+ let session;
1145
+ const remainingTimeoutMs = createRemainingCaptureTimeout(captureTimeoutMs);
1146
+ try {
1147
+ const warmupTimeoutMs = Math.min(captureTimeoutMs, PINTEREST_PIN_MEDIA_EXTENSION_WARMUP_TIMEOUT_MS);
1148
+ await warmCanonicalPinterestPinInExtension(
1149
+ manager,
1150
+ captureUrl,
1151
+ createCappedRemainingCaptureTimeout(remainingTimeoutMs, warmupTimeoutMs),
1152
+ pinMediaCaptureOptions
1153
+ ).catch(() => void 0);
1154
+ session = await launchPrimaryCaptureSession(
1155
+ manager,
1156
+ captureUrl,
1157
+ remainingTimeoutMs,
1158
+ pinMediaCaptureOptions
1159
+ );
1160
+ } catch (error) {
1161
+ return buildPinMediaEvidenceMetadata(
1162
+ "failed",
1163
+ options.referenceId,
1164
+ url,
1165
+ detailFromCaptureError(error, "Primary Pinterest pin media evidence setup failed."),
1166
+ {
1167
+ warnings: ["primary_capture_setup_failed"],
1168
+ rejectionReasons: ["primary_capture_setup_failed"]
1169
+ }
1170
+ );
1171
+ }
1172
+ try {
1173
+ await mkdir(dirname(options.pinMediaEvidencePath), { recursive: true });
1174
+ const captureTimeout = remainingTimeoutMs();
1175
+ const result = await withCaptureDeadline(
1176
+ manager.capturePinterestPinMedia(session.sessionId, {
1177
+ path: options.pinMediaEvidencePath,
1178
+ timeoutMs: captureTimeout
1179
+ }),
1180
+ captureTimeout,
1181
+ "Pinterest pin media evidence capture"
1182
+ );
1183
+ const viewportProbe = viewportProbeFromPinMediaResult(result);
1184
+ if (result.status === "not_found") {
1185
+ const sourceUrl = result.sourceUrl || viewportProbe.sourceUrl;
1186
+ return buildPinMediaEvidenceMetadata(
1187
+ "skipped",
1188
+ options.referenceId,
1189
+ url,
1190
+ PIN_MEDIA_CAPTURE_NOT_FOUND_MESSAGE,
1191
+ {
1192
+ sourceUrl,
1193
+ endedSourceUrl: sourceUrl,
1194
+ pinterestPageQuality: viewportProbe.pinterestPageQuality ?? options.pinterestPageQuality ?? "unknown",
1195
+ warnings: mergePinMediaWarnings(viewportProbe, result),
1196
+ rejectionReasons: collectPinterestPinMediaNotFoundReasons(result)
1197
+ }
1198
+ );
1199
+ }
1200
+ return buildCapturedPinMediaMetadata(
1201
+ result,
1202
+ options.referenceId,
1203
+ url,
1204
+ options.pinMediaEvidencePath,
1205
+ viewportProbe,
1206
+ options.pinterestPageQuality
1207
+ );
1208
+ } catch (error) {
1209
+ return buildPinMediaEvidenceMetadata(
1210
+ "failed",
1211
+ options.referenceId,
1212
+ url,
1213
+ detailFromCaptureError(error, "Primary Pinterest pin media evidence capture failed."),
1214
+ {
1215
+ warnings: ["primary_pin_media_capture_failed"],
1216
+ rejectionReasons: ["primary_pin_media_capture_failed"]
1217
+ }
1218
+ );
1219
+ } finally {
1220
+ await manager.disconnect(session.sessionId, true).catch(() => void 0);
1221
+ }
1222
+ }
1223
+ async function captureInspiredesignPrimaryMotionEvidenceFromManager(manager, url, options) {
1224
+ if (!manager.startScreencast || !manager.stopScreencast) {
1225
+ return {
1226
+ status: "failed",
1227
+ kind: "screencast",
1228
+ capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
1229
+ frameCount: 0,
1230
+ warnings: ["screencast_helper_unavailable"],
1231
+ failure: "Screencast helper unavailable in this execution lane.",
1232
+ diagnostic: true,
1233
+ diagnosticReasons: ["screencast_helper_unavailable"]
1234
+ };
1235
+ }
1236
+ if (typeof manager.launch !== "function") {
1237
+ return {
1238
+ status: "failed",
1239
+ kind: "screencast",
1240
+ capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
1241
+ frameCount: 0,
1242
+ warnings: ["primary_capture_session_unavailable"],
1243
+ failure: PRIMARY_CAPTURE_SESSION_UNAVAILABLE_MESSAGE,
1244
+ diagnostic: true,
1245
+ diagnosticReasons: ["primary_capture_session_unavailable"]
1246
+ };
1247
+ }
1248
+ const captureTimeoutMs = clampInspiredesignCaptureTimeout(options.timeoutMs);
1249
+ const remainingTimeoutMs = createRemainingCaptureTimeout(captureTimeoutMs);
1250
+ let session;
1251
+ try {
1252
+ session = await launchPrimaryCaptureSession(
1253
+ manager,
1254
+ url,
1255
+ remainingTimeoutMs,
1256
+ options
1257
+ );
1258
+ } catch (error) {
1259
+ return {
1260
+ status: "failed",
1261
+ kind: "screencast",
1262
+ capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
1263
+ frameCount: 0,
1264
+ warnings: ["primary_capture_setup_failed"],
1265
+ failure: detailFromCaptureError(error, "Primary motion evidence setup failed."),
1266
+ diagnostic: true,
1267
+ diagnosticReasons: ["primary_capture_setup_failed"]
1268
+ };
1269
+ }
1270
+ try {
1271
+ const startedViewportProbe = await captureViewportSourceUrl(manager, session.sessionId, remainingTimeoutMs);
1272
+ const startTimeoutMs = remainingTimeoutMs();
1273
+ let stopLateStart = false;
1274
+ const startScreencast = manager.startScreencast(session.sessionId, {
1275
+ outputDir: options.outputDir,
1276
+ intervalMs: INSPIREDESIGN_MOTION_INTERVAL_MS,
1277
+ maxFrames: INSPIREDESIGN_MOTION_MAX_FRAMES
1278
+ });
1279
+ startScreencast.then(async (screencast2) => {
1280
+ if (stopLateStart) {
1281
+ const lateStop = manager.stopScreencast?.(session.sessionId, screencast2.screencastId);
1282
+ if (lateStop) {
1283
+ await withCaptureDeadline(
1284
+ lateStop,
1285
+ INSPIREDESIGN_LATE_SCREENCAST_STOP_TIMEOUT_MS,
1286
+ "late primary motion capture stop"
1287
+ ).catch(() => void 0);
1288
+ }
1289
+ }
1290
+ }).catch(() => void 0);
1291
+ const screencast = await withCaptureDeadline(
1292
+ startScreencast.catch((error) => {
1293
+ stopLateStart = false;
1294
+ throw error;
1295
+ }),
1296
+ startTimeoutMs,
1297
+ "primary motion capture start"
1298
+ ).catch((error) => {
1299
+ stopLateStart = true;
1300
+ throw error;
1301
+ });
1302
+ let result;
1303
+ try {
1304
+ const sampleTimeoutMs = remainingTimeoutMs();
1305
+ if (sampleTimeoutMs <= 1) {
1306
+ throw new Error("Deep capture primary motion capture sampling exceeded timeout budget.");
1307
+ }
1308
+ await withCaptureDeadline(
1309
+ delay(Math.min(INSPIREDESIGN_MOTION_INTERVAL_MS * INSPIREDESIGN_MOTION_MAX_FRAMES, sampleTimeoutMs)),
1310
+ sampleTimeoutMs,
1311
+ "primary motion capture sampling"
1312
+ );
1313
+ } finally {
1314
+ const stopTimeoutMs = remainingTimeoutMs();
1315
+ result = await withCaptureDeadline(
1316
+ manager.stopScreencast(session.sessionId, screencast.screencastId),
1317
+ stopTimeoutMs,
1318
+ "primary motion capture stop"
1319
+ );
1320
+ }
1321
+ if (!result) {
1322
+ throw new Error("Motion evidence screencast did not return stop metadata.");
1323
+ }
1324
+ const endedViewportProbe = await captureViewportSourceUrl(manager, session.sessionId, remainingTimeoutMs);
1325
+ const diagnosticReasons = [
1326
+ ...result.frameCount === 0 ? ["zero_frame_capture"] : [],
1327
+ ...motionSourceDiagnosticReasons(startedViewportProbe, endedViewportProbe),
1328
+ ...motionPageQualityDiagnosticReasons(startedViewportProbe, endedViewportProbe)
1329
+ ];
1330
+ const pinterestPageQuality = endedViewportProbe.pinterestPageQuality ?? startedViewportProbe.pinterestPageQuality;
1331
+ return {
1332
+ status: "captured",
1333
+ kind: "screencast",
1334
+ capturedAt: result.endedAt,
1335
+ replay: { tempPath: result.manifestPath },
1336
+ replayHtml: { tempPath: result.replayHtmlPath },
1337
+ ...result.previewPath ? { preview: { tempPath: result.previewPath } } : {},
1338
+ outputDir: result.outputDir,
1339
+ frameCount: result.frameCount,
1340
+ warnings: [...startedViewportProbe.warnings, ...endedViewportProbe.warnings, ...result.warnings ?? []],
1341
+ ...endedViewportProbe.sourceUrl ?? startedViewportProbe.sourceUrl ? { sourceUrl: endedViewportProbe.sourceUrl ?? startedViewportProbe.sourceUrl } : {},
1342
+ ...startedViewportProbe.sourceUrl ? { startedSourceUrl: startedViewportProbe.sourceUrl } : {},
1343
+ ...endedViewportProbe.sourceUrl ? { endedSourceUrl: endedViewportProbe.sourceUrl } : {},
1344
+ ...pinterestPageQuality ? { pinterestPageQuality } : {},
1345
+ ...startedViewportProbe.pinterestPageQuality ? { startedPinterestPageQuality: startedViewportProbe.pinterestPageQuality } : {},
1346
+ ...endedViewportProbe.pinterestPageQuality ? { endedPinterestPageQuality: endedViewportProbe.pinterestPageQuality } : {},
1347
+ diagnostic: diagnosticReasons.length > 0,
1348
+ diagnosticReasons
1349
+ };
1350
+ } catch (error) {
1351
+ return {
1352
+ status: "failed",
1353
+ kind: "screencast",
1354
+ capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
1355
+ frameCount: 0,
1356
+ warnings: ["motion_capture_failed"],
1357
+ failure: detailFromCaptureError(error, "Motion evidence screencast failed."),
1358
+ diagnostic: true,
1359
+ diagnosticReasons: ["motion_capture_failed"]
1360
+ };
1361
+ } finally {
1362
+ await manager.disconnect(session.sessionId, true).catch(() => void 0);
1363
+ }
1364
+ }
718
1365
  async function captureInspiredesignReferenceFromManager(manager, url, options = {}) {
719
1366
  const cookiePolicy = resolveInspiredesignCaptureCookiePolicy(options);
720
1367
  const captureTimeoutMs = clampInspiredesignCaptureTimeout(options.timeoutMs);
@@ -1440,6 +2087,26 @@ var createDaemonWorkflowRuntime = (core, options) => resolveBundledProviderRunti
1440
2087
  init: options?.init
1441
2088
  });
1442
2089
  var resolveDaemonWorkflowOutputDir = (core, outputDir) => resolveWorkflowArtifactRoot(outputDir, { workspaceRoot: core.cacheRoot });
2090
+ var captureScreenshotBuffer = async (core, sessionId) => {
2091
+ let captureDir = null;
2092
+ try {
2093
+ captureDir = await mkdtemp(join(tmpdir(), "odb-daemon-shot-"));
2094
+ const capturePath = join(captureDir, "capture.png");
2095
+ const screenshot = await core.manager.screenshot(sessionId, { path: capturePath });
2096
+ if (typeof screenshot.path === "string" && screenshot.path.length > 0) {
2097
+ return await readFile(screenshot.path);
2098
+ }
2099
+ if (typeof screenshot.base64 === "string" && screenshot.base64.length > 0) {
2100
+ return Buffer.from(screenshot.base64, "base64");
2101
+ }
2102
+ return null;
2103
+ } finally {
2104
+ if (captureDir) {
2105
+ await rm(captureDir, { recursive: true, force: true }).catch(() => {
2106
+ });
2107
+ }
2108
+ }
2109
+ };
1443
2110
  async function handleDaemonCommand(core, request) {
1444
2111
  const params = request.params ?? {};
1445
2112
  const bindingId = optionalString(params.bindingId);
@@ -2207,6 +2874,18 @@ async function handleDaemonCommand(core, request) {
2207
2874
  captureReference: async (url, options) => captureInspiredesignReferenceFromManager(core.manager, url, {
2208
2875
  ...options,
2209
2876
  cookieSource: core.config.providers?.cookieSource
2877
+ }),
2878
+ captureVisualEvidence: async (url, options) => captureInspiredesignPrimaryVisualEvidenceFromManager(core.manager, url, {
2879
+ ...options,
2880
+ cookieSource: core.config.providers?.cookieSource
2881
+ }),
2882
+ captureMotionEvidence: async (url, options) => captureInspiredesignPrimaryMotionEvidenceFromManager(core.manager, url, {
2883
+ ...options,
2884
+ cookieSource: core.config.providers?.cookieSource
2885
+ }),
2886
+ capturePinMediaEvidence: async (url, options) => captureInspiredesignPrimaryPinMediaEvidenceFromManager(core.manager, url, {
2887
+ ...options,
2888
+ cookieSource: core.config.providers?.cookieSource
2210
2889
  })
2211
2890
  }
2212
2891
  );
@@ -2241,14 +2920,12 @@ async function handleDaemonCommand(core, request) {
2241
2920
  });
2242
2921
  try {
2243
2922
  await core.manager.goto(session.sessionId, url, "load", captureTimeoutMs);
2244
- const screenshot = await Promise.race([
2245
- core.manager.screenshot(session.sessionId),
2923
+ return await Promise.race([
2924
+ captureScreenshotBuffer(core, session.sessionId),
2246
2925
  new Promise((resolve3) => {
2247
2926
  setTimeout(() => resolve3(null), captureTimeoutMs);
2248
2927
  })
2249
2928
  ]);
2250
- if (!screenshot || typeof screenshot.base64 !== "string" || screenshot.base64.length === 0) return null;
2251
- return Buffer.from(screenshot.base64, "base64");
2252
2929
  } catch {
2253
2930
  return null;
2254
2931
  } finally {
@@ -3040,7 +3717,7 @@ function clampWaitTimeout(timeoutMs) {
3040
3717
  }
3041
3718
  async function waitForRelayHandshake(relay, observedPort, timeoutMs) {
3042
3719
  const start = Date.now();
3043
- let delay = WAIT_MIN_DELAY_MS;
3720
+ let delay2 = WAIT_MIN_DELAY_MS;
3044
3721
  while (Date.now() - start < timeoutMs) {
3045
3722
  const relayStatus = relay.status();
3046
3723
  if (relayStatus.extensionHandshakeComplete) {
@@ -3053,8 +3730,8 @@ async function waitForRelayHandshake(relay, observedPort, timeoutMs) {
3053
3730
  if (observedStatus?.extensionHandshakeComplete) {
3054
3731
  return true;
3055
3732
  }
3056
- await new Promise((resolve3) => setTimeout(resolve3, delay));
3057
- delay = Math.min(delay * 2, WAIT_MAX_DELAY_MS);
3733
+ await new Promise((resolve3) => setTimeout(resolve3, delay2));
3734
+ delay2 = Math.min(delay2 * 2, WAIT_MAX_DELAY_MS);
3058
3735
  }
3059
3736
  return false;
3060
3737
  }
@@ -3227,11 +3904,11 @@ var RECOVERABLE_PLAYWRIGHT_TRANSPORT_ERRORS = [
3227
3904
  ];
3228
3905
  var DAEMON_FINGERPRINT_VERSION = "v1";
3229
3906
  function getCacheRoot() {
3230
- const base = process.env.OPENCODE_CACHE_DIR ?? process.env.XDG_CACHE_HOME ?? join(homedir(), ".cache");
3231
- return join(base, "opendevbrowser");
3907
+ const base = process.env.OPENCODE_CACHE_DIR ?? process.env.XDG_CACHE_HOME ?? join2(homedir(), ".cache");
3908
+ return join2(base, "opendevbrowser");
3232
3909
  }
3233
3910
  function getDaemonMetadataPath() {
3234
- return join(getCacheRoot(), "daemon.json");
3911
+ return join2(getCacheRoot(), "daemon.json");
3235
3912
  }
3236
3913
  function readDaemonMetadata() {
3237
3914
  const metadataPath = getDaemonMetadataPath();
@@ -3247,7 +3924,7 @@ function readDaemonMetadata() {
3247
3924
  }
3248
3925
  function writeDaemonMetadata(state) {
3249
3926
  const metadataPath = getDaemonMetadataPath();
3250
- mkdirSync(join(getCacheRoot()), { recursive: true });
3927
+ mkdirSync(join2(getCacheRoot()), { recursive: true });
3251
3928
  writeFileSync(metadataPath, JSON.stringify(state, null, 2), { encoding: "utf-8", mode: 384 });
3252
3929
  }
3253
3930
  function clearDaemonMetadata() {
@@ -3297,7 +3974,7 @@ function readDaemonFingerprintArtifact(modulePath) {
3297
3974
  return null;
3298
3975
  }
3299
3976
  try {
3300
- const content = readFileSync(join(distRoot, DAEMON_FINGERPRINT_FILE), "utf-8");
3977
+ const content = readFileSync(join2(distRoot, DAEMON_FINGERPRINT_FILE), "utf-8");
3301
3978
  const payload = JSON.parse(content);
3302
3979
  if (typeof payload.fingerprint === "string" && payload.fingerprint.trim().length > 0) {
3303
3980
  return payload.fingerprint.trim();
@@ -3719,6 +4396,9 @@ function persistDaemonStatusMetadata(base, status, config) {
3719
4396
  export {
3720
4397
  inspectSession,
3721
4398
  buildCorrelatedAuditBundle,
4399
+ captureInspiredesignPrimaryVisualEvidenceFromManager,
4400
+ captureInspiredesignPrimaryPinMediaEvidenceFromManager,
4401
+ captureInspiredesignPrimaryMotionEvidenceFromManager,
3722
4402
  captureInspiredesignReferenceFromManager,
3723
4403
  executeMacroWithRuntime,
3724
4404
  fetchWithTimeout,
@@ -3740,4 +4420,4 @@ export {
3740
4420
  fetchDaemonStatusFromMetadata,
3741
4421
  persistDaemonStatusMetadata
3742
4422
  };
3743
- //# sourceMappingURL=chunk-HMRANSDX.js.map
4423
+ //# sourceMappingURL=chunk-Z3ADLR7I.js.map