opendevbrowser 0.0.32 → 0.0.34
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 +1 -1
- package/dist/{accessibility-snapshot-XOP66CSK.js → accessibility-snapshot-VCBXK47S.js} +9 -9
- package/dist/{active-window-E3WFOQGX.js → active-window-7EUN36LZ.js} +9 -9
- package/dist/{annotate-MAE7ZJOZ.js → annotate-VLBK7YB6.js} +8 -8
- package/dist/{attr-M3PFDJ7Q.js → attr-JNANQKM6.js} +8 -8
- package/dist/browser/browser-manager.d.ts.map +1 -1
- package/dist/browser/canvas-manager.d.ts.map +1 -1
- package/dist/browser/manager-types.d.ts +3 -0
- package/dist/browser/manager-types.d.ts.map +1 -1
- package/dist/browser/ops-browser-manager.d.ts.map +1 -1
- package/dist/browser/screencast-recorder.d.ts +1 -0
- package/dist/browser/screencast-recorder.d.ts.map +1 -1
- package/dist/canvas/guidance.d.ts +7 -0
- package/dist/canvas/guidance.d.ts.map +1 -1
- package/dist/canvas/repair-examples.d.ts +45 -0
- package/dist/canvas/repair-examples.d.ts.map +1 -0
- package/dist/{canvas-3AJVL5I5.js → canvas-V5LO4JVL.js} +23 -8
- package/dist/canvas-V5LO4JVL.js.map +1 -0
- package/dist/{capture-desktop-VJGEETMJ.js → capture-desktop-FKVDWTVG.js} +9 -9
- package/dist/{capture-window-W5UFSFQL.js → capture-window-QVPM2DN2.js} +9 -9
- package/dist/{check-4IR3UJVW.js → check-V3CWZ56S.js} +8 -8
- package/dist/{checked-PKNY7724.js → checked-Q27Q6YZN.js} +8 -8
- package/dist/{chunk-WHQZBUNY.js → chunk-3WLCWHIV.js} +2 -2
- package/dist/{chunk-WHQZBUNY.js.map → chunk-3WLCWHIV.js.map} +1 -1
- package/dist/{chunk-RO3SMXF3.js → chunk-5FDXH4CS.js} +2870 -191
- package/dist/chunk-5FDXH4CS.js.map +1 -0
- package/dist/{chunk-J3KYGJRQ.js → chunk-G6NQ7WYD.js} +2 -2
- package/dist/{chunk-AKIAGFOE.js → chunk-GC2FWISX.js} +33 -14
- package/dist/chunk-GC2FWISX.js.map +1 -0
- package/dist/{chunk-2X4JFMKJ.js → chunk-IBIHDGTZ.js} +4 -4
- package/dist/chunk-IBIHDGTZ.js.map +1 -0
- package/dist/{chunk-XDLJE3RJ.js → chunk-NX2XYJP5.js} +2 -2
- package/dist/{chunk-AWQ37HSC.js → chunk-OJAUKABV.js} +2 -2
- package/dist/{chunk-ZOVMMQO6.js → chunk-QXJDJDSZ.js} +35 -14
- package/dist/chunk-QXJDJDSZ.js.map +1 -0
- package/dist/{chunk-SKFB5ICF.js → chunk-TI5I6UWY.js} +8 -3
- package/dist/chunk-TI5I6UWY.js.map +1 -0
- package/dist/{chunk-W6YPVNDX.js → chunk-VTGG5ZU2.js} +2 -2
- package/dist/{chunk-P5K3ZIPI.js → chunk-VX47SJZM.js} +2 -2
- package/dist/{chunk-BUXFIY2P.js → chunk-VY47VKXU.js} +3 -3
- package/dist/{chunk-NURQB55J.js → chunk-WY72GYAH.js} +2 -2
- package/dist/{chunk-HBK56JST.js → chunk-XRDCSHKZ.js} +202 -126
- package/dist/chunk-XRDCSHKZ.js.map +1 -0
- package/dist/{chunk-PIFHXKV4.js → chunk-Z3HIX2SE.js} +3 -3
- package/dist/{chunk-37VSRUW4.js → chunk-ZGCTC5YM.js} +39 -7
- package/dist/chunk-ZGCTC5YM.js.map +1 -0
- package/dist/cli/commands/canvas.d.ts +12 -0
- package/dist/cli/commands/canvas.d.ts.map +1 -1
- package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/daemon-mismatch.d.ts +6 -0
- package/dist/cli/daemon-mismatch.d.ts.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +77 -77
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/parse.d.ts +1 -0
- package/dist/cli/utils/parse.d.ts.map +1 -1
- package/dist/cli/utils/workflow-message.d.ts +1 -1
- package/dist/cli/utils/workflow-message.d.ts.map +1 -1
- package/dist/{click-HLNXU4I5.js → click-EQDRSLR3.js} +8 -8
- package/dist/{clone-component-QIKN5PIM.js → clone-component-SISUXTJS.js} +7 -7
- package/dist/{clone-page-5C7DTGZT.js → clone-page-MLDPCBOY.js} +7 -7
- package/dist/{close-WTXB3EDD.js → close-2LQMJVOA.js} +7 -7
- package/dist/{close-PCRZHX7F.js → close-7J7EV237.js} +7 -7
- package/dist/{connect-6C2IG55I.js → connect-JFRSIW5M.js} +8 -8
- package/dist/{console-poll-VJXCZR3F.js → console-poll-NSVVUNEC.js} +8 -8
- package/dist/{cookie-import-5OEDFB6U.js → cookie-import-B7IQTGTN.js} +7 -7
- package/dist/{cookie-list-44UNJJ6D.js → cookie-list-YHG7JCZZ.js} +7 -7
- package/dist/{daemon-CIKGBWEB.js → daemon-ENU4FOV4.js} +6 -6
- package/dist/daemon-fingerprint.json +1 -1
- package/dist/{debug-trace-snapshot-RGXAPGWB.js → debug-trace-snapshot-KLGU2AWY.js} +8 -8
- package/dist/{dialog-S64MJUM2.js → dialog-MUVQIERS.js} +8 -8
- package/dist/{disconnect-MTIELIM7.js → disconnect-KELQJ45J.js} +7 -7
- package/dist/{enabled-KF2L7LW4.js → enabled-SF6UU5HG.js} +8 -8
- package/dist/{goto-ULWINUAZ.js → goto-AZQWXYPG.js} +8 -8
- package/dist/guidance/context.d.ts +44 -0
- package/dist/guidance/context.d.ts.map +1 -0
- package/dist/guidance/index.d.ts +7 -0
- package/dist/guidance/index.d.ts.map +1 -0
- package/dist/guidance/readiness.d.ts +7 -0
- package/dist/guidance/readiness.d.ts.map +1 -0
- package/dist/guidance/recipes/generic.d.ts +3 -0
- package/dist/guidance/recipes/generic.d.ts.map +1 -0
- package/dist/guidance/recipes/pinterest.d.ts +5 -0
- package/dist/guidance/recipes/pinterest.d.ts.map +1 -0
- package/dist/guidance/recipes/site-recipe-types.d.ts +2 -0
- package/dist/guidance/recipes/site-recipe-types.d.ts.map +1 -0
- package/dist/guidance/recipes/site-recipe-validation.d.ts +27 -0
- package/dist/guidance/recipes/site-recipe-validation.d.ts.map +1 -0
- package/dist/guidance/recipes/site-registry.d.ts +5 -0
- package/dist/guidance/recipes/site-registry.d.ts.map +1 -0
- package/dist/guidance/renderers.d.ts +22 -0
- package/dist/guidance/renderers.d.ts.map +1 -0
- package/dist/guidance/router.d.ts +8 -0
- package/dist/guidance/router.d.ts.map +1 -0
- package/dist/guidance/types.d.ts +140 -0
- package/dist/guidance/types.d.ts.map +1 -0
- package/dist/{help-IG5S5RJD.js → help-B44IBHXL.js} +6 -5
- package/dist/help-B44IBHXL.js.map +1 -0
- package/dist/{hover-NOCOTR6N.js → hover-MQRAKKVU.js} +8 -8
- package/dist/{html-LXSYP6BT.js → html-PLRTU2WS.js} +8 -8
- package/dist/index.js +51 -16
- package/dist/index.js.map +1 -1
- package/dist/{inspector-62EPCLYB.js → inspector-IY4GBIT6.js} +10 -10
- package/dist/{inspector-audit-T2IF67RJ.js → inspector-audit-7MQCRJHD.js} +12 -12
- package/dist/{inspector-plan-KQS6LRMW.js → inspector-plan-ZAUDHBET.js} +10 -10
- package/dist/inspiredesign/contract.d.ts +3 -0
- package/dist/inspiredesign/contract.d.ts.map +1 -1
- package/dist/inspiredesign/handoff.d.ts +2 -2
- package/dist/inspiredesign/meta-prompt.d.ts +1 -1
- package/dist/inspiredesign/meta-prompt.d.ts.map +1 -1
- package/dist/inspiredesign/reference-pattern-board.d.ts +22 -1
- package/dist/inspiredesign/reference-pattern-board.d.ts.map +1 -1
- package/dist/{inspiredesign-DB6CHYN3.js → inspiredesign-VHPEO3UK.js} +83 -30
- package/dist/inspiredesign-VHPEO3UK.js.map +1 -0
- package/dist/{launch-B5ES6FVS.js → launch-OCTWPTV5.js} +8 -8
- package/dist/{list-TIZVR6RO.js → list-HUSYADUS.js} +7 -7
- package/dist/{list-XM4BP5GM.js → list-JWKAMAUA.js} +7 -7
- package/dist/{macro-resolve-TTQZVFIW.js → macro-resolve-WOXMPZDQ.js} +9 -9
- package/dist/{network-poll-NNSY4W63.js → network-poll-WHB62OEF.js} +8 -8
- package/dist/{new-E6VNAC2A.js → new-IKZBYBNK.js} +7 -7
- package/dist/{open-F55XKMKB.js → open-UA2VI6ZP.js} +7 -7
- package/dist/opendevbrowser.js +51 -16
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/{perf-RE7JE6CP.js → perf-DICS3VKH.js} +8 -8
- package/dist/{pointer-down-BCBPC5FJ.js → pointer-down-2XPRZFJC.js} +9 -9
- package/dist/{pointer-drag-QK7KGF7W.js → pointer-drag-7NY4BOLH.js} +9 -9
- package/dist/{pointer-move-VFAZQAXA.js → pointer-move-FWEXMH37.js} +9 -9
- package/dist/{pointer-up-FA5WE6LS.js → pointer-up-VU2OHK5D.js} +9 -9
- package/dist/{press-TNRHNDSW.js → press-W7IZ3FCX.js} +8 -8
- package/dist/{product-video-UEANMZ2U.js → product-video-XCZ6CHR5.js} +10 -10
- package/dist/providers/browser-native-discovery.d.ts +23 -0
- package/dist/providers/browser-native-discovery.d.ts.map +1 -0
- package/dist/providers/browser-output-artifacts.d.ts +13 -0
- package/dist/providers/browser-output-artifacts.d.ts.map +1 -0
- package/dist/providers/renderer.d.ts +2 -0
- package/dist/providers/renderer.d.ts.map +1 -1
- package/dist/providers/workflow-handoff.d.ts +3 -0
- package/dist/providers/workflow-handoff.d.ts.map +1 -1
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/{providers-AMCNWZUL.js → providers-XCNSU3T6.js} +4 -4
- package/dist/public-surface/generated-manifest.d.ts +5 -5
- package/dist/public-surface/generated-manifest.d.ts.map +1 -1
- package/dist/public-surface/source.d.ts +2 -2
- package/dist/public-surface/source.d.ts.map +1 -1
- package/dist/{research-YFY7WJSZ.js → research-AYCKHOWK.js} +10 -10
- package/dist/{review-NHOPLAT7.js → review-PP2UNSMJ.js} +9 -9
- package/dist/{review-desktop-OFWPDYGD.js → review-desktop-3JOJFUEJ.js} +9 -9
- package/dist/{rpc-TVVQPUOL.js → rpc-7EPTJQQ6.js} +8 -8
- package/dist/{run-OCBEZRDW.js → run-P6UJS3D4.js} +6 -6
- package/dist/{screencast-start-GTSDA33J.js → screencast-start-ZZYNH2HT.js} +8 -8
- package/dist/{screencast-stop-FYBUIXAA.js → screencast-stop-Y6ADFOFA.js} +8 -8
- package/dist/{screenshot-OEYRT3SP.js → screenshot-CJB7PMAF.js} +8 -8
- package/dist/{scroll-35OFEFC5.js → scroll-BP5MA4ZT.js} +8 -8
- package/dist/{scroll-into-view-UQ5RAWIX.js → scroll-into-view-O3RDWLM2.js} +8 -8
- package/dist/{select-K56QELVZ.js → select-QLCNRI36.js} +8 -8
- package/dist/{serve-5UJ3VMWC.js → serve-OO2MQWGL.js} +7 -7
- package/dist/{shopping-FJG7XB4Q.js → shopping-UYHCYPAH.js} +10 -10
- package/dist/{snapshot-W7RKVZEI.js → snapshot-SXYZ3CMC.js} +8 -8
- package/dist/{status-KHYCLGUD.js → status-AL2AHVA5.js} +7 -7
- package/dist/{status-R4EV4TWO.js → status-QQW7REK4.js} +9 -9
- package/dist/{status-capabilities-XD3RGLKF.js → status-capabilities-AVHJYQQQ.js} +9 -9
- package/dist/{text-TANLFZ4O.js → text-B6Z47EOA.js} +8 -8
- package/dist/tools/inspiredesign_run.d.ts.map +1 -1
- package/dist/tools/product_video_run.d.ts.map +1 -1
- package/dist/{type-Y2Y7LX7Y.js → type-LR3F3SQY.js} +8 -8
- package/dist/{uncheck-6REVUUB2.js → uncheck-5PJEHR7J.js} +8 -8
- package/dist/{upload-GGZC5UQP.js → upload-HQ3QN2OW.js} +8 -8
- package/dist/{use-B4Q7CFG2.js → use-KFZLMRUH.js} +7 -7
- package/dist/{value-DHOHO55D.js → value-TKUFUK5I.js} +8 -8
- package/dist/{visible-S5BTWYNH.js → visible-P5Z2N2QR.js} +8 -8
- package/dist/{wait-WV6NZUKL.js → wait-BYSHJPSC.js} +8 -8
- package/dist/{windows-GKE36DJQ.js → windows-6GTD25EU.js} +9 -9
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
- package/skills/opendevbrowser-best-practices/SKILL.md +8 -2
- package/skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md +4 -4
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +7 -0
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +6 -0
- package/skills/opendevbrowser-design-agent/SKILL.md +8 -6
- package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +4 -3
- package/skills/opendevbrowser-design-agent/artifacts/research-harvest-workflow.md +28 -4
- package/skills/opendevbrowser-design-agent/assets/templates/reference-pattern-board.v1.json +1 -0
- package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +5 -2
- package/skills/opendevbrowser-design-agent/scripts/validate-skill-assets.sh +8 -2
- package/skills/opendevbrowser-motion-design/SKILL.md +1 -1
- package/skills/opendevbrowser-motion-design/scripts/validate-skill-assets.sh +1 -0
- package/dist/canvas-3AJVL5I5.js.map +0 -1
- package/dist/chunk-2X4JFMKJ.js.map +0 -1
- package/dist/chunk-37VSRUW4.js.map +0 -1
- package/dist/chunk-AKIAGFOE.js.map +0 -1
- package/dist/chunk-HBK56JST.js.map +0 -1
- package/dist/chunk-RO3SMXF3.js.map +0 -1
- package/dist/chunk-SKFB5ICF.js.map +0 -1
- package/dist/chunk-ZOVMMQO6.js.map +0 -1
- package/dist/help-IG5S5RJD.js.map +0 -1
- package/dist/inspiredesign-DB6CHYN3.js.map +0 -1
- /package/dist/{accessibility-snapshot-XOP66CSK.js.map → accessibility-snapshot-VCBXK47S.js.map} +0 -0
- /package/dist/{active-window-E3WFOQGX.js.map → active-window-7EUN36LZ.js.map} +0 -0
- /package/dist/{annotate-MAE7ZJOZ.js.map → annotate-VLBK7YB6.js.map} +0 -0
- /package/dist/{attr-M3PFDJ7Q.js.map → attr-JNANQKM6.js.map} +0 -0
- /package/dist/{capture-desktop-VJGEETMJ.js.map → capture-desktop-FKVDWTVG.js.map} +0 -0
- /package/dist/{capture-window-W5UFSFQL.js.map → capture-window-QVPM2DN2.js.map} +0 -0
- /package/dist/{check-4IR3UJVW.js.map → check-V3CWZ56S.js.map} +0 -0
- /package/dist/{checked-PKNY7724.js.map → checked-Q27Q6YZN.js.map} +0 -0
- /package/dist/{chunk-J3KYGJRQ.js.map → chunk-G6NQ7WYD.js.map} +0 -0
- /package/dist/{chunk-XDLJE3RJ.js.map → chunk-NX2XYJP5.js.map} +0 -0
- /package/dist/{chunk-AWQ37HSC.js.map → chunk-OJAUKABV.js.map} +0 -0
- /package/dist/{chunk-W6YPVNDX.js.map → chunk-VTGG5ZU2.js.map} +0 -0
- /package/dist/{chunk-P5K3ZIPI.js.map → chunk-VX47SJZM.js.map} +0 -0
- /package/dist/{chunk-BUXFIY2P.js.map → chunk-VY47VKXU.js.map} +0 -0
- /package/dist/{chunk-NURQB55J.js.map → chunk-WY72GYAH.js.map} +0 -0
- /package/dist/{chunk-PIFHXKV4.js.map → chunk-Z3HIX2SE.js.map} +0 -0
- /package/dist/{click-HLNXU4I5.js.map → click-EQDRSLR3.js.map} +0 -0
- /package/dist/{clone-component-QIKN5PIM.js.map → clone-component-SISUXTJS.js.map} +0 -0
- /package/dist/{clone-page-5C7DTGZT.js.map → clone-page-MLDPCBOY.js.map} +0 -0
- /package/dist/{close-WTXB3EDD.js.map → close-2LQMJVOA.js.map} +0 -0
- /package/dist/{close-PCRZHX7F.js.map → close-7J7EV237.js.map} +0 -0
- /package/dist/{connect-6C2IG55I.js.map → connect-JFRSIW5M.js.map} +0 -0
- /package/dist/{console-poll-VJXCZR3F.js.map → console-poll-NSVVUNEC.js.map} +0 -0
- /package/dist/{cookie-import-5OEDFB6U.js.map → cookie-import-B7IQTGTN.js.map} +0 -0
- /package/dist/{cookie-list-44UNJJ6D.js.map → cookie-list-YHG7JCZZ.js.map} +0 -0
- /package/dist/{daemon-CIKGBWEB.js.map → daemon-ENU4FOV4.js.map} +0 -0
- /package/dist/{debug-trace-snapshot-RGXAPGWB.js.map → debug-trace-snapshot-KLGU2AWY.js.map} +0 -0
- /package/dist/{dialog-S64MJUM2.js.map → dialog-MUVQIERS.js.map} +0 -0
- /package/dist/{disconnect-MTIELIM7.js.map → disconnect-KELQJ45J.js.map} +0 -0
- /package/dist/{enabled-KF2L7LW4.js.map → enabled-SF6UU5HG.js.map} +0 -0
- /package/dist/{goto-ULWINUAZ.js.map → goto-AZQWXYPG.js.map} +0 -0
- /package/dist/{hover-NOCOTR6N.js.map → hover-MQRAKKVU.js.map} +0 -0
- /package/dist/{html-LXSYP6BT.js.map → html-PLRTU2WS.js.map} +0 -0
- /package/dist/{inspector-62EPCLYB.js.map → inspector-IY4GBIT6.js.map} +0 -0
- /package/dist/{inspector-audit-T2IF67RJ.js.map → inspector-audit-7MQCRJHD.js.map} +0 -0
- /package/dist/{inspector-plan-KQS6LRMW.js.map → inspector-plan-ZAUDHBET.js.map} +0 -0
- /package/dist/{launch-B5ES6FVS.js.map → launch-OCTWPTV5.js.map} +0 -0
- /package/dist/{list-TIZVR6RO.js.map → list-HUSYADUS.js.map} +0 -0
- /package/dist/{list-XM4BP5GM.js.map → list-JWKAMAUA.js.map} +0 -0
- /package/dist/{macro-resolve-TTQZVFIW.js.map → macro-resolve-WOXMPZDQ.js.map} +0 -0
- /package/dist/{network-poll-NNSY4W63.js.map → network-poll-WHB62OEF.js.map} +0 -0
- /package/dist/{new-E6VNAC2A.js.map → new-IKZBYBNK.js.map} +0 -0
- /package/dist/{open-F55XKMKB.js.map → open-UA2VI6ZP.js.map} +0 -0
- /package/dist/{perf-RE7JE6CP.js.map → perf-DICS3VKH.js.map} +0 -0
- /package/dist/{pointer-down-BCBPC5FJ.js.map → pointer-down-2XPRZFJC.js.map} +0 -0
- /package/dist/{pointer-drag-QK7KGF7W.js.map → pointer-drag-7NY4BOLH.js.map} +0 -0
- /package/dist/{pointer-move-VFAZQAXA.js.map → pointer-move-FWEXMH37.js.map} +0 -0
- /package/dist/{pointer-up-FA5WE6LS.js.map → pointer-up-VU2OHK5D.js.map} +0 -0
- /package/dist/{press-TNRHNDSW.js.map → press-W7IZ3FCX.js.map} +0 -0
- /package/dist/{product-video-UEANMZ2U.js.map → product-video-XCZ6CHR5.js.map} +0 -0
- /package/dist/{providers-AMCNWZUL.js.map → providers-XCNSU3T6.js.map} +0 -0
- /package/dist/{research-YFY7WJSZ.js.map → research-AYCKHOWK.js.map} +0 -0
- /package/dist/{review-NHOPLAT7.js.map → review-PP2UNSMJ.js.map} +0 -0
- /package/dist/{review-desktop-OFWPDYGD.js.map → review-desktop-3JOJFUEJ.js.map} +0 -0
- /package/dist/{rpc-TVVQPUOL.js.map → rpc-7EPTJQQ6.js.map} +0 -0
- /package/dist/{run-OCBEZRDW.js.map → run-P6UJS3D4.js.map} +0 -0
- /package/dist/{screencast-start-GTSDA33J.js.map → screencast-start-ZZYNH2HT.js.map} +0 -0
- /package/dist/{screencast-stop-FYBUIXAA.js.map → screencast-stop-Y6ADFOFA.js.map} +0 -0
- /package/dist/{screenshot-OEYRT3SP.js.map → screenshot-CJB7PMAF.js.map} +0 -0
- /package/dist/{scroll-35OFEFC5.js.map → scroll-BP5MA4ZT.js.map} +0 -0
- /package/dist/{scroll-into-view-UQ5RAWIX.js.map → scroll-into-view-O3RDWLM2.js.map} +0 -0
- /package/dist/{select-K56QELVZ.js.map → select-QLCNRI36.js.map} +0 -0
- /package/dist/{serve-5UJ3VMWC.js.map → serve-OO2MQWGL.js.map} +0 -0
- /package/dist/{shopping-FJG7XB4Q.js.map → shopping-UYHCYPAH.js.map} +0 -0
- /package/dist/{snapshot-W7RKVZEI.js.map → snapshot-SXYZ3CMC.js.map} +0 -0
- /package/dist/{status-KHYCLGUD.js.map → status-AL2AHVA5.js.map} +0 -0
- /package/dist/{status-R4EV4TWO.js.map → status-QQW7REK4.js.map} +0 -0
- /package/dist/{status-capabilities-XD3RGLKF.js.map → status-capabilities-AVHJYQQQ.js.map} +0 -0
- /package/dist/{text-TANLFZ4O.js.map → text-B6Z47EOA.js.map} +0 -0
- /package/dist/{type-Y2Y7LX7Y.js.map → type-LR3F3SQY.js.map} +0 -0
- /package/dist/{uncheck-6REVUUB2.js.map → uncheck-5PJEHR7J.js.map} +0 -0
- /package/dist/{upload-GGZC5UQP.js.map → upload-HQ3QN2OW.js.map} +0 -0
- /package/dist/{use-B4Q7CFG2.js.map → use-KFZLMRUH.js.map} +0 -0
- /package/dist/{value-DHOHO55D.js.map → value-TKUFUK5I.js.map} +0 -0
- /package/dist/{visible-S5BTWYNH.js.map → visible-P5Z2N2QR.js.map} +0 -0
- /package/dist/{wait-WV6NZUKL.js.map → wait-BYSHJPSC.js.map} +0 -0
- /package/dist/{windows-GKE36DJQ.js.map → windows-6GTD25EU.js.map} +0 -0
|
@@ -46,20 +46,23 @@ import {
|
|
|
46
46
|
CANVAS_VALIDATION_TARGET_BLOCK_ON_CODES,
|
|
47
47
|
CANVAS_VISUAL_DIRECTION_PROFILES,
|
|
48
48
|
ChallengeOrchestrator,
|
|
49
|
+
buildCanvasCommandValidationEnvelope,
|
|
50
|
+
buildCanvasRepairEnvelope,
|
|
49
51
|
canonicalizeUrl,
|
|
50
52
|
createDefaultRuntime,
|
|
51
53
|
extractStructuredContent,
|
|
52
54
|
inspectChallengePlanFromRuntime,
|
|
53
55
|
resolveChallengeAutomationPolicy,
|
|
54
56
|
resolveProviderRuntimePolicy,
|
|
57
|
+
resolveWorkflowArtifactRoot,
|
|
55
58
|
toSnippet
|
|
56
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-5FDXH4CS.js";
|
|
57
60
|
import {
|
|
58
61
|
buildBlockerArtifacts,
|
|
59
62
|
classifyBlockerSignal,
|
|
60
63
|
createLogger,
|
|
61
64
|
createRequestId
|
|
62
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-3WLCWHIV.js";
|
|
63
66
|
import {
|
|
64
67
|
ProviderRuntimeError
|
|
65
68
|
} from "./chunk-FUSXMW3G.js";
|
|
@@ -3660,9 +3663,9 @@ function createCoreRuntimeAssemblies(args2) {
|
|
|
3660
3663
|
import { parse, resolve as resolve6 } from "path";
|
|
3661
3664
|
|
|
3662
3665
|
// src/browser/browser-manager.ts
|
|
3663
|
-
import { randomUUID as
|
|
3666
|
+
import { randomUUID as randomUUID11 } from "crypto";
|
|
3664
3667
|
import { access as access2, mkdir as mkdir5, rm as rm3, writeFile as writeFile3 } from "fs/promises";
|
|
3665
|
-
import { join as
|
|
3668
|
+
import { join as join10 } from "path";
|
|
3666
3669
|
import { freemem, totalmem } from "os";
|
|
3667
3670
|
import { Mutex } from "async-mutex";
|
|
3668
3671
|
|
|
@@ -4950,6 +4953,28 @@ function sanitizeWsEndpoint(wsEndpoint) {
|
|
|
4950
4953
|
}
|
|
4951
4954
|
}
|
|
4952
4955
|
|
|
4956
|
+
// src/providers/browser-output-artifacts.ts
|
|
4957
|
+
import { randomUUID as randomUUID7 } from "crypto";
|
|
4958
|
+
import { mkdirSync as mkdirSync2 } from "fs";
|
|
4959
|
+
import { join as join7 } from "path";
|
|
4960
|
+
var BROWSER_SCREENSHOT_ARTIFACT_NAMESPACE = "screenshot";
|
|
4961
|
+
var BROWSER_SCREENCAST_ARTIFACT_NAMESPACE = "screencast";
|
|
4962
|
+
var SAFE_BROWSER_ARTIFACT_NAMESPACE_PATTERN = /^[a-z0-9_-]+$/;
|
|
4963
|
+
function createBrowserOutputArtifactDirectory(input) {
|
|
4964
|
+
const namespace = input.namespace.trim();
|
|
4965
|
+
if (namespace.length === 0) {
|
|
4966
|
+
throw new Error("Browser output artifact namespace cannot be empty.");
|
|
4967
|
+
}
|
|
4968
|
+
if (!SAFE_BROWSER_ARTIFACT_NAMESPACE_PATTERN.test(namespace)) {
|
|
4969
|
+
throw new Error("Browser output artifact namespace can only contain lowercase letters, numbers, underscores, and hyphens.");
|
|
4970
|
+
}
|
|
4971
|
+
const root = resolveWorkflowArtifactRoot(void 0, { workspaceRoot: input.workspaceRoot });
|
|
4972
|
+
const runId = randomUUID7();
|
|
4973
|
+
const artifactPath = join7(root, namespace, runId);
|
|
4974
|
+
mkdirSync2(artifactPath, { recursive: true, mode: 448 });
|
|
4975
|
+
return { artifactPath, namespace, runId };
|
|
4976
|
+
}
|
|
4977
|
+
|
|
4953
4978
|
// src/browser/manager-types.ts
|
|
4954
4979
|
var SCREENCAST_RETENTION_MS = 10 * 6e4;
|
|
4955
4980
|
|
|
@@ -5573,7 +5598,7 @@ var SessionStore = class {
|
|
|
5573
5598
|
};
|
|
5574
5599
|
|
|
5575
5600
|
// src/browser/target-manager.ts
|
|
5576
|
-
import { randomUUID as
|
|
5601
|
+
import { randomUUID as randomUUID8 } from "crypto";
|
|
5577
5602
|
var TARGET_INFO_TIMEOUT_MS = 2e3;
|
|
5578
5603
|
var TargetManager = class {
|
|
5579
5604
|
targets = /* @__PURE__ */ new Map();
|
|
@@ -5581,7 +5606,7 @@ var TargetManager = class {
|
|
|
5581
5606
|
nameToTarget = /* @__PURE__ */ new Map();
|
|
5582
5607
|
targetToName = /* @__PURE__ */ new Map();
|
|
5583
5608
|
registerPage(page, name) {
|
|
5584
|
-
const targetId =
|
|
5609
|
+
const targetId = randomUUID8();
|
|
5585
5610
|
this.targets.set(targetId, page);
|
|
5586
5611
|
if (!this.activeTargetId) {
|
|
5587
5612
|
this.activeTargetId = targetId;
|
|
@@ -5899,7 +5924,7 @@ import { execFileSync } from "child_process";
|
|
|
5899
5924
|
import { createDecipheriv, createHash as createHash3, pbkdf2Sync } from "crypto";
|
|
5900
5925
|
import { cp, mkdtemp as mkdtemp2, mkdir as mkdir3, rm as rm2, stat as stat3 } from "fs/promises";
|
|
5901
5926
|
import { tmpdir } from "os";
|
|
5902
|
-
import { dirname, join as
|
|
5927
|
+
import { dirname, join as join8 } from "path";
|
|
5903
5928
|
var ROOT_COPY_ENTRIES = ["Local State"];
|
|
5904
5929
|
var PROFILE_COPY_ENTRIES = [
|
|
5905
5930
|
"Preferences",
|
|
@@ -5957,7 +5982,7 @@ async function stageSystemChromeProfile(source, stagingRoot) {
|
|
|
5957
5982
|
let copiedCookieStore = false;
|
|
5958
5983
|
for (const entry of ROOT_COPY_ENTRIES) {
|
|
5959
5984
|
try {
|
|
5960
|
-
await copyEntry(
|
|
5985
|
+
await copyEntry(join8(source.userDataDir, entry), join8(stagingRoot, entry));
|
|
5961
5986
|
} catch (error) {
|
|
5962
5987
|
warnings.push(`Chrome bootstrap skipped ${entry}: ${getErrorMessage(error)}`);
|
|
5963
5988
|
}
|
|
@@ -5965,8 +5990,8 @@ async function stageSystemChromeProfile(source, stagingRoot) {
|
|
|
5965
5990
|
for (const entry of PROFILE_COPY_ENTRIES) {
|
|
5966
5991
|
try {
|
|
5967
5992
|
const copied = await copyEntry(
|
|
5968
|
-
|
|
5969
|
-
|
|
5993
|
+
join8(source.profilePath, entry),
|
|
5994
|
+
join8(stagingRoot, source.profileDirectory, entry)
|
|
5970
5995
|
);
|
|
5971
5996
|
if (copied && COOKIE_STORE_ENTRY_SET.has(entry)) {
|
|
5972
5997
|
copiedCookieStore = true;
|
|
@@ -6072,8 +6097,8 @@ async function loadSystemChromeCookiesFromSqlite(source, platform = process.plat
|
|
|
6072
6097
|
return { cookies: [], warnings: [], attempted: false };
|
|
6073
6098
|
}
|
|
6074
6099
|
const cookieDbCandidates = [
|
|
6075
|
-
|
|
6076
|
-
|
|
6100
|
+
join8(source.profilePath, "Cookies"),
|
|
6101
|
+
join8(source.profilePath, "Network", "Cookies")
|
|
6077
6102
|
];
|
|
6078
6103
|
const cookieDbPath = await firstExistingPath(cookieDbCandidates);
|
|
6079
6104
|
if (!cookieDbPath) {
|
|
@@ -6143,7 +6168,7 @@ async function loadSystemChromeCookies(executablePath) {
|
|
|
6143
6168
|
warnings: direct.warnings
|
|
6144
6169
|
};
|
|
6145
6170
|
}
|
|
6146
|
-
const stagingRoot = await mkdtemp2(
|
|
6171
|
+
const stagingRoot = await mkdtemp2(join8(tmpdir(), "opendevbrowser-chrome-cookie-bootstrap-"));
|
|
6147
6172
|
try {
|
|
6148
6173
|
const staged = await stageSystemChromeProfile(source, stagingRoot);
|
|
6149
6174
|
if (!staged.copiedCookieStore) {
|
|
@@ -6201,7 +6226,7 @@ function getErrorMessage(error) {
|
|
|
6201
6226
|
}
|
|
6202
6227
|
|
|
6203
6228
|
// src/browser/global-challenge-coordinator.ts
|
|
6204
|
-
import { randomUUID as
|
|
6229
|
+
import { randomUUID as randomUUID9 } from "crypto";
|
|
6205
6230
|
var PRESERVE_WINDOW_MS = 15 * 60 * 1e3;
|
|
6206
6231
|
var VERIFY_WINDOW_MS = 5 * 60 * 1e3;
|
|
6207
6232
|
var toIso = (value) => value.toISOString();
|
|
@@ -6223,7 +6248,7 @@ var GlobalChallengeCoordinator = class {
|
|
|
6223
6248
|
claimOrRefresh(args2) {
|
|
6224
6249
|
const now = args2.now ?? /* @__PURE__ */ new Date();
|
|
6225
6250
|
const existing = this.bySessionId.get(args2.sessionId);
|
|
6226
|
-
const challengeId = existing?.summary.challengeId ??
|
|
6251
|
+
const challengeId = existing?.summary.challengeId ?? randomUUID9();
|
|
6227
6252
|
const previousTimeline = existing?.timeline ?? [];
|
|
6228
6253
|
const nextEntry = {
|
|
6229
6254
|
at: toIso(now),
|
|
@@ -6315,8 +6340,8 @@ var GlobalChallengeCoordinator = class {
|
|
|
6315
6340
|
|
|
6316
6341
|
// src/browser/screencast-recorder.ts
|
|
6317
6342
|
import { copyFile, mkdir as mkdir4, readdir, writeFile as writeFile2 } from "fs/promises";
|
|
6318
|
-
import { randomUUID as
|
|
6319
|
-
import { isAbsolute as isAbsolute2, join as
|
|
6343
|
+
import { randomUUID as randomUUID10 } from "crypto";
|
|
6344
|
+
import { isAbsolute as isAbsolute2, join as join9, resolve } from "path";
|
|
6320
6345
|
var DEFAULT_SCREENCAST_INTERVAL_MS = 1e3;
|
|
6321
6346
|
var MIN_SCREENCAST_INTERVAL_MS = 250;
|
|
6322
6347
|
var DEFAULT_SCREENCAST_MAX_FRAMES = 300;
|
|
@@ -6363,12 +6388,16 @@ async function ensureEmptyDirectory(path4) {
|
|
|
6363
6388
|
}
|
|
6364
6389
|
await mkdir4(path4, { recursive: true });
|
|
6365
6390
|
}
|
|
6366
|
-
function resolveOutputDir(worktree,
|
|
6391
|
+
function resolveOutputDir(worktree, outputDir) {
|
|
6367
6392
|
if (typeof outputDir === "string" && outputDir.trim().length > 0) {
|
|
6368
6393
|
const trimmed = outputDir.trim();
|
|
6369
|
-
return isAbsolute2(trimmed) ? trimmed : resolve(worktree, trimmed);
|
|
6394
|
+
return { outputDir: isAbsolute2(trimmed) ? trimmed : resolve(worktree, trimmed) };
|
|
6370
6395
|
}
|
|
6371
|
-
|
|
6396
|
+
const artifact = createBrowserOutputArtifactDirectory({
|
|
6397
|
+
workspaceRoot: worktree,
|
|
6398
|
+
namespace: BROWSER_SCREENCAST_ARTIFACT_NAMESPACE
|
|
6399
|
+
});
|
|
6400
|
+
return { outputDir: artifact.artifactPath, artifactPath: artifact.artifactPath };
|
|
6372
6401
|
}
|
|
6373
6402
|
function renderReplayHtml(manifest) {
|
|
6374
6403
|
const encodedManifest = JSON.stringify(manifest).replaceAll("<", "\\u003c");
|
|
@@ -6468,6 +6497,7 @@ var BrowserScreencastRecorder = class {
|
|
|
6468
6497
|
sessionId;
|
|
6469
6498
|
targetId;
|
|
6470
6499
|
outputDir;
|
|
6500
|
+
artifactPath;
|
|
6471
6501
|
startedAt;
|
|
6472
6502
|
intervalMs;
|
|
6473
6503
|
maxFrames;
|
|
@@ -6488,18 +6518,20 @@ var BrowserScreencastRecorder = class {
|
|
|
6488
6518
|
finalPage;
|
|
6489
6519
|
frames = [];
|
|
6490
6520
|
constructor(args2) {
|
|
6491
|
-
this.screencastId = args2.screencastId ??
|
|
6521
|
+
this.screencastId = args2.screencastId ?? randomUUID10();
|
|
6492
6522
|
this.sessionId = args2.sessionId;
|
|
6493
6523
|
this.targetId = args2.targetId;
|
|
6494
|
-
|
|
6524
|
+
const output = resolveOutputDir(args2.worktree, args2.options?.outputDir);
|
|
6525
|
+
this.outputDir = output.outputDir;
|
|
6526
|
+
this.artifactPath = output.artifactPath;
|
|
6495
6527
|
this.intervalMs = resolveIntervalMs(args2.options?.intervalMs);
|
|
6496
6528
|
this.maxFrames = resolveMaxFrames(args2.options?.maxFrames);
|
|
6497
6529
|
this.startedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
6498
6530
|
this.startedAtMs = Date.parse(this.startedAt);
|
|
6499
|
-
this.framesDir =
|
|
6500
|
-
this.manifestPath =
|
|
6501
|
-
this.replayHtmlPath =
|
|
6502
|
-
this.previewPath =
|
|
6531
|
+
this.framesDir = join9(this.outputDir, FRAMES_DIRECTORY);
|
|
6532
|
+
this.manifestPath = join9(this.outputDir, MANIFEST_FILENAME);
|
|
6533
|
+
this.replayHtmlPath = join9(this.outputDir, REPLAY_FILENAME);
|
|
6534
|
+
this.previewPath = join9(this.outputDir, PREVIEW_FILENAME);
|
|
6503
6535
|
this.captureFrameImpl = args2.captureFrame;
|
|
6504
6536
|
this.completionPromise = new Promise((resolvePromise) => {
|
|
6505
6537
|
this.resolveCompletion = resolvePromise;
|
|
@@ -6537,6 +6569,7 @@ var BrowserScreencastRecorder = class {
|
|
|
6537
6569
|
sessionId: this.sessionId,
|
|
6538
6570
|
targetId: this.targetId,
|
|
6539
6571
|
outputDir: this.outputDir,
|
|
6572
|
+
...this.artifactPath ? { artifact_path: this.artifactPath } : {},
|
|
6540
6573
|
startedAt: this.startedAt,
|
|
6541
6574
|
intervalMs: this.intervalMs,
|
|
6542
6575
|
maxFrames: this.maxFrames,
|
|
@@ -6581,7 +6614,7 @@ var BrowserScreencastRecorder = class {
|
|
|
6581
6614
|
async captureFrame() {
|
|
6582
6615
|
const index = this.frames.length + 1;
|
|
6583
6616
|
const frameFilename = `${String(index).padStart(6, "0")}.png`;
|
|
6584
|
-
const framePath =
|
|
6617
|
+
const framePath = join9(this.framesDir, frameFilename);
|
|
6585
6618
|
const task = Promise.resolve().then(async () => {
|
|
6586
6619
|
const capturedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
6587
6620
|
const result = await this.captureFrameImpl(framePath);
|
|
@@ -6597,7 +6630,7 @@ var BrowserScreencastRecorder = class {
|
|
|
6597
6630
|
index,
|
|
6598
6631
|
capturedAt,
|
|
6599
6632
|
elapsedMs: Math.max(Date.parse(capturedAt) - this.startedAtMs, 0),
|
|
6600
|
-
relativePath: normalizeRelativePath(
|
|
6633
|
+
relativePath: normalizeRelativePath(join9(FRAMES_DIRECTORY, frameFilename))
|
|
6601
6634
|
});
|
|
6602
6635
|
if (this.frames.length === 1) {
|
|
6603
6636
|
await copyFile(framePath, this.previewPath);
|
|
@@ -6662,6 +6695,7 @@ var BrowserScreencastRecorder = class {
|
|
|
6662
6695
|
sessionId: this.sessionId,
|
|
6663
6696
|
targetId: this.targetId,
|
|
6664
6697
|
outputDir: this.outputDir,
|
|
6698
|
+
...this.artifactPath ? { artifact_path: this.artifactPath } : {},
|
|
6665
6699
|
startedAt: this.startedAt,
|
|
6666
6700
|
endedAt,
|
|
6667
6701
|
endedReason: reason,
|
|
@@ -7058,7 +7092,7 @@ var BrowserManager = class {
|
|
|
7058
7092
|
warnings.push("System Chrome not found. Downloaded Chrome for Testing.");
|
|
7059
7093
|
executablePath = download.executablePath;
|
|
7060
7094
|
}
|
|
7061
|
-
const profileDir = persistProfile ? cachePaths.profileDir :
|
|
7095
|
+
const profileDir = persistProfile ? cachePaths.profileDir : join10(cachePaths.projectRoot, "temp-profiles", randomUUID11());
|
|
7062
7096
|
await mkdir5(profileDir, { recursive: true });
|
|
7063
7097
|
let context = null;
|
|
7064
7098
|
try {
|
|
@@ -7073,7 +7107,7 @@ var BrowserManager = class {
|
|
|
7073
7107
|
if (!browser) {
|
|
7074
7108
|
throw new Error("Browser instance unavailable");
|
|
7075
7109
|
}
|
|
7076
|
-
const sessionId =
|
|
7110
|
+
const sessionId = randomUUID11();
|
|
7077
7111
|
const targets = new TargetManager();
|
|
7078
7112
|
const pages = context.pages();
|
|
7079
7113
|
if (pages.length === 0) {
|
|
@@ -8180,9 +8214,18 @@ var BrowserManager = class {
|
|
|
8180
8214
|
throw new Error("Screenshot ref and fullPage options are mutually exclusive.");
|
|
8181
8215
|
}
|
|
8182
8216
|
return this.runTargetScoped(sessionId, options.targetId, async ({ managed, page, targetId: resolvedTargetId }) => {
|
|
8217
|
+
let artifact;
|
|
8218
|
+
let outputPath = options.path;
|
|
8219
|
+
if (typeof outputPath !== "string") {
|
|
8220
|
+
artifact = createBrowserOutputArtifactDirectory({
|
|
8221
|
+
workspaceRoot: this.worktree,
|
|
8222
|
+
namespace: BROWSER_SCREENSHOT_ARTIFACT_NAMESPACE
|
|
8223
|
+
});
|
|
8224
|
+
outputPath = join10(artifact.artifactPath, "capture.png");
|
|
8225
|
+
}
|
|
8183
8226
|
const screenshotOptions = {
|
|
8184
8227
|
type: "png",
|
|
8185
|
-
path:
|
|
8228
|
+
path: outputPath
|
|
8186
8229
|
};
|
|
8187
8230
|
if (options.ref) {
|
|
8188
8231
|
await this.callFunctionOnResolvedRef(managed, options.ref, DOM_SCROLL_INTO_VIEW_DECLARATION, [], resolvedTargetId);
|
|
@@ -8192,30 +8235,26 @@ var BrowserManager = class {
|
|
|
8192
8235
|
screenshotOptions.fullPage = true;
|
|
8193
8236
|
}
|
|
8194
8237
|
try {
|
|
8195
|
-
|
|
8196
|
-
await this.withLegacyExtensionOperationTimeout(
|
|
8197
|
-
managed,
|
|
8198
|
-
page.screenshot(screenshotOptions),
|
|
8199
|
-
`page.screenshot: Timeout ${LEGACY_EXTENSION_OPERATION_TIMEOUT_MS}ms exceeded.`
|
|
8200
|
-
);
|
|
8201
|
-
return { path: options.path };
|
|
8202
|
-
}
|
|
8203
|
-
const buffer = await this.withLegacyExtensionOperationTimeout(
|
|
8238
|
+
await this.withLegacyExtensionOperationTimeout(
|
|
8204
8239
|
managed,
|
|
8205
8240
|
page.screenshot(screenshotOptions),
|
|
8206
8241
|
`page.screenshot: Timeout ${LEGACY_EXTENSION_OPERATION_TIMEOUT_MS}ms exceeded.`
|
|
8207
8242
|
);
|
|
8208
|
-
return {
|
|
8243
|
+
return {
|
|
8244
|
+
path: outputPath,
|
|
8245
|
+
...artifact ? { artifact_path: artifact.artifactPath } : {}
|
|
8246
|
+
};
|
|
8209
8247
|
} catch (error) {
|
|
8210
8248
|
const fallback = await this.captureScreenshotViaCdp(managed, page, error, options);
|
|
8211
8249
|
if (!fallback) {
|
|
8212
8250
|
throw error;
|
|
8213
8251
|
}
|
|
8214
|
-
|
|
8215
|
-
|
|
8216
|
-
|
|
8217
|
-
|
|
8218
|
-
|
|
8252
|
+
await writeFile3(outputPath, Buffer.from(fallback.base64, "base64"));
|
|
8253
|
+
return {
|
|
8254
|
+
path: outputPath,
|
|
8255
|
+
...artifact ? { artifact_path: artifact.artifactPath } : {},
|
|
8256
|
+
...fallback.warnings ? { warnings: fallback.warnings } : {}
|
|
8257
|
+
};
|
|
8219
8258
|
}
|
|
8220
8259
|
});
|
|
8221
8260
|
}
|
|
@@ -10510,7 +10549,7 @@ var BrowserManager = class {
|
|
|
10510
10549
|
}
|
|
10511
10550
|
context = await browser.newContext();
|
|
10512
10551
|
}
|
|
10513
|
-
const sessionId =
|
|
10552
|
+
const sessionId = randomUUID11();
|
|
10514
10553
|
const targets = new TargetManager();
|
|
10515
10554
|
const pages = context.pages();
|
|
10516
10555
|
if (pages.length === 0) {
|
|
@@ -10703,7 +10742,8 @@ function truncateText(value, maxChars) {
|
|
|
10703
10742
|
|
|
10704
10743
|
// src/browser/ops-browser-manager.ts
|
|
10705
10744
|
import { writeFile as writeFile4 } from "fs/promises";
|
|
10706
|
-
import { randomUUID as
|
|
10745
|
+
import { randomUUID as randomUUID12 } from "crypto";
|
|
10746
|
+
import { join as join11 } from "path";
|
|
10707
10747
|
var OpsBrowserManager = class {
|
|
10708
10748
|
base;
|
|
10709
10749
|
config;
|
|
@@ -10837,7 +10877,7 @@ var OpsBrowserManager = class {
|
|
|
10837
10877
|
config: this.config
|
|
10838
10878
|
});
|
|
10839
10879
|
const client = await this.ensureOpsClient(connectEndpoint);
|
|
10840
|
-
const leaseId =
|
|
10880
|
+
const leaseId = randomUUID12();
|
|
10841
10881
|
const result = await client.request(
|
|
10842
10882
|
"session.connect",
|
|
10843
10883
|
{
|
|
@@ -11309,11 +11349,21 @@ var OpsBrowserManager = class {
|
|
|
11309
11349
|
throw new Error("Screenshot failed");
|
|
11310
11350
|
}
|
|
11311
11351
|
const warnings = Array.isArray(result.warnings) ? result.warnings : typeof result.warning === "string" ? [result.warning] : void 0;
|
|
11312
|
-
|
|
11313
|
-
|
|
11314
|
-
|
|
11352
|
+
let artifact;
|
|
11353
|
+
let outputPath = options.path;
|
|
11354
|
+
if (typeof outputPath !== "string") {
|
|
11355
|
+
artifact = createBrowserOutputArtifactDirectory({
|
|
11356
|
+
workspaceRoot: this.worktree,
|
|
11357
|
+
namespace: BROWSER_SCREENSHOT_ARTIFACT_NAMESPACE
|
|
11358
|
+
});
|
|
11359
|
+
outputPath = join11(artifact.artifactPath, "capture.png");
|
|
11315
11360
|
}
|
|
11316
|
-
|
|
11361
|
+
await writeFile4(outputPath, Buffer.from(result.base64, "base64"));
|
|
11362
|
+
return {
|
|
11363
|
+
path: outputPath,
|
|
11364
|
+
...artifact ? { artifact_path: artifact.artifactPath } : {},
|
|
11365
|
+
...warnings ? { warnings } : {}
|
|
11366
|
+
};
|
|
11317
11367
|
}
|
|
11318
11368
|
async startScreencast(sessionId, options = {}) {
|
|
11319
11369
|
if (!this.opsSessions.has(sessionId)) {
|
|
@@ -12208,7 +12258,7 @@ var normalizeRecoverableOpsUrl = (url) => {
|
|
|
12208
12258
|
};
|
|
12209
12259
|
|
|
12210
12260
|
// src/browser/annotation-manager.ts
|
|
12211
|
-
import { randomUUID as
|
|
12261
|
+
import { randomUUID as randomUUID14 } from "crypto";
|
|
12212
12262
|
import { WebSocket as WebSocket2 } from "ws";
|
|
12213
12263
|
|
|
12214
12264
|
// src/annotate/timeout-messages.ts
|
|
@@ -12219,9 +12269,9 @@ var getAnnotationTimeoutMessage = (readySeen) => {
|
|
|
12219
12269
|
};
|
|
12220
12270
|
|
|
12221
12271
|
// src/annotate/direct-annotator.ts
|
|
12222
|
-
import { randomUUID as
|
|
12272
|
+
import { randomUUID as randomUUID13 } from "crypto";
|
|
12223
12273
|
import { existsSync as existsSync2 } from "fs";
|
|
12224
|
-
import { join as
|
|
12274
|
+
import { join as join12 } from "path";
|
|
12225
12275
|
var DEFAULT_TIMEOUT_MS = 12e4;
|
|
12226
12276
|
var DIRECT_ANNOTATE_REQUIRED_FILES = [
|
|
12227
12277
|
"dist/annotate-content.js",
|
|
@@ -12236,15 +12286,15 @@ function resolveDirectAnnotateAssets(resolvePath = () => getExtensionRuntimePath
|
|
|
12236
12286
|
if (!extensionPath) {
|
|
12237
12287
|
return { error: "Extension assets unavailable." };
|
|
12238
12288
|
}
|
|
12239
|
-
const scriptPath =
|
|
12240
|
-
const stylePath =
|
|
12289
|
+
const scriptPath = join12(extensionPath, "dist", "annotate-content.js");
|
|
12290
|
+
const stylePath = join12(extensionPath, "dist", "annotate-content.css");
|
|
12241
12291
|
if (!existsSync2(scriptPath) || !existsSync2(stylePath)) {
|
|
12242
12292
|
return { error: "Direct annotate assets missing. Run `npm run extension:build` and retry." };
|
|
12243
12293
|
}
|
|
12244
12294
|
return { assets: { scriptPath, stylePath } };
|
|
12245
12295
|
}
|
|
12246
12296
|
async function runDirectAnnotate(manager, assets, request) {
|
|
12247
|
-
const requestId =
|
|
12297
|
+
const requestId = randomUUID13();
|
|
12248
12298
|
const timeoutMs = request.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
12249
12299
|
return manager.withPage(request.sessionId, request.targetId ?? null, async (page) => {
|
|
12250
12300
|
await ensureBindings(page);
|
|
@@ -12544,7 +12594,7 @@ var AnnotationManager = class {
|
|
|
12544
12594
|
return this.requestRelay(options, false);
|
|
12545
12595
|
}
|
|
12546
12596
|
async requestStored(options) {
|
|
12547
|
-
const requestId =
|
|
12597
|
+
const requestId = randomUUID14();
|
|
12548
12598
|
const sharedPayload = this.agentInbox?.latestPayload();
|
|
12549
12599
|
if (sharedPayload) {
|
|
12550
12600
|
return {
|
|
@@ -12589,7 +12639,7 @@ var AnnotationManager = class {
|
|
|
12589
12639
|
return this.relay?.getAnnotationUrl?.() ?? (this.config.relayPort > 0 ? `ws://127.0.0.1:${this.config.relayPort}/annotation` : null);
|
|
12590
12640
|
}
|
|
12591
12641
|
async requestDirect(options) {
|
|
12592
|
-
const requestId =
|
|
12642
|
+
const requestId = randomUUID14();
|
|
12593
12643
|
if (!options.sessionId) {
|
|
12594
12644
|
return {
|
|
12595
12645
|
version: 1,
|
|
@@ -12637,7 +12687,7 @@ var AnnotationManager = class {
|
|
|
12637
12687
|
}
|
|
12638
12688
|
}
|
|
12639
12689
|
async requestRelay(options, requireExtension, commandName = "start") {
|
|
12640
|
-
const requestId =
|
|
12690
|
+
const requestId = randomUUID14();
|
|
12641
12691
|
const timeoutMs = options.timeoutMs ?? 12e4;
|
|
12642
12692
|
let resolvedTabId = options.tabId;
|
|
12643
12693
|
if (requireExtension && options.sessionId && this.manager) {
|
|
@@ -12864,12 +12914,12 @@ var parseJson2 = (data) => {
|
|
|
12864
12914
|
};
|
|
12865
12915
|
|
|
12866
12916
|
// src/browser/canvas-manager.ts
|
|
12867
|
-
import { randomUUID as
|
|
12917
|
+
import { randomUUID as randomUUID19 } from "crypto";
|
|
12868
12918
|
import { mkdir as mkdir9 } from "fs/promises";
|
|
12869
12919
|
import { dirname as dirname5 } from "path";
|
|
12870
12920
|
|
|
12871
12921
|
// src/browser/canvas-client.ts
|
|
12872
|
-
import { randomUUID as
|
|
12922
|
+
import { randomUUID as randomUUID15 } from "crypto";
|
|
12873
12923
|
import { WebSocket as WebSocket3 } from "ws";
|
|
12874
12924
|
var CanvasClient = class {
|
|
12875
12925
|
url;
|
|
@@ -13045,7 +13095,7 @@ var CanvasClient = class {
|
|
|
13045
13095
|
if (!this.socket || this.socket.readyState !== WebSocket3.OPEN) {
|
|
13046
13096
|
await this.connect();
|
|
13047
13097
|
}
|
|
13048
|
-
const requestId =
|
|
13098
|
+
const requestId = randomUUID15();
|
|
13049
13099
|
const request = {
|
|
13050
13100
|
type: "canvas_request",
|
|
13051
13101
|
requestId,
|
|
@@ -13191,7 +13241,7 @@ var CanvasClient = class {
|
|
|
13191
13241
|
if (!this.socket || this.socket.readyState !== WebSocket3.OPEN) {
|
|
13192
13242
|
return;
|
|
13193
13243
|
}
|
|
13194
|
-
const id2 =
|
|
13244
|
+
const id2 = randomUUID15();
|
|
13195
13245
|
const ping = { type: "canvas_ping", id: id2 };
|
|
13196
13246
|
await new Promise((resolve7, reject) => {
|
|
13197
13247
|
const timeoutId = setTimeout(() => {
|
|
@@ -13258,7 +13308,7 @@ var isCanvasEvent = (value) => {
|
|
|
13258
13308
|
var isRecord2 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
13259
13309
|
|
|
13260
13310
|
// src/canvas/document-store.ts
|
|
13261
|
-
import { randomUUID as
|
|
13311
|
+
import { randomUUID as randomUUID16 } from "crypto";
|
|
13262
13312
|
|
|
13263
13313
|
// node_modules/lib0/map.js
|
|
13264
13314
|
var create = () => /* @__PURE__ */ new Map();
|
|
@@ -21565,7 +21615,7 @@ function createDefaultNode(pageId, nodeId, name) {
|
|
|
21565
21615
|
metadata: {}
|
|
21566
21616
|
};
|
|
21567
21617
|
}
|
|
21568
|
-
function createDefaultCanvasDocument(documentId = `dc_${
|
|
21618
|
+
function createDefaultCanvasDocument(documentId = `dc_${randomUUID16()}`) {
|
|
21569
21619
|
const createdAt = nowIso();
|
|
21570
21620
|
const rootNodeId = `node_root_${documentId.slice(-8)}`;
|
|
21571
21621
|
const pageId = "page_home";
|
|
@@ -21613,7 +21663,7 @@ function normalizeCanvasDocument(input) {
|
|
|
21613
21663
|
const updatedAt = typeof base.updatedAt === "string" ? base.updatedAt : createdAt;
|
|
21614
21664
|
return {
|
|
21615
21665
|
schemaVersion: typeof base.schemaVersion === "string" ? base.schemaVersion : CANVAS_SCHEMA_VERSION,
|
|
21616
|
-
documentId: typeof base.documentId === "string" ? base.documentId : `dc_${
|
|
21666
|
+
documentId: typeof base.documentId === "string" ? base.documentId : `dc_${randomUUID16()}`,
|
|
21617
21667
|
title: typeof base.title === "string" && base.title.trim() ? base.title : "Untitled Design Canvas",
|
|
21618
21668
|
createdAt,
|
|
21619
21669
|
updatedAt,
|
|
@@ -21646,7 +21696,7 @@ function normalizeCanvasDocument(input) {
|
|
|
21646
21696
|
componentInventory: normalizeArray(base.componentInventory, normalizeCanvasComponentInventoryItem),
|
|
21647
21697
|
tokens: normalizeCanvasTokenStore(base.tokens),
|
|
21648
21698
|
assets: Array.isArray(base.assets) ? base.assets.map((asset) => ({
|
|
21649
|
-
id: typeof asset.id === "string" ? asset.id : `asset_${
|
|
21699
|
+
id: typeof asset.id === "string" ? asset.id : `asset_${randomUUID16()}`,
|
|
21650
21700
|
sourceType: typeof asset.sourceType === "string" ? asset.sourceType : void 0,
|
|
21651
21701
|
kind: typeof asset.kind === "string" ? asset.kind : void 0,
|
|
21652
21702
|
repoPath: typeof asset.repoPath === "string" ? asset.repoPath : null,
|
|
@@ -21878,7 +21928,7 @@ function buildInventoryItemFromNode(document2, nodeId, options = {}) {
|
|
|
21878
21928
|
const origin = options.origin && CANVAS_INVENTORY_ORIGINS.has(options.origin) ? options.origin : baseOrigin;
|
|
21879
21929
|
const template = buildInventoryTemplate(document2, nodeId);
|
|
21880
21930
|
return normalizeCanvasComponentInventoryItem({
|
|
21881
|
-
id: options.itemId ?? `inventory_${
|
|
21931
|
+
id: options.itemId ?? `inventory_${randomUUID16().slice(0, 8)}`,
|
|
21882
21932
|
name: options.name ?? node.name,
|
|
21883
21933
|
componentName: binding?.componentName ?? node.name,
|
|
21884
21934
|
description: options.description ?? null,
|
|
@@ -22871,7 +22921,7 @@ var CanvasDocumentStore = class {
|
|
|
22871
22921
|
}
|
|
22872
22922
|
this.replaceDocument(nextDocument, this.revision + 1, "canvas.store.apply-patches");
|
|
22873
22923
|
return {
|
|
22874
|
-
transactionId: `txn_${
|
|
22924
|
+
transactionId: `txn_${randomUUID16()}`,
|
|
22875
22925
|
appliedRevision: this.revision,
|
|
22876
22926
|
warnings: evaluateCanvasWarnings(this.document),
|
|
22877
22927
|
evidenceRefs: []
|
|
@@ -22886,7 +22936,7 @@ var CanvasDocumentStore = class {
|
|
|
22886
22936
|
}
|
|
22887
22937
|
this.replaceDocument(normalizeCanvasDocument(document2), this.revision + 1, "canvas.store.replace-document");
|
|
22888
22938
|
return {
|
|
22889
|
-
transactionId: `txn_${
|
|
22939
|
+
transactionId: `txn_${randomUUID16()}`,
|
|
22890
22940
|
appliedRevision: this.revision,
|
|
22891
22941
|
warnings: evaluateCanvasWarnings(this.document),
|
|
22892
22942
|
evidenceRefs: []
|
|
@@ -23381,7 +23431,7 @@ function duplicateNodeSubtree(document2, nodeId, parentId, index, idMapInput) {
|
|
|
23381
23431
|
throw new Error(`Unknown node: ${sourceNodeId}`);
|
|
23382
23432
|
}
|
|
23383
23433
|
const mappedId = isRecord4(idMapInput) ? idMapInput[sourceNode.id] : null;
|
|
23384
|
-
const duplicateId = typeof mappedId === "string" && mappedId.trim().length > 0 ? mappedId : `${sourceNode.id}_copy_${
|
|
23434
|
+
const duplicateId = typeof mappedId === "string" && mappedId.trim().length > 0 ? mappedId : `${sourceNode.id}_copy_${randomUUID16().slice(0, 8)}`;
|
|
23385
23435
|
idMap.set(sourceNode.id, duplicateId);
|
|
23386
23436
|
const nextMetadata = clone(sourceNode.metadata);
|
|
23387
23437
|
if (isRecord4(nextMetadata.codeSync)) {
|
|
@@ -24933,7 +24983,7 @@ function listBuiltInCanvasKitIds() {
|
|
|
24933
24983
|
|
|
24934
24984
|
// src/canvas/repo-store.ts
|
|
24935
24985
|
import { access as access3, mkdir as mkdir6, readFile as readFile2 } from "fs/promises";
|
|
24936
|
-
import { join as
|
|
24986
|
+
import { join as join13, dirname as dirname2, isAbsolute as isAbsolute3, resolve as resolve2 } from "path";
|
|
24937
24987
|
|
|
24938
24988
|
// src/canvas/code-sync/manifest.ts
|
|
24939
24989
|
var isRecord6 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
@@ -25117,20 +25167,20 @@ function resolveCanvasRepoPath(worktree, documentId, repoPath) {
|
|
|
25117
25167
|
if (repoPath && repoPath.trim()) {
|
|
25118
25168
|
return isAbsolute3(repoPath) ? repoPath : resolve2(worktree, repoPath);
|
|
25119
25169
|
}
|
|
25120
|
-
return
|
|
25170
|
+
return join13(worktree, ".opendevbrowser", "canvas", `${documentId}.canvas.json`);
|
|
25121
25171
|
}
|
|
25122
25172
|
function resolveCanvasCodeSyncManifestPath(worktree, documentId, bindingId, repoPath) {
|
|
25123
25173
|
if (repoPath && repoPath.trim()) {
|
|
25124
25174
|
return isAbsolute3(repoPath) ? repoPath : resolve2(worktree, repoPath);
|
|
25125
25175
|
}
|
|
25126
|
-
return
|
|
25176
|
+
return join13(worktree, ".opendevbrowser", "canvas", "code-sync", documentId, `${bindingId}.json`);
|
|
25127
25177
|
}
|
|
25128
25178
|
function resolveCanvasFigmaAssetDir(worktree, fileKey) {
|
|
25129
|
-
return
|
|
25179
|
+
return join13(worktree, ".opendevbrowser", "canvas", "assets", "figma", fileKey);
|
|
25130
25180
|
}
|
|
25131
25181
|
function resolveCanvasFigmaAssetPath(worktree, fileKey, assetId, extension) {
|
|
25132
25182
|
const normalizedExtension = extension.startsWith(".") ? extension : `.${extension}`;
|
|
25133
|
-
return
|
|
25183
|
+
return join13(resolveCanvasFigmaAssetDir(worktree, fileKey), `${assetId}${normalizedExtension}`);
|
|
25134
25184
|
}
|
|
25135
25185
|
async function saveCanvasDocument(worktree, document2, repoPath) {
|
|
25136
25186
|
const resolvedPath = resolveCanvasRepoPath(worktree, document2.documentId, repoPath);
|
|
@@ -25538,7 +25588,7 @@ import { resolve as resolve5, isAbsolute as isAbsolute5 } from "path";
|
|
|
25538
25588
|
// src/canvas/adapter-plugins/loader.ts
|
|
25539
25589
|
import { createHash as createHash4 } from "crypto";
|
|
25540
25590
|
import { access as access4, readFile as readFile3 } from "fs/promises";
|
|
25541
|
-
import { dirname as dirname3, isAbsolute as isAbsolute4, join as
|
|
25591
|
+
import { dirname as dirname3, isAbsolute as isAbsolute4, join as join14, resolve as resolve4 } from "path";
|
|
25542
25592
|
import { pathToFileURL } from "url";
|
|
25543
25593
|
|
|
25544
25594
|
// src/canvas/adapter-plugins/manifest.ts
|
|
@@ -25634,7 +25684,7 @@ async function readJson(filePath) {
|
|
|
25634
25684
|
return JSON.parse(await readFile3(filePath, "utf8"));
|
|
25635
25685
|
}
|
|
25636
25686
|
async function loadPackageJson(worktree) {
|
|
25637
|
-
const packagePath =
|
|
25687
|
+
const packagePath = join14(worktree, "package.json");
|
|
25638
25688
|
try {
|
|
25639
25689
|
return await readJson(packagePath);
|
|
25640
25690
|
} catch (error) {
|
|
@@ -25682,14 +25732,14 @@ function applyDeclarationOverrides(manifest, declaration) {
|
|
|
25682
25732
|
async function resolveDeclarationRef(worktree, ref) {
|
|
25683
25733
|
const direct = isAbsolute4(ref) ? ref : resolve4(worktree, ref);
|
|
25684
25734
|
if (await exists(direct)) {
|
|
25685
|
-
const manifestPath2 = direct.endsWith(".json") ? direct :
|
|
25735
|
+
const manifestPath2 = direct.endsWith(".json") ? direct : join14(direct, "canvas-adapter.plugin.json");
|
|
25686
25736
|
return {
|
|
25687
25737
|
packageRoot: direct.endsWith(".json") ? dirname3(direct) : direct,
|
|
25688
25738
|
manifestPath: manifestPath2
|
|
25689
25739
|
};
|
|
25690
25740
|
}
|
|
25691
|
-
const nodeModulesPath =
|
|
25692
|
-
const manifestPath =
|
|
25741
|
+
const nodeModulesPath = join14(worktree, "node_modules", ref);
|
|
25742
|
+
const manifestPath = join14(nodeModulesPath, "canvas-adapter.plugin.json");
|
|
25693
25743
|
return {
|
|
25694
25744
|
packageRoot: nodeModulesPath,
|
|
25695
25745
|
manifestPath
|
|
@@ -25700,7 +25750,7 @@ async function readDeclarationSource(worktree) {
|
|
|
25700
25750
|
const openDevBrowserConfig = isRecord7(packageJson.opendevbrowser) ? packageJson.opendevbrowser : null;
|
|
25701
25751
|
const canvasConfig = openDevBrowserConfig && isRecord7(openDevBrowserConfig.canvas) ? openDevBrowserConfig.canvas : null;
|
|
25702
25752
|
const packageDeclarations = Array.isArray(canvasConfig?.adapterPlugins) ? canvasConfig.adapterPlugins : [];
|
|
25703
|
-
const repoFile =
|
|
25753
|
+
const repoFile = join14(worktree, ".opendevbrowser", "canvas", "adapters.json");
|
|
25704
25754
|
const repoDeclarations = await exists(repoFile) ? (await readJson(repoFile)).adapterPlugins ?? [] : [];
|
|
25705
25755
|
return { packageDeclarations, repoDeclarations };
|
|
25706
25756
|
}
|
|
@@ -25746,7 +25796,7 @@ function applyCapabilityOverridesToRegisteredAdapters(params2) {
|
|
|
25746
25796
|
async function fingerprintPluginFiles(manifestPath, packageRoot, manifest) {
|
|
25747
25797
|
const entryPath = resolve4(packageRoot, manifest.entry);
|
|
25748
25798
|
const fixturePath = resolve4(packageRoot, manifest.fixtureDir);
|
|
25749
|
-
const packageJsonPath =
|
|
25799
|
+
const packageJsonPath = join14(packageRoot, "package.json");
|
|
25750
25800
|
const [manifestContent, entryContent, packageJsonContent] = await Promise.all([
|
|
25751
25801
|
readFile3(manifestPath, "utf8"),
|
|
25752
25802
|
readFile3(entryPath, "utf8"),
|
|
@@ -27100,7 +27150,7 @@ function collectGraphOrder(graph, nodeKey) {
|
|
|
27100
27150
|
}
|
|
27101
27151
|
|
|
27102
27152
|
// src/canvas/code-sync/import.ts
|
|
27103
|
-
import { randomUUID as
|
|
27153
|
+
import { randomUUID as randomUUID17 } from "crypto";
|
|
27104
27154
|
|
|
27105
27155
|
// src/canvas/code-sync/graph.ts
|
|
27106
27156
|
function locatorKey(locator) {
|
|
@@ -27230,7 +27280,7 @@ function buildNodeName(graphNode) {
|
|
|
27230
27280
|
return graphNode.tagName ?? "Element";
|
|
27231
27281
|
}
|
|
27232
27282
|
function buildNodeId(graphNode, manifestLookup) {
|
|
27233
|
-
return manifestLookup.get(locatorKey(graphNode.locator)) ?? `node_sync_${
|
|
27283
|
+
return manifestLookup.get(locatorKey(graphNode.locator)) ?? `node_sync_${randomUUID17().slice(0, 8)}`;
|
|
27234
27284
|
}
|
|
27235
27285
|
function preorder(graph, nodeKey) {
|
|
27236
27286
|
const node = graph.nodes[nodeKey];
|
|
@@ -28198,11 +28248,11 @@ function maxIso(values) {
|
|
|
28198
28248
|
}
|
|
28199
28249
|
|
|
28200
28250
|
// src/browser/canvas-session-sync-manager.ts
|
|
28201
|
-
import { randomUUID as
|
|
28251
|
+
import { randomUUID as randomUUID18 } from "crypto";
|
|
28202
28252
|
var CanvasSessionSyncManager = class {
|
|
28203
28253
|
sessions = /* @__PURE__ */ new Map();
|
|
28204
28254
|
initializeSession(canvasSessionId, leaseId, clientId) {
|
|
28205
|
-
const initialClientId = normalizeClientId(clientId) ?? `canvas_owner_${
|
|
28255
|
+
const initialClientId = normalizeClientId(clientId) ?? `canvas_owner_${randomUUID18().slice(0, 8)}`;
|
|
28206
28256
|
const attachedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
28207
28257
|
const attachedClients = /* @__PURE__ */ new Map();
|
|
28208
28258
|
attachedClients.set(initialClientId, {
|
|
@@ -28230,7 +28280,7 @@ var CanvasSessionSyncManager = class {
|
|
|
28230
28280
|
if (!state) {
|
|
28231
28281
|
throw new Error(`Unknown canvas session for attach: ${canvasSessionId}`);
|
|
28232
28282
|
}
|
|
28233
|
-
const resolvedClientId = normalizeClientId(clientId) ?? `canvas_client_${
|
|
28283
|
+
const resolvedClientId = normalizeClientId(clientId) ?? `canvas_client_${randomUUID18().slice(0, 8)}`;
|
|
28234
28284
|
const previous = state.attachedClients.get(resolvedClientId);
|
|
28235
28285
|
const attachedAt = previous?.attachedAt ?? (/* @__PURE__ */ new Date()).toISOString();
|
|
28236
28286
|
let role = "observer";
|
|
@@ -29432,14 +29482,22 @@ function optionalString4(value) {
|
|
|
29432
29482
|
}
|
|
29433
29483
|
|
|
29434
29484
|
// src/canvas/guidance.ts
|
|
29435
|
-
var
|
|
29485
|
+
var withRepairEnvelope = (guidance, envelope) => ({
|
|
29486
|
+
...guidance,
|
|
29487
|
+
nextStepGuidance: envelope.nextStepGuidance,
|
|
29488
|
+
paramsExamples: envelope.paramsExamples,
|
|
29489
|
+
fieldExamples: envelope.fieldExamples,
|
|
29490
|
+
validationChecks: envelope.validationChecks,
|
|
29491
|
+
doNotProceedIf: envelope.doNotProceedIf
|
|
29492
|
+
});
|
|
29493
|
+
var PREPLAN_CANVAS_GUIDANCE = withRepairEnvelope({
|
|
29436
29494
|
recommendedNextCommands: ["canvas.plan.set"],
|
|
29437
29495
|
reason: "Handshake is complete. Submit a complete generationPlan before mutation."
|
|
29438
|
-
};
|
|
29439
|
-
var INVALID_PLAN_CANVAS_GUIDANCE = {
|
|
29496
|
+
}, buildCanvasRepairEnvelope({ reasonCode: "plan_required" }));
|
|
29497
|
+
var INVALID_PLAN_CANVAS_GUIDANCE = withRepairEnvelope({
|
|
29440
29498
|
recommendedNextCommands: ["canvas.plan.set"],
|
|
29441
29499
|
reason: "generationPlan is invalid. Submit a supported plan before mutation."
|
|
29442
|
-
};
|
|
29500
|
+
}, buildCanvasRepairEnvelope({ reasonCode: "generation_plan_invalid" }));
|
|
29443
29501
|
var PLAN_ACCEPTED_CANVAS_GUIDANCE = {
|
|
29444
29502
|
recommendedNextCommands: ["canvas.document.patch", "canvas.preview.render", "canvas.feedback.poll", "canvas.document.save"],
|
|
29445
29503
|
reason: "generationPlan is accepted. Patch the document, render the preview, inspect feedback, and save when the iteration is stable."
|
|
@@ -29482,7 +29540,12 @@ var CANVAS_REQUIRED_COMMANDS_BY_BLOCKER = {
|
|
|
29482
29540
|
};
|
|
29483
29541
|
var cloneCanvasGuidance = (guidance) => ({
|
|
29484
29542
|
recommendedNextCommands: [...guidance.recommendedNextCommands],
|
|
29485
|
-
reason: guidance.reason
|
|
29543
|
+
reason: guidance.reason,
|
|
29544
|
+
...guidance.nextStepGuidance ? { nextStepGuidance: structuredClone(guidance.nextStepGuidance) } : {},
|
|
29545
|
+
...guidance.paramsExamples ? { paramsExamples: structuredClone(guidance.paramsExamples) } : {},
|
|
29546
|
+
...guidance.fieldExamples ? { fieldExamples: structuredClone(guidance.fieldExamples) } : {},
|
|
29547
|
+
...guidance.validationChecks ? { validationChecks: structuredClone(guidance.validationChecks) } : {},
|
|
29548
|
+
...guidance.doNotProceedIf ? { doNotProceedIf: [...guidance.doNotProceedIf] } : {}
|
|
29486
29549
|
});
|
|
29487
29550
|
var buildCanvasCommandGuidance = (input) => {
|
|
29488
29551
|
if (input.planStatus === "invalid") {
|
|
@@ -29571,6 +29634,13 @@ var CanvasManager = class {
|
|
|
29571
29634
|
});
|
|
29572
29635
|
}
|
|
29573
29636
|
async execute(command, params2 = {}) {
|
|
29637
|
+
const validationEnvelope = buildCanvasCommandValidationEnvelope(command, params2);
|
|
29638
|
+
if (validationEnvelope) {
|
|
29639
|
+
throw attachDetails(new Error(validationEnvelope.message), {
|
|
29640
|
+
code: validationEnvelope.code,
|
|
29641
|
+
details: validationEnvelope
|
|
29642
|
+
});
|
|
29643
|
+
}
|
|
29574
29644
|
switch (command) {
|
|
29575
29645
|
case "canvas.session.open":
|
|
29576
29646
|
return await this.openSession(params2);
|
|
@@ -29653,8 +29723,8 @@ var CanvasManager = class {
|
|
|
29653
29723
|
const repoRoot = optionalString5(params2.repoRoot) ?? this.worktree;
|
|
29654
29724
|
const mode = requireCanvasSessionMode(params2.mode);
|
|
29655
29725
|
const document2 = repoPath ? normalizeCanvasDocument(await loadCanvasDocument(repoRoot, repoPath)) : createDefaultCanvasDocument(requestedDocumentId ?? void 0);
|
|
29656
|
-
const sessionId = `canvas_${
|
|
29657
|
-
const leaseId = `lease_${
|
|
29726
|
+
const sessionId = `canvas_${randomUUID19()}`;
|
|
29727
|
+
const leaseId = `lease_${randomUUID19()}`;
|
|
29658
29728
|
const planState = resolveGenerationPlanState(document2.designGovernance.generationPlan);
|
|
29659
29729
|
const session = {
|
|
29660
29730
|
canvasSessionId: sessionId,
|
|
@@ -29696,7 +29766,7 @@ var CanvasManager = class {
|
|
|
29696
29766
|
attachSession(params2) {
|
|
29697
29767
|
const session = this.requireSession(params2);
|
|
29698
29768
|
const attachMode = requireAttachMode(params2.attachMode);
|
|
29699
|
-
const nextLeaseId = attachMode === "lease_reclaim" ? `lease_${
|
|
29769
|
+
const nextLeaseId = attachMode === "lease_reclaim" ? `lease_${randomUUID19()}` : session.leaseId;
|
|
29700
29770
|
const attached = this.sessionSyncManager.attach(
|
|
29701
29771
|
session.canvasSessionId,
|
|
29702
29772
|
nextLeaseId,
|
|
@@ -29769,10 +29839,9 @@ var CanvasManager = class {
|
|
|
29769
29839
|
setPlan(params2) {
|
|
29770
29840
|
const session = this.requireSession(params2);
|
|
29771
29841
|
this.assertLease(session, params2);
|
|
29772
|
-
const plan = requireRecord(params2.generationPlan, "generationPlan");
|
|
29773
29842
|
session.planStatus = "submitted";
|
|
29774
29843
|
session.preflightState = "plan_submitted";
|
|
29775
|
-
const validation = validateGenerationPlan(
|
|
29844
|
+
const validation = validateGenerationPlan(params2.generationPlan);
|
|
29776
29845
|
if (!validation.ok) {
|
|
29777
29846
|
session.planStatus = "invalid";
|
|
29778
29847
|
session.preflightState = "plan_invalid";
|
|
@@ -30054,7 +30123,7 @@ var CanvasManager = class {
|
|
|
30054
30123
|
const session = this.requireSession(params2);
|
|
30055
30124
|
this.assertLease(session, params2);
|
|
30056
30125
|
const nodeId = requireString2(params2.nodeId, "nodeId");
|
|
30057
|
-
const bindingId = optionalString5(params2.bindingId) ?? `binding_sync_${
|
|
30126
|
+
const bindingId = optionalString5(params2.bindingId) ?? `binding_sync_${randomUUID19().slice(0, 8)}`;
|
|
30058
30127
|
const binding = createCodeSyncBinding(params2, nodeId, bindingId);
|
|
30059
30128
|
const baseRevision = session.store.getRevision();
|
|
30060
30129
|
await this.applyDocumentPatches(session, baseRevision, [{
|
|
@@ -30838,7 +30907,7 @@ var CanvasManager = class {
|
|
|
30838
30907
|
prototypeId
|
|
30839
30908
|
});
|
|
30840
30909
|
} else if (status.mode === "extension" && this.supportsOpsOverlayTransport(session) && typeof this.browserManager.mountCanvasOverlay === "function") {
|
|
30841
|
-
const mountId2 = `mount_${
|
|
30910
|
+
const mountId2 = `mount_${randomUUID19()}`;
|
|
30842
30911
|
result = await this.browserManager.mountCanvasOverlay(session.browserSessionId, targetId, {
|
|
30843
30912
|
mountId: mountId2,
|
|
30844
30913
|
title: session.store.getDocument().title,
|
|
@@ -30848,7 +30917,7 @@ var CanvasManager = class {
|
|
|
30848
30917
|
} else {
|
|
30849
30918
|
result = await this.mountDirectOverlay(session.browserSessionId, targetId, session.store.getDocument(), prototypeId);
|
|
30850
30919
|
}
|
|
30851
|
-
const mountId = typeof result.mountId === "string" ? result.mountId : `mount_${
|
|
30920
|
+
const mountId = typeof result.mountId === "string" ? result.mountId : `mount_${randomUUID19()}`;
|
|
30852
30921
|
session.overlayMounts.set(mountId, { mountId, targetId, mountedAt: (/* @__PURE__ */ new Date()).toISOString() });
|
|
30853
30922
|
const previewState = session.activeTargets.get(targetId)?.previewState ?? "background";
|
|
30854
30923
|
if (!usesCanvasRelayOverlay) {
|
|
@@ -31188,7 +31257,7 @@ var CanvasManager = class {
|
|
|
31188
31257
|
subscribeFeedback(params2) {
|
|
31189
31258
|
const session = this.requireSession(params2);
|
|
31190
31259
|
const polled = this.pollFeedback(params2);
|
|
31191
|
-
const subscriptionId = `canvas_sub_${
|
|
31260
|
+
const subscriptionId = `canvas_sub_${randomUUID19()}`;
|
|
31192
31261
|
const heartbeatMs = FEEDBACK_HEARTBEAT_MS;
|
|
31193
31262
|
const subscription = {
|
|
31194
31263
|
id: subscriptionId,
|
|
@@ -31680,7 +31749,14 @@ var CanvasManager = class {
|
|
|
31680
31749
|
latestRevision: session.store.getRevision(),
|
|
31681
31750
|
message: "generationPlan must be accepted before mutation."
|
|
31682
31751
|
};
|
|
31683
|
-
return attachDetails(new Error(blocker.message), {
|
|
31752
|
+
return attachDetails(new Error(blocker.message), {
|
|
31753
|
+
code: blocker.code,
|
|
31754
|
+
blocker,
|
|
31755
|
+
details: {
|
|
31756
|
+
auditId: "CANVAS-01",
|
|
31757
|
+
...buildCanvasRepairEnvelope({ reasonCode: "plan_required" })
|
|
31758
|
+
}
|
|
31759
|
+
});
|
|
31684
31760
|
}
|
|
31685
31761
|
invalidGenerationPlan(session, missingFields, issues, command = "canvas.plan.set") {
|
|
31686
31762
|
const blocker = {
|
|
@@ -31696,7 +31772,13 @@ var CanvasManager = class {
|
|
|
31696
31772
|
details: {
|
|
31697
31773
|
auditId: "CANVAS-03",
|
|
31698
31774
|
missingFields,
|
|
31699
|
-
issues
|
|
31775
|
+
issues,
|
|
31776
|
+
...buildCanvasRepairEnvelope({
|
|
31777
|
+
reasonCode: "generation_plan_invalid",
|
|
31778
|
+
missingFields,
|
|
31779
|
+
issues,
|
|
31780
|
+
message: blocker.message
|
|
31781
|
+
})
|
|
31700
31782
|
}
|
|
31701
31783
|
});
|
|
31702
31784
|
}
|
|
@@ -32473,7 +32555,7 @@ function readInsertPlacement(params2) {
|
|
|
32473
32555
|
}
|
|
32474
32556
|
function materializeInventoryItem(item, pageId, parentId, placement) {
|
|
32475
32557
|
const template = readInventoryTemplate(item);
|
|
32476
|
-
const idMap = new Map(template.nodes.map((node) => [node.id, `node_inventory_${
|
|
32558
|
+
const idMap = new Map(template.nodes.map((node) => [node.id, `node_inventory_${randomUUID19().slice(0, 8)}`]));
|
|
32477
32559
|
const root = template.nodes.find((node) => node.id === template.rootNodeId) ?? template.nodes[0];
|
|
32478
32560
|
const offsetX = (placement.x ?? root.rect.x) - root.rect.x;
|
|
32479
32561
|
const offsetY = (placement.y ?? root.rect.y) - root.rect.y;
|
|
@@ -32649,11 +32731,11 @@ function buildStarterInventoryUpsertPatches(kitIds, frameworkId, adapterId) {
|
|
|
32649
32731
|
}));
|
|
32650
32732
|
}
|
|
32651
32733
|
function buildStarterShell(definition, pageId, parentId, placement) {
|
|
32652
|
-
const rootNodeId = `node_starter_${
|
|
32653
|
-
const eyebrowNodeId = `node_starter_${
|
|
32654
|
-
const headlineNodeId = `node_starter_${
|
|
32655
|
-
const bodyNodeId = `node_starter_${
|
|
32656
|
-
const actionNodeId = definition.shell.actionLabel ? `node_starter_${
|
|
32734
|
+
const rootNodeId = `node_starter_${randomUUID19().slice(0, 8)}`;
|
|
32735
|
+
const eyebrowNodeId = `node_starter_${randomUUID19().slice(0, 8)}`;
|
|
32736
|
+
const headlineNodeId = `node_starter_${randomUUID19().slice(0, 8)}`;
|
|
32737
|
+
const bodyNodeId = `node_starter_${randomUUID19().slice(0, 8)}`;
|
|
32738
|
+
const actionNodeId = definition.shell.actionLabel ? `node_starter_${randomUUID19().slice(0, 8)}` : null;
|
|
32657
32739
|
const rect = {
|
|
32658
32740
|
...definition.shell.rect,
|
|
32659
32741
|
x: placement.x ?? definition.shell.rect.x,
|
|
@@ -33111,12 +33193,6 @@ function normalizeOptionalString(value) {
|
|
|
33111
33193
|
function normalizeStringArray(value) {
|
|
33112
33194
|
return Array.isArray(value) ? value.filter((entry) => typeof entry === "string" && entry.trim().length > 0) : [];
|
|
33113
33195
|
}
|
|
33114
|
-
function requireRecord(value, name) {
|
|
33115
|
-
if (!isRecord12(value)) {
|
|
33116
|
-
throw new Error(`Missing ${name}`);
|
|
33117
|
-
}
|
|
33118
|
-
return value;
|
|
33119
|
-
}
|
|
33120
33196
|
function requirePatches(value) {
|
|
33121
33197
|
if (!Array.isArray(value)) {
|
|
33122
33198
|
throw new Error("Missing patches");
|
|
@@ -33310,7 +33386,7 @@ function ensureDuplicatePatchIds(document2, patch) {
|
|
|
33310
33386
|
}
|
|
33311
33387
|
const subtreeNodeIds = collectSubtreeNodeIds(document2, patch.nodeId);
|
|
33312
33388
|
const idMap = Object.fromEntries(
|
|
33313
|
-
subtreeNodeIds.map((nodeId) => [nodeId, `${nodeId}_copy_${
|
|
33389
|
+
subtreeNodeIds.map((nodeId) => [nodeId, `${nodeId}_copy_${randomUUID19().slice(0, 8)}`])
|
|
33314
33390
|
);
|
|
33315
33391
|
return {
|
|
33316
33392
|
...patch,
|
|
@@ -33329,7 +33405,7 @@ function buildCanvasHistoryEntry(beforeDocument, patches, options) {
|
|
|
33329
33405
|
scratchStore.applyPatches(scratchStore.getRevision(), [patch]);
|
|
33330
33406
|
}
|
|
33331
33407
|
return {
|
|
33332
|
-
id: `history_${
|
|
33408
|
+
id: `history_${randomUUID19().slice(0, 8)}`,
|
|
33333
33409
|
source: options.source,
|
|
33334
33410
|
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
33335
33411
|
forwardPatches: structuredClone(patches),
|
|
@@ -33560,7 +33636,7 @@ function attachDetails(error, details) {
|
|
|
33560
33636
|
|
|
33561
33637
|
// src/relay/relay-server.ts
|
|
33562
33638
|
import { createServer } from "http";
|
|
33563
|
-
import { timingSafeEqual, randomUUID as
|
|
33639
|
+
import { timingSafeEqual, randomUUID as randomUUID20 } from "crypto";
|
|
33564
33640
|
import { WebSocket as WebSocket4, WebSocketServer } from "ws";
|
|
33565
33641
|
var DEFAULT_DISCOVERY_PORT = 8787;
|
|
33566
33642
|
var CONFIG_PATH = "/config";
|
|
@@ -33568,7 +33644,7 @@ var PAIR_PATH = "/pair";
|
|
|
33568
33644
|
var STATUS_PATH = "/status";
|
|
33569
33645
|
var CDP_TOKEN_QUERY_KEY = "token";
|
|
33570
33646
|
var RelayServer = class _RelayServer {
|
|
33571
|
-
instanceId =
|
|
33647
|
+
instanceId = randomUUID20();
|
|
33572
33648
|
epoch = Date.now();
|
|
33573
33649
|
running = false;
|
|
33574
33650
|
baseUrl = null;
|
|
@@ -33701,7 +33777,7 @@ var RelayServer = class _RelayServer {
|
|
|
33701
33777
|
});
|
|
33702
33778
|
});
|
|
33703
33779
|
this.opsWss.on("connection", (socket, _request) => {
|
|
33704
|
-
const clientId =
|
|
33780
|
+
const clientId = randomUUID20();
|
|
33705
33781
|
this.opsClients.set(clientId, socket);
|
|
33706
33782
|
socket.on("message", (data) => {
|
|
33707
33783
|
this.handleOpsClientMessage(clientId, data);
|
|
@@ -33725,7 +33801,7 @@ var RelayServer = class _RelayServer {
|
|
|
33725
33801
|
void _request;
|
|
33726
33802
|
});
|
|
33727
33803
|
this.canvasWss.on("connection", (socket, _request) => {
|
|
33728
|
-
const clientId =
|
|
33804
|
+
const clientId = randomUUID20();
|
|
33729
33805
|
this.canvasClients.set(clientId, socket);
|
|
33730
33806
|
socket.on("message", (data) => {
|
|
33731
33807
|
this.handleCanvasClientMessage(clientId, data);
|
|
@@ -35407,4 +35483,4 @@ export {
|
|
|
35407
35483
|
createOpenDevBrowserCore
|
|
35408
35484
|
};
|
|
35409
35485
|
/* v8 ignore next -- @preserve */
|
|
35410
|
-
//# sourceMappingURL=chunk-
|
|
35486
|
+
//# sourceMappingURL=chunk-XRDCSHKZ.js.map
|