opendevbrowser 0.0.31 → 0.0.32
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.
- package/README.md +18 -5
- package/dist/{accessibility-snapshot-CQ4ZKWKC.js → accessibility-snapshot-XOP66CSK.js} +11 -11
- package/dist/{active-window-TD5HYJ72.js → active-window-E3WFOQGX.js} +11 -11
- package/dist/{annotate-VTLFS2XV.js → annotate-MAE7ZJOZ.js} +10 -10
- package/dist/{artifacts-KJ6RNDO2.js → artifacts-JHDUUJGQ.js} +2 -2
- package/dist/{attr-BCI5KYCW.js → attr-M3PFDJ7Q.js} +10 -10
- package/dist/{canvas-5DFEEOKM.js → canvas-3AJVL5I5.js} +10 -10
- package/dist/{capture-desktop-HFTTWY4Z.js → capture-desktop-VJGEETMJ.js} +11 -11
- package/dist/{capture-window-X63XPIFF.js → capture-window-W5UFSFQL.js} +11 -11
- package/dist/{check-LWAUY7GC.js → check-4IR3UJVW.js} +10 -10
- package/dist/{checked-ZSOUKVYT.js → checked-PKNY7724.js} +10 -10
- package/dist/{chunk-KZ2IXVQT.js → chunk-2X4JFMKJ.js} +39 -4
- package/dist/chunk-2X4JFMKJ.js.map +1 -0
- package/dist/{chunk-IPE7TF2P.js → chunk-7BNU6DFI.js} +8 -5
- package/dist/chunk-7BNU6DFI.js.map +1 -0
- package/dist/{chunk-6B5WAQV7.js → chunk-AKIAGFOE.js} +30 -7
- package/dist/chunk-AKIAGFOE.js.map +1 -0
- package/dist/{chunk-2I3YS3DV.js → chunk-AWQ37HSC.js} +7 -3
- package/dist/chunk-AWQ37HSC.js.map +1 -0
- package/dist/{chunk-3ILXPKSJ.js → chunk-BUVYTJZR.js} +2 -1
- package/dist/chunk-BUVYTJZR.js.map +1 -0
- package/dist/{chunk-AHEWXOKY.js → chunk-BUXFIY2P.js} +4 -4
- package/dist/{chunk-QOMWCRE3.js → chunk-HBK56JST.js} +3 -3
- package/dist/{chunk-T4GMCW6Z.js → chunk-J3KYGJRQ.js} +3 -3
- package/dist/{chunk-6PVZ2ABC.js → chunk-L3YNUGYF.js} +2 -2
- package/dist/{chunk-JZXD6FWR.js → chunk-NURQB55J.js} +2 -2
- package/dist/{chunk-GQJ5S3BL.js → chunk-P5K3ZIPI.js} +3 -3
- package/dist/{chunk-PPUWQKIC.js → chunk-PIFHXKV4.js} +4 -4
- package/dist/{chunk-STGGGVYT.js → chunk-QMHKAFYX.js} +2 -2
- package/dist/{chunk-4BEJVZRK.js → chunk-RO3SMXF3.js} +1073 -138
- package/dist/chunk-RO3SMXF3.js.map +1 -0
- package/dist/{chunk-RPXWUCQQ.js → chunk-SKFB5ICF.js} +2 -2
- package/dist/{chunk-2SIMIPLY.js → chunk-W6YPVNDX.js} +3 -3
- package/dist/{chunk-MD655IPO.js → chunk-XDLJE3RJ.js} +11 -4
- package/dist/chunk-XDLJE3RJ.js.map +1 -0
- package/dist/{chunk-KDSNXS6N.js → chunk-ZMNEWS7A.js} +2 -2
- package/dist/{chunk-COAOWH3G.js → chunk-ZOVMMQO6.js} +119 -27
- package/dist/chunk-ZOVMMQO6.js.map +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/commands/daemon.d.ts +19 -2
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/inspiredesign.d.ts +6 -1
- package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
- package/dist/cli/commands/serve.d.ts +12 -3
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/types.d.ts +1 -0
- package/dist/cli/commands/types.d.ts.map +1 -1
- package/dist/cli/daemon-client.d.ts.map +1 -1
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/daemon-mismatch.d.ts +9 -0
- package/dist/cli/daemon-mismatch.d.ts.map +1 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/errors.d.ts +4 -2
- package/dist/cli/errors.d.ts.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +89 -88
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installers/postinstall-skill-sync.js +2 -2
- package/dist/{click-2AILSEIZ.js → click-HLNXU4I5.js} +10 -10
- package/dist/{clone-component-TPJS3PEG.js → clone-component-QIKN5PIM.js} +9 -9
- package/dist/{clone-page-LE74CIFC.js → clone-page-5C7DTGZT.js} +9 -9
- package/dist/{close-HN4YI47K.js → close-PCRZHX7F.js} +9 -9
- package/dist/{close-WFERRHX6.js → close-WTXB3EDD.js} +9 -9
- package/dist/{connect-RWBV2UCQ.js → connect-6C2IG55I.js} +10 -10
- package/dist/{console-poll-PP4YYPDF.js → console-poll-VJXCZR3F.js} +10 -10
- package/dist/{cookie-import-6IP776FC.js → cookie-import-5OEDFB6U.js} +9 -9
- package/dist/{cookie-list-O2KG6DPU.js → cookie-list-44UNJJ6D.js} +9 -9
- package/dist/{daemon-2BSAZXLT.js → daemon-CIKGBWEB.js} +25 -12
- package/dist/daemon-CIKGBWEB.js.map +1 -0
- package/dist/daemon-fingerprint.json +1 -1
- package/dist/{debug-trace-snapshot-F3BDVZXS.js → debug-trace-snapshot-RGXAPGWB.js} +10 -10
- package/dist/{dialog-6JQYUWMQ.js → dialog-S64MJUM2.js} +10 -10
- package/dist/{disconnect-763TP7GH.js → disconnect-MTIELIM7.js} +9 -9
- package/dist/{enabled-DLYQFNIP.js → enabled-KF2L7LW4.js} +10 -10
- package/dist/{goto-S346TJJH.js → goto-ULWINUAZ.js} +10 -10
- package/dist/{help-U7KBQME6.js → help-IG5S5RJD.js} +13 -9
- package/dist/help-IG5S5RJD.js.map +1 -0
- package/dist/{hover-6JVJFGO7.js → hover-NOCOTR6N.js} +10 -10
- package/dist/{html-EVOSPBIT.js → html-LXSYP6BT.js} +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -17
- package/dist/index.js.map +1 -1
- package/dist/{inspector-H57BVUJP.js → inspector-62EPCLYB.js} +11 -11
- package/dist/{inspector-audit-NQBAJWC7.js → inspector-audit-T2IF67RJ.js} +13 -13
- package/dist/{inspector-plan-ZDIQVND3.js → inspector-plan-KQS6LRMW.js} +11 -11
- package/dist/inspiredesign/capture.d.ts +4 -0
- package/dist/inspiredesign/capture.d.ts.map +1 -1
- package/dist/inspiredesign/contract.d.ts +22 -0
- package/dist/inspiredesign/contract.d.ts.map +1 -1
- package/dist/inspiredesign/handoff.d.ts +7 -1
- package/dist/inspiredesign/handoff.d.ts.map +1 -1
- package/dist/inspiredesign/meta-prompt.d.ts +9 -0
- package/dist/inspiredesign/meta-prompt.d.ts.map +1 -0
- package/dist/inspiredesign/reference-discovery.d.ts +29 -0
- package/dist/inspiredesign/reference-discovery.d.ts.map +1 -0
- package/dist/inspiredesign/reference-pattern-board.d.ts +21 -0
- package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
- package/dist/inspiredesign/visual-evidence.d.ts +46 -0
- package/dist/inspiredesign/visual-evidence.d.ts.map +1 -0
- package/dist/inspiredesign/visual-policy.d.ts +17 -0
- package/dist/inspiredesign/visual-policy.d.ts.map +1 -0
- package/dist/{inspiredesign-IEUL4PX3.js → inspiredesign-DB6CHYN3.js} +71 -19
- package/dist/inspiredesign-DB6CHYN3.js.map +1 -0
- package/dist/{launch-EK66VQPF.js → launch-B5ES6FVS.js} +10 -10
- package/dist/{list-KKUKN467.js → list-TIZVR6RO.js} +9 -9
- package/dist/{list-ADZAQ2IU.js → list-XM4BP5GM.js} +9 -9
- package/dist/{macro-resolve-6DOQJ7CA.js → macro-resolve-TTQZVFIW.js} +10 -10
- package/dist/{native-UPLVQ2SG.js → native-J2DFLOLP.js} +3 -3
- package/dist/{network-poll-NUL4PDPY.js → network-poll-NNSY4W63.js} +10 -10
- package/dist/{new-5NKYPEFT.js → new-E6VNAC2A.js} +9 -9
- package/dist/{open-NR3BPLXV.js → open-F55XKMKB.js} +9 -9
- package/dist/opendevbrowser.d.ts.map +1 -1
- package/dist/opendevbrowser.js +46 -17
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/{perf-HJ36ZI6H.js → perf-RE7JE6CP.js} +10 -10
- package/dist/{pointer-down-IYTTQWXZ.js → pointer-down-BCBPC5FJ.js} +11 -11
- package/dist/{pointer-drag-A2YC5PWI.js → pointer-drag-QK7KGF7W.js} +11 -11
- package/dist/{pointer-move-W5K5FUI4.js → pointer-move-VFAZQAXA.js} +11 -11
- package/dist/{pointer-up-6GWVO64Y.js → pointer-up-FA5WE6LS.js} +11 -11
- package/dist/{press-A3V5WB3S.js → press-TNRHNDSW.js} +10 -10
- package/dist/{product-video-52REKWF3.js → product-video-UEANMZ2U.js} +11 -11
- package/dist/providers/renderer.d.ts +7 -1
- package/dist/providers/renderer.d.ts.map +1 -1
- package/dist/providers/workflow-handoff.d.ts +1 -0
- package/dist/providers/workflow-handoff.d.ts.map +1 -1
- package/dist/providers/workflows.d.ts +45 -3
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/{providers-IMFYMMHQ.js → providers-AMCNWZUL.js} +3 -3
- package/dist/public-surface/generated-manifest.d.ts +12 -3
- package/dist/public-surface/generated-manifest.d.ts.map +1 -1
- package/dist/public-surface/source.d.ts +5 -5
- package/dist/public-surface/source.d.ts.map +1 -1
- package/dist/{research-WB6BBCDD.js → research-YFY7WJSZ.js} +11 -11
- package/dist/{review-BGWVY4RA.js → review-NHOPLAT7.js} +11 -11
- package/dist/{review-desktop-LEORC5VS.js → review-desktop-OFWPDYGD.js} +11 -11
- package/dist/{rpc-4TSKSFGC.js → rpc-TVVQPUOL.js} +10 -10
- package/dist/{run-3NBLVWXD.js → run-OCBEZRDW.js} +8 -8
- package/dist/{screencast-start-UZVIT3IN.js → screencast-start-GTSDA33J.js} +10 -10
- package/dist/{screencast-stop-NOSJSIUO.js → screencast-stop-FYBUIXAA.js} +10 -10
- package/dist/{screenshot-LARG4JQG.js → screenshot-OEYRT3SP.js} +10 -10
- package/dist/{scroll-VNFMV6TW.js → scroll-35OFEFC5.js} +10 -10
- package/dist/{scroll-into-view-VYRT3JPT.js → scroll-into-view-UQ5RAWIX.js} +10 -10
- package/dist/{select-KJTUZDVO.js → select-K56QELVZ.js} +10 -10
- package/dist/{serve-EV7K4HKR.js → serve-5UJ3VMWC.js} +48 -24
- package/dist/serve-5UJ3VMWC.js.map +1 -0
- package/dist/{shopping-DTXHVQ2X.js → shopping-FJG7XB4Q.js} +11 -11
- package/dist/{skill-lifecycle-5UAZGKSN.js → skill-lifecycle-OWZYBPFS.js} +3 -3
- package/dist/skills/bundled-skill-directories.d.ts.map +1 -1
- package/dist/skills/skill-loader.js +2 -2
- package/dist/{skills-NSXDX6YM.js → skills-KHMRNOE4.js} +3 -3
- package/dist/{snapshot-3XQMCMRJ.js → snapshot-W7RKVZEI.js} +10 -10
- package/dist/{status-YUMDP5KY.js → status-KHYCLGUD.js} +20 -12
- package/dist/status-KHYCLGUD.js.map +1 -0
- package/dist/{status-OXSYA5XD.js → status-R4EV4TWO.js} +11 -11
- package/dist/{status-capabilities-P4KDSE2Y.js → status-capabilities-XD3RGLKF.js} +11 -11
- package/dist/{text-V3B7UVIH.js → text-TANLFZ4O.js} +10 -10
- package/dist/tools/inspiredesign_run.d.ts.map +1 -1
- package/dist/{type-IYBN3ZLR.js → type-Y2Y7LX7Y.js} +10 -10
- package/dist/{uncheck-SG737EGI.js → uncheck-6REVUUB2.js} +10 -10
- package/dist/{uninstall-KYKGJAX7.js → uninstall-FW5ORBIN.js} +3 -3
- package/dist/{update-skill-modes-BVX7IVMW.js → update-skill-modes-3ULKJK3Y.js} +3 -3
- package/dist/{upload-KH6ZABJA.js → upload-GGZC5UQP.js} +10 -10
- package/dist/{use-7YDKO3U4.js → use-B4Q7CFG2.js} +9 -9
- package/dist/{value-RZBWSKKM.js → value-DHOHO55D.js} +10 -10
- package/dist/{visible-BSFTAKXR.js → visible-S5BTWYNH.js} +10 -10
- package/dist/{wait-TMTEAYOP.js → wait-WV6NZUKL.js} +10 -10
- package/dist/{windows-HIZ23OHS.js → windows-GKE36DJQ.js} +11 -11
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
- package/skills/AGENTS.md +2 -1
- package/skills/opendevbrowser-best-practices/SKILL.md +9 -2
- package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +4 -3
- package/skills/opendevbrowser-best-practices/assets/templates/mode-flag-matrix.json +7 -0
- package/skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json +49 -3
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +24 -2
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +1 -0
- package/skills/opendevbrowser-design-agent/SKILL.md +3 -0
- package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +85 -40
- package/skills/opendevbrowser-design-agent/artifacts/scroll-reveal-surface-planning.md +2 -0
- package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +20 -5
- package/skills/opendevbrowser-motion-design/SKILL.md +129 -0
- package/skills/opendevbrowser-motion-design/artifacts/accessibility-reduced-motion.md +37 -0
- package/skills/opendevbrowser-motion-design/artifacts/device-breakpoint-posture.md +40 -0
- package/skills/opendevbrowser-motion-design/artifacts/motion-anti-patterns.md +29 -0
- package/skills/opendevbrowser-motion-design/artifacts/motion-pattern-catalog.md +430 -0
- package/skills/opendevbrowser-motion-design/artifacts/motion-release-gate.md +28 -0
- package/skills/opendevbrowser-motion-design/artifacts/motion-terminology.md +46 -0
- package/skills/opendevbrowser-motion-design/artifacts/open-dev-browser-motion-evidence.md +48 -0
- package/skills/opendevbrowser-motion-design/artifacts/performance-frame-budget.md +38 -0
- package/skills/opendevbrowser-motion-design/artifacts/platform-framework-guide.md +166 -0
- package/skills/opendevbrowser-motion-design/assets/templates/motion-audit-report.v1.md +70 -0
- package/skills/opendevbrowser-motion-design/assets/templates/motion-contract.v1.json +79 -0
- package/skills/opendevbrowser-motion-design/assets/templates/motion-release-gate.v1.json +18 -0
- package/skills/opendevbrowser-motion-design/assets/templates/motion-viewport-matrix.v1.json +76 -0
- package/skills/opendevbrowser-motion-design/scripts/motion-workflow.sh +163 -0
- package/skills/opendevbrowser-motion-design/scripts/validate-skill-assets.sh +374 -0
- package/dist/chunk-2I3YS3DV.js.map +0 -1
- package/dist/chunk-3ILXPKSJ.js.map +0 -1
- package/dist/chunk-4BEJVZRK.js.map +0 -1
- package/dist/chunk-6B5WAQV7.js.map +0 -1
- package/dist/chunk-COAOWH3G.js.map +0 -1
- package/dist/chunk-IPE7TF2P.js.map +0 -1
- package/dist/chunk-KZ2IXVQT.js.map +0 -1
- package/dist/chunk-MD655IPO.js.map +0 -1
- package/dist/daemon-2BSAZXLT.js.map +0 -1
- package/dist/help-U7KBQME6.js.map +0 -1
- package/dist/inspiredesign-IEUL4PX3.js.map +0 -1
- package/dist/serve-EV7K4HKR.js.map +0 -1
- package/dist/status-YUMDP5KY.js.map +0 -1
- /package/dist/{accessibility-snapshot-CQ4ZKWKC.js.map → accessibility-snapshot-XOP66CSK.js.map} +0 -0
- /package/dist/{active-window-TD5HYJ72.js.map → active-window-E3WFOQGX.js.map} +0 -0
- /package/dist/{annotate-VTLFS2XV.js.map → annotate-MAE7ZJOZ.js.map} +0 -0
- /package/dist/{artifacts-KJ6RNDO2.js.map → artifacts-JHDUUJGQ.js.map} +0 -0
- /package/dist/{attr-BCI5KYCW.js.map → attr-M3PFDJ7Q.js.map} +0 -0
- /package/dist/{canvas-5DFEEOKM.js.map → canvas-3AJVL5I5.js.map} +0 -0
- /package/dist/{capture-desktop-HFTTWY4Z.js.map → capture-desktop-VJGEETMJ.js.map} +0 -0
- /package/dist/{capture-window-X63XPIFF.js.map → capture-window-W5UFSFQL.js.map} +0 -0
- /package/dist/{check-LWAUY7GC.js.map → check-4IR3UJVW.js.map} +0 -0
- /package/dist/{checked-ZSOUKVYT.js.map → checked-PKNY7724.js.map} +0 -0
- /package/dist/{chunk-AHEWXOKY.js.map → chunk-BUXFIY2P.js.map} +0 -0
- /package/dist/{chunk-QOMWCRE3.js.map → chunk-HBK56JST.js.map} +0 -0
- /package/dist/{chunk-T4GMCW6Z.js.map → chunk-J3KYGJRQ.js.map} +0 -0
- /package/dist/{chunk-6PVZ2ABC.js.map → chunk-L3YNUGYF.js.map} +0 -0
- /package/dist/{chunk-JZXD6FWR.js.map → chunk-NURQB55J.js.map} +0 -0
- /package/dist/{chunk-GQJ5S3BL.js.map → chunk-P5K3ZIPI.js.map} +0 -0
- /package/dist/{chunk-PPUWQKIC.js.map → chunk-PIFHXKV4.js.map} +0 -0
- /package/dist/{chunk-STGGGVYT.js.map → chunk-QMHKAFYX.js.map} +0 -0
- /package/dist/{chunk-RPXWUCQQ.js.map → chunk-SKFB5ICF.js.map} +0 -0
- /package/dist/{chunk-2SIMIPLY.js.map → chunk-W6YPVNDX.js.map} +0 -0
- /package/dist/{chunk-KDSNXS6N.js.map → chunk-ZMNEWS7A.js.map} +0 -0
- /package/dist/{click-2AILSEIZ.js.map → click-HLNXU4I5.js.map} +0 -0
- /package/dist/{clone-component-TPJS3PEG.js.map → clone-component-QIKN5PIM.js.map} +0 -0
- /package/dist/{clone-page-LE74CIFC.js.map → clone-page-5C7DTGZT.js.map} +0 -0
- /package/dist/{close-HN4YI47K.js.map → close-PCRZHX7F.js.map} +0 -0
- /package/dist/{close-WFERRHX6.js.map → close-WTXB3EDD.js.map} +0 -0
- /package/dist/{connect-RWBV2UCQ.js.map → connect-6C2IG55I.js.map} +0 -0
- /package/dist/{console-poll-PP4YYPDF.js.map → console-poll-VJXCZR3F.js.map} +0 -0
- /package/dist/{cookie-import-6IP776FC.js.map → cookie-import-5OEDFB6U.js.map} +0 -0
- /package/dist/{cookie-list-O2KG6DPU.js.map → cookie-list-44UNJJ6D.js.map} +0 -0
- /package/dist/{debug-trace-snapshot-F3BDVZXS.js.map → debug-trace-snapshot-RGXAPGWB.js.map} +0 -0
- /package/dist/{dialog-6JQYUWMQ.js.map → dialog-S64MJUM2.js.map} +0 -0
- /package/dist/{disconnect-763TP7GH.js.map → disconnect-MTIELIM7.js.map} +0 -0
- /package/dist/{enabled-DLYQFNIP.js.map → enabled-KF2L7LW4.js.map} +0 -0
- /package/dist/{goto-S346TJJH.js.map → goto-ULWINUAZ.js.map} +0 -0
- /package/dist/{hover-6JVJFGO7.js.map → hover-NOCOTR6N.js.map} +0 -0
- /package/dist/{html-EVOSPBIT.js.map → html-LXSYP6BT.js.map} +0 -0
- /package/dist/{inspector-H57BVUJP.js.map → inspector-62EPCLYB.js.map} +0 -0
- /package/dist/{inspector-audit-NQBAJWC7.js.map → inspector-audit-T2IF67RJ.js.map} +0 -0
- /package/dist/{inspector-plan-ZDIQVND3.js.map → inspector-plan-KQS6LRMW.js.map} +0 -0
- /package/dist/{launch-EK66VQPF.js.map → launch-B5ES6FVS.js.map} +0 -0
- /package/dist/{list-KKUKN467.js.map → list-TIZVR6RO.js.map} +0 -0
- /package/dist/{list-ADZAQ2IU.js.map → list-XM4BP5GM.js.map} +0 -0
- /package/dist/{macro-resolve-6DOQJ7CA.js.map → macro-resolve-TTQZVFIW.js.map} +0 -0
- /package/dist/{native-UPLVQ2SG.js.map → native-J2DFLOLP.js.map} +0 -0
- /package/dist/{network-poll-NUL4PDPY.js.map → network-poll-NNSY4W63.js.map} +0 -0
- /package/dist/{new-5NKYPEFT.js.map → new-E6VNAC2A.js.map} +0 -0
- /package/dist/{open-NR3BPLXV.js.map → open-F55XKMKB.js.map} +0 -0
- /package/dist/{perf-HJ36ZI6H.js.map → perf-RE7JE6CP.js.map} +0 -0
- /package/dist/{pointer-down-IYTTQWXZ.js.map → pointer-down-BCBPC5FJ.js.map} +0 -0
- /package/dist/{pointer-drag-A2YC5PWI.js.map → pointer-drag-QK7KGF7W.js.map} +0 -0
- /package/dist/{pointer-move-W5K5FUI4.js.map → pointer-move-VFAZQAXA.js.map} +0 -0
- /package/dist/{pointer-up-6GWVO64Y.js.map → pointer-up-FA5WE6LS.js.map} +0 -0
- /package/dist/{press-A3V5WB3S.js.map → press-TNRHNDSW.js.map} +0 -0
- /package/dist/{product-video-52REKWF3.js.map → product-video-UEANMZ2U.js.map} +0 -0
- /package/dist/{providers-IMFYMMHQ.js.map → providers-AMCNWZUL.js.map} +0 -0
- /package/dist/{research-WB6BBCDD.js.map → research-YFY7WJSZ.js.map} +0 -0
- /package/dist/{review-BGWVY4RA.js.map → review-NHOPLAT7.js.map} +0 -0
- /package/dist/{review-desktop-LEORC5VS.js.map → review-desktop-OFWPDYGD.js.map} +0 -0
- /package/dist/{rpc-4TSKSFGC.js.map → rpc-TVVQPUOL.js.map} +0 -0
- /package/dist/{run-3NBLVWXD.js.map → run-OCBEZRDW.js.map} +0 -0
- /package/dist/{screencast-start-UZVIT3IN.js.map → screencast-start-GTSDA33J.js.map} +0 -0
- /package/dist/{screencast-stop-NOSJSIUO.js.map → screencast-stop-FYBUIXAA.js.map} +0 -0
- /package/dist/{screenshot-LARG4JQG.js.map → screenshot-OEYRT3SP.js.map} +0 -0
- /package/dist/{scroll-VNFMV6TW.js.map → scroll-35OFEFC5.js.map} +0 -0
- /package/dist/{scroll-into-view-VYRT3JPT.js.map → scroll-into-view-UQ5RAWIX.js.map} +0 -0
- /package/dist/{select-KJTUZDVO.js.map → select-K56QELVZ.js.map} +0 -0
- /package/dist/{shopping-DTXHVQ2X.js.map → shopping-FJG7XB4Q.js.map} +0 -0
- /package/dist/{skill-lifecycle-5UAZGKSN.js.map → skill-lifecycle-OWZYBPFS.js.map} +0 -0
- /package/dist/{skills-NSXDX6YM.js.map → skills-KHMRNOE4.js.map} +0 -0
- /package/dist/{snapshot-3XQMCMRJ.js.map → snapshot-W7RKVZEI.js.map} +0 -0
- /package/dist/{status-OXSYA5XD.js.map → status-R4EV4TWO.js.map} +0 -0
- /package/dist/{status-capabilities-P4KDSE2Y.js.map → status-capabilities-XD3RGLKF.js.map} +0 -0
- /package/dist/{text-V3B7UVIH.js.map → text-TANLFZ4O.js.map} +0 -0
- /package/dist/{type-IYBN3ZLR.js.map → type-Y2Y7LX7Y.js.map} +0 -0
- /package/dist/{uncheck-SG737EGI.js.map → uncheck-6REVUUB2.js.map} +0 -0
- /package/dist/{uninstall-KYKGJAX7.js.map → uninstall-FW5ORBIN.js.map} +0 -0
- /package/dist/{update-skill-modes-BVX7IVMW.js.map → update-skill-modes-3ULKJK3Y.js.map} +0 -0
- /package/dist/{upload-KH6ZABJA.js.map → upload-GGZC5UQP.js.map} +0 -0
- /package/dist/{use-7YDKO3U4.js.map → use-B4Q7CFG2.js.map} +0 -0
- /package/dist/{value-RZBWSKKM.js.map → value-DHOHO55D.js.map} +0 -0
- /package/dist/{visible-BSFTAKXR.js.map → visible-S5BTWYNH.js.map} +0 -0
- /package/dist/{wait-TMTEAYOP.js.map → wait-WV6NZUKL.js.map} +0 -0
- /package/dist/{windows-HIZ23OHS.js.map → windows-GKE36DJQ.js.map} +0 -0
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
INSPIREDESIGN_HANDOFF_RECOMMENDED_SKILLS,
|
|
11
11
|
buildInspiredesignFollowthroughSummary,
|
|
12
12
|
buildInspiredesignNextStep
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-2X4JFMKJ.js";
|
|
14
14
|
import {
|
|
15
15
|
applyPromptGuard,
|
|
16
16
|
applyProviderIssueHint,
|
|
@@ -1968,7 +1968,7 @@ var executeStep = async (args) => {
|
|
|
1968
1968
|
});
|
|
1969
1969
|
await args.handle.pointerMove(args.sessionId, point.x, point.y, args.targetId, 12);
|
|
1970
1970
|
await args.handle.pointerDown(args.sessionId, point.x, point.y, args.targetId, "left", 1);
|
|
1971
|
-
await new Promise((
|
|
1971
|
+
await new Promise((resolve2) => setTimeout(resolve2, Math.max(250, args.step.holdMs ?? DEFAULT_HOLD_MS2)));
|
|
1972
1972
|
await args.handle.pointerUp(args.sessionId, point.x, point.y, args.targetId, "left", 1);
|
|
1973
1973
|
return;
|
|
1974
1974
|
}
|
|
@@ -3685,8 +3685,8 @@ var CrawlWorkerPool = class {
|
|
|
3685
3685
|
}
|
|
3686
3686
|
const taskId = this.nextTaskId;
|
|
3687
3687
|
this.nextTaskId += 1;
|
|
3688
|
-
return new Promise((
|
|
3689
|
-
this.queue.push({ id: taskId, input, resolve, reject });
|
|
3688
|
+
return new Promise((resolve2, reject) => {
|
|
3689
|
+
this.queue.push({ id: taskId, input, resolve: resolve2, reject });
|
|
3690
3690
|
this.dispatch();
|
|
3691
3691
|
});
|
|
3692
3692
|
}
|
|
@@ -9086,7 +9086,10 @@ var isWorkflowResumeEnvelope = (value) => isJsonRecord(value) && isWorkflowKind(
|
|
|
9086
9086
|
var isWorkflowResumePayload = (value) => isJsonRecord(value) && isWorkflowResumeEnvelope(value.workflow);
|
|
9087
9087
|
|
|
9088
9088
|
// src/providers/workflows.ts
|
|
9089
|
-
import { createHash as
|
|
9089
|
+
import { createHash as createHash8 } from "crypto";
|
|
9090
|
+
import { mkdtemp as mkdtemp2, readFile, rm as rm2 } from "fs/promises";
|
|
9091
|
+
import { tmpdir as tmpdir2 } from "os";
|
|
9092
|
+
import { join as join3, resolve } from "path";
|
|
9090
9093
|
|
|
9091
9094
|
// src/providers/workflow-output-root.ts
|
|
9092
9095
|
import { join as join2 } from "path";
|
|
@@ -9282,7 +9285,7 @@ var enrichResearchRecords = (records, timebox, now = /* @__PURE__ */ new Date())
|
|
|
9282
9285
|
};
|
|
9283
9286
|
|
|
9284
9287
|
// src/inspiredesign/contract.ts
|
|
9285
|
-
import { createHash as
|
|
9288
|
+
import { createHash as createHash4 } from "crypto";
|
|
9286
9289
|
|
|
9287
9290
|
// skills/opendevbrowser-design-agent/assets/templates/canvas-generation-plan.design.v1.json
|
|
9288
9291
|
var canvas_generation_plan_design_v1_default = {
|
|
@@ -11193,6 +11196,15 @@ var expandInspiredesignBrief = (brief, preferredFormatId) => {
|
|
|
11193
11196
|
var SIGNAL_LIMIT = 5;
|
|
11194
11197
|
var SIGNAL_CLIP = 180;
|
|
11195
11198
|
var PATTERN_LIMIT = 6;
|
|
11199
|
+
var SCORE_FETCH_CAPTURED = 20;
|
|
11200
|
+
var SCORE_CAPTURE_CAPTURED = 20;
|
|
11201
|
+
var SCORE_VISUAL_CAPTURED = 30;
|
|
11202
|
+
var SCORE_SNAPSHOT = 10;
|
|
11203
|
+
var SCORE_CLONE = 8;
|
|
11204
|
+
var SCORE_DOM = 8;
|
|
11205
|
+
var SCORE_PUBLIC_LANDING = 6;
|
|
11206
|
+
var SCORE_SIGNAL_CAP = 12;
|
|
11207
|
+
var MAX_REFERENCE_SCORE = 100;
|
|
11196
11208
|
var ADVANCED_MOTION_FIELDS = [
|
|
11197
11209
|
"Advisory shader-style gradients: specify effect type, uniforms, static fallback, and reduced-motion replacement as design language only.",
|
|
11198
11210
|
"Advisory WebGL-style depth cues: describe layered depth, camera-like parallax, and spatial hierarchy without requiring WebGL runtime.",
|
|
@@ -11211,7 +11223,7 @@ var textFromHtml = (html) => {
|
|
|
11211
11223
|
var stripActionRefs = (value) => value.replace(/\[r\d+\]\s+(?:link|button|combobox|textbox|option)\s+/gi, "").replace(/\[r\d+\]\s+/gi, "").replace(/\bvalue=/gi, "");
|
|
11212
11224
|
var isCodeOrCssPreview = (value) => {
|
|
11213
11225
|
const lower = value.toLowerCase();
|
|
11214
|
-
return lower.includes("dangerouslysetinnerhtml") || lower.includes("opendevbrowser-root") || lower.includes("align-content:") || lower.startsWith("import ") || /^[.#][a-z0-9_-]+\s*\{/.test(lower) || lower.includes("{") && /[a-z-]+:\s*[^;]+;/.test(lower);
|
|
11226
|
+
return lower.includes("dangerouslysetinnerhtml") || lower.includes("opendevbrowser-root") || lower.includes("--gestalt-") || lower.includes("align-content:") || lower.startsWith(":root") || lower.startsWith("import ") || /^[.#][a-z0-9_-]+\s*\{/.test(lower) || lower.includes("{") && /[a-z-]+:\s*[^;]+;/.test(lower);
|
|
11215
11227
|
};
|
|
11216
11228
|
var cleanEvidenceText = (value) => {
|
|
11217
11229
|
return trimText(stripActionRefs(value).replace(/[{};]/g, " "));
|
|
@@ -11232,6 +11244,23 @@ var DIAGNOSTIC_TEXT_MARKERS = [
|
|
|
11232
11244
|
"complete the verification",
|
|
11233
11245
|
"blocked reference"
|
|
11234
11246
|
];
|
|
11247
|
+
var INTERFACE_CHROME_TEXT_MARKERS = [
|
|
11248
|
+
"your profile",
|
|
11249
|
+
"your boards",
|
|
11250
|
+
"remove search input",
|
|
11251
|
+
"settings & support",
|
|
11252
|
+
"pin card",
|
|
11253
|
+
"voice search",
|
|
11254
|
+
"lens",
|
|
11255
|
+
"back to home page",
|
|
11256
|
+
"toggle mobile menu",
|
|
11257
|
+
"facebook",
|
|
11258
|
+
"instagram",
|
|
11259
|
+
"updates",
|
|
11260
|
+
"messages",
|
|
11261
|
+
"when autocomplete results are available",
|
|
11262
|
+
"touch device users"
|
|
11263
|
+
];
|
|
11235
11264
|
var PUBLIC_LANDING_TEXT_MARKERS = [
|
|
11236
11265
|
"church",
|
|
11237
11266
|
"landing page",
|
|
@@ -11271,6 +11300,14 @@ var isDiagnosticText = (value) => {
|
|
|
11271
11300
|
const lower = value.toLowerCase();
|
|
11272
11301
|
return DIAGNOSTIC_TEXT_MARKERS.some((marker) => lower.includes(marker));
|
|
11273
11302
|
};
|
|
11303
|
+
var isInterfaceChromeText = (value) => {
|
|
11304
|
+
const lower = value.toLowerCase();
|
|
11305
|
+
if (lower === "your profile" || lower === "adobe, inc." || lower === "dribbble: the community for graphic design" || /^https?:\/\/\S+$/.test(lower) || lower.includes("when autocomplete results are available") && lower.includes("touch device users") || lower.includes("get 20%") && lower.includes("dribbble: the community for graphic design") || lower.includes("our free wordpress themes are downloaded") && lower.includes("get them now")) {
|
|
11306
|
+
return true;
|
|
11307
|
+
}
|
|
11308
|
+
const markerCount = INTERFACE_CHROME_TEXT_MARKERS.filter((marker) => lower.includes(marker)).length;
|
|
11309
|
+
return markerCount >= 3 || lower.includes("pin card") && lower.includes("your profile");
|
|
11310
|
+
};
|
|
11274
11311
|
var hasPublicLandingSignal = (value) => {
|
|
11275
11312
|
const lower = value.toLowerCase();
|
|
11276
11313
|
const strongCount = PUBLIC_LANDING_TEXT_MARKERS.filter((marker) => lower.includes(marker)).length;
|
|
@@ -11281,7 +11318,7 @@ var hasPublicLandingSignal = (value) => {
|
|
|
11281
11318
|
var pushSignal = (signals, value) => {
|
|
11282
11319
|
if (!value || isCodeOrCssPreview(value)) return;
|
|
11283
11320
|
const text = cleanEvidenceText(value);
|
|
11284
|
-
if (isCodeOrCssPreview(text) || isDiagnosticText(text)) return;
|
|
11321
|
+
if (isCodeOrCssPreview(text) || isDiagnosticText(text) || isInterfaceChromeText(text)) return;
|
|
11285
11322
|
if (text.length > 0 && !signals.includes(text)) {
|
|
11286
11323
|
signals.push(text);
|
|
11287
11324
|
}
|
|
@@ -11300,7 +11337,7 @@ var getInspiredesignReferenceSignals = (reference) => {
|
|
|
11300
11337
|
var hasCleanSignal = (value) => {
|
|
11301
11338
|
if (!value || isCodeOrCssPreview(value)) return false;
|
|
11302
11339
|
const text = cleanEvidenceText(value);
|
|
11303
|
-
return text.length > 0 && !isCodeOrCssPreview(text) && !isDiagnosticText(text);
|
|
11340
|
+
return text.length > 0 && !isCodeOrCssPreview(text) && !isDiagnosticText(text) && !isInterfaceChromeText(text);
|
|
11304
11341
|
};
|
|
11305
11342
|
var hasUsableCloneCreativeEvidence = (reference) => hasCleanSignal(reference.capture?.clone?.componentPreview);
|
|
11306
11343
|
var hasUsableCaptureEvidence = (reference) => hasCleanSignal(reference.capture?.snapshot?.content) || hasUsableCloneCreativeEvidence(reference) || hasCleanSignal(textFromHtml(reference.capture?.dom?.outerHTML));
|
|
@@ -11316,9 +11353,16 @@ var firstSignal = (reference) => {
|
|
|
11316
11353
|
textFromHtml(reference.capture?.dom?.outerHTML),
|
|
11317
11354
|
reference.excerpt,
|
|
11318
11355
|
reference.title
|
|
11319
|
-
].map((value) => value ? cleanEvidenceText(value) : "").find((value) => value.length > 0 && !isCodeOrCssPreview(value) && !isDiagnosticText(value));
|
|
11356
|
+
].map((value) => value ? cleanEvidenceText(value) : "").find((value) => value.length > 0 && !isCodeOrCssPreview(value) && !isDiagnosticText(value) && !isInterfaceChromeText(value));
|
|
11320
11357
|
return preferred ? clipText(preferred, SIGNAL_CLIP) : reference.url;
|
|
11321
11358
|
};
|
|
11359
|
+
var displayNameForReference = (reference, primarySignal) => {
|
|
11360
|
+
const title = reference.title ? cleanEvidenceText(reference.title) : "";
|
|
11361
|
+
if (title && !isDiagnosticText(title) && !isInterfaceChromeText(title)) {
|
|
11362
|
+
return clipText(title, SIGNAL_CLIP);
|
|
11363
|
+
}
|
|
11364
|
+
return primarySignal !== reference.url ? primarySignal : reference.url;
|
|
11365
|
+
};
|
|
11322
11366
|
var REFERENCE_PATTERN_RULES = [
|
|
11323
11367
|
{
|
|
11324
11368
|
summary: "location-first church discovery with regional pathways",
|
|
@@ -11376,8 +11420,49 @@ var deriveCapturedVia = (reference) => {
|
|
|
11376
11420
|
methods.push("clone");
|
|
11377
11421
|
}
|
|
11378
11422
|
if (reference.capture?.dom?.outerHTML.trim()) methods.push("dom");
|
|
11423
|
+
if (reference.capture?.visual?.status === "captured") methods.push("visual");
|
|
11379
11424
|
return methods;
|
|
11380
11425
|
};
|
|
11426
|
+
var scoreReference = (reference, signals, isPublicLanding) => {
|
|
11427
|
+
let score = 0;
|
|
11428
|
+
if (reference.fetchStatus === "captured") score += SCORE_FETCH_CAPTURED;
|
|
11429
|
+
if (reference.captureStatus === "captured") score += SCORE_CAPTURE_CAPTURED;
|
|
11430
|
+
if (reference.capture?.visual?.status === "captured") score += SCORE_VISUAL_CAPTURED;
|
|
11431
|
+
if (reference.capture?.snapshot?.content.trim()) score += SCORE_SNAPSHOT;
|
|
11432
|
+
if (hasUsableCloneCreativeEvidence(reference)) score += SCORE_CLONE;
|
|
11433
|
+
if (reference.capture?.dom?.outerHTML.trim()) score += SCORE_DOM;
|
|
11434
|
+
if (isPublicLanding) score += SCORE_PUBLIC_LANDING;
|
|
11435
|
+
score += Math.min(SCORE_SIGNAL_CAP, signals.length * 2);
|
|
11436
|
+
return Math.min(MAX_REFERENCE_SCORE, score);
|
|
11437
|
+
};
|
|
11438
|
+
var confidenceFromScore = (score) => Number((score / MAX_REFERENCE_SCORE).toFixed(2));
|
|
11439
|
+
var deriveVisualStrengths = (reference, patterns) => {
|
|
11440
|
+
const strengths = [
|
|
11441
|
+
...reference.capture?.visual?.status === "captured" ? ["Screenshot artifact is available for direct visual inspection."] : [],
|
|
11442
|
+
...reference.capture?.snapshot?.content.trim() ? ["Snapshot text confirms visible hierarchy and interaction targets."] : [],
|
|
11443
|
+
...hasUsableCloneCreativeEvidence(reference) ? ["Clone preview exposes reusable component and styling cues."] : [],
|
|
11444
|
+
...patterns.slice(0, 2).map((pattern) => `Reusable visual cue: ${pattern}.`)
|
|
11445
|
+
];
|
|
11446
|
+
return strengths.slice(0, PATTERN_LIMIT);
|
|
11447
|
+
};
|
|
11448
|
+
var deriveVisualRisks = (reference) => {
|
|
11449
|
+
const risks = [
|
|
11450
|
+
...reference.capture?.visual?.status !== "captured" ? ["No finalized screenshot artifact, so visual claims must stay conservative."] : [],
|
|
11451
|
+
...reference.capture?.visual?.status === "failed" && reference.capture.visual.failure ? [`Screenshot failure: ${reference.capture.visual.failure}.`] : [],
|
|
11452
|
+
...(reference.capture?.visual?.warnings ?? []).map((warning) => `Screenshot warning: ${warning}.`),
|
|
11453
|
+
...reference.fetchStatus !== "captured" ? ["Fetch evidence failed or was skipped, so use browser capture cautiously."] : []
|
|
11454
|
+
];
|
|
11455
|
+
return risks.length > 0 ? risks.slice(0, PATTERN_LIMIT) : ["No major visual evidence risk detected in the captured reference."];
|
|
11456
|
+
};
|
|
11457
|
+
var selectionReasonForScore = (score, capturedVia) => {
|
|
11458
|
+
if (capturedVia.includes("visual")) {
|
|
11459
|
+
return `Ranked for screenshot-backed visual evidence plus ${capturedVia.join(", ")} capture.`;
|
|
11460
|
+
}
|
|
11461
|
+
if (score >= 50) {
|
|
11462
|
+
return `Ranked for strong text and structural evidence from ${capturedVia.join(", ") || "reference metadata"}.`;
|
|
11463
|
+
}
|
|
11464
|
+
return "Ranked for limited but usable reference cues.";
|
|
11465
|
+
};
|
|
11381
11466
|
var deriveComponentFamilies = (format, patterns, isPublicLanding) => {
|
|
11382
11467
|
const base = isPublicLanding ? "hero composition, proof bands, narrative pathways, service or story sections, conversion CTA, and footer" : format.componentGrammar;
|
|
11383
11468
|
return [base, ...patterns.slice(0, 3)];
|
|
@@ -11405,12 +11490,19 @@ var deriveReferenceEntry = (reference, format) => {
|
|
|
11405
11490
|
const primarySignal = firstSignal(reference);
|
|
11406
11491
|
const patterns = appendSourceDetail(derivePatternSummaries(signals, primarySignal), primarySignal);
|
|
11407
11492
|
const isPublicLanding = signals.some(hasPublicLandingSignal);
|
|
11493
|
+
const capturedVia = deriveCapturedVia(reference);
|
|
11494
|
+
const score = scoreReference(reference, signals, isPublicLanding);
|
|
11408
11495
|
return {
|
|
11409
11496
|
id: reference.id,
|
|
11410
|
-
|
|
11497
|
+
score,
|
|
11498
|
+
confidence: confidenceFromScore(score),
|
|
11499
|
+
name: displayNameForReference(reference, primarySignal),
|
|
11411
11500
|
url: reference.url,
|
|
11412
11501
|
surfaceType: isPublicLanding ? "public landing page" : format.archetype,
|
|
11413
|
-
capturedVia
|
|
11502
|
+
capturedVia,
|
|
11503
|
+
selectionReason: selectionReasonForScore(score, capturedVia),
|
|
11504
|
+
visualStrengths: deriveVisualStrengths(reference, patterns),
|
|
11505
|
+
visualRisks: deriveVisualRisks(reference),
|
|
11414
11506
|
layoutRecipe: patterns.join("; "),
|
|
11415
11507
|
contentHierarchy: patterns.slice(0, 4),
|
|
11416
11508
|
componentFamilies: deriveComponentFamilies(format, patterns, isPublicLanding),
|
|
@@ -11421,16 +11513,41 @@ var deriveReferenceEntry = (reference, format) => {
|
|
|
11421
11513
|
whyItWorks: reference.captureStatus === "captured" ? "Captured reference evidence provides reusable hierarchy, rhythm, and component cues." : "Available reference text provides directional content and hierarchy cues."
|
|
11422
11514
|
};
|
|
11423
11515
|
};
|
|
11516
|
+
var sortReferenceEntries = (entries) => entries.slice().sort((left, right) => right.score - left.score || left.id.localeCompare(right.id) || left.url.localeCompare(right.url)).map((entry, index) => ({
|
|
11517
|
+
rank: index + 1,
|
|
11518
|
+
...entry
|
|
11519
|
+
}));
|
|
11520
|
+
var rejectionReasonForReference = (reference) => {
|
|
11521
|
+
if (reference.fetchStatus === "failed" && reference.captureStatus === "failed") {
|
|
11522
|
+
return "Fetch and capture did not produce usable creative evidence.";
|
|
11523
|
+
}
|
|
11524
|
+
if (reference.captureStatus === "failed") {
|
|
11525
|
+
return "Capture did not produce usable creative evidence.";
|
|
11526
|
+
}
|
|
11527
|
+
if (reference.fetchStatus === "failed") {
|
|
11528
|
+
return "Fetch did not produce usable creative evidence.";
|
|
11529
|
+
}
|
|
11530
|
+
return "Reference evidence was diagnostic, empty, or too weak for creative synthesis.";
|
|
11531
|
+
};
|
|
11532
|
+
var buildRejectedReferences = (references) => references.filter((reference) => !hasInspiredesignUsableReferenceEvidence(reference)).map((reference) => ({
|
|
11533
|
+
id: reference.id,
|
|
11534
|
+
url: reference.url,
|
|
11535
|
+
reason: rejectionReasonForReference(reference),
|
|
11536
|
+
fetchStatus: reference.fetchStatus,
|
|
11537
|
+
captureStatus: reference.captureStatus
|
|
11538
|
+
}));
|
|
11424
11539
|
var buildInspiredesignReferencePatternBoard = (briefId, format, references) => {
|
|
11425
11540
|
const entries = references.filter(hasInspiredesignUsableReferenceEvidence).map((reference) => deriveReferenceEntry(reference, format));
|
|
11426
|
-
const
|
|
11427
|
-
const
|
|
11541
|
+
const rankedEntries = sortReferenceEntries(entries);
|
|
11542
|
+
const sharedStrengths = rankedEntries.flatMap((entry) => entry.patternsToBorrow).slice(0, 6);
|
|
11543
|
+
const targetSurface = rankedEntries.some((entry) => entry.surfaceType === "public landing page") ? "reference-led public landing page" : format.layoutArchetype;
|
|
11428
11544
|
return {
|
|
11429
11545
|
briefId,
|
|
11430
11546
|
targetSurface,
|
|
11431
|
-
references:
|
|
11547
|
+
references: rankedEntries,
|
|
11548
|
+
rejectedReferences: buildRejectedReferences(references),
|
|
11432
11549
|
synthesis: {
|
|
11433
|
-
dominantDirection:
|
|
11550
|
+
dominantDirection: rankedEntries[0]?.layoutRecipe ?? format.archetype,
|
|
11434
11551
|
sharedStrengths,
|
|
11435
11552
|
sharedFailuresToAvoid: [...format.antiPatterns],
|
|
11436
11553
|
contractDeltas: [
|
|
@@ -11569,6 +11686,176 @@ var buildInspiredesignDesignVectors = (format, board) => {
|
|
|
11569
11686
|
};
|
|
11570
11687
|
};
|
|
11571
11688
|
|
|
11689
|
+
// src/inspiredesign/meta-prompt.ts
|
|
11690
|
+
var formatList = (items) => items.length > 0 ? items.map((item) => `- ${item}`).join("\n") : "- No evidence-backed item available.";
|
|
11691
|
+
var formatRankedReferences = (board) => {
|
|
11692
|
+
if (board.references.length === 0) {
|
|
11693
|
+
return "- No usable references were ranked. Work from the brief and note missing evidence.";
|
|
11694
|
+
}
|
|
11695
|
+
return board.references.map((reference) => [
|
|
11696
|
+
`### Rank ${reference.rank}: ${reference.name}`,
|
|
11697
|
+
`- URL: ${reference.url}`,
|
|
11698
|
+
`- Score: ${reference.score}`,
|
|
11699
|
+
`- Confidence: ${reference.confidence.toFixed(2)}`,
|
|
11700
|
+
`- Selection reason: ${reference.selectionReason}`,
|
|
11701
|
+
`- Borrow: ${reference.patternsToBorrow.join("; ")}`,
|
|
11702
|
+
`- Reject: ${reference.patternsToReject.join("; ")}`,
|
|
11703
|
+
`- Visual strengths: ${reference.visualStrengths.join("; ")}`,
|
|
11704
|
+
`- Visual risks: ${reference.visualRisks.join("; ")}`
|
|
11705
|
+
].join("\n")).join("\n\n");
|
|
11706
|
+
};
|
|
11707
|
+
var formatRejectedReferences = (board) => {
|
|
11708
|
+
if (board.rejectedReferences.length === 0) {
|
|
11709
|
+
return "- No references were rejected from the creative synthesis.";
|
|
11710
|
+
}
|
|
11711
|
+
return board.rejectedReferences.map((reference) => `- ${reference.url}: ${reference.reason} (fetch=${reference.fetchStatus}, capture=${reference.captureStatus})`).join("\n");
|
|
11712
|
+
};
|
|
11713
|
+
var buildInspiredesignMetaPrompt = (input) => [
|
|
11714
|
+
"# InspireDesign Meta Prompt",
|
|
11715
|
+
"",
|
|
11716
|
+
"Use this prompt to generate a fresh design direction from evidence without copying any reference brand, asset, layout, or proprietary expression.",
|
|
11717
|
+
"",
|
|
11718
|
+
"## Source Brief",
|
|
11719
|
+
input.brief,
|
|
11720
|
+
"",
|
|
11721
|
+
"## Prompt Format",
|
|
11722
|
+
`- Format: ${input.briefExpansion.format.label}`,
|
|
11723
|
+
`- Target surface: ${input.referencePatternBoard.targetSurface}`,
|
|
11724
|
+
`- Dominant direction: ${input.referencePatternBoard.synthesis.dominantDirection}`,
|
|
11725
|
+
"",
|
|
11726
|
+
"## Ranked References",
|
|
11727
|
+
formatRankedReferences(input.referencePatternBoard),
|
|
11728
|
+
"",
|
|
11729
|
+
"## Rejected References",
|
|
11730
|
+
formatRejectedReferences(input.referencePatternBoard),
|
|
11731
|
+
"",
|
|
11732
|
+
"## Borrow Guidance",
|
|
11733
|
+
formatList(input.designVectors.patternsToBorrow),
|
|
11734
|
+
"",
|
|
11735
|
+
"## Reject Guidance",
|
|
11736
|
+
formatList([
|
|
11737
|
+
...input.designVectors.patternsToReject,
|
|
11738
|
+
"Do not copy logos, screenshots, protected brand assets, page structure, copy, or trade dress from references."
|
|
11739
|
+
]),
|
|
11740
|
+
"",
|
|
11741
|
+
"## Motion Posture",
|
|
11742
|
+
formatList([
|
|
11743
|
+
...input.designVectors.motionPosture,
|
|
11744
|
+
...input.designVectors.interactionMoments,
|
|
11745
|
+
...input.designVectors.advancedMotionAdvisory
|
|
11746
|
+
]),
|
|
11747
|
+
"",
|
|
11748
|
+
"## Accessibility Constraints",
|
|
11749
|
+
formatList([
|
|
11750
|
+
"Keyboard navigation must reach every interactive element.",
|
|
11751
|
+
"Focus states must be visible in every theme and viewport.",
|
|
11752
|
+
"Respect prefers-reduced-motion with a static hierarchy-preserving alternative.",
|
|
11753
|
+
"Validate contrast for text, controls, overlays, and disabled states."
|
|
11754
|
+
]),
|
|
11755
|
+
"",
|
|
11756
|
+
"## Validation Gates",
|
|
11757
|
+
formatList([
|
|
11758
|
+
"Read visual-evidence.json, screenshot-index.json, ranked-references.json, and evidence.json before implementation.",
|
|
11759
|
+
"Confirm screenshot paths exist before making visual claims.",
|
|
11760
|
+
"Verify desktop and mobile layouts with real browser screenshots.",
|
|
11761
|
+
"Run reduced-motion, keyboard, focus, and contrast checks before shipping.",
|
|
11762
|
+
"Keep production code generation outside the harvest output."
|
|
11763
|
+
])
|
|
11764
|
+
].join("\n");
|
|
11765
|
+
|
|
11766
|
+
// src/inspiredesign/visual-evidence.ts
|
|
11767
|
+
import { createHash as createHash3 } from "crypto";
|
|
11768
|
+
var INSPIREDESIGN_VISUAL_EVIDENCE_MODES = ["off", "auto", "required"];
|
|
11769
|
+
var INSPIREDESIGN_VISUAL_EVIDENCE_KINDS = ["viewport", "full_page"];
|
|
11770
|
+
var SAFE_REFERENCE_ID_PATTERN = /[^a-z0-9._-]+/gi;
|
|
11771
|
+
var MAX_VISUAL_REFERENCE_ID_LENGTH = 96;
|
|
11772
|
+
var MAX_VISUAL_WARNING_LENGTH = 160;
|
|
11773
|
+
var MAX_VISUAL_FAILURE_LENGTH = 240;
|
|
11774
|
+
var UNSAFE_VISUAL_TEXT_PATTERN = /(?:\/(?:Users|private|tmp|var|Volumes)\/|[A-Za-z]:\\|\\|data:image|;base64|base64,|[A-Za-z0-9+/]{80,}={0,2})/i;
|
|
11775
|
+
var DOT_ONLY_PATH_SEGMENT_PATTERN = /^\.+$/;
|
|
11776
|
+
var SHA256_HEX_PATTERN = /^[a-f0-9]{64}$/i;
|
|
11777
|
+
var VISUAL_ARTIFACT_PATH_PATTERN = /^visual-evidence\/([A-Za-z0-9._-]+)\/(?:viewport|full_page)\.png$/;
|
|
11778
|
+
var FALLBACK_VISUAL_CAPTURED_AT = "1970-01-01T00:00:00.000Z";
|
|
11779
|
+
var isInspiredesignVisualEvidenceMode = (value) => typeof value === "string" && INSPIREDESIGN_VISUAL_EVIDENCE_MODES.includes(value);
|
|
11780
|
+
var isInspiredesignVisualEvidenceKind = (value) => typeof value === "string" && INSPIREDESIGN_VISUAL_EVIDENCE_KINDS.includes(value);
|
|
11781
|
+
var sanitizeInspiredesignVisualReferenceId = (referenceId) => {
|
|
11782
|
+
const sanitized = referenceId.trim().replace(SAFE_REFERENCE_ID_PATTERN, "-").replace(/^-+|-+$/g, "");
|
|
11783
|
+
if (!sanitized || DOT_ONLY_PATH_SEGMENT_PATTERN.test(sanitized)) return "reference";
|
|
11784
|
+
const truncated = sanitized.slice(0, MAX_VISUAL_REFERENCE_ID_LENGTH);
|
|
11785
|
+
return DOT_ONLY_PATH_SEGMENT_PATTERN.test(truncated) ? "reference" : truncated;
|
|
11786
|
+
};
|
|
11787
|
+
var buildVisualEvidenceArtifactPath = (referenceId, kind) => `visual-evidence/${sanitizeInspiredesignVisualReferenceId(referenceId)}/${kind}.png`;
|
|
11788
|
+
var hashVisualEvidenceBuffer = (buffer) => createHash3("sha256").update(buffer).digest("hex");
|
|
11789
|
+
var sanitizeVisualEvidenceText = (value, maxLength) => {
|
|
11790
|
+
if (typeof value !== "string") return void 0;
|
|
11791
|
+
const trimmed = value.trim();
|
|
11792
|
+
if (!trimmed || UNSAFE_VISUAL_TEXT_PATTERN.test(trimmed)) return void 0;
|
|
11793
|
+
return trimmed.slice(0, maxLength);
|
|
11794
|
+
};
|
|
11795
|
+
var sanitizeVisualEvidencePath = (value) => {
|
|
11796
|
+
if (typeof value !== "string") return void 0;
|
|
11797
|
+
const trimmed = value.trim();
|
|
11798
|
+
const match = VISUAL_ARTIFACT_PATH_PATTERN.exec(trimmed);
|
|
11799
|
+
const referenceSegment = match?.[1];
|
|
11800
|
+
if (!referenceSegment || DOT_ONLY_PATH_SEGMENT_PATTERN.test(referenceSegment)) return void 0;
|
|
11801
|
+
return trimmed;
|
|
11802
|
+
};
|
|
11803
|
+
var sanitizeVisualEvidenceSha256 = (value) => {
|
|
11804
|
+
if (typeof value !== "string") return void 0;
|
|
11805
|
+
const trimmed = value.trim();
|
|
11806
|
+
return SHA256_HEX_PATTERN.test(trimmed) ? trimmed.toLowerCase() : void 0;
|
|
11807
|
+
};
|
|
11808
|
+
var sanitizeVisualEvidenceBytes = (value) => typeof value === "number" && Number.isFinite(value) && Number.isInteger(value) && value >= 0 ? value : void 0;
|
|
11809
|
+
var sanitizeVisualEvidenceCapturedAt = (value) => {
|
|
11810
|
+
if (typeof value !== "string") return FALLBACK_VISUAL_CAPTURED_AT;
|
|
11811
|
+
const trimmed = value.trim();
|
|
11812
|
+
if (!trimmed || UNSAFE_VISUAL_TEXT_PATTERN.test(trimmed)) return FALLBACK_VISUAL_CAPTURED_AT;
|
|
11813
|
+
const timestamp = Date.parse(trimmed);
|
|
11814
|
+
if (!Number.isFinite(timestamp)) return FALLBACK_VISUAL_CAPTURED_AT;
|
|
11815
|
+
return new Date(timestamp).toISOString();
|
|
11816
|
+
};
|
|
11817
|
+
var normalizeVisualEvidenceViewport = (value) => {
|
|
11818
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
|
|
11819
|
+
const record = value;
|
|
11820
|
+
const viewport = {};
|
|
11821
|
+
if (typeof record.width === "number" && Number.isFinite(record.width)) {
|
|
11822
|
+
viewport.width = record.width;
|
|
11823
|
+
}
|
|
11824
|
+
if (typeof record.height === "number" && Number.isFinite(record.height)) {
|
|
11825
|
+
viewport.height = record.height;
|
|
11826
|
+
}
|
|
11827
|
+
if (typeof record.deviceScaleFactor === "number" && Number.isFinite(record.deviceScaleFactor)) {
|
|
11828
|
+
viewport.deviceScaleFactor = record.deviceScaleFactor;
|
|
11829
|
+
}
|
|
11830
|
+
return Object.keys(viewport).length > 0 ? viewport : void 0;
|
|
11831
|
+
};
|
|
11832
|
+
var normalizeVisualEvidenceWarnings = (value) => {
|
|
11833
|
+
if (!Array.isArray(value)) return [];
|
|
11834
|
+
return value.map((warning) => sanitizeVisualEvidenceText(warning, MAX_VISUAL_WARNING_LENGTH)).filter((warning) => Boolean(warning));
|
|
11835
|
+
};
|
|
11836
|
+
var persistInspiredesignVisualEvidence = (metadata, options = {}) => {
|
|
11837
|
+
const runtimeMetadata = metadata;
|
|
11838
|
+
const persistedMetadata = metadata;
|
|
11839
|
+
const path2 = metadata.status === "captured" ? sanitizeVisualEvidencePath(options.artifactPath) ?? sanitizeVisualEvidencePath(persistedMetadata.path) ?? sanitizeVisualEvidencePath(runtimeMetadata.artifactPath) : void 0;
|
|
11840
|
+
const sha256 = sanitizeVisualEvidenceSha256(options.sha256) ?? sanitizeVisualEvidenceSha256(persistedMetadata.sha256);
|
|
11841
|
+
const bytes = sanitizeVisualEvidenceBytes(options.bytes) ?? sanitizeVisualEvidenceBytes(persistedMetadata.bytes);
|
|
11842
|
+
const capturedAt = sanitizeVisualEvidenceCapturedAt(metadata.capturedAt);
|
|
11843
|
+
const viewport = normalizeVisualEvidenceViewport(metadata.viewport);
|
|
11844
|
+
const failure = sanitizeVisualEvidenceText(metadata.failure, MAX_VISUAL_FAILURE_LENGTH);
|
|
11845
|
+
return {
|
|
11846
|
+
status: metadata.status,
|
|
11847
|
+
kind: isInspiredesignVisualEvidenceKind(metadata.kind) ? metadata.kind : "viewport",
|
|
11848
|
+
fullPage: metadata.fullPage === true,
|
|
11849
|
+
capturedAt,
|
|
11850
|
+
...path2 ? { path: path2 } : {},
|
|
11851
|
+
...sha256 ? { sha256 } : {},
|
|
11852
|
+
...bytes !== void 0 ? { bytes } : {},
|
|
11853
|
+
...viewport ? { viewport } : {},
|
|
11854
|
+
warnings: normalizeVisualEvidenceWarnings(metadata.warnings),
|
|
11855
|
+
...failure ? { failure } : {}
|
|
11856
|
+
};
|
|
11857
|
+
};
|
|
11858
|
+
|
|
11572
11859
|
// src/inspiredesign/contract.ts
|
|
11573
11860
|
var INSPIREDESIGN_CAPTURE_ATTEMPT_KEYS = ["snapshot", "clone", "dom"];
|
|
11574
11861
|
var MALFORMED_CAPTURE_ATTEMPT_DETAIL = "Capture attempt metadata missing or malformed.";
|
|
@@ -11662,7 +11949,8 @@ var normalizeInspiredesignCaptureEvidence = (capture) => {
|
|
|
11662
11949
|
...capture.title ? { title: capture.title } : {},
|
|
11663
11950
|
...hasUsableInspiredesignSnapshot(capture) && capture.snapshot ? { snapshot: capture.snapshot } : {},
|
|
11664
11951
|
...hasUsableInspiredesignDom(capture) && capture.dom ? { dom: capture.dom } : {},
|
|
11665
|
-
...hasUsableInspiredesignClone(capture) && capture.clone ? { clone: capture.clone } : {}
|
|
11952
|
+
...hasUsableInspiredesignClone(capture) && capture.clone ? { clone: capture.clone } : {},
|
|
11953
|
+
...capture.visual ? { visual: persistInspiredesignVisualEvidence(capture.visual) } : {}
|
|
11666
11954
|
};
|
|
11667
11955
|
const attempts = reconcileInspiredesignCaptureAttempts(
|
|
11668
11956
|
normalizedBase,
|
|
@@ -12019,7 +12307,7 @@ var renderUnavailableReference = (reference) => {
|
|
|
12019
12307
|
};
|
|
12020
12308
|
var cloneTemplate = (value) => structuredClone(value);
|
|
12021
12309
|
var referenceFingerprint = (value) => {
|
|
12022
|
-
return
|
|
12310
|
+
return createHash4("sha256").update(value).digest("hex").slice(0, 12);
|
|
12023
12311
|
};
|
|
12024
12312
|
var summarizeBrief = (brief) => {
|
|
12025
12313
|
const normalized = trimText2(brief);
|
|
@@ -12543,6 +12831,10 @@ var buildBriefExpansionMetadata = (briefExpansion) => ({
|
|
|
12543
12831
|
var buildRequiredReferenceArtifacts = (includePrototypeGuidance) => {
|
|
12544
12832
|
const files = [
|
|
12545
12833
|
INSPIREDESIGN_HANDOFF_FILES.evidence,
|
|
12834
|
+
INSPIREDESIGN_HANDOFF_FILES.visualEvidence,
|
|
12835
|
+
INSPIREDESIGN_HANDOFF_FILES.screenshotIndex,
|
|
12836
|
+
INSPIREDESIGN_HANDOFF_FILES.rankedReferences,
|
|
12837
|
+
INSPIREDESIGN_HANDOFF_FILES.metaPrompt,
|
|
12546
12838
|
INSPIREDESIGN_HANDOFF_FILES.advancedBrief,
|
|
12547
12839
|
INSPIREDESIGN_HANDOFF_FILES.designMarkdown,
|
|
12548
12840
|
INSPIREDESIGN_HANDOFF_FILES.generationPlan,
|
|
@@ -12994,9 +13286,30 @@ var buildEvidencePayload = ({
|
|
|
12994
13286
|
referenceCount: references.length,
|
|
12995
13287
|
references: references.map((reference) => toReferenceEvidenceJson(reference)),
|
|
12996
13288
|
referencePatternBoard,
|
|
13289
|
+
rankedReferences: referencePatternBoard.references,
|
|
12997
13290
|
designVectors,
|
|
12998
|
-
targetAnalysis
|
|
13291
|
+
targetAnalysis,
|
|
13292
|
+
visualEvidence: buildVisualEvidencePayload(references),
|
|
13293
|
+
screenshotIndex: buildScreenshotIndex(references)
|
|
12999
13294
|
});
|
|
13295
|
+
var buildVisualEvidencePayload = (references) => references.flatMap((reference) => {
|
|
13296
|
+
const visual = normalizeInspiredesignCaptureEvidence(reference.capture)?.visual;
|
|
13297
|
+
return visual ? [{
|
|
13298
|
+
referenceId: reference.id,
|
|
13299
|
+
url: reference.url,
|
|
13300
|
+
visual: persistInspiredesignVisualEvidence(visual)
|
|
13301
|
+
}] : [];
|
|
13302
|
+
});
|
|
13303
|
+
var buildScreenshotIndex = (references) => buildVisualEvidencePayload(references).filter((entry) => entry.visual.status === "captured" && typeof entry.visual.path === "string" && typeof entry.visual.sha256 === "string" && typeof entry.visual.bytes === "number").map((entry) => ({
|
|
13304
|
+
referenceId: entry.referenceId,
|
|
13305
|
+
url: entry.url,
|
|
13306
|
+
path: entry.visual.path,
|
|
13307
|
+
sha256: entry.visual.sha256,
|
|
13308
|
+
bytes: entry.visual.bytes,
|
|
13309
|
+
kind: entry.visual.kind,
|
|
13310
|
+
fullPage: entry.visual.fullPage,
|
|
13311
|
+
capturedAt: entry.visual.capturedAt
|
|
13312
|
+
}));
|
|
13000
13313
|
var toCaptureEvidenceJson = (reference) => {
|
|
13001
13314
|
const normalized = normalizeInspiredesignCaptureEvidence(reference.capture);
|
|
13002
13315
|
if (!normalized) return null;
|
|
@@ -13004,6 +13317,7 @@ var toCaptureEvidenceJson = (reference) => {
|
|
|
13004
13317
|
return {
|
|
13005
13318
|
...normalized.title ? { title: normalized.title } : {},
|
|
13006
13319
|
...signals.length > 0 ? { signals } : {},
|
|
13320
|
+
...normalized.visual ? { visual: normalized.visual } : {},
|
|
13007
13321
|
...normalized.attempts ? { attempts: normalized.attempts } : {}
|
|
13008
13322
|
};
|
|
13009
13323
|
};
|
|
@@ -13049,6 +13363,12 @@ var buildInspiredesignPacket = (input) => {
|
|
|
13049
13363
|
advancedBrief: isReferenceFirstPublicLanding(designVectors) ? renderEvidenceDerivedAdvancedBrief(input.briefExpansion, effectiveFormat) : input.briefExpansion.advancedBrief,
|
|
13050
13364
|
format: effectiveFormat
|
|
13051
13365
|
};
|
|
13366
|
+
const metaPromptMarkdown = buildInspiredesignMetaPrompt({
|
|
13367
|
+
brief,
|
|
13368
|
+
briefExpansion: effectiveBriefExpansion,
|
|
13369
|
+
referencePatternBoard,
|
|
13370
|
+
designVectors
|
|
13371
|
+
});
|
|
13052
13372
|
const advancedBriefMarkdown = renderReferenceFirstAdvancedBrief(
|
|
13053
13373
|
effectiveBriefExpansion,
|
|
13054
13374
|
referencePatternBoard,
|
|
@@ -13156,6 +13476,8 @@ var buildInspiredesignPacket = (input) => {
|
|
|
13156
13476
|
"",
|
|
13157
13477
|
renderDeliverablesSummary(Boolean(input.includePrototypeGuidance))
|
|
13158
13478
|
].join("\n");
|
|
13479
|
+
const visualEvidence = buildVisualEvidencePayload(references);
|
|
13480
|
+
const screenshotIndex = buildScreenshotIndex(references);
|
|
13159
13481
|
return {
|
|
13160
13482
|
advancedBriefMarkdown,
|
|
13161
13483
|
designContract,
|
|
@@ -13166,6 +13488,10 @@ var buildInspiredesignPacket = (input) => {
|
|
|
13166
13488
|
implementationPlan,
|
|
13167
13489
|
implementationPlanMarkdown,
|
|
13168
13490
|
prototypeGuidanceMarkdown,
|
|
13491
|
+
visualEvidence,
|
|
13492
|
+
screenshotIndex,
|
|
13493
|
+
rankedReferences: referencePatternBoard.references,
|
|
13494
|
+
metaPromptMarkdown,
|
|
13169
13495
|
evidence: buildEvidencePayload({
|
|
13170
13496
|
brief,
|
|
13171
13497
|
briefExpansion: effectiveBriefExpansion,
|
|
@@ -13451,6 +13777,11 @@ var buildInspiredesignSuccessHandoff = (input) => createSuccessHandoff(
|
|
|
13451
13777
|
reason: "Load the Canvas contract lane before patching.",
|
|
13452
13778
|
command: input.commandExamples.loadDesignAgent
|
|
13453
13779
|
},
|
|
13780
|
+
{
|
|
13781
|
+
reason: "Load the motion-design lane before translating visual evidence into animation, timing, or reduced-motion behavior.",
|
|
13782
|
+
command: input.commandExamples.loadMotionDesign
|
|
13783
|
+
},
|
|
13784
|
+
{ reason: INSPIREDESIGN_HANDOFF_GUIDANCE.visualArtifactRecommendation },
|
|
13454
13785
|
{
|
|
13455
13786
|
reason: INSPIREDESIGN_HANDOFF_GUIDANCE.prepareCanvasPlanRequest,
|
|
13456
13787
|
command: input.commandExamples.continueInCanvas
|
|
@@ -13986,6 +14317,18 @@ var renderShopping = (args) => {
|
|
|
13986
14317
|
var renderInspiredesign = (args) => {
|
|
13987
14318
|
const captureAttemptReport = inspiredesignCaptureAttemptReportFromMeta(args.meta);
|
|
13988
14319
|
const captureAttemptSummary = inspiredesignCaptureAttemptSummaryFromMeta(args.meta);
|
|
14320
|
+
const visualEvidence = args.visualEvidence ?? [];
|
|
14321
|
+
const screenshotIndex = args.screenshotIndex ?? [];
|
|
14322
|
+
const rankedReferences = args.rankedReferences ?? [];
|
|
14323
|
+
const rankedReferencesArtifact = args.referencePatternBoard ? {
|
|
14324
|
+
references: args.referencePatternBoard.references,
|
|
14325
|
+
rejectedReferences: args.referencePatternBoard.rejectedReferences,
|
|
14326
|
+
synthesis: args.referencePatternBoard.synthesis
|
|
14327
|
+
} : {
|
|
14328
|
+
references: rankedReferences,
|
|
14329
|
+
rejectedReferences: []
|
|
14330
|
+
};
|
|
14331
|
+
const metaPromptMarkdown = args.metaPromptMarkdown ?? "";
|
|
13989
14332
|
const summary = buildInspiredesignSummary({
|
|
13990
14333
|
brief: args.brief,
|
|
13991
14334
|
referenceCount: args.urls.length,
|
|
@@ -14006,6 +14349,10 @@ var renderInspiredesign = (args) => {
|
|
|
14006
14349
|
implementationPlanMarkdown: args.implementationPlanMarkdown,
|
|
14007
14350
|
prototypeGuidanceMarkdown: args.prototypeGuidanceMarkdown,
|
|
14008
14351
|
evidence: args.evidence,
|
|
14352
|
+
visualEvidence,
|
|
14353
|
+
screenshotIndex,
|
|
14354
|
+
rankedReferences,
|
|
14355
|
+
metaPromptMarkdown,
|
|
14009
14356
|
meta: args.meta
|
|
14010
14357
|
};
|
|
14011
14358
|
const handoff = buildInspiredesignSuccessHandoff({
|
|
@@ -14023,7 +14370,11 @@ var renderInspiredesign = (args) => {
|
|
|
14023
14370
|
{ path: INSPIREDESIGN_HANDOFF_FILES.generationPlan, content: args.generationPlan },
|
|
14024
14371
|
{ path: INSPIREDESIGN_HANDOFF_FILES.implementationPlanMarkdown, content: args.implementationPlanMarkdown },
|
|
14025
14372
|
{ path: INSPIREDESIGN_HANDOFF_FILES.implementationPlan, content: args.implementationPlan },
|
|
14026
|
-
{ path: INSPIREDESIGN_HANDOFF_FILES.evidence, content: args.evidence }
|
|
14373
|
+
{ path: INSPIREDESIGN_HANDOFF_FILES.evidence, content: args.evidence },
|
|
14374
|
+
{ path: INSPIREDESIGN_HANDOFF_FILES.visualEvidence, content: { visualEvidence } },
|
|
14375
|
+
{ path: INSPIREDESIGN_HANDOFF_FILES.screenshotIndex, content: { screenshots: screenshotIndex } },
|
|
14376
|
+
{ path: INSPIREDESIGN_HANDOFF_FILES.rankedReferences, content: rankedReferencesArtifact },
|
|
14377
|
+
{ path: INSPIREDESIGN_HANDOFF_FILES.metaPrompt, content: metaPromptMarkdown }
|
|
14027
14378
|
];
|
|
14028
14379
|
if (args.prototypeGuidanceMarkdown) {
|
|
14029
14380
|
files.push({ path: INSPIREDESIGN_HANDOFF_FILES.prototypeGuidance, content: args.prototypeGuidanceMarkdown });
|
|
@@ -14058,6 +14409,10 @@ var renderInspiredesign = (args) => {
|
|
|
14058
14409
|
implementationPlan: args.implementationPlan,
|
|
14059
14410
|
prototypeGuidanceMarkdown: args.prototypeGuidanceMarkdown,
|
|
14060
14411
|
evidence: args.evidence,
|
|
14412
|
+
visualEvidence,
|
|
14413
|
+
screenshotIndex,
|
|
14414
|
+
rankedReferences,
|
|
14415
|
+
metaPromptMarkdown,
|
|
14061
14416
|
...handoff,
|
|
14062
14417
|
...captureAttemptFields,
|
|
14063
14418
|
meta: args.meta
|
|
@@ -14102,6 +14457,140 @@ var renderInspiredesign = (args) => {
|
|
|
14102
14457
|
};
|
|
14103
14458
|
};
|
|
14104
14459
|
|
|
14460
|
+
// src/inspiredesign/reference-discovery.ts
|
|
14461
|
+
var normalizeHttpUrl = (value) => {
|
|
14462
|
+
try {
|
|
14463
|
+
const url = new URL(value);
|
|
14464
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") return null;
|
|
14465
|
+
url.hash = "";
|
|
14466
|
+
if (url.pathname === "/" && !/^https?:\/\/[^/]+\/[^?#]/i.test(value)) {
|
|
14467
|
+
return `${url.origin}${url.search}`;
|
|
14468
|
+
}
|
|
14469
|
+
return url.toString();
|
|
14470
|
+
} catch (error) {
|
|
14471
|
+
void error;
|
|
14472
|
+
return null;
|
|
14473
|
+
}
|
|
14474
|
+
};
|
|
14475
|
+
var extractInspiredesignDiscoveryUrl = (record) => {
|
|
14476
|
+
if (typeof record.url !== "string") return null;
|
|
14477
|
+
const trimmed = record.url.trim();
|
|
14478
|
+
if (!trimmed) return null;
|
|
14479
|
+
return normalizeHttpUrl(trimmed);
|
|
14480
|
+
};
|
|
14481
|
+
var normalizeInspiredesignDiscoveryRecords = (records) => {
|
|
14482
|
+
const seen = /* @__PURE__ */ new Set();
|
|
14483
|
+
const accepted = [];
|
|
14484
|
+
const rejected = [];
|
|
14485
|
+
records.forEach((record, index) => {
|
|
14486
|
+
const rawUrl = typeof record.url === "string" ? record.url.trim() : void 0;
|
|
14487
|
+
const url = extractInspiredesignDiscoveryUrl(record);
|
|
14488
|
+
const base = {
|
|
14489
|
+
...record.title ? { title: record.title } : {},
|
|
14490
|
+
source: record.source,
|
|
14491
|
+
provider: record.provider,
|
|
14492
|
+
rank: index + 1
|
|
14493
|
+
};
|
|
14494
|
+
if (!rawUrl) {
|
|
14495
|
+
rejected.push({ ...base, status: "rejected", reason: "missing_url" });
|
|
14496
|
+
return;
|
|
14497
|
+
}
|
|
14498
|
+
if (!url) {
|
|
14499
|
+
rejected.push({ ...base, status: "rejected", reason: "invalid_url", rawUrl });
|
|
14500
|
+
return;
|
|
14501
|
+
}
|
|
14502
|
+
if (seen.has(url)) {
|
|
14503
|
+
rejected.push({ ...base, status: "rejected", reason: "duplicate_url", rawUrl });
|
|
14504
|
+
return;
|
|
14505
|
+
}
|
|
14506
|
+
seen.add(url);
|
|
14507
|
+
accepted.push({ ...base, status: "accepted", url });
|
|
14508
|
+
});
|
|
14509
|
+
return { accepted, rejected };
|
|
14510
|
+
};
|
|
14511
|
+
var mergeInspiredesignReferenceUrls = (explicitUrls, discoveredUrls, maxReferences) => {
|
|
14512
|
+
const merged = [];
|
|
14513
|
+
const seen = /* @__PURE__ */ new Set();
|
|
14514
|
+
for (const url of [...explicitUrls, ...discoveredUrls]) {
|
|
14515
|
+
const normalized = normalizeHttpUrl(url.trim());
|
|
14516
|
+
if (!normalized || seen.has(normalized)) continue;
|
|
14517
|
+
seen.add(normalized);
|
|
14518
|
+
merged.push(normalized);
|
|
14519
|
+
if (merged.length >= maxReferences) return merged;
|
|
14520
|
+
}
|
|
14521
|
+
return merged;
|
|
14522
|
+
};
|
|
14523
|
+
var normalizeInspiredesignProviders = (providers) => {
|
|
14524
|
+
const normalized = (providers ?? []).map((provider) => provider.trim()).filter((provider) => provider.length > 0);
|
|
14525
|
+
return [...new Set(normalized)];
|
|
14526
|
+
};
|
|
14527
|
+
|
|
14528
|
+
// src/inspiredesign/visual-policy.ts
|
|
14529
|
+
var VISUAL_BLOCKER_REASONS = /* @__PURE__ */ new Set([
|
|
14530
|
+
"policy_blocked",
|
|
14531
|
+
"auth_required",
|
|
14532
|
+
"challenge_detected",
|
|
14533
|
+
"rate_limited"
|
|
14534
|
+
]);
|
|
14535
|
+
var toVisualPolicyReason = (reasonCode) => {
|
|
14536
|
+
if (!VISUAL_BLOCKER_REASONS.has(reasonCode)) return null;
|
|
14537
|
+
if (reasonCode === "policy_blocked" || reasonCode === "auth_required" || reasonCode === "challenge_detected" || reasonCode === "rate_limited") {
|
|
14538
|
+
return reasonCode;
|
|
14539
|
+
}
|
|
14540
|
+
return null;
|
|
14541
|
+
};
|
|
14542
|
+
var blockerFromFailures = (failures) => {
|
|
14543
|
+
for (const failure of failures ?? []) {
|
|
14544
|
+
const reasonCode = failure.error.reasonCode;
|
|
14545
|
+
if (!reasonCode) continue;
|
|
14546
|
+
const blocker = toVisualPolicyReason(reasonCode);
|
|
14547
|
+
if (blocker) return blocker;
|
|
14548
|
+
}
|
|
14549
|
+
return null;
|
|
14550
|
+
};
|
|
14551
|
+
var blockerFromTopLevelError = (error) => {
|
|
14552
|
+
if (!error?.reasonCode) return null;
|
|
14553
|
+
return toVisualPolicyReason(error.reasonCode);
|
|
14554
|
+
};
|
|
14555
|
+
var messageForBlocker = (reason) => {
|
|
14556
|
+
switch (reason) {
|
|
14557
|
+
case "policy_blocked":
|
|
14558
|
+
return "Visual capture skipped because provider policy blocked the reference.";
|
|
14559
|
+
case "auth_required":
|
|
14560
|
+
return "Visual capture skipped because authenticated access is unresolved.";
|
|
14561
|
+
case "challenge_detected":
|
|
14562
|
+
return "Visual capture skipped because a challenge was detected.";
|
|
14563
|
+
case "rate_limited":
|
|
14564
|
+
return "Visual capture skipped because the provider is rate limited.";
|
|
14565
|
+
case "visual_evidence_off":
|
|
14566
|
+
return "Visual evidence is disabled for this run.";
|
|
14567
|
+
case "visual_capture_allowed":
|
|
14568
|
+
return "Visual capture is allowed for this reference.";
|
|
14569
|
+
}
|
|
14570
|
+
};
|
|
14571
|
+
var decideInspiredesignVisualCapturePolicy = (input) => {
|
|
14572
|
+
if (input.visualEvidence === "off") {
|
|
14573
|
+
return {
|
|
14574
|
+
status: "skipped",
|
|
14575
|
+
reason: "visual_evidence_off",
|
|
14576
|
+
message: messageForBlocker("visual_evidence_off")
|
|
14577
|
+
};
|
|
14578
|
+
}
|
|
14579
|
+
const blocker = input.hasUsableRecords === true ? null : blockerFromFailures(input.failures) ?? blockerFromTopLevelError(input.topLevelError);
|
|
14580
|
+
if (blocker) {
|
|
14581
|
+
return {
|
|
14582
|
+
status: "skipped",
|
|
14583
|
+
reason: blocker,
|
|
14584
|
+
message: messageForBlocker(blocker)
|
|
14585
|
+
};
|
|
14586
|
+
}
|
|
14587
|
+
return {
|
|
14588
|
+
status: "allowed",
|
|
14589
|
+
reason: "visual_capture_allowed",
|
|
14590
|
+
message: messageForBlocker("visual_capture_allowed")
|
|
14591
|
+
};
|
|
14592
|
+
};
|
|
14593
|
+
|
|
14105
14594
|
// src/canvas/types.ts
|
|
14106
14595
|
var CANVAS_SCHEMA_VERSION = "1.0.0";
|
|
14107
14596
|
var CANVAS_SESSION_MODES = ["low-fi-wireframe", "high-fi-live-edit", "dual-track", "document-only"];
|
|
@@ -14230,7 +14719,7 @@ var CANVAS_VALIDATION_TARGET_BLOCK_ON_CODES = [
|
|
|
14230
14719
|
var CANVAS_PUBLIC_WARNING_CLASSES = CANVAS_VALIDATION_TARGET_BLOCK_ON_CODES;
|
|
14231
14720
|
|
|
14232
14721
|
// src/providers/shopping-postprocess.ts
|
|
14233
|
-
import { createHash as
|
|
14722
|
+
import { createHash as createHash5 } from "crypto";
|
|
14234
14723
|
var LOOKS_LIKE_URL_RE = /^https?:\/\/\S+$/i;
|
|
14235
14724
|
var PRICE_TOKEN_RE = /((?:US\$|CA\$|C\$|USD|CAD|EUR|GBP|[$€£]))\s*([0-9]{1,4}(?:[.,][0-9]{3})*(?:[.,][0-9]{1,2})?)/gi;
|
|
14236
14725
|
var CONTEXTUAL_PRICE_TOKEN_RE = /(?:connect to any carrier later|starting at|starts at|starting from|from|buy now for|buy for)\s*((?:US\$|CA\$|C\$|USD|CAD|EUR|GBP|[$€£]))\s*([0-9]{1,4}(?:[.,][0-9]{3})*(?:[.,][0-9]{1,2})?)/gi;
|
|
@@ -14316,7 +14805,7 @@ var REGION_CURRENCY_BY_REGION = {
|
|
|
14316
14805
|
uk: "GBP",
|
|
14317
14806
|
eu: "EUR"
|
|
14318
14807
|
};
|
|
14319
|
-
var hash = (value) =>
|
|
14808
|
+
var hash = (value) => createHash5("sha1").update(value).digest("hex").slice(0, 16);
|
|
14320
14809
|
var normalizePlainText = (value) => {
|
|
14321
14810
|
if (!value) return "";
|
|
14322
14811
|
return extractText(value).replace(/[\u0000-\u001F\u007F-\u009F]+/g, " ").replace(/\s+/g, " ").trim();
|
|
@@ -14945,7 +15434,7 @@ var compileShoppingWorkflow = (input, options = {}) => {
|
|
|
14945
15434
|
};
|
|
14946
15435
|
|
|
14947
15436
|
// src/providers/shopping-compiler.ts
|
|
14948
|
-
import { createHash as
|
|
15437
|
+
import { createHash as createHash6 } from "crypto";
|
|
14949
15438
|
var DEFAULT_SHOPPING_SEARCH_LIMIT = 8;
|
|
14950
15439
|
var SHOPPING_FETCH_RECOVERY_LIMIT = 2;
|
|
14951
15440
|
var SEARCH_INDEX_RETRIEVAL_PATHS = /* @__PURE__ */ new Set(["shopping:search:index", "shopping:search:link"]);
|
|
@@ -14962,7 +15451,7 @@ var emptyCheckpointState = () => ({
|
|
|
14962
15451
|
step_results_by_id: {}
|
|
14963
15452
|
});
|
|
14964
15453
|
var createShoppingSearchStepId = (providerId) => `search:${providerId}`;
|
|
14965
|
-
var createShoppingFetchStepId = (providerId, url) => `fetch:${providerId}:${
|
|
15454
|
+
var createShoppingFetchStepId = (providerId, url) => `fetch:${providerId}:${createHash6("sha1").update(canonicalizeUrl(url)).digest("hex").slice(0, 16)}`;
|
|
14966
15455
|
var serializeShoppingCheckpointState = (state) => ({
|
|
14967
15456
|
completed_step_ids: [...state.completed_step_ids],
|
|
14968
15457
|
step_results_by_id: state.step_results_by_id
|
|
@@ -15448,7 +15937,7 @@ var compileProductVideoExecutionPlan = (args) => {
|
|
|
15448
15937
|
};
|
|
15449
15938
|
|
|
15450
15939
|
// src/providers/research-compiler.ts
|
|
15451
|
-
import { createHash as
|
|
15940
|
+
import { createHash as createHash7 } from "crypto";
|
|
15452
15941
|
var RESEARCH_AUTO_SOURCES = ["web", "community", "social"];
|
|
15453
15942
|
var RESEARCH_ALL_SOURCES = [...RESEARCH_AUTO_SOURCES];
|
|
15454
15943
|
var DEFAULT_RESEARCH_SEARCH_LIMIT = 10;
|
|
@@ -15474,7 +15963,7 @@ var toProviderSource = (providerId) => {
|
|
|
15474
15963
|
return null;
|
|
15475
15964
|
};
|
|
15476
15965
|
var createResearchSearchStepId = (source) => `search:${source}`;
|
|
15477
|
-
var createResearchFetchStepId = (url) => `fetch:web:${
|
|
15966
|
+
var createResearchFetchStepId = (url) => `fetch:web:${createHash7("sha1").update(canonicalizeUrl(url)).digest("hex").slice(0, 16)}`;
|
|
15478
15967
|
var serializeResearchCheckpointState = (state) => ({
|
|
15479
15968
|
completed_step_ids: [...state.completed_step_ids],
|
|
15480
15969
|
step_results_by_id: state.step_results_by_id
|
|
@@ -16396,6 +16885,9 @@ var workflowTestUtils = {
|
|
|
16396
16885
|
redactRawCapture: (record) => redactRawCapture(record),
|
|
16397
16886
|
toProviderSource: (providerId) => toProviderSource2(providerId),
|
|
16398
16887
|
resolveShoppingProviderIdForUrl: (url) => resolveShoppingProviderIdForUrl(url),
|
|
16888
|
+
resolveShoppingSourceForUrl: (url) => resolveShoppingSourceForUrl(url),
|
|
16889
|
+
resolveProductCopy: (record, productUrl, refreshedDescription, featureList) => resolveProductCopy(record, productUrl, refreshedDescription, featureList),
|
|
16890
|
+
getRequiredProductVideoExecutionStep: (steps, stepId) => getRequiredProductVideoExecutionStep(steps, stepId),
|
|
16399
16891
|
normalizeProductVideoProviderHint: (productUrl, providerHint, fallbackProvider) => normalizeProductVideoProviderHint(productUrl, providerHint, fallbackProvider),
|
|
16400
16892
|
hasTranscriptSuccess: (record) => hasTranscriptSuccess(record),
|
|
16401
16893
|
sanitizeFeatureList: (values) => sanitizeFeatureList(values),
|
|
@@ -16407,7 +16899,15 @@ var workflowTestUtils = {
|
|
|
16407
16899
|
fetchBinary: (url, timeoutMs) => fetchBinary(url, timeoutMs),
|
|
16408
16900
|
rankResearchRecords: (records) => rankResearchRecords(records),
|
|
16409
16901
|
isValidHttpUrl: (url) => isValidHttpUrl3(url),
|
|
16410
|
-
buildWorkflowResumePayload: (kind, input) => buildWorkflowResumePayload(kind, input)
|
|
16902
|
+
buildWorkflowResumePayload: (kind, input) => buildWorkflowResumePayload(kind, input),
|
|
16903
|
+
withPrimaryConstraintSummaryOverride: (meta, summary, guidance) => withPrimaryConstraintSummaryOverride(meta, summary, guidance),
|
|
16904
|
+
withReasonCodeDistributionMeta: (meta, reasonCodeDistribution) => withReasonCodeDistributionMeta(meta, reasonCodeDistribution),
|
|
16905
|
+
incrementReasonCodeDistribution: (reasonCodeDistribution, reasonCode, count) => incrementReasonCodeDistribution(reasonCodeDistribution, reasonCode, count),
|
|
16906
|
+
summarizeShoppingOfferFilterConstraint: (args) => summarizeShoppingOfferFilterConstraint(args),
|
|
16907
|
+
parseInspiredesignEnvelopeInput: (input) => parseInspiredesignEnvelopeInput(input),
|
|
16908
|
+
failureFromInspiredesignDiscoveryError: (workflowInput, error) => failureFromInspiredesignDiscoveryError(workflowInput, error),
|
|
16909
|
+
failureFromInspiredesignFetchError: (result) => failureFromInspiredesignFetchError(result),
|
|
16910
|
+
extractProductBrandFromTitle: (title, productUrl) => extractProductBrandFromTitle(title, productUrl)
|
|
16411
16911
|
};
|
|
16412
16912
|
var PRODUCT_ASSET_FETCH_TIMEOUT_MS = 15e3;
|
|
16413
16913
|
var RESEARCH_PROVIDER_STEP_TIMEOUT_MS = 3e4;
|
|
@@ -16459,7 +16959,7 @@ var rankResearchRecords = (records) => {
|
|
|
16459
16959
|
return left.id.localeCompare(right.id);
|
|
16460
16960
|
});
|
|
16461
16961
|
};
|
|
16462
|
-
var hash2 = (value) =>
|
|
16962
|
+
var hash2 = (value) => createHash8("sha1").update(value).digest("hex").slice(0, 16);
|
|
16463
16963
|
var RESEARCH_ALWAYS_SANITIZED_PATHS = /* @__PURE__ */ new Set([
|
|
16464
16964
|
"community:search:index",
|
|
16465
16965
|
"community:search:url",
|
|
@@ -16655,8 +17155,17 @@ var INSPIREDESIGN_RENDER_MODES = /* @__PURE__ */ new Set(["compact", "json", "md
|
|
|
16655
17155
|
var INSPIREDESIGN_CAPTURE_MODES = /* @__PURE__ */ new Set(["off", "deep"]);
|
|
16656
17156
|
var INSPIREDESIGN_COOKIE_POLICIES = /* @__PURE__ */ new Set(["off", "auto", "required"]);
|
|
16657
17157
|
var WORKFLOW_BROWSER_MODES = /* @__PURE__ */ new Set(["auto", "extension", "managed"]);
|
|
17158
|
+
var INSPIREDESIGN_DEFAULT_MAX_REFERENCES = 5;
|
|
17159
|
+
var INSPIREDESIGN_MAX_REFERENCES_LIMIT = 10;
|
|
16658
17160
|
var isJsonRecord7 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
16659
17161
|
var INSPIREDESIGN_CAPTURE_UNAVAILABLE_FAILURE = "Deep capture requested, but browser capture is unavailable in this execution lane.";
|
|
17162
|
+
var REQUIRED_VISUAL_EVIDENCE_MISSING_FAILURE = "Required visual evidence was not captured.";
|
|
17163
|
+
var INSPIREDESIGN_VISUAL_POLICY_BLOCKER_REASONS = /* @__PURE__ */ new Set([
|
|
17164
|
+
"policy_blocked",
|
|
17165
|
+
"auth_required",
|
|
17166
|
+
"challenge_detected",
|
|
17167
|
+
"rate_limited"
|
|
17168
|
+
]);
|
|
16660
17169
|
var isCanvasVisualDirectionProfile = (value) => {
|
|
16661
17170
|
return CANVAS_VISUAL_DIRECTION_PROFILES.includes(value);
|
|
16662
17171
|
};
|
|
@@ -16670,6 +17179,11 @@ var serializeInspiredesignBriefExpansion = (expansion) => structuredClone(expans
|
|
|
16670
17179
|
var serializeInspiredesignRunInput = (input) => ({
|
|
16671
17180
|
brief: input.brief,
|
|
16672
17181
|
briefExpansion: serializeInspiredesignBriefExpansion(input.briefExpansion),
|
|
17182
|
+
...input.harvest === true ? { harvest: true } : {},
|
|
17183
|
+
...input.query ? { query: input.query } : {},
|
|
17184
|
+
...input.providers.length > 0 ? { providers: input.providers } : {},
|
|
17185
|
+
...input.referenceLimit !== void 0 ? { maxReferences: input.maxReferences } : {},
|
|
17186
|
+
visualEvidence: input.visualEvidence,
|
|
16673
17187
|
urls: input.urls,
|
|
16674
17188
|
captureMode: input.captureMode,
|
|
16675
17189
|
mode: input.mode,
|
|
@@ -16745,6 +17259,11 @@ var parseInspiredesignEnvelopeInput = (input) => {
|
|
|
16745
17259
|
return {
|
|
16746
17260
|
brief: typeof input.brief === "string" ? input.brief : "",
|
|
16747
17261
|
mode: typeof input.mode === "string" && INSPIREDESIGN_RENDER_MODES.has(input.mode) ? input.mode : "compact",
|
|
17262
|
+
...typeof input.harvest === "boolean" ? { harvest: input.harvest } : {},
|
|
17263
|
+
...typeof input.query === "string" && input.query.trim().length > 0 ? { query: input.query.trim() } : {},
|
|
17264
|
+
...Array.isArray(input.providers) ? { providers: input.providers.filter((provider) => typeof provider === "string") } : {},
|
|
17265
|
+
...typeof input.maxReferences === "number" ? { maxReferences: input.maxReferences } : {},
|
|
17266
|
+
...isInspiredesignVisualEvidenceMode(input.visualEvidence) ? { visualEvidence: input.visualEvidence } : {},
|
|
16748
17267
|
...briefExpansion ? { briefExpansion } : {},
|
|
16749
17268
|
...Array.isArray(input.urls) ? { urls: input.urls.filter((url) => typeof url === "string") } : {},
|
|
16750
17269
|
...typeof input.captureMode === "string" && INSPIREDESIGN_CAPTURE_MODES.has(input.captureMode) ? { captureMode: input.captureMode } : {},
|
|
@@ -16767,6 +17286,24 @@ var normalizeInspiredesignUrls = (urls) => {
|
|
|
16767
17286
|
}
|
|
16768
17287
|
return [...new Set(normalized.map((url) => canonicalizeUrl(url)))];
|
|
16769
17288
|
};
|
|
17289
|
+
var normalizeInspiredesignMaxReferences = (value, fallbackCount) => {
|
|
17290
|
+
if (typeof value === "undefined") {
|
|
17291
|
+
return Math.max(1, Math.min(Math.max(fallbackCount, 1), INSPIREDESIGN_MAX_REFERENCES_LIMIT));
|
|
17292
|
+
}
|
|
17293
|
+
if (!Number.isInteger(value) || value < 1 || value > INSPIREDESIGN_MAX_REFERENCES_LIMIT) {
|
|
17294
|
+
throw new Error("Inspiredesign workflow maxReferences must be an integer from 1 to 10.");
|
|
17295
|
+
}
|
|
17296
|
+
return value;
|
|
17297
|
+
};
|
|
17298
|
+
var normalizeInspiredesignVisualEvidenceMode = (value, harvest) => {
|
|
17299
|
+
if (typeof value === "undefined") {
|
|
17300
|
+
return harvest === true ? "required" : "off";
|
|
17301
|
+
}
|
|
17302
|
+
if (!isInspiredesignVisualEvidenceMode(value)) {
|
|
17303
|
+
throw new Error("Inspiredesign workflow visualEvidence must be one of off, auto, or required.");
|
|
17304
|
+
}
|
|
17305
|
+
return value;
|
|
17306
|
+
};
|
|
16770
17307
|
var hasValidInspiredesignBriefRoute = (route) => {
|
|
16771
17308
|
return isCanvasVisualDirectionProfile(route.profile) && isCanvasThemeStrategy(route.themeStrategy) && isCanvasNavigationModel(route.navigationModel);
|
|
16772
17309
|
};
|
|
@@ -16788,6 +17325,23 @@ var normalizeInspiredesignInput = (input) => {
|
|
|
16788
17325
|
throw new Error("Inspiredesign workflow requires a non-empty brief.");
|
|
16789
17326
|
}
|
|
16790
17327
|
const urls = normalizeInspiredesignUrls(input.urls);
|
|
17328
|
+
const query = typeof input.query === "string" && input.query.trim().length > 0 ? input.query.trim() : void 0;
|
|
17329
|
+
const providers = normalizeInspiredesignProviders(input.providers);
|
|
17330
|
+
const hasExplicitMaxReferences = typeof input.maxReferences !== "undefined";
|
|
17331
|
+
if (query && input.harvest !== true) {
|
|
17332
|
+
throw new Error("Inspiredesign workflow query is only supported when harvest is true.");
|
|
17333
|
+
}
|
|
17334
|
+
if (providers.length > 0 && !query) {
|
|
17335
|
+
throw new Error("Inspiredesign workflow providers require query.");
|
|
17336
|
+
}
|
|
17337
|
+
if (input.harvest === true && !query && urls.length === 0) {
|
|
17338
|
+
throw new Error("Inspiredesign harvest requires query or URL references.");
|
|
17339
|
+
}
|
|
17340
|
+
const visualEvidence = normalizeInspiredesignVisualEvidenceMode(
|
|
17341
|
+
input.visualEvidence,
|
|
17342
|
+
input.harvest
|
|
17343
|
+
);
|
|
17344
|
+
const maxReferencesFallback = query || input.harvest === true ? INSPIREDESIGN_DEFAULT_MAX_REFERENCES : urls.length;
|
|
16791
17345
|
const normalizedBrief = normalizeInspiredesignBriefText(brief);
|
|
16792
17346
|
const preferredFormatId = shouldReuseInspiredesignBriefExpansion(input.briefExpansion, normalizedBrief) ? input.briefExpansion.format.id : void 0;
|
|
16793
17347
|
const briefExpansion = expandInspiredesignBrief(brief, preferredFormatId);
|
|
@@ -16795,9 +17349,14 @@ var normalizeInspiredesignInput = (input) => {
|
|
|
16795
17349
|
...input,
|
|
16796
17350
|
brief,
|
|
16797
17351
|
briefExpansion,
|
|
17352
|
+
...query ? { query } : {},
|
|
17353
|
+
providers,
|
|
17354
|
+
maxReferences: normalizeInspiredesignMaxReferences(input.maxReferences, maxReferencesFallback),
|
|
17355
|
+
...query || input.harvest === true || hasExplicitMaxReferences ? { referenceLimit: normalizeInspiredesignMaxReferences(input.maxReferences, maxReferencesFallback) } : {},
|
|
17356
|
+
visualEvidence,
|
|
16798
17357
|
urls,
|
|
16799
17358
|
captureMode: resolveInspiredesignCaptureMode(input.captureMode, urls),
|
|
16800
|
-
mode: input.mode ?? "compact"
|
|
17359
|
+
mode: input.mode ?? (input.harvest === true ? "path" : "compact")
|
|
16801
17360
|
};
|
|
16802
17361
|
};
|
|
16803
17362
|
var isInspiredesignWorkflowEnvelopeInput = (input) => {
|
|
@@ -16858,6 +17417,89 @@ var buildInspiredesignFetchOptions = (workflowInput, envelope, timeoutMs) => wit
|
|
|
16858
17417
|
"workflow.inspiredesign",
|
|
16859
17418
|
envelope
|
|
16860
17419
|
);
|
|
17420
|
+
var emptyInspiredesignDiscoveryDiagnostics = (workflowInput, searchAvailable, failure) => ({
|
|
17421
|
+
requested: Boolean(workflowInput.query),
|
|
17422
|
+
searchAvailable,
|
|
17423
|
+
...workflowInput.query ? { query: workflowInput.query } : {},
|
|
17424
|
+
providers: workflowInput.providers,
|
|
17425
|
+
acceptedUrls: [],
|
|
17426
|
+
rejected: [],
|
|
17427
|
+
failures: [],
|
|
17428
|
+
...failure ? { failure } : {}
|
|
17429
|
+
});
|
|
17430
|
+
var providerFromInspiredesignDiscoveryFailure = (workflowInput, error) => {
|
|
17431
|
+
const provider = error.provider ?? workflowInput.providers[0];
|
|
17432
|
+
const source = error.source ?? (provider ? toProviderSource2(provider) : null);
|
|
17433
|
+
return provider && source ? { provider, source } : void 0;
|
|
17434
|
+
};
|
|
17435
|
+
var failureFromInspiredesignDiscoveryError = (workflowInput, error) => {
|
|
17436
|
+
if (!error) return [];
|
|
17437
|
+
const provider = providerFromInspiredesignDiscoveryFailure(workflowInput, error);
|
|
17438
|
+
if (!provider) return [];
|
|
17439
|
+
return [{
|
|
17440
|
+
provider: provider.provider,
|
|
17441
|
+
source: provider.source,
|
|
17442
|
+
error
|
|
17443
|
+
}];
|
|
17444
|
+
};
|
|
17445
|
+
var providerFromInspiredesignFetchFailure = (result) => {
|
|
17446
|
+
const provider = result.error?.provider ?? result.providerOrder[0];
|
|
17447
|
+
const source = result.error?.source ?? (provider ? toProviderSource2(provider) : null);
|
|
17448
|
+
return provider && source ? { provider, source } : void 0;
|
|
17449
|
+
};
|
|
17450
|
+
var failureFromInspiredesignFetchError = (result) => {
|
|
17451
|
+
if (!result.error || result.failures.length > 0) return [];
|
|
17452
|
+
const provider = providerFromInspiredesignFetchFailure(result);
|
|
17453
|
+
if (!provider) return [];
|
|
17454
|
+
return [{
|
|
17455
|
+
provider: provider.provider,
|
|
17456
|
+
source: provider.source,
|
|
17457
|
+
error: result.error
|
|
17458
|
+
}];
|
|
17459
|
+
};
|
|
17460
|
+
var discoverInspiredesignReferences = async (runtime, workflowInput, envelope, timeoutMs) => {
|
|
17461
|
+
if (!workflowInput.query) {
|
|
17462
|
+
return emptyInspiredesignDiscoveryDiagnostics(workflowInput, typeof runtime.search === "function");
|
|
17463
|
+
}
|
|
17464
|
+
if (typeof runtime.search !== "function") {
|
|
17465
|
+
return emptyInspiredesignDiscoveryDiagnostics(
|
|
17466
|
+
workflowInput,
|
|
17467
|
+
false,
|
|
17468
|
+
"Reference discovery requested, but provider search is unavailable in this execution lane."
|
|
17469
|
+
);
|
|
17470
|
+
}
|
|
17471
|
+
let searchResult;
|
|
17472
|
+
try {
|
|
17473
|
+
searchResult = await runtime.search(
|
|
17474
|
+
{
|
|
17475
|
+
query: workflowInput.query,
|
|
17476
|
+
limit: workflowInput.maxReferences
|
|
17477
|
+
},
|
|
17478
|
+
{
|
|
17479
|
+
...buildInspiredesignFetchOptions(workflowInput, envelope, timeoutMs),
|
|
17480
|
+
...workflowInput.providers.length > 0 ? { providerIds: workflowInput.providers } : {}
|
|
17481
|
+
}
|
|
17482
|
+
);
|
|
17483
|
+
} catch (error) {
|
|
17484
|
+
return emptyInspiredesignDiscoveryDiagnostics(
|
|
17485
|
+
workflowInput,
|
|
17486
|
+
true,
|
|
17487
|
+
error instanceof Error ? error.message : "Reference discovery failed."
|
|
17488
|
+
);
|
|
17489
|
+
}
|
|
17490
|
+
const discovery = normalizeInspiredesignDiscoveryRecords(searchResult.records);
|
|
17491
|
+
const discoveryFailures = searchResult.failures.length > 0 ? searchResult.failures : failureFromInspiredesignDiscoveryError(workflowInput, searchResult.error);
|
|
17492
|
+
return {
|
|
17493
|
+
requested: true,
|
|
17494
|
+
searchAvailable: true,
|
|
17495
|
+
query: workflowInput.query,
|
|
17496
|
+
providers: workflowInput.providers,
|
|
17497
|
+
acceptedUrls: discovery.accepted.map((candidate) => candidate.url),
|
|
17498
|
+
rejected: discovery.rejected,
|
|
17499
|
+
failures: discoveryFailures,
|
|
17500
|
+
...searchResult.error?.message ? { failure: searchResult.error.message } : {}
|
|
17501
|
+
};
|
|
17502
|
+
};
|
|
16861
17503
|
var buildEmptyInspiredesignCaptureAttemptCounts = () => ({
|
|
16862
17504
|
snapshot: { captured: 0, failed: 0, skipped: 0 },
|
|
16863
17505
|
clone: { captured: 0, failed: 0, skipped: 0 },
|
|
@@ -16870,6 +17512,78 @@ var buildUnavailableInspiredesignCaptureEvidence = () => ({
|
|
|
16870
17512
|
dom: { status: "skipped", detail: INSPIREDESIGN_CAPTURE_UNAVAILABLE_FAILURE }
|
|
16871
17513
|
}
|
|
16872
17514
|
});
|
|
17515
|
+
var getInspiredesignReferenceId = (url) => createHash8("sha256").update(url).digest("hex").slice(0, 12);
|
|
17516
|
+
var buildVisualPolicyMetadata = (decision) => {
|
|
17517
|
+
if (decision.status === "allowed") return void 0;
|
|
17518
|
+
return {
|
|
17519
|
+
status: decision.status,
|
|
17520
|
+
kind: "viewport",
|
|
17521
|
+
fullPage: false,
|
|
17522
|
+
capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
17523
|
+
warnings: [`policy:${decision.reason}`],
|
|
17524
|
+
failure: decision.message
|
|
17525
|
+
};
|
|
17526
|
+
};
|
|
17527
|
+
var mergeCaptureVisualEvidence = (capture, visual) => {
|
|
17528
|
+
if (!visual) return capture;
|
|
17529
|
+
return {
|
|
17530
|
+
...capture ?? {},
|
|
17531
|
+
visual
|
|
17532
|
+
};
|
|
17533
|
+
};
|
|
17534
|
+
var isVisualPolicyBlockerDecision = (decision) => INSPIREDESIGN_VISUAL_POLICY_BLOCKER_REASONS.has(decision.reason);
|
|
17535
|
+
var buildMissingRequiredVisualEvidence = (failure, _visualPlan) => ({
|
|
17536
|
+
status: "failed",
|
|
17537
|
+
kind: "viewport",
|
|
17538
|
+
fullPage: false,
|
|
17539
|
+
capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
17540
|
+
warnings: ["required_visual_evidence_missing"],
|
|
17541
|
+
failure
|
|
17542
|
+
});
|
|
17543
|
+
var getRequiredVisualEvidenceFailure = (workflowInput, visualPlan, capture) => {
|
|
17544
|
+
if (workflowInput.visualEvidence !== "required" || visualPlan.policy.status !== "allowed") return void 0;
|
|
17545
|
+
const visual = normalizeInspiredesignCaptureEvidence(capture)?.visual;
|
|
17546
|
+
if (!visual) return REQUIRED_VISUAL_EVIDENCE_MISSING_FAILURE;
|
|
17547
|
+
if (visual.status === "captured") return void 0;
|
|
17548
|
+
return visual.failure ?? REQUIRED_VISUAL_EVIDENCE_MISSING_FAILURE;
|
|
17549
|
+
};
|
|
17550
|
+
var addRequiredVisualEvidenceFailure = (capture, visualPlan, failure) => {
|
|
17551
|
+
const visual = normalizeInspiredesignCaptureEvidence(capture)?.visual;
|
|
17552
|
+
if (visual) return capture;
|
|
17553
|
+
return mergeCaptureVisualEvidence(capture, buildMissingRequiredVisualEvidence(failure, visualPlan));
|
|
17554
|
+
};
|
|
17555
|
+
var VISUAL_TEMP_PATH_MISMATCH_FAILURE = "Visual evidence temp path did not match the workflow capture plan.";
|
|
17556
|
+
var VISUAL_KIND_MISMATCH_FAILURE = "Visual evidence kind did not match the workflow capture contract.";
|
|
17557
|
+
var hasTrustedVisualTempPath = (visual, visualPlan) => {
|
|
17558
|
+
if (visual.status === "captured" && !visual.tempPath) return false;
|
|
17559
|
+
if (!visual.tempPath) return true;
|
|
17560
|
+
if (!visualPlan.tempPath) return false;
|
|
17561
|
+
return resolve(visual.tempPath) === resolve(visualPlan.tempPath);
|
|
17562
|
+
};
|
|
17563
|
+
var hasTrustedVisualKind = (visual) => isInspiredesignVisualEvidenceKind(visual.kind);
|
|
17564
|
+
var readRuntimeVisualWarnings = (visual) => {
|
|
17565
|
+
const warnings = visual.warnings;
|
|
17566
|
+
return Array.isArray(warnings) ? warnings.filter((warning) => typeof warning === "string") : [];
|
|
17567
|
+
};
|
|
17568
|
+
var failMismatchedVisualTempPath = (visual, failure = VISUAL_TEMP_PATH_MISMATCH_FAILURE, warning = "visual_temp_path_mismatch") => ({
|
|
17569
|
+
status: "failed",
|
|
17570
|
+
kind: hasTrustedVisualKind(visual) ? visual.kind : "viewport",
|
|
17571
|
+
fullPage: visual.fullPage,
|
|
17572
|
+
capturedAt: visual.capturedAt,
|
|
17573
|
+
warnings: [...readRuntimeVisualWarnings(visual), warning],
|
|
17574
|
+
failure
|
|
17575
|
+
});
|
|
17576
|
+
var trustRuntimeVisualEvidence = (visual, visualPlan) => {
|
|
17577
|
+
if (!visual) return void 0;
|
|
17578
|
+
if (!hasTrustedVisualKind(visual)) {
|
|
17579
|
+
return failMismatchedVisualTempPath(
|
|
17580
|
+
visual,
|
|
17581
|
+
VISUAL_KIND_MISMATCH_FAILURE,
|
|
17582
|
+
"visual_kind_mismatch"
|
|
17583
|
+
);
|
|
17584
|
+
}
|
|
17585
|
+
return hasTrustedVisualTempPath(visual, visualPlan) ? visual : failMismatchedVisualTempPath(visual);
|
|
17586
|
+
};
|
|
16873
17587
|
var PRE_ARTIFACT_CAPTURE_SKIP_MESSAGE = "Skipped after deep capture failed before artifact capture started.";
|
|
16874
17588
|
var buildFailedInspiredesignCaptureEvidence = (detail) => ({
|
|
16875
17589
|
attempts: {
|
|
@@ -16904,41 +17618,74 @@ var summarizeInspiredesignCaptureAttempts = (references) => {
|
|
|
16904
17618
|
summary: formatInspiredesignCaptureAttemptSummary({ worked, didNotWork })
|
|
16905
17619
|
};
|
|
16906
17620
|
};
|
|
16907
|
-
var captureInspiredesignReference = async (url, captureMode, workflowInput, captureReference, timeoutMs) => {
|
|
17621
|
+
var captureInspiredesignReference = async (url, captureMode, workflowInput, captureReference, visualPlan, timeoutMs) => {
|
|
17622
|
+
const visualPolicyMetadata = buildVisualPolicyMetadata(visualPlan.policy);
|
|
16908
17623
|
if (captureMode === "off") {
|
|
16909
|
-
return { captureStatus: "off" };
|
|
17624
|
+
return visualPolicyMetadata ? { captureStatus: "off", capture: { visual: visualPolicyMetadata } } : { captureStatus: "off" };
|
|
17625
|
+
}
|
|
17626
|
+
if (visualPolicyMetadata && isVisualPolicyBlockerDecision(visualPlan.policy)) {
|
|
17627
|
+
const captureStatus = visualPlan.policy.status === "failed" ? "failed" : "off";
|
|
17628
|
+
return {
|
|
17629
|
+
captureStatus,
|
|
17630
|
+
...captureStatus === "failed" ? { captureFailure: visualPlan.policy.message } : {},
|
|
17631
|
+
capture: { visual: visualPolicyMetadata }
|
|
17632
|
+
};
|
|
16910
17633
|
}
|
|
16911
17634
|
if (!captureReference) {
|
|
17635
|
+
const visualFailureMetadata = visualPolicyMetadata ?? (workflowInput.visualEvidence === "required" && visualPlan.policy.status === "allowed" ? buildMissingRequiredVisualEvidence(INSPIREDESIGN_CAPTURE_UNAVAILABLE_FAILURE, visualPlan) : void 0);
|
|
16912
17636
|
return {
|
|
16913
17637
|
captureStatus: "failed",
|
|
16914
17638
|
captureFailure: INSPIREDESIGN_CAPTURE_UNAVAILABLE_FAILURE,
|
|
16915
|
-
capture:
|
|
17639
|
+
capture: mergeCaptureVisualEvidence(
|
|
17640
|
+
buildUnavailableInspiredesignCaptureEvidence(),
|
|
17641
|
+
visualFailureMetadata
|
|
17642
|
+
)
|
|
16916
17643
|
};
|
|
16917
17644
|
}
|
|
16918
17645
|
try {
|
|
16919
|
-
const
|
|
17646
|
+
const rawCapture = await captureReference(url, {
|
|
16920
17647
|
timeoutMs,
|
|
16921
17648
|
useCookies: workflowInput.useCookies,
|
|
16922
17649
|
challengeAutomationMode: workflowInput.challengeAutomationMode,
|
|
16923
|
-
cookiePolicyOverride: workflowInput.cookiePolicyOverride
|
|
16924
|
-
|
|
17650
|
+
cookiePolicyOverride: workflowInput.cookiePolicyOverride,
|
|
17651
|
+
visualEvidence: visualPlan.policy.status === "allowed" ? workflowInput.visualEvidence : "off",
|
|
17652
|
+
visualEvidencePath: visualPlan.policy.status === "allowed" ? visualPlan.tempPath : void 0
|
|
17653
|
+
});
|
|
17654
|
+
const capture = normalizeInspiredesignCaptureEvidence(rawCapture);
|
|
17655
|
+
const runtimeVisual = rawCapture?.visual;
|
|
17656
|
+
const trustedRuntimeVisual = trustRuntimeVisualEvidence(runtimeVisual, visualPlan);
|
|
17657
|
+
const captureWithRuntimeVisual = trustedRuntimeVisual ? mergeCaptureVisualEvidence(capture, trustedRuntimeVisual) : capture;
|
|
17658
|
+
const captureWithVisualPolicy = trustedRuntimeVisual ? captureWithRuntimeVisual : mergeCaptureVisualEvidence(captureWithRuntimeVisual, visualPolicyMetadata);
|
|
17659
|
+
const requiredVisualFailure = getRequiredVisualEvidenceFailure(workflowInput, visualPlan, captureWithVisualPolicy);
|
|
17660
|
+
const captureWithRequiredVisual = requiredVisualFailure ? addRequiredVisualEvidenceFailure(captureWithVisualPolicy, visualPlan, requiredVisualFailure) : captureWithVisualPolicy;
|
|
16925
17661
|
if (!hasInspiredesignCaptureArtifacts(capture)) {
|
|
16926
17662
|
return {
|
|
16927
17663
|
captureStatus: "failed",
|
|
16928
17664
|
captureFailure: "Deep capture did not return usable snapshot, DOM, or clone evidence.",
|
|
16929
|
-
...
|
|
17665
|
+
...captureWithRequiredVisual ? { capture: captureWithRequiredVisual } : {}
|
|
17666
|
+
};
|
|
17667
|
+
}
|
|
17668
|
+
if (requiredVisualFailure) {
|
|
17669
|
+
return {
|
|
17670
|
+
captureStatus: "failed",
|
|
17671
|
+
captureFailure: requiredVisualFailure,
|
|
17672
|
+
...captureWithRequiredVisual ? { capture: captureWithRequiredVisual } : {}
|
|
16930
17673
|
};
|
|
16931
17674
|
}
|
|
16932
17675
|
return {
|
|
16933
17676
|
captureStatus: "captured",
|
|
16934
|
-
...
|
|
17677
|
+
...captureWithRequiredVisual ? { capture: captureWithRequiredVisual } : {}
|
|
16935
17678
|
};
|
|
16936
17679
|
} catch (error) {
|
|
16937
17680
|
const captureFailure = error instanceof Error && error.message.trim() ? error.message : "Deep capture failed.";
|
|
17681
|
+
const visualFailureMetadata = visualPolicyMetadata ?? (workflowInput.visualEvidence === "required" && visualPlan.policy.status === "allowed" ? buildMissingRequiredVisualEvidence(captureFailure, visualPlan) : void 0);
|
|
16938
17682
|
return {
|
|
16939
17683
|
captureStatus: "failed",
|
|
16940
17684
|
captureFailure,
|
|
16941
|
-
capture:
|
|
17685
|
+
capture: mergeCaptureVisualEvidence(
|
|
17686
|
+
buildFailedInspiredesignCaptureEvidence(captureFailure),
|
|
17687
|
+
visualFailureMetadata
|
|
17688
|
+
)
|
|
16942
17689
|
};
|
|
16943
17690
|
}
|
|
16944
17691
|
};
|
|
@@ -16983,7 +17730,11 @@ var toInspiredesignIssueFailure = (record, hint) => {
|
|
|
16983
17730
|
};
|
|
16984
17731
|
var normalizeInspiredesignFetchResult = (result) => {
|
|
16985
17732
|
if (result.records.length === 0) {
|
|
16986
|
-
|
|
17733
|
+
const synthesizedFailures = failureFromInspiredesignFetchError(result);
|
|
17734
|
+
return synthesizedFailures.length > 0 ? {
|
|
17735
|
+
...result,
|
|
17736
|
+
failures: synthesizedFailures
|
|
17737
|
+
} : result;
|
|
16987
17738
|
}
|
|
16988
17739
|
const usableRecords = [];
|
|
16989
17740
|
const unusableRecords = [];
|
|
@@ -17043,12 +17794,14 @@ var summarizeInspiredesignRecoveredFetches = (references) => references.filter(i
|
|
|
17043
17794
|
}));
|
|
17044
17795
|
var buildInspiredesignReference = (url, result, capture) => {
|
|
17045
17796
|
const primary = getInspiredesignPrimaryRecord(result, url);
|
|
17046
|
-
const
|
|
17797
|
+
const baseCapture = normalizeInspiredesignCaptureEvidence(capture.capture);
|
|
17798
|
+
const runtimeVisual = capture.capture?.visual;
|
|
17799
|
+
const normalizedCapture = runtimeVisual?.tempPath ? mergeCaptureVisualEvidence(baseCapture, runtimeVisual) : baseCapture;
|
|
17047
17800
|
const title = normalizePlainText(primary?.title) || titleFromInspiredesignCapture(normalizedCapture);
|
|
17048
17801
|
const excerpt = excerptFromInspiredesignRecord(primary) ?? excerptFromInspiredesignCapture(normalizedCapture);
|
|
17049
17802
|
const fetchStatus = result.records.length > 0 ? "captured" : "failed";
|
|
17050
17803
|
return {
|
|
17051
|
-
id:
|
|
17804
|
+
id: getInspiredesignReferenceId(url),
|
|
17052
17805
|
url,
|
|
17053
17806
|
...title ? { title } : {},
|
|
17054
17807
|
...excerpt ? { excerpt } : {},
|
|
@@ -17059,6 +17812,102 @@ var buildInspiredesignReference = (url, result, capture) => {
|
|
|
17059
17812
|
...normalizedCapture ? { capture: normalizedCapture } : {}
|
|
17060
17813
|
};
|
|
17061
17814
|
};
|
|
17815
|
+
var failReferenceForRequiredVisualEvidence = (reference, failure, visualEvidence, shouldFail = true) => {
|
|
17816
|
+
if (visualEvidence !== "required" || !shouldFail) return reference;
|
|
17817
|
+
return {
|
|
17818
|
+
...reference,
|
|
17819
|
+
captureStatus: "failed",
|
|
17820
|
+
captureFailure: reference.captureFailure ?? failure
|
|
17821
|
+
};
|
|
17822
|
+
};
|
|
17823
|
+
var isPolicySkippedVisualEvidence = (visual) => visual.status === "skipped" && visual.warnings.some((warning) => warning.startsWith("policy:"));
|
|
17824
|
+
var finalizeInspiredesignReferenceVisual = async (reference, visualEvidence) => {
|
|
17825
|
+
const visual = reference.capture?.visual;
|
|
17826
|
+
if (!visual) {
|
|
17827
|
+
return { reference };
|
|
17828
|
+
}
|
|
17829
|
+
const runtimeVisual = visual;
|
|
17830
|
+
if (visual.status !== "captured" || !runtimeVisual.tempPath) {
|
|
17831
|
+
const persisted = persistInspiredesignVisualEvidence(visual);
|
|
17832
|
+
const referenceWithPersistedVisual = {
|
|
17833
|
+
...reference,
|
|
17834
|
+
capture: mergeCaptureVisualEvidence(reference.capture, persisted)
|
|
17835
|
+
};
|
|
17836
|
+
return {
|
|
17837
|
+
reference: failReferenceForRequiredVisualEvidence(
|
|
17838
|
+
referenceWithPersistedVisual,
|
|
17839
|
+
persisted.failure ?? REQUIRED_VISUAL_EVIDENCE_MISSING_FAILURE,
|
|
17840
|
+
visualEvidence,
|
|
17841
|
+
!isPolicySkippedVisualEvidence(persisted)
|
|
17842
|
+
)
|
|
17843
|
+
};
|
|
17844
|
+
}
|
|
17845
|
+
const artifactPath = buildVisualEvidenceArtifactPath(reference.id, visual.kind);
|
|
17846
|
+
try {
|
|
17847
|
+
const buffer = await readFile(runtimeVisual.tempPath);
|
|
17848
|
+
if (buffer.byteLength === 0) {
|
|
17849
|
+
throw new Error("Visual evidence screenshot file was empty.");
|
|
17850
|
+
}
|
|
17851
|
+
const persisted = persistInspiredesignVisualEvidence(visual, {
|
|
17852
|
+
artifactPath,
|
|
17853
|
+
sha256: hashVisualEvidenceBuffer(buffer),
|
|
17854
|
+
bytes: buffer.byteLength
|
|
17855
|
+
});
|
|
17856
|
+
return {
|
|
17857
|
+
reference: {
|
|
17858
|
+
...reference,
|
|
17859
|
+
capture: mergeCaptureVisualEvidence(reference.capture, persisted)
|
|
17860
|
+
},
|
|
17861
|
+
file: {
|
|
17862
|
+
path: artifactPath,
|
|
17863
|
+
content: buffer
|
|
17864
|
+
}
|
|
17865
|
+
};
|
|
17866
|
+
} catch (error) {
|
|
17867
|
+
const errorMessage = error instanceof Error ? error.message.trim() : "";
|
|
17868
|
+
const failure = errorMessage === "Visual evidence screenshot file was empty." ? errorMessage : "Visual evidence screenshot file was unavailable.";
|
|
17869
|
+
const persisted = persistInspiredesignVisualEvidence({
|
|
17870
|
+
...visual,
|
|
17871
|
+
status: "failed",
|
|
17872
|
+
warnings: [...readRuntimeVisualWarnings(runtimeVisual), "finalize_failed"],
|
|
17873
|
+
failure
|
|
17874
|
+
});
|
|
17875
|
+
const referenceWithPersistedVisual = {
|
|
17876
|
+
...reference,
|
|
17877
|
+
capture: mergeCaptureVisualEvidence(reference.capture, persisted)
|
|
17878
|
+
};
|
|
17879
|
+
return {
|
|
17880
|
+
reference: failReferenceForRequiredVisualEvidence(referenceWithPersistedVisual, failure, visualEvidence)
|
|
17881
|
+
};
|
|
17882
|
+
}
|
|
17883
|
+
};
|
|
17884
|
+
var finalizeInspiredesignVisualArtifacts = async (references, visualEvidence) => {
|
|
17885
|
+
const finalized = await Promise.all(
|
|
17886
|
+
references.map((reference) => finalizeInspiredesignReferenceVisual(reference, visualEvidence))
|
|
17887
|
+
);
|
|
17888
|
+
return {
|
|
17889
|
+
references: finalized.map((entry) => entry.reference),
|
|
17890
|
+
files: finalized.map((entry) => entry.file).filter((file) => Boolean(file))
|
|
17891
|
+
};
|
|
17892
|
+
};
|
|
17893
|
+
var buildInspiredesignVisualCapturePlan = (url, workflowInput, result, visualEvidenceTempDir) => {
|
|
17894
|
+
const referenceId = getInspiredesignReferenceId(url);
|
|
17895
|
+
const policy = decideInspiredesignVisualCapturePolicy({
|
|
17896
|
+
visualEvidence: workflowInput.visualEvidence,
|
|
17897
|
+
failures: result.failures,
|
|
17898
|
+
topLevelError: result.error,
|
|
17899
|
+
cookiePolicy: workflowInput.cookiePolicyOverride,
|
|
17900
|
+
hasUsableRecords: result.records.length > 0
|
|
17901
|
+
});
|
|
17902
|
+
if (policy.status !== "allowed" || !visualEvidenceTempDir) {
|
|
17903
|
+
return { policy, referenceId };
|
|
17904
|
+
}
|
|
17905
|
+
return {
|
|
17906
|
+
policy,
|
|
17907
|
+
referenceId,
|
|
17908
|
+
tempPath: join3(visualEvidenceTempDir, `${referenceId}-viewport.png`)
|
|
17909
|
+
};
|
|
17910
|
+
};
|
|
17062
17911
|
var summarizeInspiredesignCaptureConstraint = (references) => {
|
|
17063
17912
|
const failedReferences = references.filter((reference) => reference.captureStatus === "failed");
|
|
17064
17913
|
if (failedReferences.length === 0) {
|
|
@@ -17084,14 +17933,26 @@ var summarizeInspiredesignCaptureConstraint = (references) => {
|
|
|
17084
17933
|
var summarizeInspiredesignFetchConstraint = (references) => {
|
|
17085
17934
|
return references.find((reference) => reference.fetchStatus === "failed" && !isInspiredesignFetchRecovered(reference) && typeof reference.fetchFailure === "string" && reference.fetchFailure.trim().length > 0)?.fetchFailure;
|
|
17086
17935
|
};
|
|
17087
|
-
var
|
|
17936
|
+
var hasSurvivingInspiredesignReference = (references) => references.some((reference) => reference.fetchStatus === "captured" || reference.captureStatus === "captured");
|
|
17937
|
+
var selectInspiredesignPrimaryConstraintFailures = (failures, references, discovery) => {
|
|
17938
|
+
if (!hasSurvivingInspiredesignReference(references)) return failures;
|
|
17939
|
+
if (discovery.failures.length === 0) return failures;
|
|
17940
|
+
return failures.slice(discovery.failures.length);
|
|
17941
|
+
};
|
|
17942
|
+
var buildInspiredesignMeta = (runtime, workflowInput, references, failures, followthrough, discovery) => {
|
|
17088
17943
|
const failedCaptures = references.filter((reference) => reference.captureStatus === "failed");
|
|
17089
17944
|
const captureAttemptReport = summarizeInspiredesignCaptureAttempts(references);
|
|
17090
17945
|
const recoveredFetches = summarizeInspiredesignRecoveredFetches(references);
|
|
17946
|
+
const hasSurvivingReference = hasSurvivingInspiredesignReference(references);
|
|
17947
|
+
const primaryConstraintFailures = selectInspiredesignPrimaryConstraintFailures(failures, references, discovery);
|
|
17091
17948
|
let reasonCodeDistribution = summarizeReasonCodeDistribution(failures);
|
|
17092
17949
|
let meta = withCamelCasePrimaryConstraintMeta(withReasonCodeDistributionMeta({
|
|
17093
17950
|
selection: {
|
|
17094
17951
|
urls: workflowInput.urls,
|
|
17952
|
+
...workflowInput.query ? { query: workflowInput.query } : {},
|
|
17953
|
+
...workflowInput.providers.length > 0 ? { providers: workflowInput.providers } : {},
|
|
17954
|
+
...workflowInput.referenceLimit !== void 0 ? { max_references: workflowInput.referenceLimit } : {},
|
|
17955
|
+
...workflowInput.visualEvidence !== "off" ? { visual_evidence: workflowInput.visualEvidence } : {},
|
|
17095
17956
|
capture_mode: workflowInput.captureMode,
|
|
17096
17957
|
...workflowInput.browserMode ? { requested_browser_mode: workflowInput.browserMode } : {},
|
|
17097
17958
|
include_prototype_guidance: Boolean(workflowInput.includePrototypeGuidance)
|
|
@@ -17109,7 +17970,7 @@ var buildInspiredesignMeta = (runtime, workflowInput, references, failures, foll
|
|
|
17109
17970
|
...captureAttemptReport ? { capture_attempts: captureAttemptReport.counts } : {}
|
|
17110
17971
|
},
|
|
17111
17972
|
alerts: buildWorkflowAlerts(runtime, failures)
|
|
17112
|
-
}, reasonCodeDistribution),
|
|
17973
|
+
}, reasonCodeDistribution), primaryConstraintFailures);
|
|
17113
17974
|
if (!meta.primaryConstraint) {
|
|
17114
17975
|
const fetchConstraint = summarizeInspiredesignFetchConstraint(references);
|
|
17115
17976
|
if (fetchConstraint) {
|
|
@@ -17119,6 +17980,16 @@ var buildInspiredesignMeta = (runtime, workflowInput, references, failures, foll
|
|
|
17119
17980
|
};
|
|
17120
17981
|
}
|
|
17121
17982
|
}
|
|
17983
|
+
if (!hasSurvivingReference && !meta.primaryConstraint && !meta.primaryConstraintSummary) {
|
|
17984
|
+
const discoveryConstraint = summarizeInspiredesignDiscoveryConstraint(discovery);
|
|
17985
|
+
if (discoveryConstraint) {
|
|
17986
|
+
meta = withPrimaryConstraintSummaryOverride(
|
|
17987
|
+
meta,
|
|
17988
|
+
discoveryConstraint.summary,
|
|
17989
|
+
discoveryConstraint.guidance
|
|
17990
|
+
);
|
|
17991
|
+
}
|
|
17992
|
+
}
|
|
17122
17993
|
if (!meta.primaryConstraint && !meta.primaryConstraintSummary) {
|
|
17123
17994
|
const captureConstraint = summarizeInspiredesignCaptureConstraint(references);
|
|
17124
17995
|
if (captureConstraint) {
|
|
@@ -17143,9 +18014,26 @@ var buildInspiredesignMeta = (runtime, workflowInput, references, failures, foll
|
|
|
17143
18014
|
} : {},
|
|
17144
18015
|
recommendedSkills: followthrough.recommendedSkills,
|
|
17145
18016
|
deepCaptureRecommendation: followthrough.deepCaptureRecommendation,
|
|
18017
|
+
discovery,
|
|
17146
18018
|
contractScope: followthrough.contractScope
|
|
17147
18019
|
};
|
|
17148
18020
|
};
|
|
18021
|
+
var buildInspiredesignDiscoveryGuidance = (discovery) => ({
|
|
18022
|
+
reason: discovery.failure ?? "Reference discovery did not produce usable design references.",
|
|
18023
|
+
recommendedNextCommands: [
|
|
18024
|
+
"Rerun inspiredesign harvest with explicit --url references from usable inspiration pages.",
|
|
18025
|
+
"Retry provider discovery in a lane with provider search support and any required authenticated browser session."
|
|
18026
|
+
]
|
|
18027
|
+
});
|
|
18028
|
+
var summarizeInspiredesignDiscoveryConstraint = (discovery) => {
|
|
18029
|
+
if (!discovery.requested || discovery.acceptedUrls.length > 0) return void 0;
|
|
18030
|
+
const queryDetail = discovery.query ? ` for query "${discovery.query}"` : "";
|
|
18031
|
+
const summary = discovery.failure ?? `Reference discovery returned no usable references${queryDetail}.`;
|
|
18032
|
+
return {
|
|
18033
|
+
summary,
|
|
18034
|
+
guidance: buildInspiredesignDiscoveryGuidance(discovery)
|
|
18035
|
+
};
|
|
18036
|
+
};
|
|
17149
18037
|
var inferBrandFromContent = (content, productUrl) => {
|
|
17150
18038
|
const normalized = normalizePlainText(content);
|
|
17151
18039
|
if (!normalized) return void 0;
|
|
@@ -17617,6 +18505,15 @@ var resolveShoppingSourceForUrl = (url) => {
|
|
|
17617
18505
|
return "web";
|
|
17618
18506
|
}
|
|
17619
18507
|
};
|
|
18508
|
+
var getRequiredProductVideoExecutionStep = (steps, stepId) => {
|
|
18509
|
+
const step = steps.find(
|
|
18510
|
+
(candidate) => candidate.id === stepId
|
|
18511
|
+
);
|
|
18512
|
+
if (!step) {
|
|
18513
|
+
throw new Error(`Product-video workflow plan is missing required step ${stepId}.`);
|
|
18514
|
+
}
|
|
18515
|
+
return step;
|
|
18516
|
+
};
|
|
17620
18517
|
var RESEARCH_REJECTED_CANDIDATE_LIMIT = 25;
|
|
17621
18518
|
var isResearchPrivacyPreferenceShell = (content) => {
|
|
17622
18519
|
const matchIndex = content.slice(0, 400).search(RESEARCH_PRIVACY_PREFERENCE_SHELL_RE);
|
|
@@ -17909,8 +18806,9 @@ var runResearchWorkflow = async (runtime, input) => {
|
|
|
17909
18806
|
challengeOrchestration
|
|
17910
18807
|
});
|
|
17911
18808
|
const responseMeta = withFollowthroughMeta(meta, handoff);
|
|
18809
|
+
const renderMode = workflowInput.mode ?? "compact";
|
|
17912
18810
|
const rendered = renderResearch({
|
|
17913
|
-
mode:
|
|
18811
|
+
mode: renderMode,
|
|
17914
18812
|
topic: plan.compiled.topic,
|
|
17915
18813
|
records: ranked,
|
|
17916
18814
|
meta: responseMeta
|
|
@@ -17921,7 +18819,7 @@ var runResearchWorkflow = async (runtime, input) => {
|
|
|
17921
18819
|
ttlHours: workflowInput.ttlHours,
|
|
17922
18820
|
files: rendered.files
|
|
17923
18821
|
});
|
|
17924
|
-
if (
|
|
18822
|
+
if (renderMode === "path") {
|
|
17925
18823
|
return {
|
|
17926
18824
|
...rendered.response,
|
|
17927
18825
|
...handoff,
|
|
@@ -18135,85 +19033,134 @@ var runShoppingWorkflow = async (runtime, input) => {
|
|
|
18135
19033
|
var runInspiredesignWorkflow = async (runtime, input, options = {}) => {
|
|
18136
19034
|
const { envelope, workflowInput: rawWorkflowInput } = buildInspiredesignEnvelope(input);
|
|
18137
19035
|
const artifactRoot = resolveWorkflowArtifactRoot(rawWorkflowInput.outputDir);
|
|
18138
|
-
|
|
19036
|
+
let workflowInput = { ...rawWorkflowInput, outputDir: artifactRoot };
|
|
18139
19037
|
const remainingTimeoutMs = createRemainingTimeoutResolver(workflowInput.timeoutMs);
|
|
18140
|
-
|
|
18141
|
-
|
|
18142
|
-
|
|
18143
|
-
|
|
18144
|
-
|
|
18145
|
-
|
|
18146
|
-
|
|
18147
|
-
|
|
18148
|
-
|
|
18149
|
-
|
|
18150
|
-
|
|
18151
|
-
|
|
18152
|
-
|
|
18153
|
-
|
|
19038
|
+
const visualEvidenceTempDir = workflowInput.visualEvidence !== "off" ? await mkdtemp2(join3(tmpdir2(), "inspiredesign-visual-")) : void 0;
|
|
19039
|
+
try {
|
|
19040
|
+
const discovery = await discoverInspiredesignReferences(
|
|
19041
|
+
runtime,
|
|
19042
|
+
workflowInput,
|
|
19043
|
+
envelope,
|
|
19044
|
+
workflowInput.query ? remainingTimeoutMs() : void 0
|
|
19045
|
+
);
|
|
19046
|
+
workflowInput = {
|
|
19047
|
+
...workflowInput,
|
|
19048
|
+
urls: mergeInspiredesignReferenceUrls(
|
|
19049
|
+
workflowInput.urls,
|
|
19050
|
+
discovery.acceptedUrls,
|
|
19051
|
+
workflowInput.referenceLimit ?? workflowInput.urls.length + discovery.acceptedUrls.length
|
|
19052
|
+
),
|
|
19053
|
+
captureMode: resolveInspiredesignCaptureMode(workflowInput.captureMode, [
|
|
19054
|
+
...workflowInput.urls,
|
|
19055
|
+
...discovery.acceptedUrls
|
|
19056
|
+
])
|
|
19057
|
+
};
|
|
19058
|
+
let trace = appendWorkflowTrace(envelope.trace ?? [], "compile", "compile_started", {
|
|
19059
|
+
kind: "inspiredesign"
|
|
18154
19060
|
});
|
|
18155
|
-
|
|
18156
|
-
|
|
18157
|
-
|
|
18158
|
-
|
|
19061
|
+
trace = appendWorkflowTrace(trace, "compile", "compile_completed", {
|
|
19062
|
+
kind: "inspiredesign",
|
|
19063
|
+
urlCount: workflowInput.urls.length,
|
|
19064
|
+
captureMode: workflowInput.captureMode
|
|
19065
|
+
});
|
|
19066
|
+
const references = [];
|
|
19067
|
+
const failures = [...discovery.failures];
|
|
19068
|
+
for (const [index, url] of workflowInput.urls.entries()) {
|
|
19069
|
+
const stepTrace = appendWorkflowTrace(trace, "execute", "reference_started", {
|
|
19070
|
+
stepIndex: index,
|
|
19071
|
+
url
|
|
19072
|
+
});
|
|
19073
|
+
const fetchTimeoutMs = remainingTimeoutMs();
|
|
19074
|
+
const fetchResult = await runtime.fetch(
|
|
19075
|
+
{ url },
|
|
19076
|
+
buildInspiredesignFetchOptions(
|
|
19077
|
+
workflowInput,
|
|
19078
|
+
buildInspiredesignStepEnvelope(workflowInput, stepTrace, index, url),
|
|
19079
|
+
fetchTimeoutMs
|
|
19080
|
+
)
|
|
19081
|
+
);
|
|
19082
|
+
const result = normalizeInspiredesignFetchResult(fetchResult);
|
|
19083
|
+
observeWorkflowSignals(runtime, result);
|
|
19084
|
+
const captureTimeoutMs = remainingTimeoutMs();
|
|
19085
|
+
const visualPlan = buildInspiredesignVisualCapturePlan(
|
|
19086
|
+
url,
|
|
18159
19087
|
workflowInput,
|
|
18160
|
-
|
|
18161
|
-
|
|
18162
|
-
)
|
|
18163
|
-
|
|
18164
|
-
|
|
18165
|
-
|
|
18166
|
-
|
|
18167
|
-
|
|
18168
|
-
|
|
18169
|
-
|
|
19088
|
+
result,
|
|
19089
|
+
visualEvidenceTempDir
|
|
19090
|
+
);
|
|
19091
|
+
const capture = await captureInspiredesignReference(
|
|
19092
|
+
url,
|
|
19093
|
+
workflowInput.captureMode,
|
|
19094
|
+
workflowInput,
|
|
19095
|
+
options.captureReference,
|
|
19096
|
+
visualPlan,
|
|
19097
|
+
captureTimeoutMs
|
|
19098
|
+
);
|
|
19099
|
+
const reference = buildInspiredesignReference(url, result, capture);
|
|
19100
|
+
references.push(reference);
|
|
19101
|
+
if (reference.fetchStatus === "failed" && !isInspiredesignFetchRecovered(reference)) {
|
|
19102
|
+
failures.push(...result.failures);
|
|
19103
|
+
}
|
|
19104
|
+
trace = appendWorkflowTrace(stepTrace, "execute", "reference_completed", {
|
|
19105
|
+
stepIndex: index,
|
|
19106
|
+
url,
|
|
19107
|
+
fetchStatus: result.records.length > 0 ? "captured" : "failed",
|
|
19108
|
+
captureStatus: capture.captureStatus
|
|
19109
|
+
});
|
|
19110
|
+
}
|
|
19111
|
+
const visualCollation = await finalizeInspiredesignVisualArtifacts(references, workflowInput.visualEvidence);
|
|
19112
|
+
const packet = buildInspiredesignPacket({
|
|
19113
|
+
brief: workflowInput.brief,
|
|
19114
|
+
briefExpansion: workflowInput.briefExpansion,
|
|
19115
|
+
urls: workflowInput.urls,
|
|
19116
|
+
references: visualCollation.references,
|
|
19117
|
+
includePrototypeGuidance: workflowInput.includePrototypeGuidance
|
|
19118
|
+
});
|
|
19119
|
+
const meta = buildInspiredesignMeta(
|
|
19120
|
+
runtime,
|
|
18170
19121
|
workflowInput,
|
|
18171
|
-
|
|
18172
|
-
|
|
19122
|
+
visualCollation.references,
|
|
19123
|
+
failures,
|
|
19124
|
+
packet.followthrough,
|
|
19125
|
+
discovery
|
|
18173
19126
|
);
|
|
18174
|
-
const
|
|
18175
|
-
|
|
18176
|
-
|
|
18177
|
-
|
|
18178
|
-
|
|
18179
|
-
|
|
18180
|
-
|
|
18181
|
-
|
|
18182
|
-
|
|
18183
|
-
|
|
19127
|
+
const rendered = renderInspiredesign({
|
|
19128
|
+
mode: workflowInput.mode,
|
|
19129
|
+
brief: workflowInput.brief,
|
|
19130
|
+
advancedBriefMarkdown: packet.advancedBriefMarkdown,
|
|
19131
|
+
urls: workflowInput.urls,
|
|
19132
|
+
designContract: packet.designContract,
|
|
19133
|
+
canvasPlanRequest: packet.canvasPlanRequest,
|
|
19134
|
+
designAgentHandoff: packet.followthrough,
|
|
19135
|
+
generationPlan: packet.generationPlan,
|
|
19136
|
+
implementationPlan: packet.implementationPlan,
|
|
19137
|
+
designMarkdown: packet.designMarkdown,
|
|
19138
|
+
implementationPlanMarkdown: packet.implementationPlanMarkdown,
|
|
19139
|
+
prototypeGuidanceMarkdown: packet.prototypeGuidanceMarkdown,
|
|
19140
|
+
evidence: packet.evidence,
|
|
19141
|
+
visualEvidence: packet.visualEvidence,
|
|
19142
|
+
screenshotIndex: packet.screenshotIndex,
|
|
19143
|
+
rankedReferences: packet.rankedReferences,
|
|
19144
|
+
referencePatternBoard: packet.generationPlan.referencePatternBoard,
|
|
19145
|
+
metaPromptMarkdown: packet.metaPromptMarkdown,
|
|
19146
|
+
meta
|
|
18184
19147
|
});
|
|
18185
|
-
|
|
18186
|
-
|
|
18187
|
-
|
|
18188
|
-
|
|
18189
|
-
|
|
18190
|
-
|
|
18191
|
-
|
|
18192
|
-
|
|
18193
|
-
|
|
18194
|
-
|
|
18195
|
-
|
|
18196
|
-
|
|
18197
|
-
|
|
18198
|
-
|
|
18199
|
-
|
|
18200
|
-
|
|
18201
|
-
designAgentHandoff: packet.followthrough,
|
|
18202
|
-
generationPlan: packet.generationPlan,
|
|
18203
|
-
implementationPlan: packet.implementationPlan,
|
|
18204
|
-
designMarkdown: packet.designMarkdown,
|
|
18205
|
-
implementationPlanMarkdown: packet.implementationPlanMarkdown,
|
|
18206
|
-
prototypeGuidanceMarkdown: packet.prototypeGuidanceMarkdown,
|
|
18207
|
-
evidence: packet.evidence,
|
|
18208
|
-
meta
|
|
18209
|
-
});
|
|
18210
|
-
const bundle = await createArtifactBundle({
|
|
18211
|
-
namespace: "inspiredesign",
|
|
18212
|
-
outputDir: artifactRoot,
|
|
18213
|
-
ttlHours: workflowInput.ttlHours,
|
|
18214
|
-
files: rendered.files
|
|
18215
|
-
});
|
|
18216
|
-
if (workflowInput.mode === "path") {
|
|
19148
|
+
const bundle = await createArtifactBundle({
|
|
19149
|
+
namespace: "inspiredesign",
|
|
19150
|
+
outputDir: artifactRoot,
|
|
19151
|
+
ttlHours: workflowInput.ttlHours,
|
|
19152
|
+
files: [...rendered.files, ...visualCollation.files]
|
|
19153
|
+
});
|
|
19154
|
+
if (workflowInput.mode === "path") {
|
|
19155
|
+
return {
|
|
19156
|
+
...rendered.response,
|
|
19157
|
+
artifact_path: bundle.basePath,
|
|
19158
|
+
meta: {
|
|
19159
|
+
...meta,
|
|
19160
|
+
artifact_manifest: bundle.manifest
|
|
19161
|
+
}
|
|
19162
|
+
};
|
|
19163
|
+
}
|
|
18217
19164
|
return {
|
|
18218
19165
|
...rendered.response,
|
|
18219
19166
|
artifact_path: bundle.basePath,
|
|
@@ -18222,15 +19169,11 @@ var runInspiredesignWorkflow = async (runtime, input, options = {}) => {
|
|
|
18222
19169
|
artifact_manifest: bundle.manifest
|
|
18223
19170
|
}
|
|
18224
19171
|
};
|
|
18225
|
-
}
|
|
18226
|
-
|
|
18227
|
-
|
|
18228
|
-
artifact_path: bundle.basePath,
|
|
18229
|
-
meta: {
|
|
18230
|
-
...meta,
|
|
18231
|
-
artifact_manifest: bundle.manifest
|
|
19172
|
+
} finally {
|
|
19173
|
+
if (visualEvidenceTempDir) {
|
|
19174
|
+
await rm2(visualEvidenceTempDir, { recursive: true, force: true }).catch(() => void 0);
|
|
18232
19175
|
}
|
|
18233
|
-
}
|
|
19176
|
+
}
|
|
18234
19177
|
};
|
|
18235
19178
|
var runProductVideoWorkflow = async (runtime, input, options = {}) => {
|
|
18236
19179
|
const envelope = isWorkflowResumeEnvelope(input) ? input : buildWorkflowResumeEnvelope("product_video", input);
|
|
@@ -18294,15 +19237,7 @@ var runProductVideoWorkflow = async (runtime, input, options = {}) => {
|
|
|
18294
19237
|
...updates,
|
|
18295
19238
|
completed_step_ids: checkpointState2.completed_step_ids.includes(stepId) ? checkpointState2.completed_step_ids : [...checkpointState2.completed_step_ids, stepId]
|
|
18296
19239
|
});
|
|
18297
|
-
const getRequiredProductVideoStep = (stepId) =>
|
|
18298
|
-
const step = plan.plan.steps.find(
|
|
18299
|
-
(candidate) => candidate.id === stepId
|
|
18300
|
-
);
|
|
18301
|
-
if (!step) {
|
|
18302
|
-
throw new Error(`Product-video workflow plan is missing required step ${stepId}.`);
|
|
18303
|
-
}
|
|
18304
|
-
return step;
|
|
18305
|
-
};
|
|
19240
|
+
const getRequiredProductVideoStep = (stepId) => getRequiredProductVideoExecutionStep(plan.plan.steps, stepId);
|
|
18306
19241
|
let checkpointState = {
|
|
18307
19242
|
...plan.checkpointState,
|
|
18308
19243
|
completed_step_ids: [...plan.checkpointState.completed_step_ids]
|
|
@@ -18732,10 +19667,10 @@ var Semaphore = class {
|
|
|
18732
19667
|
this.active += 1;
|
|
18733
19668
|
return;
|
|
18734
19669
|
}
|
|
18735
|
-
await new Promise((
|
|
19670
|
+
await new Promise((resolve2) => {
|
|
18736
19671
|
this.queue.push(() => {
|
|
18737
19672
|
this.active += 1;
|
|
18738
|
-
|
|
19673
|
+
resolve2();
|
|
18739
19674
|
});
|
|
18740
19675
|
});
|
|
18741
19676
|
}
|
|
@@ -21085,4 +22020,4 @@ export {
|
|
|
21085
22020
|
createProviderRuntime,
|
|
21086
22021
|
createDefaultRuntime
|
|
21087
22022
|
};
|
|
21088
|
-
//# sourceMappingURL=chunk-
|
|
22023
|
+
//# sourceMappingURL=chunk-RO3SMXF3.js.map
|