opendevbrowser 0.0.34 → 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 (283) hide show
  1. package/README.md +1 -1
  2. package/dist/{accessibility-snapshot-VCBXK47S.js → accessibility-snapshot-TAFPVLZN.js} +8 -8
  3. package/dist/{active-window-7EUN36LZ.js → active-window-MHFMC6NQ.js} +8 -8
  4. package/dist/{annotate-VLBK7YB6.js → annotate-5ZFRFQ4B.js} +7 -7
  5. package/dist/{attr-JNANQKM6.js → attr-MBF2UCRF.js} +7 -7
  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 +48 -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/{canvas-V5LO4JVL.js → canvas-CAMD22YU.js} +7 -7
  13. package/dist/{capture-desktop-FKVDWTVG.js → capture-desktop-TMZSFA5R.js} +8 -8
  14. package/dist/{capture-window-QVPM2DN2.js → capture-window-NZDKD2AE.js} +8 -8
  15. package/dist/{check-V3CWZ56S.js → check-MO33GTQ4.js} +7 -7
  16. package/dist/{checked-Q27Q6YZN.js → checked-3HDF5X2M.js} +7 -7
  17. package/dist/{chunk-VX47SJZM.js → chunk-32ZSOZND.js} +2 -2
  18. package/dist/{chunk-XRDCSHKZ.js → chunk-AHQC4A6P.js} +744 -14
  19. package/dist/chunk-AHQC4A6P.js.map +1 -0
  20. package/dist/{chunk-IBIHDGTZ.js → chunk-B5XIJQXO.js} +32 -4
  21. package/dist/chunk-B5XIJQXO.js.map +1 -0
  22. package/dist/{chunk-OJAUKABV.js → chunk-BHZLEFXW.js} +2 -2
  23. package/dist/{chunk-VY47VKXU.js → chunk-FJZY3Z3X.js} +2 -2
  24. package/dist/{chunk-GC2FWISX.js → chunk-HM4CO3EW.js} +20 -16
  25. package/dist/chunk-HM4CO3EW.js.map +1 -0
  26. package/dist/{chunk-Z3HIX2SE.js → chunk-UEAXTWGT.js} +2 -2
  27. package/dist/{chunk-ZGCTC5YM.js → chunk-UVD34RA2.js} +33 -1
  28. package/dist/chunk-UVD34RA2.js.map +1 -0
  29. package/dist/{chunk-5FDXH4CS.js → chunk-WTWSBEBW.js} +5659 -419
  30. package/dist/chunk-WTWSBEBW.js.map +1 -0
  31. package/dist/{chunk-NX2XYJP5.js → chunk-XSSPNVMS.js} +3 -3
  32. package/dist/{chunk-NX2XYJP5.js.map → chunk-XSSPNVMS.js.map} +1 -1
  33. package/dist/{chunk-QXJDJDSZ.js → chunk-Z3ADLR7I.js} +667 -8
  34. package/dist/chunk-Z3ADLR7I.js.map +1 -0
  35. package/dist/cli/commands/inspiredesign.d.ts +12 -1
  36. package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
  37. package/dist/cli/daemon-commands.d.ts.map +1 -1
  38. package/dist/cli/help.d.ts.map +1 -1
  39. package/dist/cli/index.js +76 -76
  40. package/dist/cli/index.js.map +1 -1
  41. package/dist/cli/utils/workflow-message.d.ts.map +1 -1
  42. package/dist/{click-EQDRSLR3.js → click-SWZPJO2U.js} +7 -7
  43. package/dist/{clone-component-SISUXTJS.js → clone-component-YTB46YU4.js} +7 -7
  44. package/dist/{clone-page-MLDPCBOY.js → clone-page-5FMPHQ3A.js} +7 -7
  45. package/dist/{close-7J7EV237.js → close-22SNMDX3.js} +7 -7
  46. package/dist/{close-2LQMJVOA.js → close-ORQZCZ2E.js} +7 -7
  47. package/dist/{connect-JFRSIW5M.js → connect-EWYITNQU.js} +7 -7
  48. package/dist/{console-poll-NSVVUNEC.js → console-poll-LJR6ZTDK.js} +7 -7
  49. package/dist/{cookie-import-B7IQTGTN.js → cookie-import-PTAIWPEC.js} +7 -7
  50. package/dist/{cookie-list-YHG7JCZZ.js → cookie-list-76C35B5B.js} +7 -7
  51. package/dist/{daemon-ENU4FOV4.js → daemon-UKJMDLCB.js} +6 -6
  52. package/dist/daemon-fingerprint.json +1 -1
  53. package/dist/{debug-trace-snapshot-KLGU2AWY.js → debug-trace-snapshot-PQ5FJART.js} +7 -7
  54. package/dist/{dialog-MUVQIERS.js → dialog-WLJDWJV4.js} +7 -7
  55. package/dist/{disconnect-KELQJ45J.js → disconnect-FNB4JC2U.js} +7 -7
  56. package/dist/{enabled-SF6UU5HG.js → enabled-PYMCOQPC.js} +7 -7
  57. package/dist/{goto-AZQWXYPG.js → goto-UNTEW4VI.js} +7 -7
  58. package/dist/guidance/context.d.ts +10 -0
  59. package/dist/guidance/context.d.ts.map +1 -1
  60. package/dist/guidance/readiness.d.ts.map +1 -1
  61. package/dist/guidance/recipes/generic.d.ts.map +1 -1
  62. package/dist/guidance/recipes/pinterest.d.ts.map +1 -1
  63. package/dist/guidance/types.d.ts +4 -0
  64. package/dist/guidance/types.d.ts.map +1 -1
  65. package/dist/{help-B44IBHXL.js → help-QOLCIB3P.js} +8 -7
  66. package/dist/{help-B44IBHXL.js.map → help-QOLCIB3P.js.map} +1 -1
  67. package/dist/{hover-MQRAKKVU.js → hover-ZWY4YOM4.js} +7 -7
  68. package/dist/{html-PLRTU2WS.js → html-M46YBFT3.js} +7 -7
  69. package/dist/index.js +43 -18
  70. package/dist/index.js.map +1 -1
  71. package/dist/{inspector-IY4GBIT6.js → inspector-6YAOI74U.js} +8 -8
  72. package/dist/{inspector-audit-7MQCRJHD.js → inspector-audit-PF64X6SJ.js} +9 -9
  73. package/dist/{inspector-plan-ZAUDHBET.js → inspector-plan-IUGTQV3Q.js} +9 -9
  74. package/dist/inspiredesign/capture-mode.d.ts +8 -0
  75. package/dist/inspiredesign/capture-mode.d.ts.map +1 -1
  76. package/dist/inspiredesign/capture.d.ts +36 -1
  77. package/dist/inspiredesign/capture.d.ts.map +1 -1
  78. package/dist/inspiredesign/contract.d.ts +24 -0
  79. package/dist/inspiredesign/contract.d.ts.map +1 -1
  80. package/dist/inspiredesign/handoff.d.ts +6 -2
  81. package/dist/inspiredesign/handoff.d.ts.map +1 -1
  82. package/dist/inspiredesign/media-analysis/analyzer.d.ts +13 -0
  83. package/dist/inspiredesign/media-analysis/analyzer.d.ts.map +1 -0
  84. package/dist/inspiredesign/media-analysis/design-guidance.d.ts +11 -0
  85. package/dist/inspiredesign/media-analysis/design-guidance.d.ts.map +1 -0
  86. package/dist/inspiredesign/media-analysis/ffmpeg.d.ts +21 -0
  87. package/dist/inspiredesign/media-analysis/ffmpeg.d.ts.map +1 -0
  88. package/dist/inspiredesign/media-analysis/ffprobe.d.ts +8 -0
  89. package/dist/inspiredesign/media-analysis/ffprobe.d.ts.map +1 -0
  90. package/dist/inspiredesign/media-analysis/index.d.ts +10 -0
  91. package/dist/inspiredesign/media-analysis/index.d.ts.map +1 -0
  92. package/dist/inspiredesign/media-analysis/persist.d.ts +6 -0
  93. package/dist/inspiredesign/media-analysis/persist.d.ts.map +1 -0
  94. package/dist/inspiredesign/media-analysis/pixel.d.ts +9 -0
  95. package/dist/inspiredesign/media-analysis/pixel.d.ts.map +1 -0
  96. package/dist/inspiredesign/media-analysis/types.d.ts +163 -0
  97. package/dist/inspiredesign/media-analysis/types.d.ts.map +1 -0
  98. package/dist/inspiredesign/media-analysis/typography-structure.d.ts +3 -0
  99. package/dist/inspiredesign/media-analysis/typography-structure.d.ts.map +1 -0
  100. package/dist/inspiredesign/meta-prompt.d.ts.map +1 -1
  101. package/dist/inspiredesign/motion-evidence.d.ts +73 -0
  102. package/dist/inspiredesign/motion-evidence.d.ts.map +1 -0
  103. package/dist/inspiredesign/pinterest-media-classification.d.ts +27 -0
  104. package/dist/inspiredesign/pinterest-media-classification.d.ts.map +1 -0
  105. package/dist/inspiredesign/pinterest-pin-media-evidence.d.ts +151 -0
  106. package/dist/inspiredesign/pinterest-pin-media-evidence.d.ts.map +1 -0
  107. package/dist/inspiredesign/product-readiness.d.ts +97 -0
  108. package/dist/inspiredesign/product-readiness.d.ts.map +1 -0
  109. package/dist/inspiredesign/reference-pattern-board.d.ts +27 -2
  110. package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
  111. package/dist/inspiredesign/visual-evidence.d.ts +5 -0
  112. package/dist/inspiredesign/visual-evidence.d.ts.map +1 -1
  113. package/dist/{inspiredesign-VHPEO3UK.js → inspiredesign-GZIEXETS.js} +29 -12
  114. package/dist/inspiredesign-GZIEXETS.js.map +1 -0
  115. package/dist/{launch-OCTWPTV5.js → launch-I7WNLWLY.js} +7 -7
  116. package/dist/{list-HUSYADUS.js → list-BAECFJI7.js} +7 -7
  117. package/dist/{list-JWKAMAUA.js → list-BCF4HZ2K.js} +7 -7
  118. package/dist/{macro-resolve-WOXMPZDQ.js → macro-resolve-4GNZYHHW.js} +8 -8
  119. package/dist/{network-poll-WHB62OEF.js → network-poll-DCZ5ZNLP.js} +7 -7
  120. package/dist/{new-IKZBYBNK.js → new-6KZYJTJG.js} +7 -7
  121. package/dist/{open-UA2VI6ZP.js → open-JPGEAJHJ.js} +7 -7
  122. package/dist/opendevbrowser.js +43 -18
  123. package/dist/opendevbrowser.js.map +1 -1
  124. package/dist/{perf-DICS3VKH.js → perf-5X367PRP.js} +7 -7
  125. package/dist/{pointer-down-2XPRZFJC.js → pointer-down-5OAUDDNR.js} +7 -7
  126. package/dist/{pointer-drag-7NY4BOLH.js → pointer-drag-LIW5PY5P.js} +7 -7
  127. package/dist/{pointer-move-FWEXMH37.js → pointer-move-7AMURLJD.js} +7 -7
  128. package/dist/{pointer-up-VU2OHK5D.js → pointer-up-EY652YWL.js} +7 -7
  129. package/dist/{press-W7IZ3FCX.js → press-UIAE5XEF.js} +7 -7
  130. package/dist/{product-video-XCZ6CHR5.js → product-video-B6TLS7VC.js} +9 -9
  131. package/dist/providers/browser-native-discovery.d.ts.map +1 -1
  132. package/dist/providers/renderer.d.ts +10 -1
  133. package/dist/providers/renderer.d.ts.map +1 -1
  134. package/dist/providers/workflows.d.ts +53 -2
  135. package/dist/providers/workflows.d.ts.map +1 -1
  136. package/dist/{providers-XCNSU3T6.js → providers-AERTX6X4.js} +5 -3
  137. package/dist/public-surface/generated-manifest.d.ts +2 -2
  138. package/dist/public-surface/generated-manifest.d.ts.map +1 -1
  139. package/dist/public-surface/source.d.ts +2 -2
  140. package/dist/public-surface/source.d.ts.map +1 -1
  141. package/dist/{research-AYCKHOWK.js → research-AJH6ECYW.js} +9 -9
  142. package/dist/{review-PP2UNSMJ.js → review-RN6XF2YB.js} +7 -7
  143. package/dist/{review-desktop-3JOJFUEJ.js → review-desktop-UJOUS7K2.js} +7 -7
  144. package/dist/{rpc-7EPTJQQ6.js → rpc-VS5Y5FUT.js} +7 -7
  145. package/dist/{run-P6UJS3D4.js → run-EVRIQW7S.js} +5 -5
  146. package/dist/{screencast-start-ZZYNH2HT.js → screencast-start-U6J4FYU4.js} +7 -7
  147. package/dist/{screencast-stop-Y6ADFOFA.js → screencast-stop-EQUPRGMP.js} +7 -7
  148. package/dist/{screenshot-CJB7PMAF.js → screenshot-BENYGC36.js} +7 -7
  149. package/dist/{scroll-BP5MA4ZT.js → scroll-3OALQLX2.js} +7 -7
  150. package/dist/{scroll-into-view-O3RDWLM2.js → scroll-into-view-SNZKBIVB.js} +7 -7
  151. package/dist/{select-QLCNRI36.js → select-JDZDDC3Y.js} +7 -7
  152. package/dist/{serve-OO2MQWGL.js → serve-LOC6ESJ4.js} +6 -6
  153. package/dist/{shopping-UYHCYPAH.js → shopping-267OAYGM.js} +9 -9
  154. package/dist/{snapshot-SXYZ3CMC.js → snapshot-ASYI5UFR.js} +7 -7
  155. package/dist/{status-AL2AHVA5.js → status-47CI4LJX.js} +7 -7
  156. package/dist/{status-QQW7REK4.js → status-N4O6DJTF.js} +8 -8
  157. package/dist/{status-capabilities-AVHJYQQQ.js → status-capabilities-C777JZG4.js} +8 -8
  158. package/dist/{text-B6Z47EOA.js → text-MS2653MW.js} +7 -7
  159. package/dist/tools/inspiredesign_run.d.ts.map +1 -1
  160. package/dist/{type-LR3F3SQY.js → type-UMPSDACC.js} +7 -7
  161. package/dist/{uncheck-5PJEHR7J.js → uncheck-2OZ56D42.js} +7 -7
  162. package/dist/{upload-HQ3QN2OW.js → upload-CD7PRH54.js} +7 -7
  163. package/dist/{use-KFZLMRUH.js → use-MO67AGG7.js} +7 -7
  164. package/dist/{value-TKUFUK5I.js → value-4GI2LRUY.js} +7 -7
  165. package/dist/{visible-P5Z2N2QR.js → visible-VSUFGRFZ.js} +7 -7
  166. package/dist/{wait-BYSHJPSC.js → wait-OQYMFENT.js} +7 -7
  167. package/dist/{windows-6GTD25EU.js → windows-75W2JCW7.js} +8 -8
  168. package/extension/manifest.json +1 -1
  169. package/package.json +1 -1
  170. package/skills/opendevbrowser-best-practices/SKILL.md +41 -30
  171. package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +12 -8
  172. package/skills/opendevbrowser-best-practices/artifacts/parity-gates.md +1 -0
  173. package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +19 -0
  174. package/skills/opendevbrowser-best-practices/assets/templates/mode-flag-matrix.json +23 -13
  175. package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +3 -1
  176. package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +62 -21
  177. package/skills/opendevbrowser-best-practices/scripts/resolve-odb-cli.sh +28 -0
  178. package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +15 -0
  179. package/skills/opendevbrowser-best-practices/scripts/validator-fixture-cli.sh +13 -0
  180. package/skills/opendevbrowser-design-agent/SKILL.md +2 -0
  181. package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +15 -13
  182. package/skills/opendevbrowser-design-agent/artifacts/isolated-preview-validation.md +1 -1
  183. package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +14 -7
  184. package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +1 -0
  185. package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +10 -7
  186. package/skills/opendevbrowser-motion-design/SKILL.md +1 -1
  187. package/skills/opendevbrowser-product-presentation-asset/SKILL.md +5 -4
  188. package/skills/opendevbrowser-product-presentation-asset/scripts/capture-screenshots.sh +1 -0
  189. package/skills/opendevbrowser-product-presentation-asset/scripts/collect-product.sh +1 -0
  190. package/skills/opendevbrowser-product-presentation-asset/scripts/download-images.sh +1 -0
  191. package/skills/opendevbrowser-product-presentation-asset/scripts/validate-skill-assets.sh +4 -0
  192. package/skills/opendevbrowser-product-presentation-asset/scripts/write-manifest.sh +1 -0
  193. package/skills/opendevbrowser-research/SKILL.md +1 -0
  194. package/skills/opendevbrowser-research/scripts/render-output.sh +1 -0
  195. package/skills/opendevbrowser-research/scripts/run-research.sh +1 -0
  196. package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +4 -0
  197. package/skills/opendevbrowser-research/scripts/write-artifacts.sh +1 -0
  198. package/skills/opendevbrowser-shopping/SKILL.md +1 -0
  199. package/skills/opendevbrowser-shopping/scripts/normalize-offers.sh +1 -0
  200. package/skills/opendevbrowser-shopping/scripts/run-deal-hunt.sh +1 -0
  201. package/skills/opendevbrowser-shopping/scripts/run-shopping.sh +1 -0
  202. package/skills/opendevbrowser-shopping/scripts/validate-skill-assets.sh +4 -0
  203. package/dist/chunk-5FDXH4CS.js.map +0 -1
  204. package/dist/chunk-GC2FWISX.js.map +0 -1
  205. package/dist/chunk-IBIHDGTZ.js.map +0 -1
  206. package/dist/chunk-QXJDJDSZ.js.map +0 -1
  207. package/dist/chunk-XRDCSHKZ.js.map +0 -1
  208. package/dist/chunk-ZGCTC5YM.js.map +0 -1
  209. package/dist/inspiredesign-VHPEO3UK.js.map +0 -1
  210. /package/dist/{accessibility-snapshot-VCBXK47S.js.map → accessibility-snapshot-TAFPVLZN.js.map} +0 -0
  211. /package/dist/{active-window-7EUN36LZ.js.map → active-window-MHFMC6NQ.js.map} +0 -0
  212. /package/dist/{annotate-VLBK7YB6.js.map → annotate-5ZFRFQ4B.js.map} +0 -0
  213. /package/dist/{attr-JNANQKM6.js.map → attr-MBF2UCRF.js.map} +0 -0
  214. /package/dist/{canvas-V5LO4JVL.js.map → canvas-CAMD22YU.js.map} +0 -0
  215. /package/dist/{capture-desktop-FKVDWTVG.js.map → capture-desktop-TMZSFA5R.js.map} +0 -0
  216. /package/dist/{capture-window-QVPM2DN2.js.map → capture-window-NZDKD2AE.js.map} +0 -0
  217. /package/dist/{check-V3CWZ56S.js.map → check-MO33GTQ4.js.map} +0 -0
  218. /package/dist/{checked-Q27Q6YZN.js.map → checked-3HDF5X2M.js.map} +0 -0
  219. /package/dist/{chunk-VX47SJZM.js.map → chunk-32ZSOZND.js.map} +0 -0
  220. /package/dist/{chunk-OJAUKABV.js.map → chunk-BHZLEFXW.js.map} +0 -0
  221. /package/dist/{chunk-VY47VKXU.js.map → chunk-FJZY3Z3X.js.map} +0 -0
  222. /package/dist/{chunk-Z3HIX2SE.js.map → chunk-UEAXTWGT.js.map} +0 -0
  223. /package/dist/{click-EQDRSLR3.js.map → click-SWZPJO2U.js.map} +0 -0
  224. /package/dist/{clone-component-SISUXTJS.js.map → clone-component-YTB46YU4.js.map} +0 -0
  225. /package/dist/{clone-page-MLDPCBOY.js.map → clone-page-5FMPHQ3A.js.map} +0 -0
  226. /package/dist/{close-7J7EV237.js.map → close-22SNMDX3.js.map} +0 -0
  227. /package/dist/{close-2LQMJVOA.js.map → close-ORQZCZ2E.js.map} +0 -0
  228. /package/dist/{connect-JFRSIW5M.js.map → connect-EWYITNQU.js.map} +0 -0
  229. /package/dist/{console-poll-NSVVUNEC.js.map → console-poll-LJR6ZTDK.js.map} +0 -0
  230. /package/dist/{cookie-import-B7IQTGTN.js.map → cookie-import-PTAIWPEC.js.map} +0 -0
  231. /package/dist/{cookie-list-YHG7JCZZ.js.map → cookie-list-76C35B5B.js.map} +0 -0
  232. /package/dist/{daemon-ENU4FOV4.js.map → daemon-UKJMDLCB.js.map} +0 -0
  233. /package/dist/{debug-trace-snapshot-KLGU2AWY.js.map → debug-trace-snapshot-PQ5FJART.js.map} +0 -0
  234. /package/dist/{dialog-MUVQIERS.js.map → dialog-WLJDWJV4.js.map} +0 -0
  235. /package/dist/{disconnect-KELQJ45J.js.map → disconnect-FNB4JC2U.js.map} +0 -0
  236. /package/dist/{enabled-SF6UU5HG.js.map → enabled-PYMCOQPC.js.map} +0 -0
  237. /package/dist/{goto-AZQWXYPG.js.map → goto-UNTEW4VI.js.map} +0 -0
  238. /package/dist/{hover-MQRAKKVU.js.map → hover-ZWY4YOM4.js.map} +0 -0
  239. /package/dist/{html-PLRTU2WS.js.map → html-M46YBFT3.js.map} +0 -0
  240. /package/dist/{inspector-IY4GBIT6.js.map → inspector-6YAOI74U.js.map} +0 -0
  241. /package/dist/{inspector-audit-7MQCRJHD.js.map → inspector-audit-PF64X6SJ.js.map} +0 -0
  242. /package/dist/{inspector-plan-ZAUDHBET.js.map → inspector-plan-IUGTQV3Q.js.map} +0 -0
  243. /package/dist/{launch-OCTWPTV5.js.map → launch-I7WNLWLY.js.map} +0 -0
  244. /package/dist/{list-HUSYADUS.js.map → list-BAECFJI7.js.map} +0 -0
  245. /package/dist/{list-JWKAMAUA.js.map → list-BCF4HZ2K.js.map} +0 -0
  246. /package/dist/{macro-resolve-WOXMPZDQ.js.map → macro-resolve-4GNZYHHW.js.map} +0 -0
  247. /package/dist/{network-poll-WHB62OEF.js.map → network-poll-DCZ5ZNLP.js.map} +0 -0
  248. /package/dist/{new-IKZBYBNK.js.map → new-6KZYJTJG.js.map} +0 -0
  249. /package/dist/{open-UA2VI6ZP.js.map → open-JPGEAJHJ.js.map} +0 -0
  250. /package/dist/{perf-DICS3VKH.js.map → perf-5X367PRP.js.map} +0 -0
  251. /package/dist/{pointer-down-2XPRZFJC.js.map → pointer-down-5OAUDDNR.js.map} +0 -0
  252. /package/dist/{pointer-drag-7NY4BOLH.js.map → pointer-drag-LIW5PY5P.js.map} +0 -0
  253. /package/dist/{pointer-move-FWEXMH37.js.map → pointer-move-7AMURLJD.js.map} +0 -0
  254. /package/dist/{pointer-up-VU2OHK5D.js.map → pointer-up-EY652YWL.js.map} +0 -0
  255. /package/dist/{press-W7IZ3FCX.js.map → press-UIAE5XEF.js.map} +0 -0
  256. /package/dist/{product-video-XCZ6CHR5.js.map → product-video-B6TLS7VC.js.map} +0 -0
  257. /package/dist/{providers-XCNSU3T6.js.map → providers-AERTX6X4.js.map} +0 -0
  258. /package/dist/{research-AYCKHOWK.js.map → research-AJH6ECYW.js.map} +0 -0
  259. /package/dist/{review-PP2UNSMJ.js.map → review-RN6XF2YB.js.map} +0 -0
  260. /package/dist/{review-desktop-3JOJFUEJ.js.map → review-desktop-UJOUS7K2.js.map} +0 -0
  261. /package/dist/{rpc-7EPTJQQ6.js.map → rpc-VS5Y5FUT.js.map} +0 -0
  262. /package/dist/{run-P6UJS3D4.js.map → run-EVRIQW7S.js.map} +0 -0
  263. /package/dist/{screencast-start-ZZYNH2HT.js.map → screencast-start-U6J4FYU4.js.map} +0 -0
  264. /package/dist/{screencast-stop-Y6ADFOFA.js.map → screencast-stop-EQUPRGMP.js.map} +0 -0
  265. /package/dist/{screenshot-CJB7PMAF.js.map → screenshot-BENYGC36.js.map} +0 -0
  266. /package/dist/{scroll-BP5MA4ZT.js.map → scroll-3OALQLX2.js.map} +0 -0
  267. /package/dist/{scroll-into-view-O3RDWLM2.js.map → scroll-into-view-SNZKBIVB.js.map} +0 -0
  268. /package/dist/{select-QLCNRI36.js.map → select-JDZDDC3Y.js.map} +0 -0
  269. /package/dist/{serve-OO2MQWGL.js.map → serve-LOC6ESJ4.js.map} +0 -0
  270. /package/dist/{shopping-UYHCYPAH.js.map → shopping-267OAYGM.js.map} +0 -0
  271. /package/dist/{snapshot-SXYZ3CMC.js.map → snapshot-ASYI5UFR.js.map} +0 -0
  272. /package/dist/{status-AL2AHVA5.js.map → status-47CI4LJX.js.map} +0 -0
  273. /package/dist/{status-QQW7REK4.js.map → status-N4O6DJTF.js.map} +0 -0
  274. /package/dist/{status-capabilities-AVHJYQQQ.js.map → status-capabilities-C777JZG4.js.map} +0 -0
  275. /package/dist/{text-B6Z47EOA.js.map → text-MS2653MW.js.map} +0 -0
  276. /package/dist/{type-LR3F3SQY.js.map → type-UMPSDACC.js.map} +0 -0
  277. /package/dist/{uncheck-5PJEHR7J.js.map → uncheck-2OZ56D42.js.map} +0 -0
  278. /package/dist/{upload-HQ3QN2OW.js.map → upload-CD7PRH54.js.map} +0 -0
  279. /package/dist/{use-KFZLMRUH.js.map → use-MO67AGG7.js.map} +0 -0
  280. /package/dist/{value-TKUFUK5I.js.map → value-4GI2LRUY.js.map} +0 -0
  281. /package/dist/{visible-P5Z2N2QR.js.map → visible-VSUFGRFZ.js.map} +0 -0
  282. /package/dist/{wait-BYSHJPSC.js.map → wait-OQYMFENT.js.map} +0 -0
  283. /package/dist/{windows-6GTD25EU.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-XRDCSHKZ.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-5FDXH4CS.js";
29
+ } from "./chunk-WTWSBEBW.js";
28
30
  import {
29
31
  buildBlockerArtifacts,
30
32
  classifyBlockerSignal,
@@ -419,15 +421,31 @@ import { mkdir } from "fs/promises";
419
421
  import { dirname, resolve } from "path";
420
422
  var INSPIREDESIGN_CAPTURE_TIMEOUT_MS = 3e4;
421
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";
422
431
  var ACTIVE_SESSION_COOKIE_REUSE_UNAVAILABLE_MESSAGE = "Deep capture only honors configured provider cookie sources; active session cookies are not reused.";
423
432
  var DOM_CAPTURE_HELPER_UNAVAILABLE_MESSAGE = "DOM capture helper unavailable in this execution lane.";
424
433
  var VISUAL_CAPTURE_HELPER_UNAVAILABLE_MESSAGE = "Visual evidence screenshot helper unavailable in this execution lane.";
425
434
  var VISUAL_CAPTURE_PATH_UNAVAILABLE_MESSAGE = "Visual evidence path was not configured for screenshot capture.";
426
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";
427
444
  var SNAPSHOT_CAPTURE_EMPTY_MESSAGE = "Snapshot capture returned empty content.";
428
445
  var CLONE_CAPTURE_EMPTY_MESSAGE = "Clone capture returned empty component and CSS previews.";
429
446
  var DOM_CAPTURE_EMPTY_MESSAGE = "DOM capture returned empty HTML.";
430
447
  var SKIPPED_AFTER_TRANSPORT_TIMEOUT_SUFFIX = "transport timeout.";
448
+ var PINTEREST_VIEWPORT_MEDIA_PROBE_MAX_NODES = 400;
431
449
  var createRemainingCaptureTimeout = (timeoutMs) => {
432
450
  const startedAtMs = Date.now();
433
451
  let firstRead = true;
@@ -439,10 +457,18 @@ var createRemainingCaptureTimeout = (timeoutMs) => {
439
457
  return Math.max(1, timeoutMs - Math.max(0, Date.now() - startedAtMs));
440
458
  };
441
459
  };
460
+ var createCappedRemainingCaptureTimeout = (remainingTimeoutMs, capMs) => {
461
+ const cappedRemainingTimeoutMs = createRemainingCaptureTimeout(capMs);
462
+ return () => Math.min(remainingTimeoutMs(), cappedRemainingTimeoutMs());
463
+ };
442
464
  var clampInspiredesignCaptureTimeout = (timeoutMs) => {
443
465
  if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs)) return INSPIREDESIGN_CAPTURE_TIMEOUT_MS;
