@qwen-code/qwen-code 0.23.2 → 0.23.3-nightly.20260911.aaa6a32aae
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 +35 -15
- package/bundled/computer-use/SKILL.md +1 -1
- package/bundled/goal-draft/SKILL.md +10 -10
- package/bundled/qc-helper/docs/configuration/model-providers.md +66 -28
- package/bundled/qc-helper/docs/configuration/settings.md +8 -3
- package/bundled/qc-helper/docs/features/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +0 -20
- package/bundled/qc-helper/docs/features/channels/dws.md +7 -1
- package/bundled/qc-helper/docs/features/channels/overview.md +5 -6
- package/bundled/qc-helper/docs/features/commands.md +62 -9
- package/bundled/qc-helper/docs/features/computer-use.md +1 -1
- package/bundled/qc-helper/docs/features/cross-session-protocol.md +338 -0
- package/bundled/qc-helper/docs/features/goals.md +22 -18
- package/bundled/qc-helper/docs/features/hooks.md +28 -22
- package/bundled/qc-helper/docs/features/sub-agents.md +27 -0
- package/bundled/qc-helper/docs/qwen-serve.md +23 -6
- package/bundled/review/SKILL.md +93 -80
- package/bundled/review/references/persistence.md +2 -0
- package/bundled/review/references/posting.md +31 -14
- package/bundled/workflow-authoring/SKILL.md +410 -0
- package/bundled/workflow-creator/SKILL.md +1 -1
- package/chunks/{MaxSizedBox-4C3BKKKY.js → MaxSizedBox-7C5XTBZI.js} +64 -53
- package/chunks/{StandaloneSessionPicker-TXVF65YW.js → StandaloneSessionPicker-IGTT3ZRX.js} +88 -76
- package/chunks/{acp-startup-profiler-KEU6VAYR.js → acp-startup-profiler-RUQNTNU5.js} +2 -2
- package/chunks/acp-subagent-executor-IUHVNVVO.js +140 -0
- package/chunks/{acpAgent-H5XBKGB4.js → acpAgent-W43WM2K4.js} +957 -243
- package/chunks/{agent-T5LEFJIU.js → agent-2XMXC5JW.js} +48 -38
- package/chunks/{agent-headless-VZKSRH36.js → agent-headless-2HHBVCP6.js} +48 -38
- package/chunks/{anthropicContentGenerator-PRJWWVYJ.js → anthropicContentGenerator-7RI3MPIW.js} +69 -36
- package/chunks/{artifact-tool-G5LHNECG.js → artifact-tool-HHVHCPNG.js} +59 -109
- package/chunks/{askUserQuestion-I5W5S3D6.js → askUserQuestion-RFMXTD3B.js} +2 -2
- package/chunks/{bridge-AOX5IY44.js → bridge-ID6N4IH5.js} +69 -58
- package/chunks/{ca-KC2AISNS.js → ca-MX3WCEEG.js} +1 -1
- package/chunks/{channel-management-service-MWQGHPAS.js → channel-management-service-ASCXI7FR.js} +6 -6
- package/chunks/{channel-settings-store-XZCGDGHW.js → channel-settings-store-TPJFQAZY.js} +76 -65
- package/chunks/{channel-worker-group-SQ5FRWOH.js → channel-worker-group-JR6JOELM.js} +9 -9
- package/chunks/{channel-worker-manager-TU4ZNWOE.js → channel-worker-manager-AVKJEZFL.js} +19 -10
- package/chunks/{channel-worker-supervisor-EMITFMCP.js → channel-worker-supervisor-OOYY7BAQ.js} +7 -7
- package/chunks/{chunk-4WMGYG3F.js → chunk-22FWWGSM.js} +2 -2
- package/chunks/{chunk-LWX4WDFF.js → chunk-2S5RIGZJ.js} +43 -15
- package/chunks/{chunk-CLKE4IY3.js → chunk-2SZH22YO.js} +1 -1
- package/chunks/{chunk-HJ5UJQQL.js → chunk-2UKKQGRA.js} +3639 -1804
- package/chunks/{chunk-MWIO7MF6.js → chunk-2WSLXP3W.js} +4 -0
- package/chunks/{chunk-HNLMYDQE.js → chunk-33LYAC4R.js} +10 -6
- package/chunks/{chunk-VBLAI2HA.js → chunk-3FPYT6QC.js} +0 -31
- package/chunks/{chunk-F53KKZUD.js → chunk-3LMDSCLU.js} +158 -10
- package/chunks/{chunk-WXFCI3O5.js → chunk-3MAUPOZ4.js} +2 -2
- package/chunks/{chunk-CRZBDVP2.js → chunk-432JQKIO.js} +10 -10
- package/chunks/{chunk-IRGDIDGJ.js → chunk-43RQ552L.js} +364 -84
- package/chunks/{chunk-PFKGV6PO.js → chunk-465USTVK.js} +9 -15
- package/chunks/{chunk-WG7BL3FY.js → chunk-473RJLIH.js} +1 -1
- package/chunks/{chunk-J3VZF2AL.js → chunk-4O2AXZXU.js} +2 -2
- package/chunks/{chunk-N6S3NUYJ.js → chunk-55VOWZ4C.js} +1 -1
- package/chunks/{chunk-OWCFKIFQ.js → chunk-5CZMWDJI.js} +2 -2
- package/chunks/{chunk-7NDZKE2M.js → chunk-5MUIHID6.js} +5 -5
- package/chunks/{chunk-RM244SCQ.js → chunk-5Z74GE4N.js} +1 -1
- package/chunks/{chunk-G5VOXCRX.js → chunk-6375QMAO.js} +2 -2
- package/chunks/{chunk-3LPJ776W.js → chunk-63GQZKXL.js} +164 -31
- package/chunks/{chunk-O2FEO2CB.js → chunk-6GDELAVL.js} +18 -2
- package/chunks/{chunk-7PD7ZMX5.js → chunk-6HI2I3OM.js} +168 -6
- package/chunks/{chunk-CALNF3Z3.js → chunk-7C57HCOR.js} +1 -1
- package/chunks/{chunk-UYDQYDW2.js → chunk-7IBS746B.js} +1 -1
- package/chunks/{chunk-AUTUFD5X.js → chunk-ABNX6E6K.js} +1 -1
- package/chunks/chunk-ACHCT36C.js +28 -0
- package/chunks/{chunk-2WC3Y7YY.js → chunk-AEY27Z35.js} +401 -23
- package/chunks/{chunk-AO2VMS72.js → chunk-AQFRRH73.js} +3 -3
- package/chunks/{chunk-PDN7FJZV.js → chunk-ASWEMQIZ.js} +4 -4
- package/chunks/chunk-AYEJOTIU.js +43 -0
- package/chunks/{chunk-QFJZAY7W.js → chunk-BKFRA4F5.js} +5 -5
- package/chunks/{chunk-KCF2436G.js → chunk-BNLW5N6U.js} +4 -4
- package/chunks/{chunk-GOKAOSCN.js → chunk-BRFOZEPA.js} +2 -2
- package/chunks/{process-registry-OAEG6WGC.js → chunk-BYUAT5OC.js} +1 -0
- package/chunks/chunk-C5CECJ46.js +340 -0
- package/chunks/{chunk-NOO4QFXM.js → chunk-C75BXMPM.js} +1 -3
- package/chunks/chunk-CAAMI77K.js +937 -0
- package/chunks/{chunk-QTB4VP4K.js → chunk-CBGHRAWM.js} +304 -23
- package/chunks/chunk-CF5KXZZX.js +150 -0
- package/chunks/chunk-CFMZLE3L.js +75 -0
- package/chunks/{chunk-TGNNLRC3.js → chunk-CJ3DHN5I.js} +1 -0
- package/chunks/{chunk-ERXNTINK.js → chunk-CQZJYGRX.js} +1 -1
- package/chunks/{chunk-WBU2PIZ5.js → chunk-CSDKDHWV.js} +23 -16
- package/chunks/{chunk-2EKVPSIJ.js → chunk-D754KKNZ.js} +9 -2
- package/chunks/{chunk-E6TI726I.js → chunk-DGC7BKEZ.js} +1 -1
- package/chunks/{chunk-7SVM3RP2.js → chunk-DMMOQWRF.js} +4 -6
- package/chunks/{chunk-J3TJH52D.js → chunk-DOTF2PF2.js} +1 -1
- package/chunks/{chunk-2BMXHB6N.js → chunk-DWBNQR53.js} +7 -7
- package/chunks/{chunk-ZN5TKAVR.js → chunk-E5LTUWKZ.js} +3 -3
- package/chunks/chunk-EGW3ZP6Y.js +32 -0
- package/chunks/chunk-ELRMZTPF.js +374 -0
- package/chunks/{chunk-RNAJVXUG.js → chunk-ENAUXRPG.js} +6 -6
- package/chunks/{chunk-WXD7INFV.js → chunk-EO4U2X47.js} +10 -8
- package/chunks/{chunk-WDVV3LRM.js → chunk-EPVEPTI3.js} +45 -152
- package/chunks/chunk-ERU3SDXT.js +27 -0
- package/chunks/{chunk-4HOEU2OR.js → chunk-EWJTAP3Y.js} +1 -19
- package/chunks/{chunk-GSFV5RQW.js → chunk-EYN3G5XD.js} +328 -4
- package/chunks/{chunk-QB3KS3N3.js → chunk-FGROOEKM.js} +5 -40
- package/chunks/{chunk-TOOOLHVS.js → chunk-FH5AVEWJ.js} +3 -3
- package/chunks/{chunk-DAI65CMX.js → chunk-FJZWRNEW.js} +1 -1
- package/chunks/{chunk-GNY7B3CA.js → chunk-FUQK5ZNL.js} +1 -1
- package/chunks/{chunk-GOEVQADN.js → chunk-GDIPPCW6.js} +330 -175
- package/chunks/{chunk-ALMR3E6Q.js → chunk-GDWE23OR.js} +3 -3
- package/chunks/{chunk-LNYV4GXX.js → chunk-GSKX53AN.js} +0 -139
- package/chunks/{chunk-ELD3OBPU.js → chunk-GWOVD63C.js} +3 -3
- package/chunks/{chunk-IWABUX6T.js → chunk-GX5FF2IE.js} +6 -6
- package/chunks/{chunk-22GORRNY.js → chunk-GZMNHAYC.js} +1 -1
- package/chunks/{chunk-YZTGGCEE.js → chunk-H3TFIFX3.js} +1 -1
- package/chunks/{chunk-6G4V7SE4.js → chunk-HG46TTAG.js} +1 -1
- package/chunks/{chunk-FETY36NQ.js → chunk-HGEUHUEV.js} +1 -1
- package/chunks/{chunk-KEPC5BOL.js → chunk-IBRQG2MP.js} +12 -15
- package/chunks/{chunk-OXR34GCD.js → chunk-IILWL3KY.js} +2054 -146
- package/chunks/{chunk-IW6RQPQB.js → chunk-IJOS26LH.js} +1 -3
- package/chunks/{chunk-ORFIYTI2.js → chunk-IK2MWJP5.js} +1 -1
- package/chunks/{chunk-CMWU6P4D.js → chunk-IRJRB3OD.js} +1 -1
- package/chunks/{chunk-QHLHE2OT.js → chunk-IUN5ZMFY.js} +1 -1
- package/chunks/{chunk-LYT2OU7D.js → chunk-IXXV6BVB.js} +172 -6
- package/chunks/{chunk-R3JIDRUL.js → chunk-J6H4JP25.js} +4 -4
- package/chunks/{chunk-NB3NDQQK.js → chunk-J6SBP5G2.js} +1 -1
- package/chunks/{chunk-TRQNRP2H.js → chunk-J7LBAKDH.js} +46 -3
- package/chunks/{chunk-67XTVRVB.js → chunk-JJFHISXU.js} +30 -25
- package/chunks/chunk-JL6APGBX.js +43 -0
- package/chunks/{chunk-NX7ZTXFF.js → chunk-JSKEW4E7.js} +2 -1
- package/chunks/{chunk-BK7D2JR6.js → chunk-JVTXAA35.js} +3 -3
- package/chunks/chunk-K2OJUPOE.js +78 -0
- package/chunks/{chunk-G3ZUMSFS.js → chunk-K3U6VB3O.js} +6 -6
- package/chunks/{chunk-4I3WFI3U.js → chunk-K4KWLF7Q.js} +12 -12
- package/chunks/{chunk-WXPPUPHM.js → chunk-KWFFJ6AK.js} +1 -1
- package/chunks/{chunk-46MMBZHI.js → chunk-KZYOFJ6V.js} +4 -4
- package/chunks/{chunk-ULZECEIP.js → chunk-LDQHA6L4.js} +2 -20
- package/chunks/{chunk-7LTCFO6T.js → chunk-LQBAFO5D.js} +6 -5
- package/chunks/{chunk-SOA4HKRJ.js → chunk-LT2XFADM.js} +2 -2
- package/chunks/{chunk-JYGIJA4W.js → chunk-LWWRJRCD.js} +1 -1
- package/chunks/{chunk-YQGW3M6Z.js → chunk-MFQWRBFB.js} +5 -5
- package/chunks/{chunk-TODNHE76.js → chunk-MUFGTWQH.js} +5 -5
- package/chunks/{chunk-5DQ4YTIZ.js → chunk-MV5XRRML.js} +3 -3
- package/chunks/{chunk-IR6JKBAP.js → chunk-NOUK63IR.js} +2 -2
- package/chunks/{chunk-XQ4RDO5B.js → chunk-NV77SEX3.js} +1 -1
- package/chunks/{chunk-OFVAS4AR.js → chunk-NWDPOFJI.js} +2 -2
- package/chunks/chunk-NY6OPAPS.js +820 -0
- package/chunks/{chunk-WDN64MVT.js → chunk-O5VX66FB.js} +127 -18
- package/chunks/{chunk-MV5DTLJV.js → chunk-OHCR4O3U.js} +1 -1
- package/chunks/{chunk-LEAOJ43M.js → chunk-OKOPKQ2X.js} +1310 -2107
- package/chunks/{chunk-B25JYXZE.js → chunk-ONLJBOI2.js} +971 -17
- package/chunks/{chunk-QQK4L3UU.js → chunk-OWUAZXXN.js} +132 -26
- package/chunks/{chunk-R457KFV7.js → chunk-P42IUOAO.js} +3 -3
- package/chunks/{chunk-LUNC5KCL.js → chunk-PRELUGCQ.js} +214 -39
- package/chunks/{chunk-5OZUKLL7.js → chunk-QSMQKTXV.js} +4 -4
- package/chunks/{chunk-FAJPLSYF.js → chunk-QTQYLQ5A.js} +85 -81
- package/chunks/{chunk-CALTQWTZ.js → chunk-QVZDV4ZS.js} +2 -2
- package/chunks/{chunk-J6MB5ZHZ.js → chunk-QZW6WRB7.js} +2 -1
- package/chunks/{chunk-KFECPHLV.js → chunk-RBWAGV73.js} +3 -3
- package/chunks/{chunk-4VY3ITHR.js → chunk-RF5RQRTD.js} +3 -3
- package/chunks/{chunk-HIXUUCGY.js → chunk-RPMXMR6U.js} +2 -2
- package/chunks/{chunk-3OAXF3UK.js → chunk-RRQEZBL2.js} +3756 -1343
- package/chunks/{chunk-4ALNJDHL.js → chunk-RSGEAWFJ.js} +19 -1
- package/chunks/{chunk-5BH2AIEY.js → chunk-RUE62UH6.js} +2 -2
- package/chunks/{chunk-PQEISIKS.js → chunk-SAH4BD2J.js} +0 -67
- package/chunks/{chunk-A7EFXK7P.js → chunk-SAOJHRWY.js} +2 -2
- package/chunks/{chunk-JO77FGNZ.js → chunk-SDUIETBG.js} +19 -7
- package/chunks/{chunk-6RZX2HIH.js → chunk-TBEXLLAO.js} +2 -2
- package/chunks/{chunk-PSPAM24S.js → chunk-TBSCTWKF.js} +6 -0
- package/chunks/{chunk-HRPFBHW7.js → chunk-TPKQIA7G.js} +1 -0
- package/chunks/{chunk-XDNFODER.js → chunk-TUIW5LLK.js} +1 -1
- package/chunks/{chunk-APXIW2TF.js → chunk-TVV5FA3G.js} +4 -4
- package/chunks/chunk-U6H3XTFA.js +95 -0
- package/chunks/{chunk-S5QR6CB5.js → chunk-UKMWZ5NS.js} +108 -887
- package/chunks/{chunk-U6REWGVR.js → chunk-VG2BRSEK.js} +2 -2
- package/chunks/chunk-VGBOJH2D.js +127 -0
- package/chunks/chunk-VGY2RGXL.js +100 -0
- package/chunks/{chunk-ZP5XDLSA.js → chunk-VLWG3EHY.js} +12 -12
- package/chunks/{chunk-4JNHNVAZ.js → chunk-W547PYQ7.js} +9 -4
- package/chunks/{chunk-7VEYUF3N.js → chunk-W5ZQMAEM.js} +1 -1
- package/chunks/{chunk-QAZ2MGYT.js → chunk-W7JJLUSB.js} +2 -2
- package/chunks/{chunk-CCBTNJB4.js → chunk-W7Q7XDQI.js} +39 -27
- package/chunks/{chunk-DARWOZY6.js → chunk-WD6YQI5M.js} +1 -1
- package/chunks/{chunk-F2NYVASI.js → chunk-WXAWG3JS.js} +30 -13
- package/chunks/{chunk-NPKCVSXX.js → chunk-XB5JRCAM.js} +11 -9
- package/chunks/{chunk-XSOXPG2L.js → chunk-XE46RQFI.js} +136 -8
- package/chunks/{chunk-QTNCGZHQ.js → chunk-XX5HQLCZ.js} +16 -0
- package/chunks/{chunk-2Z3T52OC.js → chunk-Y5TM7SBV.js} +7 -2
- package/chunks/chunk-YC6XOB5N.js +691 -0
- package/chunks/{chunk-CWVZBIZJ.js → chunk-YDW4ERSS.js} +1 -1
- package/chunks/{chunk-TRWQQBVH.js → chunk-YGCTOXUT.js} +10 -24
- package/chunks/{chunk-WK7P62DV.js → chunk-YKC67ZEF.js} +6 -6
- package/chunks/{chunk-KA5HR3G2.js → chunk-YKM6MITI.js} +5 -5
- package/chunks/{chunk-X7LFJF5D.js → chunk-YM6KUQ2S.js} +36 -84
- package/chunks/{chunk-HZ2HUXX7.js → chunk-YS2ZJSOA.js} +29 -12
- package/chunks/{chunk-G37O7YO6.js → chunk-ZAWM6KRF.js} +3 -3
- package/chunks/{chunk-H3Q3RSKZ.js → chunk-ZFIWHBJ3.js} +1 -1
- package/chunks/{chunk-XBVNNDPK.js → chunk-ZHKTKHMO.js} +8 -1
- package/chunks/{chunk-YLOHCA6I.js → chunk-ZKWO4CF4.js} +2 -2
- package/chunks/{chunk-VJJXG73H.js → chunk-ZMQL5BL5.js} +21 -6
- package/chunks/{chunk-FGHPZGOP.js → chunk-ZMUYBOYB.js} +39 -55
- package/chunks/{chunk-FV4DM2M4.js → chunk-ZNI3YJHS.js} +26 -6
- package/chunks/{chunk-565U2ANU.js → chunk-ZTTC7T4X.js} +1 -1
- package/chunks/{chunk-7OCIQNKX.js → chunk-ZW2EUO2A.js} +1 -1
- package/chunks/codex-subagent-executor-26XOHVKH.js +585 -0
- package/chunks/{config-utils-GPLIABL2.js → config-utils-JUG3MOYN.js} +68 -57
- package/chunks/{contextCommand-NCUQUDBY.js → contextCommand-6K3POZFA.js} +65 -54
- package/chunks/{core-runtime-WKYKWVYU.js → core-runtime-XQFZLA2V.js} +66 -55
- package/chunks/{create-sub-session-TGIX63YU.js → create-sub-session-4UJ6RM6W.js} +5 -2
- package/chunks/{create-sub-session-PPLXB3JJ.js → create-sub-session-T4IYIOC7.js} +178 -91
- package/chunks/{cron-create-GTPVMJCF.js → cron-create-6466RWSO.js} +2 -2
- package/chunks/{cron-delete-ZBK27Z4K.js → cron-delete-W4QUWHOA.js} +2 -2
- package/chunks/{cron-list-KTFKFDKC.js → cron-list-Q5LJ5PZE.js} +2 -2
- package/chunks/{daemon-2CKIAO3I.js → daemon-PHPJUXDZ.js} +4 -2
- package/chunks/{daemon-git-worktree-guard-73ZWOLKL.js → daemon-git-worktree-guard-5WEMZ64U.js} +65 -54
- package/chunks/{daemon-status-provider-OK7VONJG.js → daemon-status-provider-GMD7QD4T.js} +74 -63
- package/chunks/{daemon-trust-policy-CAUCREG2.js → daemon-trust-policy-IPBZES2Z.js} +71 -60
- package/chunks/{daemon-trust-policy-monitor-3Y36OOEQ.js → daemon-trust-policy-monitor-MHYEN7X7.js} +71 -60
- package/chunks/{de-UU2YTO37.js → de-OOLZAU2U.js} +1 -1
- package/chunks/{deferred-core-runtime-Q7WFWYD3.js → deferred-core-runtime-CY43FZNZ.js} +63 -52
- package/chunks/{discovery-XP4RMDUM.js → discovery-5KUEPR65.js} +2 -2
- package/chunks/{display-image-CTNHJRZC.js → display-image-6AZIHP3J.js} +3 -3
- package/chunks/{dist-F34J4FZX.js → dist-2QYIVNS6.js} +2 -5
- package/chunks/{dist-6YDUH3BB.js → dist-GIMQXYLI.js} +10 -631
- package/chunks/{dist-NP7QKLVG.js → dist-GUB7QRYA.js} +3 -6
- package/chunks/{dist-Y5KC3IHW.js → dist-L45UB6DG.js} +233 -35
- package/chunks/{dist-XLV33CLY.js → dist-MPUZZOG5.js} +5 -18
- package/chunks/{dist-ZDNJK74R.js → dist-PA7WPFVE.js} +6 -37
- package/chunks/{dist-F6JLAJLE.js → dist-T6DDPDLQ.js} +16 -36
- package/chunks/{dist-BNQVF565.js → dist-TFGETXFN.js} +14 -37
- package/chunks/{dist-UFTFGI6I.js → dist-VDLSBCLM.js} +2 -6
- package/chunks/{edit-YJD6IETK.js → edit-6NUP5IPX.js} +48 -38
- package/chunks/{en-YJNRUQG4.js → en-ZSZW3PZX.js} +4 -1
- package/chunks/{enter-worktree-YFTKHXHZ.js → enter-worktree-EETDMJRF.js} +5 -5
- package/chunks/{enterPlanMode-EFPVTWIH.js → enterPlanMode-AZHYHEII.js} +48 -38
- package/chunks/{environment-HP3AXFTB.js → environment-ON6GIQ4F.js} +66 -55
- package/chunks/{errors-22ON46G7.js → errors-DQE63SCC.js} +65 -54
- package/chunks/exec-66WQIVYU.js +505 -0
- package/chunks/{exit-worktree-NF2XEMES.js → exit-worktree-DIPJ6S55.js} +5 -5
- package/chunks/{exitPlanMode-MOQUNCBH.js → exitPlanMode-NHBV6LAI.js} +48 -38
- package/chunks/{fast-path-2X7BPMXX.js → fast-path-EPJSUZZC.js} +7 -7
- package/chunks/{fast-path-settings-SATXY3PD.js → fast-path-settings-XDYX7X5Z.js} +2 -2
- package/chunks/{fr-HKNWVXRJ.js → fr-JJWM2HUS.js} +1 -1
- package/chunks/{glob-Y7ACIB3P.js → glob-MNEXQ2NV.js} +51 -41
- package/chunks/{goal-tools-DABMICUC.js → goal-tools-D2A4QBCJ.js} +54 -40
- package/chunks/{grep-BLHF2S5D.js → grep-EFWPV3MM.js} +2 -2
- package/chunks/{handleAutoUpdate-MCAMHYDI.js → handleAutoUpdate-2RY3OQA6.js} +67 -56
- package/chunks/{i18n-C3GDCALP.js → i18n-HTHDB3I7.js} +64 -53
- package/chunks/{image-gen-XP4NNIYG.js → image-gen-2PHED3P4.js} +8 -6
- package/chunks/{initializer-4URDQL2G.js → initializer-JEVLJCQA.js} +71 -60
- package/chunks/{installationInfo-LBOL6SBV.js → installationInfo-ITRB6J4L.js} +63 -52
- package/chunks/{ja-GJS5RZGU.js → ja-L67TXFDJ.js} +1 -1
- package/chunks/list-KOUIMHT5.js +133 -0
- package/chunks/{list-agents-2CXPGJUE.js → list-agents-IY4NEWLP.js} +17 -7
- package/chunks/{llm-2KPNSAVY.js → llm-F7WHGESY.js} +132 -120
- package/chunks/{llm-content-generator-GR3FOHLB.js → llm-content-generator-NYQ2NAVA.js} +6 -5
- package/chunks/{loadedSettingsAdapter-DVKROEJD.js → loadedSettingsAdapter-HZUAX5CX.js} +71 -60
- package/chunks/{loggingContentGenerator-P4K6K5W4.js → loggingContentGenerator-WMNU7C5J.js} +70 -59
- package/chunks/{loop-wakeup-HL6XOWI4.js → loop-wakeup-ANX25YW2.js} +3 -3
- package/chunks/{ls-YV7RKLKY.js → ls-4XCMJNZF.js} +4 -4
- package/chunks/{lsp-NO3AMRZT.js → lsp-K5E2Y64R.js} +1 -1
- package/chunks/{managed-npm-update-VWBKHNIN.js → managed-npm-update-EJJB65QI.js} +63 -52
- package/chunks/mcp-I73R6HS3.js +127 -0
- package/chunks/{monitor-A255TNZR.js → monitor-T56GJNA4.js} +50 -40
- package/chunks/{nonInteractiveCli-LXGIKQAT.js → nonInteractiveCli-CKHHJ423.js} +120 -109
- package/chunks/{notebook-edit-5UYHS2DM.js → notebook-edit-W5TU3EZ3.js} +48 -38
- package/chunks/openai-WX26N5OJ.js +47 -0
- package/chunks/{openaiContentGenerator-A6MAMEO5.js → openaiContentGenerator-TH6YAWAH.js} +33 -25
- package/chunks/openaiResponsesContentGenerator-EWLWQPKS.js +1738 -0
- package/chunks/{pidfile-B7DZC4TP.js → pidfile-RCC6TCEM.js} +63 -52
- package/chunks/process-registry-X6ZCASEN.js +10 -0
- package/chunks/{processUtils-BPZ2MCZS.js → processUtils-DQDQBRMC.js} +2 -2
- package/chunks/{prompt-terminal-ledger-FYYTAOXS.js → prompt-terminal-ledger-2LXWAGWU.js} +64 -53
- package/chunks/{pt-FXMYXEUV.js → pt-77SBDL4B.js} +1 -1
- package/chunks/{qwenContentGenerator-4IOJFD4S.js → qwenContentGenerator-LG65Z2YV.js} +61 -49
- package/chunks/{qwenOAuth2-KX6LVYQ3.js → qwenOAuth2-PJ63CCFD.js} +7 -5
- package/chunks/{read-file-A4H4O3VQ.js → read-file-72HMRUT4.js} +12 -9
- package/chunks/{read-mcp-resource-D3N75DGF.js → read-mcp-resource-NPF44YSC.js} +1 -1
- package/chunks/{record-artifact-Q5CRGJTP.js → record-artifact-MDXCCW2J.js} +3 -3
- package/chunks/record-source-VJLKDGGR.js +22 -0
- package/chunks/{report-findings-TJ34R7QK.js → report-findings-CZTYMZTC.js} +4 -4
- package/chunks/{request-shutdown-LRKMTBAD.js → request-shutdown-KOZHPVZU.js} +5 -5
- package/chunks/{resumeHistoryUtils-YQQ43E4N.js → resumeHistoryUtils-S2Q3M3EH.js} +69 -58
- package/chunks/{ripGrep-W32NWFTA.js → ripGrep-B2I3L5CO.js} +17 -13
- package/chunks/{ru-RMHURE5U.js → ru-UYWHKWF2.js} +1 -1
- package/chunks/{run-qwen-serve-WBSWWIRV.js → run-qwen-serve-AOPYFCVP.js} +305 -132
- package/chunks/{runtime-VRVBX2E5.js → runtime-TZMHKZAP.js} +77 -66
- package/chunks/{scheduled-tasks-D65KJDA3.js → scheduled-tasks-7RL6ZOYT.js} +72 -60
- package/chunks/{scheduler-M2YPN7Z7.js → scheduler-D6RLOFNU.js} +65 -54
- package/chunks/{sdk-exporters-grpc-MXTVSE3C.js → sdk-exporters-grpc-Y2ZUQDUQ.js} +2 -2
- package/chunks/{sdk-exporters-http-7R2ARBPV.js → sdk-exporters-http-VWTF4W6K.js} +3 -3
- package/chunks/{sdk-impl-YOLO7LV4.js → sdk-impl-G6FVTBQZ.js} +9 -9
- package/chunks/{send-message-76BKWKFZ.js → send-message-MMZVSS7P.js} +12 -9
- package/chunks/{serve-BE3H2P6P.js → serve-HWWDYI37.js} +72 -61
- package/chunks/{server-FLY5JERG.js → server-MD2X5U5L.js} +3156 -564
- package/chunks/{session-JVN62R5K.js → session-AFUMFNN7.js} +124 -113
- package/chunks/{session-attachments-root-7ACGLHXA.js → session-attachments-root-QPN3YWTY.js} +63 -52
- package/chunks/{session-pr-refresh-TQS57SDK.js → session-pr-refresh-4Y2ANMJX.js} +72 -60
- package/chunks/{settings-D44YMZFT.js → settings-QQRQ2LR7.js} +74 -63
- package/chunks/{shell-3VE6I4V5.js → shell-NUYUYMVI.js} +48 -38
- package/chunks/{skill-FHEGRRZU.js → skill-KHLDVOXW.js} +68 -30
- package/chunks/{skill-settings-VHEJMBFL.js → skill-settings-INLEGDEZ.js} +70 -59
- package/chunks/{spawnChannel-T6MX2ZDN.js → spawnChannel-KBGZHW2G.js} +67 -56
- package/chunks/{standalone-update-QUGHFMCS.js → standalone-update-3QP5NDVJ.js} +65 -54
- package/chunks/{start-opentui-ui-IHIIZ2LE.js → start-opentui-ui-VBT3XDWN.js} +2682 -2153
- package/chunks/{startInteractiveUI-LR7K2ARZ.js → startInteractiveUI-AZHKCHMR.js} +1562 -2317
- package/chunks/{syntheticOutput-D2P5V6RG.js → syntheticOutput-KRASPDE3.js} +2 -2
- package/chunks/{task-create-MWXJFRRM.js → task-create-TNXNT7ZD.js} +8 -8
- package/chunks/{task-list-EYO3FE57.js → task-list-FHNIJDKT.js} +1 -1
- package/chunks/{task-stop-BFSKRTGV.js → task-stop-MG4ZMTEI.js} +1 -1
- package/chunks/{task-update-2JJJRHMT.js → task-update-4HU62CJT.js} +8 -8
- package/chunks/{team-create-GY3VFY47.js → team-create-K5DNSJXR.js} +50 -40
- package/chunks/{team-delete-IQZ6XGFI.js → team-delete-2T44GUNN.js} +1 -1
- package/chunks/{team-plan-approval-BQPGZOT5.js → team-plan-approval-2ZNAQT2A.js} +48 -38
- package/chunks/{terminal-image-renderer-YNYW5CQG.js → terminal-image-renderer-23CW4A6Q.js} +65 -54
- package/chunks/{theme-manager-U6CIK3GM.js → theme-manager-G2333AMH.js} +63 -52
- package/chunks/{todoWrite-5ERKFWAK.js → todoWrite-BO2GR5MN.js} +4 -4
- package/chunks/{tool-search-XI3QWD5I.js → tool-search-MKQCKXN5.js} +22 -15
- package/chunks/{total-session-admission-3SNSJJ32.js → total-session-admission-ENKTM2KX.js} +69 -58
- package/chunks/{trustedFolders-OVAQKNV5.js → trustedFolders-2ETDL7OD.js} +64 -53
- package/chunks/{update-relaunch-XV5O74E3.js → update-relaunch-FMVNN5KA.js} +5 -5
- package/chunks/{updateCheck-CHUYWD6L.js → updateCheck-KWRV5KLJ.js} +66 -55
- package/chunks/{useAutoAcceptIndicator-VKSVIXZC.js → useAutoAcceptIndicator-7AUXAIQF.js} +73 -62
- package/chunks/{validateNonInterActiveAuth-ZNUTD3E5.js → validateNonInterActiveAuth-NETKLLDV.js} +117 -106
- package/chunks/{version-EK7VAGSI.js → version-DACNN2ZM.js} +1 -1
- package/chunks/{web-fetch-24KZO763.js → web-fetch-CIVCRET4.js} +16 -12
- package/chunks/{web-search-CRNXKZ2X.js → web-search-GOHZRGMM.js} +389 -327
- package/chunks/{web-shell-static-BFDESDD4.js → web-shell-static-T7UGLVE4.js} +2 -7
- package/chunks/workflow-IL2FOALZ.js +1324 -0
- package/chunks/workspace-providers-status-YGXL6N5U.js +131 -0
- package/chunks/{workspace-registration-store-HKLJEDQX.js → workspace-registration-store-E4IAOFFZ.js} +3 -1
- package/chunks/{workspace-registry-7RDDOBLN.js → workspace-registry-KX6BIBYK.js} +69 -58
- package/chunks/{workspace-runtime-coordinator-LEPDPXJO.js → workspace-runtime-coordinator-2KYYGDDR.js} +72 -59
- package/chunks/{workspace-service-5IFDCNN3.js → workspace-service-5Q6LWBYR.js} +76 -65
- package/chunks/{workspace-skills-status-FJ3HNH4H.js → workspace-skills-status-PJZTFPVV.js} +72 -61
- package/chunks/{workspace-trust-reconciler-PQFHIWLR.js → workspace-trust-reconciler-HS6PWNEA.js} +77 -66
- package/chunks/{write-file-ERG67ZFX.js → write-file-JB3DRM7O.js} +50 -40
- package/chunks/{zh-VBFCRQBL.js → zh-7UJA4ICT.js} +4 -1
- package/chunks/{zh-TW-N2TBF2F2.js → zh-TW-RV24PWUI.js} +4 -1
- package/chunks/{zoom-image-WQYEC3SR.js → zoom-image-AVHQFOOQ.js} +12 -9
- package/cli.js +16 -16
- package/codeModeHost.js +4425 -0
- package/export-transcript-document.css +1 -0
- package/export-transcript-document.js +164 -165
- package/locales/ca.js +2 -2
- package/locales/de.js +2 -2
- package/locales/en.js +5 -2
- package/locales/fr.js +2 -2
- package/locales/ja.js +2 -2
- package/locales/pt.js +2 -2
- package/locales/ru.js +2 -2
- package/locales/zh-TW.js +5 -2
- package/locales/zh.js +5 -2
- package/package.json +6 -4
- package/web-shell/assets/{abnfDiagram-VCTEODGH-BRLgQbnT.js → abnfDiagram-VCTEODGH-BH2nK5Z_.js} +1 -1
- package/web-shell/assets/{arc-qAF9_XsR.js → arc-CUUQ6krv.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-BorUttEz.js → architectureDiagram-5GKGNRK7-CJjiRuGx.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-Bj0qZVxu.js → blockDiagram-NRAW4CY4-GCDyU9ZX.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BTqJis32.js → c4Diagram-UCG6FXSJ-C68MiN6h.js} +1 -1
- package/web-shell/assets/channel-DauVlmdF.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-RrQ5X8m-.js → chunk-2Q5K7J3B-_8B6frXZ.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-uUjDl8wO.js → chunk-5VM5RSS4-CroSinX7.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-C3JhpyzI.js → chunk-F27PBJKO-CGn4Z0Fx.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-C8ZNFs7F.js → chunk-G27WJ6UU-BI5nLQcf.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-DNpXtEOs.js → chunk-JWPE2WC7-CYJH0FuH.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-DagA2ZLw.js → chunk-LCL6LL3I-DjWZUqA1.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-R23uH7Xm.js → chunk-POPQ4Y6H-DcTkIHm8.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-Qz9RN_BR.js → chunk-SVP7TREG-E8sZT5uK.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-jYb1_hni.js → chunk-XXDRQBXY-CurjPKw_.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-BuIh7bj1.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-BuIh7bj1.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-Cv2OunpE.js → cose-bilkent-JH36ORCC-CJEnNhth.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-LH42KFJx.js → cynefin-OW5HDTMX-jwEkm0yw.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-Dha4_OoR.js → cynefinDiagram-5FMLGOSQ-B-OVQ6AO.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-Br5lnUKD.js → dagre-3AP2YEHR-CKKK9WNR.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-dpKq2bBX.js → diagram-S7CK7UJ4-D486veFQ.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-BAgHWpXr.js → diagram-UQ7AKVKN-C3GujqHv.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-GRRzpyE2.js → diagram-VSXAHHWV-BrOTDwuU.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-BNFiaYpG.js → diagram-VX7I27RA-C4D9kWE3.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-BisZzB_h.js → diagram-Z3DM3KII-7rAManT0.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-B1xbwycf.js → ebnfDiagram-PWID7BFC-CqVzKOdr.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-CQMzbGE5.js → erDiagram-SSCWMZ5O-D2s08fc_.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-CZ_Zondl.js → flowDiagram-A5DVABFB-CrKtBxB2.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BTh2ShxS.js → ganttDiagram-EL5Y4UJY-CD1CKdlt.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-oHOB-Uxt.js → gitGraphDiagram-WWUBYQGX-CHDXdVNn.js} +1 -1
- package/web-shell/assets/index-D8tzgUOC.css +36 -0
- package/web-shell/assets/{index-DWoFMu5x.js → index-DWz95m74.js} +1 -1
- package/web-shell/assets/index-cDFf68Wd.js +2204 -0
- package/web-shell/assets/{infoDiagram-RXCK75RN-C0QpudbG.js → infoDiagram-RXCK75RN-Cr1oLCwe.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-a6B741uT.js → ishikawaDiagram-5VMMS53U--RghV1mm.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-Dbht9ICp.js → journeyDiagram-EYS64GPL-MN1ZkGW8.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-D4OFR8-h.js → kanban-definition-3QL26DDD-DL05VTn0.js} +1 -1
- package/web-shell/assets/{layout-Dvdh5jRH.js → layout-D_TvQzvn.js} +1 -1
- package/web-shell/assets/{linear-Dvc6KIW2.js → linear-B_0OH6XF.js} +1 -1
- package/web-shell/assets/{mermaid.core-CB36RfIb.js → mermaid.core-B9Nklh9I.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-Fmqo1CjP.js → mindmap-definition-FBJOCRG2-CevIQ0LR.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-CCxYBoA4.js → pegDiagram-XKGWAZYB-DQ8PIv0d.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-BVHKQFzt.js → pieDiagram-E7YTZNPT-BVTV1pPe.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-l95IznwR.js → quadrantDiagram-AXDQQJYC-DHN6nhpe.js} +1 -1
- package/web-shell/assets/qwen-code-notification-BRVagufF.png +0 -0
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-BlLdRdXp.js → railroadDiagram-O6MQD6OU-8HOyX0u-.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BkDLBR5w.js → requirementDiagram-EFPCY7ZU-9W4_14i8.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-jAIqRp65.js → sankeyDiagram-P5KCCOFB-DSUBB2XP.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-f-soZYPr.js → sequenceDiagram-WJ2MYXX4-DD3jH6Jn.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-BzOuAfB2.js → sizeCapture-X5ZJPWSS-RAFTU3Cz.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-BPLSs12r.js → stateDiagram-HBIQ2CUA-Drk-oZ2x.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-QzYteVIm.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-D-9E_RIR.js → swimlanes-XN3QIQJK-Cy2nlOGx.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-xTr-HG26.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-CT56K-gV.js → timeline-definition-24CTP7MA-B7outYof.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-B-vi4IyO.js → vennDiagram-4TSXK5OY-Di_u1Ic6.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-C9O7Ju98.js → wardleyDiagram-VM6X3IG4-DYocuCAM.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-6d8w3jg2.js → xychartDiagram-S5SC5T6Z-AADDse54.js} +1 -1
- package/web-shell/index.html +29 -5
- package/chunks/chunk-V7RNNPGC.js +0 -44
- package/chunks/list-JOGBAC2R.js +0 -122
- package/chunks/mcp-6YYNSYLK.js +0 -116
- package/chunks/workflow-HD5NYMW5.js +0 -2907
- package/chunks/workspace-providers-status-MAM42IZS.js +0 -120
- package/web-shell/assets/channel-COIuCrVH.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DoX6OYqu.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DoX6OYqu.js +0 -1
- package/web-shell/assets/index-CI1ysIEv.js +0 -2154
- package/web-shell/assets/index-CpxXGH-8.css +0 -36
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-IRul-LaT.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6lgKepA.js +0 -8
- package/chunks/{chunk-JA5CBKRP.js → chunk-7NXSVSFB.js} +0 -0
- package/chunks/{open-with-auth-6MVIHMXB.js → open-with-auth-XFCCJOO6.js} +3 -3
|
@@ -51,6 +51,7 @@ var KNOWN_RECORD_SUBTYPES = /* @__PURE__ */ new Set([
|
|
|
51
51
|
"file_history_snapshot",
|
|
52
52
|
"session_source",
|
|
53
53
|
"session_model",
|
|
54
|
+
"session_sources_snapshot",
|
|
54
55
|
"branch_checkpoint",
|
|
55
56
|
"goal_state",
|
|
56
57
|
"goal_runtime",
|
|
@@ -132,7 +133,7 @@ function diagnostic(code, message, affectsCompleteness, fields = {}, severity =
|
|
|
132
133
|
}
|
|
133
134
|
__name(diagnostic, "diagnostic");
|
|
134
135
|
function isTranscriptConversationRecord(record) {
|
|
135
|
-
return !isTranscriptArtifactRecord(record);
|
|
136
|
+
return !isTranscriptArtifactRecord(record) && !(record.type === "system" && record.subtype === "session_sources_snapshot");
|
|
136
137
|
}
|
|
137
138
|
__name(isTranscriptConversationRecord, "isTranscriptConversationRecord");
|
|
138
139
|
function isTranscriptArtifactRecord(record) {
|
|
@@ -448,6 +449,23 @@ var MAX_PERSISTED_MIME_CHARS = 120;
|
|
|
448
449
|
var MAX_PERSISTED_FIELD_CHARS = 200;
|
|
449
450
|
var MAX_PERSISTED_TIMESTAMP_CHARS = 64;
|
|
450
451
|
var SECRET_TOKEN_VALUE_PATTERN = /(?:^|\s)(?:bearer\s+\S{8,}|sk-[A-Za-z0-9_-]{12,}|(?:gh[pousr]|github_pat)_[A-Za-z0-9_/-]{12,}|[a-f0-9]{40,}|[A-Za-z0-9+/]{48,}={0,2})(?:$|\s)/i;
|
|
452
|
+
function getWebPreviewSnapshotId(artifact) {
|
|
453
|
+
const id = /^preview-([0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})$/.exec(
|
|
454
|
+
artifact.managedId ?? ""
|
|
455
|
+
)?.[1];
|
|
456
|
+
const sha256 = artifact.metadata?.[PUBLISHED_CONTENT_SHA256_METADATA_KEY];
|
|
457
|
+
if (!id || artifact.kind !== "html" || artifact.storage !== "published" || artifact.metadata?.["artifactType"] !== "web_preview_snapshot" || typeof sha256 !== "string" || !/^[0-9a-f]{64}$/.test(sha256) || artifact.source !== void 0 && (artifact.source !== "tool" || artifact.toolName?.toLowerCase() !== "artifact") || artifact.toolName !== void 0 && artifact.toolName.toLowerCase() !== "artifact")
|
|
458
|
+
return void 0;
|
|
459
|
+
try {
|
|
460
|
+
const url = new URL(artifact.url ?? "");
|
|
461
|
+
if (url.protocol === "file:" && !url.host && !url.search && !url.hash && url.pathname.endsWith(`/artifacts/snapshots/${id}/index.html`))
|
|
462
|
+
return id;
|
|
463
|
+
} catch {
|
|
464
|
+
return void 0;
|
|
465
|
+
}
|
|
466
|
+
return void 0;
|
|
467
|
+
}
|
|
468
|
+
__name(getWebPreviewSnapshotId, "getWebPreviewSnapshotId");
|
|
451
469
|
function isSessionArtifactRecord(record) {
|
|
452
470
|
return isTranscriptArtifactRecord(record);
|
|
453
471
|
}
|
|
@@ -471,7 +489,7 @@ function selectActiveSideArtifactRecordUuids(records, activeRecordUuids) {
|
|
|
471
489
|
if (activeUuids.has(record.uuid)) {
|
|
472
490
|
nextActiveUuid = record.uuid;
|
|
473
491
|
nextBlockingUuid = void 0;
|
|
474
|
-
} else if (!isSessionArtifactRecord(record) && !(record.type === "system" && record.subtype === "custom_title")) {
|
|
492
|
+
} else if (!isSessionArtifactRecord(record) && !(record.type === "system" && (record.subtype === "custom_title" || record.subtype === "session_sources_snapshot"))) {
|
|
475
493
|
nextBlockingUuid = record.uuid;
|
|
476
494
|
}
|
|
477
495
|
}
|
|
@@ -796,7 +814,7 @@ function isForkSafeArtifact(artifact) {
|
|
|
796
814
|
if (artifact.metadata && hasRestoreUnsafeMetadata(artifact.metadata)) {
|
|
797
815
|
return false;
|
|
798
816
|
}
|
|
799
|
-
if (artifact.url && hasRestoreUnsafeUrl(artifact.url)) {
|
|
817
|
+
if (artifact.url && hasRestoreUnsafeUrl(artifact.url) && !getWebPreviewSnapshotId(artifact)) {
|
|
800
818
|
return false;
|
|
801
819
|
}
|
|
802
820
|
return true;
|
|
@@ -1232,6 +1250,297 @@ function getNonNegativeInteger(record, key) {
|
|
|
1232
1250
|
}
|
|
1233
1251
|
__name(getNonNegativeInteger, "getNonNegativeInteger");
|
|
1234
1252
|
|
|
1253
|
+
// packages/core/src/tools/artifact/html.ts
|
|
1254
|
+
init_esbuild_shims();
|
|
1255
|
+
var MAX_ARTIFACT_BYTES = 16 * 1024 * 1024;
|
|
1256
|
+
var CSS_RESET = `*,*::before,*::after{box-sizing:border-box}
|
|
1257
|
+
html{-webkit-text-size-adjust:100%}
|
|
1258
|
+
body{margin:0;padding:1.5rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.5;color:#1a1a1a;background:#fff}
|
|
1259
|
+
img,svg,video,canvas{max-width:100%;height:auto}
|
|
1260
|
+
pre,table{max-width:100%;overflow-x:auto}
|
|
1261
|
+
:where(a){color:#0969da}`;
|
|
1262
|
+
var DEFAULT_TITLE = "Artifact";
|
|
1263
|
+
function sanitizeArtifactTitle(raw) {
|
|
1264
|
+
const cleaned = (raw ?? "").replace(/\s+/g, " ").trim().slice(0, 120);
|
|
1265
|
+
return cleaned || DEFAULT_TITLE;
|
|
1266
|
+
}
|
|
1267
|
+
__name(sanitizeArtifactTitle, "sanitizeArtifactTitle");
|
|
1268
|
+
function escapeForTitle(s) {
|
|
1269
|
+
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
1270
|
+
}
|
|
1271
|
+
__name(escapeForTitle, "escapeForTitle");
|
|
1272
|
+
function validateSelfContained(fragment) {
|
|
1273
|
+
if (!fragment.trim()) {
|
|
1274
|
+
return "Artifact file is empty \u2014 write the page content (a body-only HTML fragment) first.";
|
|
1275
|
+
}
|
|
1276
|
+
const scan = normalizeAttributeQuotes(fragment);
|
|
1277
|
+
const head = fragment.replace(/^\s+/, "").replace(/^(?:<!--[\s\S]*?-->\s*)+/, "");
|
|
1278
|
+
const wrapperTag = /^(?:<!doctype\b|<html[\s>]|<head[\s>]|<body[\s>])/i.exec(
|
|
1279
|
+
head
|
|
1280
|
+
);
|
|
1281
|
+
if (wrapperTag) {
|
|
1282
|
+
return `Write a body-only fragment \u2014 it starts with a full-document tag (${wrapperTag[0].trim()}). Omit <!doctype>, <html>, <head>, and <body>; they are added at publish time.`;
|
|
1283
|
+
}
|
|
1284
|
+
const extResource = /\b(?:src|srcset|poster)\s*=\s*["']?\s*(?:https?:)?\/\//i.exec(scan) ?? /<link\b[^>]*\bhref\s*=\s*["']?\s*(?:https?:)?\/\//i.exec(scan);
|
|
1285
|
+
if (extResource) {
|
|
1286
|
+
return `Artifact must be self-contained \u2014 found an external reference (${truncate(extResource[0])}). Inline scripts/styles and embed assets as data: URIs.`;
|
|
1287
|
+
}
|
|
1288
|
+
const jsUri = /\b(?:href|src)\s*=\s*["']?\s*javascript\s*:/i.exec(scan);
|
|
1289
|
+
if (jsUri) {
|
|
1290
|
+
return `Artifact must be self-contained \u2014 found a javascript: URI (${truncate(jsUri[0])}). Use inline <script> blocks instead.`;
|
|
1291
|
+
}
|
|
1292
|
+
const extScript = /\b(?:fetch|WebSocket|XMLHttpRequest)\s*\(\s*["']\s*(?:https?|wss?):\/\//i.exec(
|
|
1293
|
+
scan
|
|
1294
|
+
) ?? /\bimport\s*\(\s*["'](?:https?:)?\/\//i.exec(scan) ?? /\bwindow\.open\s*\(/i.exec(scan) ?? /\blocation\.\w+\s*[=(]/i.exec(scan) ?? /\bnavigator\.sendBeacon\s*\(\s*["']\s*(?:https?:)?\/\//i.exec(scan);
|
|
1295
|
+
if (extScript) {
|
|
1296
|
+
return `Artifact must be self-contained \u2014 found browser network egress (${truncate(extScript[0])}). Embed data in the artifact instead of fetching it at runtime.`;
|
|
1297
|
+
}
|
|
1298
|
+
const metaRefresh = /<meta\b[^>]*http-equiv\s*=\s*["']?refresh["']?[^>]*\burl\s*=\s*(?:https?:)?\/\//i.exec(
|
|
1299
|
+
scan
|
|
1300
|
+
);
|
|
1301
|
+
if (metaRefresh) {
|
|
1302
|
+
return `Artifact must be self-contained \u2014 found a meta refresh redirect (${truncate(metaRefresh[0])}).`;
|
|
1303
|
+
}
|
|
1304
|
+
const extCss = /(?:@import\s+(?:url\()?|url\()\s*["']?\s*(?:https?:)?\/\//i.exec(scan);
|
|
1305
|
+
if (extCss) {
|
|
1306
|
+
return `Artifact must be self-contained \u2014 found an external CSS reference (${truncate(extCss[0])}). Inline CSS and embed fonts/images as data: URIs.`;
|
|
1307
|
+
}
|
|
1308
|
+
return null;
|
|
1309
|
+
}
|
|
1310
|
+
__name(validateSelfContained, "validateSelfContained");
|
|
1311
|
+
function normalizeAttributeQuotes(s) {
|
|
1312
|
+
return s.replace(/"|"|"/gi, '"').replace(/'|'|'/gi, "'");
|
|
1313
|
+
}
|
|
1314
|
+
__name(normalizeAttributeQuotes, "normalizeAttributeQuotes");
|
|
1315
|
+
function truncate(s, max = 60) {
|
|
1316
|
+
const t = s.replace(/\s+/g, " ").trim();
|
|
1317
|
+
return t.length > max ? `${t.slice(0, max)}\u2026` : t;
|
|
1318
|
+
}
|
|
1319
|
+
__name(truncate, "truncate");
|
|
1320
|
+
function wrapArtifactHtml(bodyFragment, title) {
|
|
1321
|
+
const safeTitle = escapeForTitle(sanitizeArtifactTitle(title));
|
|
1322
|
+
return `<!doctype html>
|
|
1323
|
+
<html lang="en">
|
|
1324
|
+
<head>
|
|
1325
|
+
<meta charset="utf-8">
|
|
1326
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
1327
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; font-src data:; media-src data:; connect-src 'none'; form-action 'none'; base-uri 'none'; frame-ancestors 'none'; sandbox allow-scripts;">
|
|
1328
|
+
<title>${safeTitle}</title>
|
|
1329
|
+
<style>${CSS_RESET}</style>
|
|
1330
|
+
</head>
|
|
1331
|
+
<body>
|
|
1332
|
+
${bodyFragment}
|
|
1333
|
+
</body>
|
|
1334
|
+
</html>
|
|
1335
|
+
`;
|
|
1336
|
+
}
|
|
1337
|
+
__name(wrapArtifactHtml, "wrapArtifactHtml");
|
|
1338
|
+
function byteLength(s) {
|
|
1339
|
+
return Buffer.byteLength(s, "utf8");
|
|
1340
|
+
}
|
|
1341
|
+
__name(byteLength, "byteLength");
|
|
1342
|
+
|
|
1343
|
+
// packages/core/src/tools/artifact/artifact-snapshots.ts
|
|
1344
|
+
init_esbuild_shims();
|
|
1345
|
+
import { createHash as createHash2, randomUUID } from "node:crypto";
|
|
1346
|
+
import { constants, promises as fs } from "node:fs";
|
|
1347
|
+
import path from "node:path";
|
|
1348
|
+
import { pathToFileURL } from "node:url";
|
|
1349
|
+
var SNAPSHOT_REFERENCES_METADATA_KEY = "qwen.snapshot.references";
|
|
1350
|
+
async function saveArtifactSnapshot(html, title, publishedUrl, sessionId, runtimeBaseDir) {
|
|
1351
|
+
const id = randomUUID();
|
|
1352
|
+
const root = path.join(runtimeBaseDir, "artifacts", "snapshots");
|
|
1353
|
+
await fs.mkdir(root, { recursive: true });
|
|
1354
|
+
const dir = path.join(root, id);
|
|
1355
|
+
await fs.mkdir(dir);
|
|
1356
|
+
const file = path.join(dir, "index.html");
|
|
1357
|
+
try {
|
|
1358
|
+
const references = path.join(dir, "references");
|
|
1359
|
+
await fs.mkdir(references);
|
|
1360
|
+
await fs.writeFile(
|
|
1361
|
+
path.join(references, snapshotReference(sessionId)),
|
|
1362
|
+
"",
|
|
1363
|
+
{
|
|
1364
|
+
flag: "wx",
|
|
1365
|
+
mode: 384,
|
|
1366
|
+
flush: true
|
|
1367
|
+
}
|
|
1368
|
+
);
|
|
1369
|
+
await fs.writeFile(file, html, {
|
|
1370
|
+
encoding: "utf8",
|
|
1371
|
+
flag: "wx",
|
|
1372
|
+
mode: 384,
|
|
1373
|
+
flush: true
|
|
1374
|
+
});
|
|
1375
|
+
await syncSnapshotDirectory(references);
|
|
1376
|
+
await syncSnapshotDirectory(dir);
|
|
1377
|
+
await syncSnapshotDirectory(root);
|
|
1378
|
+
} catch (error) {
|
|
1379
|
+
await fs.rm(dir, { recursive: true, force: true }).catch(() => void 0);
|
|
1380
|
+
throw error;
|
|
1381
|
+
}
|
|
1382
|
+
return {
|
|
1383
|
+
kind: "html",
|
|
1384
|
+
storage: "published",
|
|
1385
|
+
title,
|
|
1386
|
+
url: pathToFileURL(file).href,
|
|
1387
|
+
managedId: `preview-${id}`,
|
|
1388
|
+
mimeType: "text/html",
|
|
1389
|
+
sizeBytes: Buffer.byteLength(html, "utf8"),
|
|
1390
|
+
metadata: {
|
|
1391
|
+
artifactType: "web_preview_snapshot",
|
|
1392
|
+
[SNAPSHOT_REFERENCES_METADATA_KEY]: 1,
|
|
1393
|
+
publishedUrl,
|
|
1394
|
+
[PUBLISHED_CONTENT_SHA256_METADATA_KEY]: createHash2("sha256").update(html).digest("hex")
|
|
1395
|
+
}
|
|
1396
|
+
};
|
|
1397
|
+
}
|
|
1398
|
+
__name(saveArtifactSnapshot, "saveArtifactSnapshot");
|
|
1399
|
+
async function readArtifactSnapshot(artifact, runtimeBaseDir) {
|
|
1400
|
+
const id = getWebPreviewSnapshotId(artifact);
|
|
1401
|
+
const sha256 = artifact.metadata?.[PUBLISHED_CONTENT_SHA256_METADATA_KEY];
|
|
1402
|
+
const unavailable = /* @__PURE__ */ __name(() => new Error("Saved webpage version is unavailable."), "unavailable");
|
|
1403
|
+
if (!id) throw unavailable();
|
|
1404
|
+
const root = path.join(runtimeBaseDir, "artifacts", "snapshots");
|
|
1405
|
+
const file = path.join(root, id, "index.html");
|
|
1406
|
+
if (artifact.url !== pathToFileURL(file).href) throw unavailable();
|
|
1407
|
+
const realRoot = await fs.realpath(root);
|
|
1408
|
+
if (await fs.realpath(file) !== path.join(realRoot, id, "index.html")) {
|
|
1409
|
+
throw unavailable();
|
|
1410
|
+
}
|
|
1411
|
+
const handle = await fs.open(
|
|
1412
|
+
file,
|
|
1413
|
+
// O_NOFOLLOW refuses a symlink swapped in after the realpath check, and
|
|
1414
|
+
// O_NONBLOCK keeps a FIFO swapped into the same window from blocking the
|
|
1415
|
+
// open: the path is only proven to be a regular file by the fstat below.
|
|
1416
|
+
constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK
|
|
1417
|
+
);
|
|
1418
|
+
try {
|
|
1419
|
+
const stat = await handle.stat();
|
|
1420
|
+
if (!stat.isFile() || stat.size > MAX_ARTIFACT_BYTES) throw unavailable();
|
|
1421
|
+
const bytes = Buffer.alloc(stat.size + 1);
|
|
1422
|
+
let length = 0;
|
|
1423
|
+
while (length < bytes.length) {
|
|
1424
|
+
const { bytesRead } = await handle.read(
|
|
1425
|
+
bytes,
|
|
1426
|
+
length,
|
|
1427
|
+
bytes.length - length
|
|
1428
|
+
);
|
|
1429
|
+
if (bytesRead === 0) break;
|
|
1430
|
+
length += bytesRead;
|
|
1431
|
+
}
|
|
1432
|
+
const content = bytes.subarray(0, length);
|
|
1433
|
+
if (length !== stat.size || createHash2("sha256").update(content).digest("hex") !== sha256) {
|
|
1434
|
+
throw unavailable();
|
|
1435
|
+
}
|
|
1436
|
+
return content.toString("utf8");
|
|
1437
|
+
} finally {
|
|
1438
|
+
await handle.close();
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
__name(readArtifactSnapshot, "readArtifactSnapshot");
|
|
1442
|
+
function snapshotReference(sessionId, operationId) {
|
|
1443
|
+
const owner = createHash2("sha256").update(sessionId).digest("hex");
|
|
1444
|
+
return operationId ? `${owner}-${createHash2("sha256").update(operationId).digest("hex")}` : owner;
|
|
1445
|
+
}
|
|
1446
|
+
__name(snapshotReference, "snapshotReference");
|
|
1447
|
+
async function syncSnapshotDirectory(directory) {
|
|
1448
|
+
try {
|
|
1449
|
+
const handle = await fs.open(directory, "r");
|
|
1450
|
+
try {
|
|
1451
|
+
await handle.sync();
|
|
1452
|
+
} finally {
|
|
1453
|
+
await handle.close();
|
|
1454
|
+
}
|
|
1455
|
+
} catch (error) {
|
|
1456
|
+
if (process.platform !== "win32") throw error;
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
__name(syncSnapshotDirectory, "syncSnapshotDirectory");
|
|
1460
|
+
async function snapshotDirectory(artifact, runtimeBaseDir) {
|
|
1461
|
+
const id = getWebPreviewSnapshotId(artifact);
|
|
1462
|
+
if (!id) return void 0;
|
|
1463
|
+
const root = path.join(runtimeBaseDir, "artifacts", "snapshots");
|
|
1464
|
+
const dir = path.join(root, id);
|
|
1465
|
+
if (artifact.url !== pathToFileURL(path.join(dir, "index.html")).href) {
|
|
1466
|
+
return void 0;
|
|
1467
|
+
}
|
|
1468
|
+
if (artifact.metadata?.[SNAPSHOT_REFERENCES_METADATA_KEY] !== 1)
|
|
1469
|
+
return void 0;
|
|
1470
|
+
const realRoot = await fs.realpath(root);
|
|
1471
|
+
if (await fs.realpath(dir) !== path.join(realRoot, id)) return void 0;
|
|
1472
|
+
if (await fs.realpath(path.join(dir, "index.html")) !== path.join(realRoot, id, "index.html"))
|
|
1473
|
+
return void 0;
|
|
1474
|
+
if (await fs.realpath(path.join(dir, "references")) !== path.join(realRoot, id, "references")) {
|
|
1475
|
+
return void 0;
|
|
1476
|
+
}
|
|
1477
|
+
return dir;
|
|
1478
|
+
}
|
|
1479
|
+
__name(snapshotDirectory, "snapshotDirectory");
|
|
1480
|
+
async function retainArtifactSnapshot(artifact, runtimeBaseDir, sessionId, operationId) {
|
|
1481
|
+
try {
|
|
1482
|
+
const dir = await snapshotDirectory(artifact, runtimeBaseDir);
|
|
1483
|
+
if (!dir) return;
|
|
1484
|
+
const references = path.join(dir, "references");
|
|
1485
|
+
const owner = snapshotReference(sessionId);
|
|
1486
|
+
if (!operationId && (await fs.readdir(references)).some(
|
|
1487
|
+
(entry) => entry === owner || entry.startsWith(`${owner}-`)
|
|
1488
|
+
))
|
|
1489
|
+
return;
|
|
1490
|
+
await fs.writeFile(
|
|
1491
|
+
path.join(references, snapshotReference(sessionId, operationId)),
|
|
1492
|
+
"",
|
|
1493
|
+
{ flag: "wx", mode: 384, flush: true }
|
|
1494
|
+
);
|
|
1495
|
+
await syncSnapshotDirectory(references);
|
|
1496
|
+
} catch (error) {
|
|
1497
|
+
const code = error.code;
|
|
1498
|
+
if (code !== "EEXIST" && !(code === "ENOENT" && !operationId)) throw error;
|
|
1499
|
+
}
|
|
1500
|
+
}
|
|
1501
|
+
__name(retainArtifactSnapshot, "retainArtifactSnapshot");
|
|
1502
|
+
async function deleteArtifactSnapshot(artifact, runtimeBaseDir, sessionId, operationId, assertCleanupOwned) {
|
|
1503
|
+
try {
|
|
1504
|
+
const dir = await snapshotDirectory(artifact, runtimeBaseDir);
|
|
1505
|
+
if (!dir) return;
|
|
1506
|
+
await releaseSnapshotDirectory(
|
|
1507
|
+
dir,
|
|
1508
|
+
sessionId,
|
|
1509
|
+
operationId,
|
|
1510
|
+
assertCleanupOwned
|
|
1511
|
+
);
|
|
1512
|
+
} catch {
|
|
1513
|
+
assertCleanupOwned?.();
|
|
1514
|
+
}
|
|
1515
|
+
}
|
|
1516
|
+
__name(deleteArtifactSnapshot, "deleteArtifactSnapshot");
|
|
1517
|
+
async function releaseSnapshotDirectory(dir, sessionId, operationId, assertCleanupOwned) {
|
|
1518
|
+
const references = path.join(dir, "references");
|
|
1519
|
+
const owner = snapshotReference(sessionId, operationId);
|
|
1520
|
+
let released = false;
|
|
1521
|
+
for (const reference of await fs.readdir(references)) {
|
|
1522
|
+
if (reference === owner || !operationId && reference.startsWith(`${owner}-`)) {
|
|
1523
|
+
assertCleanupOwned?.();
|
|
1524
|
+
await fs.unlink(path.join(references, reference));
|
|
1525
|
+
released = true;
|
|
1526
|
+
}
|
|
1527
|
+
}
|
|
1528
|
+
if (!released) return;
|
|
1529
|
+
try {
|
|
1530
|
+
assertCleanupOwned?.();
|
|
1531
|
+
await fs.rmdir(references);
|
|
1532
|
+
} catch (error) {
|
|
1533
|
+
if (error.code === "ENOTEMPTY") return;
|
|
1534
|
+
throw error;
|
|
1535
|
+
}
|
|
1536
|
+
const file = path.join(dir, "index.html");
|
|
1537
|
+
assertCleanupOwned?.();
|
|
1538
|
+
await fs.unlink(file);
|
|
1539
|
+
assertCleanupOwned?.();
|
|
1540
|
+
await fs.rmdir(dir);
|
|
1541
|
+
}
|
|
1542
|
+
__name(releaseSnapshotDirectory, "releaseSnapshotDirectory");
|
|
1543
|
+
|
|
1235
1544
|
export {
|
|
1236
1545
|
TranscriptRecordPreparationError,
|
|
1237
1546
|
stripGeneratedAttachmentTokens,
|
|
@@ -1249,6 +1558,7 @@ export {
|
|
|
1249
1558
|
WORKSPACE_CONTENT_MTIME_MS_METADATA_KEY,
|
|
1250
1559
|
WORKSPACE_CONTENT_SIZE_BYTES_METADATA_KEY,
|
|
1251
1560
|
PUBLISHED_CONTENT_SHA256_METADATA_KEY,
|
|
1561
|
+
getWebPreviewSnapshotId,
|
|
1252
1562
|
isSessionArtifactRecord,
|
|
1253
1563
|
selectActiveSideArtifactRecordUuids,
|
|
1254
1564
|
stableSessionArtifactId,
|
|
@@ -1260,7 +1570,16 @@ export {
|
|
|
1260
1570
|
isPrototypeMetadataKey,
|
|
1261
1571
|
isReservedWorkspaceMetadataKey,
|
|
1262
1572
|
isAdoptableContentFingerprintKey,
|
|
1263
|
-
metadataBudgetBytes
|
|
1573
|
+
metadataBudgetBytes,
|
|
1574
|
+
MAX_ARTIFACT_BYTES,
|
|
1575
|
+
sanitizeArtifactTitle,
|
|
1576
|
+
validateSelfContained,
|
|
1577
|
+
wrapArtifactHtml,
|
|
1578
|
+
byteLength,
|
|
1579
|
+
saveArtifactSnapshot,
|
|
1580
|
+
readArtifactSnapshot,
|
|
1581
|
+
retainArtifactSnapshot,
|
|
1582
|
+
deleteArtifactSnapshot
|
|
1264
1583
|
};
|
|
1265
1584
|
/**
|
|
1266
1585
|
* @license
|
|
@@ -1272,3 +1591,8 @@ export {
|
|
|
1272
1591
|
* Copyright 2026 Qwen Team
|
|
1273
1592
|
* SPDX-License-Identifier: Apache-2.0
|
|
1274
1593
|
*/
|
|
1594
|
+
/**
|
|
1595
|
+
* @license
|
|
1596
|
+
* Copyright 2025 Google LLC
|
|
1597
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
1598
|
+
*/
|
|
@@ -4,9 +4,6 @@ import {
|
|
|
4
4
|
isDocumentNavigation,
|
|
5
5
|
require_express
|
|
6
6
|
} from "./chunk-SVWWF5TZ.js";
|
|
7
|
-
import {
|
|
8
|
-
isLoopbackAddress
|
|
9
|
-
} from "./chunk-DMEUXLSS.js";
|
|
10
7
|
import {
|
|
11
8
|
writeStderrLine
|
|
12
9
|
} from "./chunk-7FA2II6K.js";
|
|
@@ -39,6 +36,7 @@ var WEB_SHELL_CSP_DIRECTIVES = [
|
|
|
39
36
|
"style-src 'self' 'unsafe-inline'",
|
|
40
37
|
"font-src 'self' data:",
|
|
41
38
|
"img-src 'self' data: blob:",
|
|
39
|
+
"media-src 'self' data:",
|
|
42
40
|
"connect-src 'self'",
|
|
43
41
|
"worker-src 'self' blob:",
|
|
44
42
|
// base-uri does NOT fall back to default-src; lock it so an injected <base>
|
|
@@ -46,36 +44,6 @@ var WEB_SHELL_CSP_DIRECTIVES = [
|
|
|
46
44
|
// attacker origin.
|
|
47
45
|
"base-uri 'none'"
|
|
48
46
|
];
|
|
49
|
-
function loopbackSandboxOrigins(hostHeader) {
|
|
50
|
-
const port = portFromHostHeader(hostHeader);
|
|
51
|
-
const suffix = port ? `:${port}` : "";
|
|
52
|
-
const hosts = ["localhost", "127.0.0.1"];
|
|
53
|
-
try {
|
|
54
|
-
const requestHostname = new URL(`http://${hostHeader}`).hostname;
|
|
55
|
-
if (isLoopbackAddress(requestHostname) && !requestHostname.includes(":") && !hosts.includes(requestHostname)) {
|
|
56
|
-
hosts.push(requestHostname);
|
|
57
|
-
}
|
|
58
|
-
} catch {
|
|
59
|
-
}
|
|
60
|
-
return ["http", "https"].flatMap(
|
|
61
|
-
(scheme) => hosts.map((host) => `${scheme}://${host}${suffix}`)
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
__name(loopbackSandboxOrigins, "loopbackSandboxOrigins");
|
|
65
|
-
function portFromHostHeader(hostHeader) {
|
|
66
|
-
if (!hostHeader) return void 0;
|
|
67
|
-
if (hostHeader.startsWith("[")) {
|
|
68
|
-
const end = hostHeader.indexOf("]");
|
|
69
|
-
if (end === -1) return void 0;
|
|
70
|
-
const rest = hostHeader.slice(end + 1);
|
|
71
|
-
return rest.startsWith(":") && /^\d+$/u.test(rest.slice(1)) ? rest.slice(1) : void 0;
|
|
72
|
-
}
|
|
73
|
-
const colon = hostHeader.lastIndexOf(":");
|
|
74
|
-
if (colon === -1) return void 0;
|
|
75
|
-
const port = hostHeader.slice(colon + 1);
|
|
76
|
-
return /^\d+$/u.test(port) ? port : void 0;
|
|
77
|
-
}
|
|
78
|
-
__name(portFromHostHeader, "portFromHostHeader");
|
|
79
47
|
function buildWebShellPermissionsPolicy() {
|
|
80
48
|
return [
|
|
81
49
|
"camera=()",
|
|
@@ -86,18 +54,17 @@ function buildWebShellPermissionsPolicy() {
|
|
|
86
54
|
].join(", ");
|
|
87
55
|
}
|
|
88
56
|
__name(buildWebShellPermissionsPolicy, "buildWebShellPermissionsPolicy");
|
|
89
|
-
function buildWebShellCsp(frameAncestors = []
|
|
57
|
+
function buildWebShellCsp(frameAncestors = []) {
|
|
90
58
|
const fa = frameAncestors.length ? `frame-ancestors ${frameAncestors.join(" ")}` : "frame-ancestors 'none'";
|
|
91
|
-
const frameSrc =
|
|
59
|
+
const frameSrc = "frame-src http: https: blob:";
|
|
92
60
|
return [...WEB_SHELL_CSP_DIRECTIVES, frameSrc, fa].join("; ");
|
|
93
61
|
}
|
|
94
62
|
__name(buildWebShellCsp, "buildWebShellCsp");
|
|
95
63
|
var WEB_SHELL_CSP = buildWebShellCsp();
|
|
96
64
|
function createSendIndex(webShellDir, frameAncestors = []) {
|
|
97
65
|
const indexPath = path.join(webShellDir, "index.html");
|
|
98
|
-
return (
|
|
99
|
-
const
|
|
100
|
-
const csp = buildWebShellCsp(frameAncestors, sandboxOrigins);
|
|
66
|
+
return (_req, res) => {
|
|
67
|
+
const csp = buildWebShellCsp(frameAncestors);
|
|
101
68
|
res.status(200).set("Content-Security-Policy", csp).set("X-Content-Type-Options", "nosniff").set("Referrer-Policy", "no-referrer").set(
|
|
102
69
|
// `microphone=(self)` lets the same-origin Web Shell document request
|
|
103
70
|
// the mic for voice dictation (the prompt won't even appear under an
|
|
@@ -171,8 +138,6 @@ __name(mountWebShellSpaFallback, "mountWebShellSpaFallback");
|
|
|
171
138
|
|
|
172
139
|
export {
|
|
173
140
|
isServeDebugMode,
|
|
174
|
-
loopbackSandboxOrigins,
|
|
175
|
-
portFromHostHeader,
|
|
176
141
|
buildWebShellPermissionsPolicy,
|
|
177
142
|
buildWebShellCsp,
|
|
178
143
|
WEB_SHELL_CSP,
|
|
@@ -5,15 +5,15 @@ import {
|
|
|
5
5
|
} from "./chunk-47ECGEJC.js";
|
|
6
6
|
import {
|
|
7
7
|
t
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-432JQKIO.js";
|
|
9
9
|
import {
|
|
10
10
|
findProviderByCredentials,
|
|
11
11
|
resolveMetadataKey
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-AEY27Z35.js";
|
|
13
13
|
import {
|
|
14
14
|
fetchGitDiff,
|
|
15
15
|
isCompressionFailureStatus
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-2UKKQGRA.js";
|
|
17
17
|
import {
|
|
18
18
|
init_esbuild_shims
|
|
19
19
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -64,7 +64,7 @@ async function runExitCleanup(options = {}) {
|
|
|
64
64
|
}
|
|
65
65
|
__name(runExitCleanup, "runExitCleanup");
|
|
66
66
|
async function cleanupCheckpoints() {
|
|
67
|
-
const { Storage } = await import("./deferred-core-runtime-
|
|
67
|
+
const { Storage } = await import("./deferred-core-runtime-CY43FZNZ.js");
|
|
68
68
|
const storage = new Storage(process.cwd());
|
|
69
69
|
const tempDir = storage.getProjectTempDir();
|
|
70
70
|
const checkpointsDir = join(tempDir, "checkpoints");
|