444
466
  return Math.max(1, Math.min(timeoutMs, INSPIREDESIGN_CAPTURE_TIMEOUT_MS));
445
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
+ };
446
472
  function sanitizeInspiredesignCaptureText(value) {
447
473
  if (value === void 0) return void 0;
448
474
  const redacted = redactSensitive(value);
@@ -476,6 +502,61 @@ var buildSkippedAfterTransportTimeoutAttempt = (label) => {
476
502
  var hasUsableCaptureText = (value) => {
477
503
  return typeof value === "string" && value.trim().length > 0;
478
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
+ };
479
560
  var resolveInspiredesignCaptureCookiePolicy = (options) => {
480
561
  if (options.cookiePolicyOverride) return options.cookiePolicyOverride;
481
562
  return options.useCookies === false ? "off" : "auto";
@@ -532,6 +613,25 @@ var importConfiguredCaptureCookies = async (manager, sessionId, source, timeoutM
532
613
  sourceMessage: loaded.message
533
614
  };
534
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
+ };
535
635
  var captureSnapshotArtifact = async (manager, sessionId, remainingTimeoutMs) => {
536
636
  try {
537
637
  const snapshot = await withCaptureDeadline(
@@ -631,15 +731,145 @@ var captureDomArtifact = async (manager, sessionId, remainingTimeoutMs) => {
631
731
  };
632
732
  }
633
733
  };
634
- var buildVisualEvidenceMetadata = (status, detail, warnings = [], tempPath) => ({
734
+ var buildVisualEvidenceMetadata = (status, detail, warnings = [], tempPath, sourceUrl, pinterestPageQuality) => ({
635
735
  status,
636
736
  kind: "viewport",
637
737
  fullPage: false,
638
738
  capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
739
+ ...sourceUrl ? { sourceUrl } : {},
740
+ ...pinterestPageQuality ? { pinterestPageQuality } : {},
639
741
  ...tempPath ? { tempPath } : {},
640
742
  warnings,
641
743
  ...detail ? { failure: sanitizeInspiredesignCaptureText(detail) } : {}
642
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
+ };
643
873
  var captureVisualEvidenceArtifact = async (manager, sessionId, options, remainingTimeoutMs) => {
644
874
  const visualEvidence = options.visualEvidence ?? "off";
645
875
  if (visualEvidence === "off") return void 0;
@@ -657,6 +887,7 @@ var captureVisualEvidenceArtifact = async (manager, sessionId, options, remainin
657
887
  }
658
888
  try {
659
889
  await mkdir(dirname(options.visualEvidencePath), { recursive: true });
890
+ const viewportProbe = await captureViewportSourceUrl(manager, sessionId, remainingTimeoutMs);
660
891
  const screenshot = await withCaptureDeadline(
661
892
  manager.screenshot(sessionId, {
662
893
  path: options.visualEvidencePath,
@@ -671,7 +902,14 @@ var captureVisualEvidenceArtifact = async (manager, sessionId, options, remainin
671
902
  if (resolve(screenshot.path) !== resolve(options.visualEvidencePath)) {
672
903
  return buildVisualEvidenceMetadata("failed", "Visual evidence screenshot path did not match the requested artifact path.");
673
904
  }
674
- 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
+ );
675
913
  } catch (error) {
676
914
  return buildVisualEvidenceMetadata(
677
915
  "failed",
@@ -718,6 +956,412 @@ var captureInspiredesignArtifacts = async (manager, sessionId, remainingTimeoutM
718
956
  const visual = await captureVisualEvidenceArtifact(manager, sessionId, options, remainingTimeoutMs);
719
957
  return buildCaptureEvidence(snapshot, clone, dom, visual);
720
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
+ }
721
1365
  async function captureInspiredesignReferenceFromManager(manager, url, options = {}) {
722
1366
  const cookiePolicy = resolveInspiredesignCaptureCookiePolicy(options);
723
1367
  const captureTimeoutMs = clampInspiredesignCaptureTimeout(options.timeoutMs);
@@ -2230,6 +2874,18 @@ async function handleDaemonCommand(core, request) {
2230
2874
  captureReference: async (url, options) => captureInspiredesignReferenceFromManager(core.manager, url, {
2231
2875
  ...options,
2232
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
2233
2889
  })
2234
2890
  }
2235
2891
  );
@@ -3061,7 +3717,7 @@ function clampWaitTimeout(timeoutMs) {
3061
3717
  }
3062
3718
  async function waitForRelayHandshake(relay, observedPort, timeoutMs) {
3063
3719
  const start = Date.now();
3064
- let delay = WAIT_MIN_DELAY_MS;
3720
+ let delay2 = WAIT_MIN_DELAY_MS;
3065
3721
  while (Date.now() - start < timeoutMs) {
3066
3722
  const relayStatus = relay.status();
3067
3723
  if (relayStatus.extensionHandshakeComplete) {
@@ -3074,8 +3730,8 @@ async function waitForRelayHandshake(relay, observedPort, timeoutMs) {
3074
3730
  if (observedStatus?.extensionHandshakeComplete) {
3075
3731
  return true;
3076
3732
  }
3077
- await new Promise((resolve3) => setTimeout(resolve3, delay));
3078
- 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);
3079
3735
  }
3080
3736
  return false;
3081
3737
  }
@@ -3740,6 +4396,9 @@ function persistDaemonStatusMetadata(base, status, config) {
3740
4396
  export {
3741
4397
  inspectSession,
3742
4398
  buildCorrelatedAuditBundle,
4399
+ captureInspiredesignPrimaryVisualEvidenceFromManager,
4400
+ captureInspiredesignPrimaryPinMediaEvidenceFromManager,
4401
+ captureInspiredesignPrimaryMotionEvidenceFromManager,
3743
4402
  captureInspiredesignReferenceFromManager,
3744
4403
  executeMacroWithRuntime,
3745
4404
  fetchWithTimeout,
@@ -3761,4 +4420,4 @@ export {
3761
4420
  fetchDaemonStatusFromMetadata,
3762
4421
  persistDaemonStatusMetadata
3763
4422
  };
3764
- //# sourceMappingURL=chunk-QXJDJDSZ.js.map
4423
+ //# sourceMappingURL=chunk-Z3ADLR7I.js.map