@qwen-code/qwen-code 0.23.1-preview.2 → 0.23.2-preview.0
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/bundled/computer-use/SKILL.md +189 -116
- package/bundled/goal-draft/SKILL.md +23 -13
- package/bundled/qc-helper/docs/_meta.ts +1 -0
- package/bundled/qc-helper/docs/configuration/model-providers.md +47 -1
- package/bundled/qc-helper/docs/configuration/settings.md +50 -0
- package/bundled/qc-helper/docs/conversations-recovery.md +102 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +1 -1
- package/bundled/qc-helper/docs/features/computer-use.md +9 -7
- package/bundled/qc-helper/docs/features/followup-suggestions.md +2 -2
- package/bundled/qc-helper/docs/features/goals.md +15 -3
- package/bundled/qc-helper/docs/qwen-serve.md +19 -1
- package/chunks/{MaxSizedBox-IYIQ43IZ.js → MaxSizedBox-ZZJT3PJF.js} +20 -20
- package/chunks/{StandaloneSessionPicker-AWB2OHX6.js → StandaloneSessionPicker-DIOSZTMX.js} +38 -38
- package/chunks/{acp-startup-profiler-BAL4LJTN.js → acp-startup-profiler-KEU6VAYR.js} +2 -2
- package/chunks/{acpAgent-ZC57OLS4.js → acpAgent-62JUP5A7.js} +118 -91
- package/chunks/{agent-GEBPAEJS.js → agent-NLPEQQDZ.js} +13 -13
- package/chunks/{agent-headless-63ZEYAJK.js → agent-headless-Y2GR5F2Q.js} +13 -13
- package/chunks/{anthropicContentGenerator-6XDHXIII.js → anthropicContentGenerator-I7LQZH26.js} +30 -7
- package/chunks/{askUserQuestion-3KAYLLMM.js → askUserQuestion-I5W5S3D6.js} +1 -1
- package/chunks/{bridge-MHWO5I5T.js → bridge-Q66BD62H.js} +23 -23
- package/chunks/{channel-management-service-NFRZXQFO.js → channel-management-service-TRTLQTSV.js} +4 -4
- package/chunks/{channel-settings-store-T7PMIHKC.js → channel-settings-store-R5STFWUW.js} +31 -31
- package/chunks/{channel-worker-group-O2BWK5F7.js → channel-worker-group-PIYPVCTF.js} +6 -6
- package/chunks/{channel-worker-manager-4WP7VJOD.js → channel-worker-manager-FQHEDTD2.js} +6 -6
- package/chunks/{channel-worker-supervisor-CCUXD6J5.js → channel-worker-supervisor-XJPZZ3VK.js} +3 -3
- package/chunks/{chunk-ZJ2LM2SI.js → chunk-2OR32P5M.js} +104 -33
- package/chunks/chunk-2Z3T52OC.js +82 -0
- package/chunks/{chunk-5FYGZ7E3.js → chunk-33MLFMCL.js} +2 -2
- package/chunks/{chunk-RH344FKI.js → chunk-3BTHHXXE.js} +1 -1
- package/chunks/{chunk-OFB36ZBA.js → chunk-3LPJ776W.js} +1 -1
- package/chunks/{chunk-TSLRORQR.js → chunk-43CI6YWJ.js} +1467 -1323
- package/chunks/{chunk-LTCI6ZOJ.js → chunk-45ROPFQY.js} +1 -1
- package/chunks/{chunk-W4LL5RZO.js → chunk-4ALNJDHL.js} +52 -13
- package/chunks/{chunk-RRCNEW2A.js → chunk-4BLTSTF6.js} +58 -4
- package/chunks/{chunk-3RMVM33U.js → chunk-4JKLPTV6.js} +5 -5
- package/chunks/{chunk-ZRVFHLLK.js → chunk-5DQ4YTIZ.js} +1 -1
- package/chunks/{chunk-AWDF462I.js → chunk-5GD7LYOH.js} +2 -2
- package/chunks/{chunk-HZS3JRQW.js → chunk-5VZFJTL2.js} +40 -2
- package/chunks/{chunk-537SQ2AI.js → chunk-5WC2ECUK.js} +104 -16
- package/chunks/{chunk-ZT3XUGSU.js → chunk-63ACHB2H.js} +86 -9
- package/chunks/{chunk-3K65MUKD.js → chunk-65I7S4Z3.js} +2 -1
- package/chunks/{chunk-REDVV5NC.js → chunk-6GRDHIVI.js} +7 -7
- package/chunks/{chunk-2LD5U7Q3.js → chunk-6YEOCHSE.js} +29 -1
- package/chunks/{chunk-C4NXRR7T.js → chunk-743XE7N7.js} +2 -2
- package/chunks/{chunk-I7UNCY24.js → chunk-7GZCCHJL.js} +3 -3
- package/chunks/{chunk-XX4MBBFW.js → chunk-7L35FKPF.js} +3 -3
- package/chunks/{chunk-GEV66YGE.js → chunk-7RXOEUFF.js} +1 -1
- package/chunks/{chunk-TXAEXF2B.js → chunk-BL6B2QS2.js} +21 -8
- package/chunks/{chunk-KAZWXVI3.js → chunk-CABDNUJ4.js} +2 -2
- package/chunks/{chunk-R7TKFIQO.js → chunk-CALNF3Z3.js} +1 -1
- package/chunks/{chunk-22QOQKG4.js → chunk-CG2PDIGD.js} +1 -1
- package/chunks/{chunk-MFCWL4LI.js → chunk-CPJRFFPH.js} +451 -396
- package/chunks/{chunk-LD53HMPV.js → chunk-CRZBDVP2.js} +1 -0
- package/chunks/{chunk-RSU3I6UL.js → chunk-DCPRCDSR.js} +1 -1
- package/chunks/{chunk-PLUAIHZO.js → chunk-DTB5BXRG.js} +6 -6
- package/chunks/{chunk-FWH4736Q.js → chunk-EA4NFWVG.js} +3 -3
- package/chunks/{chunk-AX23QSX3.js → chunk-EHTKOO6W.js} +4 -4
- package/chunks/{chunk-37SOBIA3.js → chunk-ERXNTINK.js} +1 -1
- package/chunks/{chunk-EGRFCIXD.js → chunk-EUXF6URV.js} +79 -18
- package/chunks/{chunk-F47DITLZ.js → chunk-FAWTMDX7.js} +14 -0
- package/chunks/{chunk-5JLQWQK6.js → chunk-FV4DM2M4.js} +2 -2
- package/chunks/{chunk-C7M445SS.js → chunk-G5QLLD53.js} +1 -1
- package/chunks/{chunk-5V4B3EWA.js → chunk-GM44O6F7.js} +1 -1
- package/chunks/{chunk-Z6DDPSGJ.js → chunk-GNY7B3CA.js} +1 -1
- package/chunks/{chunk-7PMKXGRP.js → chunk-GXIHBIHC.js} +66 -9
- package/chunks/{chunk-ERMAXPXA.js → chunk-HIXUUCGY.js} +187 -12
- package/chunks/{chunk-EJNYBDYC.js → chunk-HNLMYDQE.js} +1 -1
- package/chunks/{chunk-RCUWMVN3.js → chunk-HZ2HUXX7.js} +1 -1
- package/chunks/{chunk-SHX2HIE7.js → chunk-ISPBBKJN.js} +1 -1
- package/chunks/{chunk-QQGAR64U.js → chunk-IUJLW6ZI.js} +4 -4
- package/chunks/{chunk-IMWCUWQT.js → chunk-J3TJH52D.js} +1 -1
- package/chunks/{chunk-AIMZIXZM.js → chunk-J4ECGDA3.js} +5 -7
- package/chunks/{chunk-HPE4LEWX.js → chunk-JDPBJIKI.js} +1 -1
- package/chunks/{chunk-Y3C5COGI.js → chunk-L6ZME3W7.js} +1 -1
- package/chunks/{chunk-EPZWBYQI.js → chunk-LBKYQ33T.js} +8 -6
- package/chunks/{chunk-KTLT7VCX.js → chunk-LN3WBOKU.js} +2 -2
- package/chunks/{chunk-FXYNIZPW.js → chunk-LUVXLLMS.js} +51 -10
- package/chunks/{chunk-RQNAO42A.js → chunk-M6YLOETP.js} +1 -1
- package/chunks/{chunk-6KYWU726.js → chunk-M73KHGNR.js} +13 -66
- package/chunks/{chunk-ADJD4LZF.js → chunk-MA5OUNN6.js} +1 -1
- package/chunks/{chunk-SI6Q52UI.js → chunk-MMMA36MN.js} +3 -3
- package/chunks/{chunk-QW7BUOSI.js → chunk-MWEF5MUK.js} +20 -3
- package/chunks/{chunk-JOV46WGX.js → chunk-NB3NDQQK.js} +1 -1
- package/chunks/chunk-NOO4QFXM.js +171 -0
- package/chunks/{chunk-UTVIIA7N.js → chunk-NVS4Z6GT.js} +1 -1
- package/chunks/{chunk-VMFPZXRT.js → chunk-ODBNTMZW.js} +43 -31
- package/chunks/{chunk-UKADFFL2.js → chunk-OFVAS4AR.js} +1 -1
- package/chunks/{chunk-WQBR7LN5.js → chunk-OIPUQE3S.js} +1 -1
- package/chunks/{chunk-2C3XDBGL.js → chunk-ORREXWOM.js} +4 -4
- package/chunks/{chunk-RD3VPM4E.js → chunk-PQWM4SX2.js} +2 -2
- package/chunks/{chunk-Z6KFLEG7.js → chunk-PSPAM24S.js} +1 -0
- package/chunks/{chunk-RUMSY4ES.js → chunk-Q2F43WTJ.js} +8 -7
- package/chunks/{chunk-VYCJITND.js → chunk-QJAFSFYA.js} +1 -1
- package/chunks/{chunk-L36LLVA5.js → chunk-QLM7D7W3.js} +3 -3
- package/chunks/{chunk-NUQFUXOG.js → chunk-QTNCGZHQ.js} +2 -0
- package/chunks/{chunk-XNC2TCUO.js → chunk-QXXBW2G4.js} +4 -4
- package/chunks/{chunk-TDHVOZ65.js → chunk-R2266LQ5.js} +2 -2
- package/chunks/{chunk-QJVZLILI.js → chunk-R7OO56VZ.js} +1 -1
- package/chunks/{chunk-LYHYXJJ3.js → chunk-RDV4NLI3.js} +3 -3
- package/chunks/{chunk-733KQL63.js → chunk-RN6V5HKE.js} +3 -3
- package/chunks/{chunk-WLZRMF3C.js → chunk-RX3FYFCN.js} +353 -11
- package/chunks/{chunk-NXWYCSPL.js → chunk-SOA4HKRJ.js} +1 -1
- package/chunks/{chunk-ZNI3V2XA.js → chunk-TK4XHPKW.js} +2 -2
- package/chunks/{chunk-RGAQDQ3Z.js → chunk-UHUT4IDM.js} +18 -9
- package/chunks/{chunk-T7TP5UQL.js → chunk-ULY4ISY2.js} +4 -4
- package/chunks/{chunk-PMGWY6ZP.js → chunk-UULHYZ4W.js} +13 -10
- package/chunks/{chunk-BNWIX6BM.js → chunk-UXDVUFKU.js} +3 -3
- package/chunks/{chunk-HY3DXYZK.js → chunk-UYDQYDW2.js} +1 -1
- package/chunks/{chunk-YLFICBYK.js → chunk-VEQBVJYH.js} +3 -3
- package/chunks/{chunk-3K456UJF.js → chunk-VF6D6EGV.js} +12 -4
- package/chunks/{chunk-KP5QK3FB.js → chunk-VH764G6B.js} +397 -54
- package/chunks/{chunk-IGOIYZBG.js → chunk-VHPG7BH6.js} +2 -2
- package/chunks/{chunk-I67KJGM6.js → chunk-W3ONSAYO.js} +3 -3
- package/chunks/{chunk-SHK2SIR5.js → chunk-W673V2H3.js} +4 -4
- package/chunks/{chunk-C55CR5I4.js → chunk-W7PXLIZJ.js} +6 -6
- package/chunks/{chunk-OHOO527W.js → chunk-WG7BL3FY.js} +52 -2
- package/chunks/{chunk-B5FF3LRF.js → chunk-WIRYFL2L.js} +22 -15
- package/chunks/{chunk-P5Z7VD23.js → chunk-WZ4YULVF.js} +106 -39
- package/chunks/{chunk-WFXD5OZH.js → chunk-WZS3X663.js} +1 -1
- package/chunks/{chunk-HWZOOSEB.js → chunk-XAXTQURR.js} +3 -3
- package/chunks/{chunk-ANVC5CSK.js → chunk-XBLG564H.js} +10 -10
- package/chunks/{chunk-VU7O7CGQ.js → chunk-XDNFODER.js} +1 -1
- package/chunks/{chunk-SD7Y2PMC.js → chunk-XI7RST4D.js} +2 -2
- package/chunks/{chunk-65GHQ4FX.js → chunk-XVTCSVBK.js} +514 -47
- package/chunks/{chunk-4OCYWXKF.js → chunk-Y6ZWXM44.js} +3 -3
- package/chunks/{chunk-7IKXTGZT.js → chunk-YI2YCNSP.js} +1 -1
- package/chunks/{chunk-E4VX6LXB.js → chunk-YZTGGCEE.js} +10 -2
- package/chunks/{chunk-75UQFGFE.js → chunk-ZIPYCXQP.js} +1 -1
- package/chunks/{chunk-AUJOWIT5.js → chunk-ZUNWKOAP.js} +3 -3
- package/chunks/{config-utils-F4CFJ4MW.js → config-utils-37FHWPTP.js} +24 -24
- package/chunks/{contextCommand-OIIGGOMU.js → contextCommand-R4JUBV5N.js} +22 -22
- package/chunks/{core-runtime-JEHLOGMB.js → core-runtime-6U4OXU5C.js} +20 -20
- package/chunks/{create-sub-session-MVFBE5RA.js → create-sub-session-LLUYAGZN.js} +21 -21
- package/chunks/{daemon-LCUELM6E.js → daemon-UI6SQSBV.js} +1 -1
- package/chunks/{daemon-git-worktree-guard-5FTKLJOU.js → daemon-git-worktree-guard-O2UTNFJC.js} +20 -20
- package/chunks/{daemon-status-provider-P6A5MPMW.js → daemon-status-provider-7GMAKSTX.js} +27 -27
- package/chunks/{daemon-trust-policy-ZJ3NFYUO.js → daemon-trust-policy-VNP76VMO.js} +27 -27
- package/chunks/{daemon-trust-policy-monitor-6SDLEW7S.js → daemon-trust-policy-monitor-TD5O3BZA.js} +27 -27
- package/chunks/{deferred-core-runtime-DWOXIU5S.js → deferred-core-runtime-NJM63YJS.js} +20 -20
- package/chunks/{discovery-TUM3ZQ6U.js → discovery-XP4RMDUM.js} +4 -2
- package/chunks/{dist-NXW4DUUX.js → dist-24TCWK5H.js} +1 -1
- package/chunks/{dist-I74QLLQS.js → dist-5I4HLUTO.js} +1 -1
- package/chunks/{dist-XINEKB5A.js → dist-FDISN4AK.js} +1 -1
- package/chunks/{dist-VCAS67N5.js → dist-M4CBX53H.js} +1 -1
- package/chunks/{dist-AI25RVRA.js → dist-NQ2636VT.js} +1 -1
- package/chunks/{dist-3H3WODVS.js → dist-OR2ZQTXZ.js} +1 -1
- package/chunks/{dist-P6YWBITG.js → dist-STAGIFNB.js} +430 -51
- package/chunks/{dist-YNQU4CKC.js → dist-WZTUKIDR.js} +2 -2
- package/chunks/{dist-T4PRA5EZ.js → dist-XJ25G6OH.js} +1 -1
- package/chunks/{edit-WPVXLL3T.js → edit-GL7OA6RV.js} +13 -13
- package/chunks/{enter-worktree-5A6VW6BN.js → enter-worktree-YFTKHXHZ.js} +2 -2
- package/chunks/{enterPlanMode-JSODW7E2.js → enterPlanMode-VC4BCSZE.js} +13 -13
- package/chunks/{environment-5LLJ3I3W.js → environment-BI6IBAZJ.js} +23 -23
- package/chunks/{errors-IQT3YZEP.js → errors-D6G2ZM2R.js} +22 -22
- package/chunks/{exit-worktree-QV7E7KP6.js → exit-worktree-NF2XEMES.js} +3 -3
- package/chunks/{exitPlanMode-DDVFYNW4.js → exitPlanMode-DX446CA6.js} +13 -13
- package/chunks/{fast-path-PAUQQEVU.js → fast-path-MAYDLJIP.js} +3 -3
- package/chunks/{fast-path-settings-ISEJPRYE.js → fast-path-settings-SATXY3PD.js} +3 -3
- package/chunks/{glob-SQ7CTZ7F.js → glob-TVKRFY36.js} +13 -13
- package/chunks/{goal-tools-UWZRCLQB.js → goal-tools-CA6YANRN.js} +13 -13
- package/chunks/{handleAutoUpdate-RUPZZTSG.js → handleAutoUpdate-AW4ZAHON.js} +23 -23
- package/chunks/{i18n-SF5MPWEB.js → i18n-IH5CRAY7.js} +23 -21
- package/chunks/{image-gen-Q3RUTVKR.js → image-gen-XP4NNIYG.js} +4 -4
- package/chunks/{initializer-CK4WPYZG.js → initializer-UBR37ZNM.js} +27 -27
- package/chunks/{installationInfo-IRPQEYRF.js → installationInfo-Y52756EC.js} +20 -20
- package/chunks/{list-E3PS3EBJ.js → list-7V5JDZPO.js} +30 -30
- package/chunks/{llm-JQKBOYAF.js → llm-QDB6JVF5.js} +62 -62
- package/chunks/{llm-content-generator-2QWGBW42.js → llm-content-generator-EO6MZCEO.js} +23 -8
- package/chunks/{loadedSettingsAdapter-DGXGVYZS.js → loadedSettingsAdapter-I3YQKMC4.js} +27 -27
- package/chunks/{loggingContentGenerator-ZYURLJKK.js → loggingContentGenerator-MNXYUGDG.js} +14 -14
- package/chunks/{managed-npm-update-HTHR63EA.js → managed-npm-update-EA3EXPTO.js} +20 -20
- package/chunks/{mcp-I7G2AEWS.js → mcp-QTAJ544Y.js} +27 -27
- package/chunks/{monitor-4R76BCRZ.js → monitor-6FQKQOTP.js} +13 -13
- package/chunks/{nonInteractiveCli-24OQ3VP2.js → nonInteractiveCli-MRCTZL5X.js} +64 -61
- package/chunks/{notebook-edit-PPSH7FEX.js → notebook-edit-BQQCKI7K.js} +13 -13
- package/chunks/{openaiContentGenerator-K7V5EO7F.js → openaiContentGenerator-TTSKXNVH.js} +8 -8
- package/chunks/{pidfile-TGIUY2GG.js → pidfile-KPIS6RIT.js} +20 -20
- package/chunks/{processUtils-3USXUQWX.js → processUtils-ZCASPKK4.js} +2 -2
- package/chunks/{prompt-terminal-ledger-XHVZRXJI.js → prompt-terminal-ledger-D6HM6TV7.js} +21 -21
- package/chunks/{qwenContentGenerator-MPBOQB64.js → qwenContentGenerator-GGZEFLBD.js} +16 -16
- package/chunks/{qwenOAuth2-BS5D2LYV.js → qwenOAuth2-KX6LVYQ3.js} +4 -4
- package/chunks/{read-file-R256LDWQ.js → read-file-VE5GDFLP.js} +2 -2
- package/chunks/{resumeHistoryUtils-S43LTFHD.js → resumeHistoryUtils-HSSGMYDC.js} +23 -23
- package/chunks/{ripGrep-L7HPZ75Y.js → ripGrep-SEJE7AA6.js} +3 -3
- package/chunks/{run-qwen-serve-CTFL5R6U.js → run-qwen-serve-OJYVH7N6.js} +58 -60
- package/chunks/{runtime-FS5TL6P7.js → runtime-KGMQQFJD.js} +32 -32
- package/chunks/{scheduled-tasks-QXPV3Q35.js → scheduled-tasks-7H5HWHYD.js} +25 -25
- package/chunks/{scheduler-EXU5HMVK.js → scheduler-BE42AKDG.js} +22 -22
- package/chunks/{send-message-GQKXGMPI.js → send-message-AWKUDJBH.js} +1 -1
- package/chunks/{serve-ITJC7WNN.js → serve-KZVKYMSL.js} +27 -27
- package/chunks/{server-6JQY3PTU.js → server-PJRALPJQ.js} +1296 -822
- package/chunks/{session-PJDEKXD4.js → session-IHITXU2S.js} +63 -62
- package/chunks/{session-attachments-root-L37ORSST.js → session-attachments-root-GQ2TUI3Y.js} +20 -20
- package/chunks/{session-pr-refresh-WIFD52YL.js → session-pr-refresh-H43LULTE.js} +24 -24
- package/chunks/{settings-LO6J5SAZ.js → settings-RKEQQDFC.js} +26 -26
- package/chunks/{shell-ANAFVYGR.js → shell-6PJ444U5.js} +13 -13
- package/chunks/{skill-SHJWKSPH.js → skill-Q3UP7B5V.js} +2 -2
- package/chunks/{skill-settings-GX3XHZ5Q.js → skill-settings-LZR5YRRW.js} +26 -26
- package/chunks/{spawnChannel-WE42VBKM.js → spawnChannel-WM3DT2BF.js} +20 -20
- package/chunks/{standalone-update-CWDIKJRP.js → standalone-update-E5474IBI.js} +22 -22
- package/chunks/{start-opentui-ui-BBHGFOTF.js → start-opentui-ui-WLWZNQ2I.js} +1991 -986
- package/chunks/{startInteractiveUI-FQX7LUYP.js → startInteractiveUI-FBQSGWGO.js} +1119 -1478
- package/chunks/{team-create-WKTPCH6D.js → team-create-VIGUFUT4.js} +13 -13
- package/chunks/{team-plan-approval-Y23DL7WR.js → team-plan-approval-HQVZA3MD.js} +13 -13
- package/chunks/{terminal-image-renderer-B646HBDW.js → terminal-image-renderer-LUKNCOVM.js} +20 -20
- package/chunks/{theme-manager-BNWESY26.js → theme-manager-LOENKYLY.js} +20 -20
- package/chunks/{tool-search-PVQ5O5Y2.js → tool-search-ZIFAQCE2.js} +2 -2
- package/chunks/{total-session-admission-P5Z43KNW.js → total-session-admission-FUUJH3QH.js} +24 -24
- package/chunks/{trustedFolders-FH2LT2MZ.js → trustedFolders-C76KYROP.js} +21 -21
- package/chunks/{update-relaunch-WOWTKJSN.js → update-relaunch-4G2SRXKX.js} +5 -5
- package/chunks/{updateCheck-3MYFMM35.js → updateCheck-EIZIO7HI.js} +22 -22
- package/chunks/{useAutoAcceptIndicator-Q7ZRRRKO.js → useAutoAcceptIndicator-EAA6KSY4.js} +29 -29
- package/chunks/{validateNonInterActiveAuth-MYEWJX3G.js → validateNonInterActiveAuth-BRX22QCN.js} +59 -58
- package/chunks/{version-RO2FPO76.js → version-E56RU7PR.js} +1 -1
- package/chunks/{web-fetch-QAKY2LUA.js → web-fetch-AAUCD7RM.js} +5 -5
- package/chunks/{web-search-XA5Z4ZCD.js → web-search-HFUQF44Q.js} +18 -7
- package/chunks/{workflow-QFIOCMDM.js → workflow-3MABM53N.js} +15 -15
- package/chunks/{workspace-providers-status-B2UD7RAG.js → workspace-providers-status-2FRLBZ5I.js} +29 -29
- package/chunks/{workspace-registration-store-VZLRTI3Q.js → workspace-registration-store-YL7HLYYI.js} +1 -1
- package/chunks/{workspace-registry-GYOGG6TM.js → workspace-registry-BNRP2ELW.js} +24 -24
- package/chunks/{workspace-runtime-coordinator-7KRXGQ4V.js → workspace-runtime-coordinator-WKGF7VHS.js} +24 -24
- package/chunks/{workspace-service-DJEYGJE4.js → workspace-service-4MYO72MM.js} +31 -31
- package/chunks/{workspace-skills-status-MOKNESUC.js → workspace-skills-status-SU66TJLZ.js} +27 -27
- package/chunks/{workspace-trust-reconciler-AXOSUTQW.js → workspace-trust-reconciler-D5QT7WQB.js} +31 -31
- package/chunks/{write-file-QOYVHAKK.js → write-file-NVPQE2AZ.js} +14 -14
- package/chunks/{zoom-image-UCCLGFNC.js → zoom-image-RJHC66WG.js} +2 -2
- package/cli.js +13 -13
- package/export-transcript-document.js +126 -122
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-CTstZpXw.js → abnfDiagram-VCTEODGH-DHc6plZn.js} +1 -1
- package/web-shell/assets/{arc-DKW0mbPo.js → arc-BQ9m8TDV.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-DkMpJ42t.js → architectureDiagram-5GKGNRK7-D5ap3oVB.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-7Cp1_4i3.js → blockDiagram-NRAW4CY4-BIbnyNph.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BfaoSlBK.js → c4Diagram-UCG6FXSJ-BRsdx_iG.js} +1 -1
- package/web-shell/assets/channel-uMMdTrYk.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-_n1qzAio.js → chunk-2Q5K7J3B-3lf1fNlx.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-0cira5ZV.js → chunk-5VM5RSS4-DP8VNRc4.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-DseRXSHC.js → chunk-F27PBJKO-DrohDmZ6.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-BehQWin0.js → chunk-G27WJ6UU-UZ2QhSx6.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-B5ftg1Bb.js → chunk-JWPE2WC7-BIMHVcZK.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-D7rnbVdk.js → chunk-LCL6LL3I-izRxdSDd.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-2Bp-Orju.js → chunk-POPQ4Y6H-CXADD4PP.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-CD2goGva.js → chunk-SVP7TREG-B96d8Y_1.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-DzQt-Rji.js → chunk-XXDRQBXY-CF2sVQpv.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DcY-26Ig.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DcY-26Ig.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-C-BZXSUn.js → cose-bilkent-JH36ORCC-CT6tXVAS.js} +1 -1
- package/web-shell/assets/csv-CX7rUNeC.svg +1 -0
- package/web-shell/assets/{cynefin-OW5HDTMX-BTcvowe1.js → cynefin-OW5HDTMX-X1NS4vtV.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-BoUE6K81.js → cynefinDiagram-5FMLGOSQ-DNsKNOT4.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-BHxy9xeB.js → dagre-3AP2YEHR-9-AHKqsb.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-DMiJIvDT.js → diagram-S7CK7UJ4-Bjgms7j6.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-DXV09Aes.js → diagram-UQ7AKVKN-h6bCprbE.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-CocpRomV.js → diagram-VSXAHHWV-4SbQXVLt.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-DL7nqtb4.js → diagram-VX7I27RA-B5gPCzzB.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-CPZ2Jux_.js → diagram-Z3DM3KII-DFJXIA3A.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-BX-eVNsX.js → ebnfDiagram-PWID7BFC-FwyaU7VY.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-CPy_Ir6y.js → erDiagram-SSCWMZ5O-8vJQh2te.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-eknAOte9.js → flowDiagram-A5DVABFB-BzA_1gMN.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-crAxw_t7.js → ganttDiagram-EL5Y4UJY-Co-ABbVX.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-M29pa3Tc.js → gitGraphDiagram-WWUBYQGX-DW_FcyrX.js} +1 -1
- package/web-shell/assets/{index-C9R-iojE.js → index-BbMXfhNG.js} +1 -1
- package/web-shell/assets/{index-B4TLaxWs.js → index-Bu-rZoJ-.js} +462 -454
- package/web-shell/assets/index-CsPwZ1ut.css +36 -0
- package/web-shell/assets/{infoDiagram-RXCK75RN-XqspXdOU.js → infoDiagram-RXCK75RN-BEgfhUFN.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-C5KFS-7j.js → ishikawaDiagram-5VMMS53U-DCsMxQmc.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-Cc57LVRo.js → journeyDiagram-EYS64GPL-DyIEYoHz.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-C81OG-AI.js → kanban-definition-3QL26DDD-CkxjqCNr.js} +1 -1
- package/web-shell/assets/{layout-CFVu37BB.js → layout-BEWc0Al9.js} +1 -1
- package/web-shell/assets/{linear-ChBxdtWf.js → linear-CNuNxirL.js} +1 -1
- package/web-shell/assets/{mermaid.core-CMLfue0w.js → mermaid.core-DZBre674.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-DFsvJThp.js → mindmap-definition-FBJOCRG2-CpafFz_F.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-BzpRzM4F.js → pegDiagram-XKGWAZYB-DfZqk_dq.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-Cv0Kankl.js → pieDiagram-E7YTZNPT-S0UWXlgC.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-Bh2BJ3Ay.js → quadrantDiagram-AXDQQJYC-dd37_Ohj.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-y8rNDdDS.js → railroadDiagram-O6MQD6OU-CH8NJZ7u.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-C0m2DKJ_.js → requirementDiagram-EFPCY7ZU-CFdqWYih.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-BzdGnSF4.js → sankeyDiagram-P5KCCOFB-CsddcEGD.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-DPzAVmzz.js → sequenceDiagram-WJ2MYXX4-BZ270mGw.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-LcHG28Zh.js → sizeCapture-X5ZJPWSS-CGaS4DBV.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-C1Bzy3IT.js → stateDiagram-HBIQ2CUA-COpIzMu6.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-D6qEVAji.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-Bftk8V64.js → swimlanes-XN3QIQJK-CMF889m3.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-mem5Jj4m.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-BfXHcN1A.js → timeline-definition-24CTP7MA-BelnxYz5.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-DRSlI9-V.js → vennDiagram-4TSXK5OY-CU-NRqIB.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CaLmqGau.js → wardleyDiagram-VM6X3IG4-CDNKqWh-.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-8lgUT6e8.js → xychartDiagram-S5SC5T6Z-CLqguL5D.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-3UMWOKJC.js +0 -78
- package/chunks/chunk-IQAFKVXS.js +0 -22
- package/web-shell/assets/channel-CQx7VSAp.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-C-Uz8hHk.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-C-Uz8hHk.js +0 -1
- package/web-shell/assets/index-CCrkEbzz.css +0 -36
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-LuuL5byY.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-COmnNq8s.js +0 -8
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
isWithinRoot
|
|
9
9
|
} from "./chunk-J6MB5ZHZ.js";
|
|
10
10
|
import {
|
|
11
|
+
atomicWriteFile,
|
|
11
12
|
atomicWriteJSON
|
|
12
13
|
} from "./chunk-XFFRI3WM.js";
|
|
13
14
|
import {
|
|
@@ -171,11 +172,17 @@ async function addWorktreeSessionMarkerExclude(worktreePath) {
|
|
|
171
172
|
existing = await fs2.readFile(excludePath, "utf8");
|
|
172
173
|
} catch {
|
|
173
174
|
}
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
175
|
+
const rules = [WORKTREE_SESSION_FILE, `${WORKTREE_SESSION_FILE}.*.tmp`];
|
|
176
|
+
let next = existing;
|
|
177
|
+
for (const rule of rules) {
|
|
178
|
+
if (!next.split(/\r?\n/).includes(rule)) {
|
|
179
|
+
const sep = next.length === 0 || next.endsWith("\n") ? "" : "\n";
|
|
180
|
+
next = `${next}${sep}${rule}
|
|
181
|
+
`;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (next !== existing) {
|
|
185
|
+
await fs2.writeFile(excludePath, next, "utf8");
|
|
179
186
|
}
|
|
180
187
|
} catch {
|
|
181
188
|
}
|
|
@@ -190,15 +197,32 @@ async function writeWorktreeSessionMarker(worktreePath, sessionId) {
|
|
|
190
197
|
await addWorktreeSessionMarkerExclude(worktreePath);
|
|
191
198
|
}
|
|
192
199
|
__name(writeWorktreeSessionMarker, "writeWorktreeSessionMarker");
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
200
|
+
var WorktreeMarkerCommittedError = class extends Error {
|
|
201
|
+
static {
|
|
202
|
+
__name(this, "WorktreeMarkerCommittedError");
|
|
196
203
|
}
|
|
204
|
+
committedOwner;
|
|
205
|
+
constructor(committedOwner, options) {
|
|
206
|
+
super(
|
|
207
|
+
`Worktree session marker committed for ${committedOwner}; the post-commit close failed`,
|
|
208
|
+
options
|
|
209
|
+
);
|
|
210
|
+
this.name = "WorktreeMarkerCommittedError";
|
|
211
|
+
this.committedOwner = committedOwner;
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
async function createWorktreeSessionMarkerExclusive(worktreePath, sessionId) {
|
|
215
|
+
assertValidWorktreeSessionMarkerOwner(sessionId);
|
|
197
216
|
const markerPath = path2.join(worktreePath, WORKTREE_SESSION_FILE);
|
|
217
|
+
const stagedPath = `${markerPath}.${randomBytes(6).toString("hex")}.tmp`;
|
|
198
218
|
const flags = nodeFs.constants.O_WRONLY | nodeFs.constants.O_CREAT | nodeFs.constants.O_EXCL | (nodeFs.constants.O_NOFOLLOW ?? 0);
|
|
199
|
-
const handle = await fs2.open(
|
|
219
|
+
const handle = await fs2.open(stagedPath, flags, 384);
|
|
220
|
+
let stagedDev = 0;
|
|
221
|
+
let stagedIno = 0;
|
|
200
222
|
try {
|
|
201
223
|
const before = await handle.stat();
|
|
224
|
+
stagedDev = before.dev;
|
|
225
|
+
stagedIno = before.ino;
|
|
202
226
|
if (!before.isFile() || before.nlink !== 1 || before.ino === 0) {
|
|
203
227
|
throw new Error("Worktree session marker has an unsafe identity");
|
|
204
228
|
}
|
|
@@ -206,17 +230,43 @@ async function createWorktreeSessionMarkerExclusive(worktreePath, sessionId) {
|
|
|
206
230
|
await handle.sync();
|
|
207
231
|
const [after, pathStats] = await Promise.all([
|
|
208
232
|
handle.stat(),
|
|
209
|
-
fs2.lstat(
|
|
233
|
+
fs2.lstat(stagedPath)
|
|
210
234
|
]);
|
|
211
235
|
if (!after.isFile() || after.nlink !== 1 || after.size > WORKTREE_SESSION_MARKER_MAX_BYTES || after.dev !== before.dev || after.ino !== before.ino || pathStats.dev !== after.dev || pathStats.ino !== after.ino) {
|
|
212
236
|
throw new Error("Worktree session marker identity changed");
|
|
213
237
|
}
|
|
214
|
-
|
|
238
|
+
await fs2.link(stagedPath, markerPath);
|
|
239
|
+
} catch (error) {
|
|
240
|
+
await handle.close().catch(() => {
|
|
241
|
+
});
|
|
242
|
+
if (stagedIno !== 0) {
|
|
243
|
+
try {
|
|
244
|
+
const current = await fs2.lstat(stagedPath);
|
|
245
|
+
if (current.dev === stagedDev && current.ino === stagedIno) {
|
|
246
|
+
await fs2.unlink(stagedPath);
|
|
247
|
+
}
|
|
248
|
+
} catch {
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
throw error;
|
|
252
|
+
}
|
|
253
|
+
try {
|
|
254
|
+
await fs2.unlink(stagedPath);
|
|
215
255
|
await handle.close();
|
|
256
|
+
} catch (error) {
|
|
257
|
+
await handle.close().catch(() => {
|
|
258
|
+
});
|
|
259
|
+
throw new WorktreeMarkerCommittedError(sessionId, { cause: error });
|
|
216
260
|
}
|
|
217
261
|
await addWorktreeSessionMarkerExclude(worktreePath);
|
|
218
262
|
}
|
|
219
263
|
__name(createWorktreeSessionMarkerExclusive, "createWorktreeSessionMarkerExclusive");
|
|
264
|
+
function assertValidWorktreeSessionMarkerOwner(sessionId) {
|
|
265
|
+
if (sessionId.length === 0 || Buffer.byteLength(sessionId, "utf8") > WORKTREE_SESSION_MARKER_MAX_BYTES || sessionId.trim() !== sessionId) {
|
|
266
|
+
throw new Error("Invalid worktree session marker owner");
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
__name(assertValidWorktreeSessionMarkerOwner, "assertValidWorktreeSessionMarkerOwner");
|
|
220
270
|
async function readWorktreeSessionMarkerStrict(worktreePath) {
|
|
221
271
|
const markerPath = path2.join(worktreePath, WORKTREE_SESSION_FILE);
|
|
222
272
|
let handle;
|
|
@@ -267,7 +317,13 @@ async function readWorktreeSessionMarkerStrict(worktreePath) {
|
|
|
267
317
|
if (sessionId.length === 0 || sessionId !== raw || Buffer.byteLength(sessionId, "utf8") > WORKTREE_SESSION_MARKER_MAX_BYTES) {
|
|
268
318
|
return { state: "invalid", reason: "invalid marker owner" };
|
|
269
319
|
}
|
|
270
|
-
return {
|
|
320
|
+
return {
|
|
321
|
+
state: "valid",
|
|
322
|
+
sessionId,
|
|
323
|
+
uid: process.geteuid === void 0 ? null : after.uid,
|
|
324
|
+
dev: after.dev,
|
|
325
|
+
ino: after.ino
|
|
326
|
+
};
|
|
271
327
|
} catch (error) {
|
|
272
328
|
if (isNodeError(error) && error.code === "ENOENT") {
|
|
273
329
|
return observedMarker ? { state: "invalid", reason: "marker disappeared during read" } : { state: "missing" };
|
|
@@ -282,6 +338,122 @@ async function readWorktreeSessionMarkerStrict(worktreePath) {
|
|
|
282
338
|
}
|
|
283
339
|
}
|
|
284
340
|
__name(readWorktreeSessionMarkerStrict, "readWorktreeSessionMarkerStrict");
|
|
341
|
+
function readWorktreeSessionMarkerStrictSync(worktreePath) {
|
|
342
|
+
const markerPath = path2.join(worktreePath, WORKTREE_SESSION_FILE);
|
|
343
|
+
let fd;
|
|
344
|
+
let observedMarker = false;
|
|
345
|
+
try {
|
|
346
|
+
const flags = nodeFs.constants.O_RDONLY | (nodeFs.constants.O_NOFOLLOW ?? 0) | (nodeFs.constants.O_NONBLOCK ?? 0);
|
|
347
|
+
const before = nodeFs.lstatSync(markerPath);
|
|
348
|
+
observedMarker = true;
|
|
349
|
+
if (before.isSymbolicLink() || !before.isFile() || before.nlink !== 1) {
|
|
350
|
+
return { state: "invalid", reason: "unsafe marker file type" };
|
|
351
|
+
}
|
|
352
|
+
if (before.ino === 0 || before.size > WORKTREE_SESSION_MARKER_MAX_BYTES) {
|
|
353
|
+
return { state: "invalid", reason: "unsafe marker size or identity" };
|
|
354
|
+
}
|
|
355
|
+
fd = nodeFs.openSync(markerPath, flags);
|
|
356
|
+
const opened = nodeFs.fstatSync(fd);
|
|
357
|
+
if (!opened.isFile() || opened.nlink !== 1 || opened.dev !== before.dev || opened.ino !== before.ino) {
|
|
358
|
+
return {
|
|
359
|
+
state: "invalid",
|
|
360
|
+
reason: "marker identity changed before read"
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
const markerBuffer = Buffer.alloc(WORKTREE_SESSION_MARKER_MAX_BYTES + 1);
|
|
364
|
+
let bytesRead = 0;
|
|
365
|
+
while (bytesRead < markerBuffer.length) {
|
|
366
|
+
const chunk = nodeFs.readSync(
|
|
367
|
+
fd,
|
|
368
|
+
markerBuffer,
|
|
369
|
+
bytesRead,
|
|
370
|
+
markerBuffer.length - bytesRead,
|
|
371
|
+
bytesRead
|
|
372
|
+
);
|
|
373
|
+
if (chunk === 0) break;
|
|
374
|
+
bytesRead += chunk;
|
|
375
|
+
}
|
|
376
|
+
if (bytesRead > WORKTREE_SESSION_MARKER_MAX_BYTES) {
|
|
377
|
+
return { state: "invalid", reason: "unsafe marker size or identity" };
|
|
378
|
+
}
|
|
379
|
+
const raw = markerBuffer.subarray(0, bytesRead).toString("utf8");
|
|
380
|
+
const after = nodeFs.fstatSync(fd);
|
|
381
|
+
const pathStats = nodeFs.lstatSync(markerPath);
|
|
382
|
+
if (!after.isFile() || after.nlink !== 1 || after.size !== bytesRead || after.size > WORKTREE_SESSION_MARKER_MAX_BYTES || after.dev !== opened.dev || after.ino !== opened.ino || !pathStats.isFile() || pathStats.nlink !== 1 || pathStats.dev !== after.dev || pathStats.ino !== after.ino) {
|
|
383
|
+
return {
|
|
384
|
+
state: "invalid",
|
|
385
|
+
reason: "marker identity changed during read"
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
const sessionId = raw.trim();
|
|
389
|
+
if (sessionId.length === 0 || sessionId !== raw || Buffer.byteLength(sessionId, "utf8") > WORKTREE_SESSION_MARKER_MAX_BYTES) {
|
|
390
|
+
return { state: "invalid", reason: "invalid marker owner" };
|
|
391
|
+
}
|
|
392
|
+
return {
|
|
393
|
+
state: "valid",
|
|
394
|
+
sessionId,
|
|
395
|
+
uid: process.geteuid === void 0 ? null : after.uid,
|
|
396
|
+
dev: after.dev,
|
|
397
|
+
ino: after.ino
|
|
398
|
+
};
|
|
399
|
+
} catch (error) {
|
|
400
|
+
if (isNodeError(error) && error.code === "ENOENT") {
|
|
401
|
+
return observedMarker ? { state: "invalid", reason: "marker disappeared during read" } : { state: "missing" };
|
|
402
|
+
}
|
|
403
|
+
return {
|
|
404
|
+
state: "invalid",
|
|
405
|
+
reason: error instanceof Error ? error.message : String(error)
|
|
406
|
+
};
|
|
407
|
+
} finally {
|
|
408
|
+
if (fd !== void 0) {
|
|
409
|
+
try {
|
|
410
|
+
nodeFs.closeSync(fd);
|
|
411
|
+
} catch {
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
__name(readWorktreeSessionMarkerStrictSync, "readWorktreeSessionMarkerStrictSync");
|
|
417
|
+
async function transferWorktreeSessionMarkerOwner(worktreePath, expectedOwner, newOwner) {
|
|
418
|
+
assertValidWorktreeSessionMarkerOwner(newOwner);
|
|
419
|
+
if (expectedOwner !== null) {
|
|
420
|
+
assertValidWorktreeSessionMarkerOwner(expectedOwner);
|
|
421
|
+
if (expectedOwner === newOwner) {
|
|
422
|
+
throw new Error("Worktree marker transfer needs a distinct new owner");
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
const opening = await readWorktreeSessionMarkerStrict(worktreePath);
|
|
426
|
+
if (opening.state === "invalid") {
|
|
427
|
+
throw new Error(`Worktree marker is invalid: ${opening.reason}`);
|
|
428
|
+
}
|
|
429
|
+
if (opening.state === "missing") {
|
|
430
|
+
if (expectedOwner !== null) {
|
|
431
|
+
throw new Error("Worktree marker owner does not match the expectation");
|
|
432
|
+
}
|
|
433
|
+
await createWorktreeSessionMarkerExclusive(worktreePath, newOwner);
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
if (opening.sessionId !== expectedOwner) {
|
|
437
|
+
throw new Error("Worktree marker owner does not match the expectation");
|
|
438
|
+
}
|
|
439
|
+
const euid = process.geteuid?.();
|
|
440
|
+
if (euid !== void 0 && opening.uid !== null && opening.uid !== euid) {
|
|
441
|
+
throw new Error("Worktree marker is owned by a different uid");
|
|
442
|
+
}
|
|
443
|
+
const markerPath = path2.join(worktreePath, WORKTREE_SESSION_FILE);
|
|
444
|
+
await atomicWriteFile(markerPath, newOwner, {
|
|
445
|
+
mode: 384,
|
|
446
|
+
noFollow: true,
|
|
447
|
+
assertCanCommit: /* @__PURE__ */ __name(() => {
|
|
448
|
+
const current = readWorktreeSessionMarkerStrictSync(worktreePath);
|
|
449
|
+
if (current.state !== "valid" || current.sessionId !== opening.sessionId || current.dev !== opening.dev || current.ino !== opening.ino || current.uid !== opening.uid) {
|
|
450
|
+
throw new Error("Worktree marker changed during ownership transfer");
|
|
451
|
+
}
|
|
452
|
+
}, "assertCanCommit")
|
|
453
|
+
});
|
|
454
|
+
await addWorktreeSessionMarkerExclude(worktreePath);
|
|
455
|
+
}
|
|
456
|
+
__name(transferWorktreeSessionMarkerOwner, "transferWorktreeSessionMarkerOwner");
|
|
285
457
|
async function readWorktreeSessionMarker(worktreePath) {
|
|
286
458
|
const markerPath = path2.join(worktreePath, WORKTREE_SESSION_FILE);
|
|
287
459
|
try {
|
|
@@ -1826,9 +1998,12 @@ export {
|
|
|
1826
1998
|
clearRuntimeStatus,
|
|
1827
1999
|
loadSimpleGit,
|
|
1828
2000
|
worktreeBranchForSlug,
|
|
2001
|
+
WORKTREE_SESSION_FILE,
|
|
1829
2002
|
writeWorktreeSessionMarker,
|
|
2003
|
+
WorktreeMarkerCommittedError,
|
|
1830
2004
|
createWorktreeSessionMarkerExclusive,
|
|
1831
2005
|
readWorktreeSessionMarkerStrict,
|
|
2006
|
+
transferWorktreeSessionMarkerOwner,
|
|
1832
2007
|
readWorktreeSessionMarker,
|
|
1833
2008
|
AGENT_WORKTREE_SLUG_PATTERN,
|
|
1834
2009
|
generateAgentWorktreeSlug,
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
parseChannelDelivery,
|
|
6
6
|
scheduledTaskRunSessionName,
|
|
7
7
|
scheduledTaskRunSourceId
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-TK4XHPKW.js";
|
|
9
9
|
import {
|
|
10
10
|
parseCallerSuppliedSessionId
|
|
11
11
|
} from "./chunk-ZEZKIS2K.js";
|
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
} from "./chunk-NYWWQ437.js";
|
|
15
15
|
import {
|
|
16
16
|
SCHEDULED_TASK_RUN_SOURCE_TYPE
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-63ACHB2H.js";
|
|
18
18
|
import {
|
|
19
19
|
SessionNotFoundError
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-FAWTMDX7.js";
|
|
21
21
|
import {
|
|
22
22
|
canonicalizeWorkspace
|
|
23
23
|
} from "./chunk-6PLDPT2C.js";
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
import {
|
|
31
31
|
SessionService,
|
|
32
32
|
stripTerminalControlSequences
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-43CI6YWJ.js";
|
|
34
34
|
import {
|
|
35
35
|
MAX_JOBS,
|
|
36
36
|
nextDurableFireMs
|
|
@@ -5,14 +5,14 @@ import {
|
|
|
5
5
|
} from "./chunk-KW7NOTN6.js";
|
|
6
6
|
import {
|
|
7
7
|
DEFAULT_OPENAI_LOG_RETENTION_DAYS
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-MWEF5MUK.js";
|
|
9
9
|
import {
|
|
10
10
|
resolveOpenAILogDir
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-XI7RST4D.js";
|
|
12
12
|
import {
|
|
13
13
|
FILE_HISTORY_DIR,
|
|
14
14
|
getSubagentsRootDir
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-43CI6YWJ.js";
|
|
16
16
|
import {
|
|
17
17
|
Storage,
|
|
18
18
|
createDebugLogger,
|
|
@@ -169,10 +169,8 @@ var STALE_LOCK_MS = 60 * 60 * 1e3;
|
|
|
169
169
|
async function runThrottledOnce(opts, task) {
|
|
170
170
|
const minIntervalMs = opts.minIntervalMs ?? ONE_DAY_MS;
|
|
171
171
|
const staleLockMs = opts.staleLockMs ?? STALE_LOCK_MS;
|
|
172
|
-
await mkdir(dirname(opts.lockPath), {
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
);
|
|
172
|
+
await mkdir(dirname(opts.lockPath), { mode: 448 }).catch(() => {
|
|
173
|
+
});
|
|
176
174
|
const firstFreshForMs = await markerFreshForMs(
|
|
177
175
|
opts.markerPath,
|
|
178
176
|
minIntervalMs,
|
|
@@ -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-NJM63YJS.js");
|
|
68
68
|
const storage = new Storage(process.cwd());
|
|
69
69
|
const tempDir = storage.getProjectTempDir();
|
|
70
70
|
const checkpointsDir = join(tempDir, "checkpoints");
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import {
|
|
4
4
|
buildModelReasoningConfigPreview,
|
|
5
5
|
resolvePersistedReasoningConfigState
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2OR32P5M.js";
|
|
7
7
|
import {
|
|
8
8
|
ACP_ROUTE_ID_PREFIX,
|
|
9
9
|
buildAcpModelOptions,
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
parseAcpBaseModelId,
|
|
13
13
|
resolveCliGenerationConfig,
|
|
14
14
|
sanitizeProviderBaseUrl
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-7GZCCHJL.js";
|
|
16
16
|
import {
|
|
17
17
|
snapshotProcessEnv
|
|
18
18
|
} from "./chunk-6RZX2HIH.js";
|
|
@@ -21,10 +21,10 @@ import {
|
|
|
21
21
|
} from "./chunk-FETY36NQ.js";
|
|
22
22
|
import {
|
|
23
23
|
loadSettings
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-Q2F43WTJ.js";
|
|
25
25
|
import {
|
|
26
26
|
ModelsConfig
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-43CI6YWJ.js";
|
|
28
28
|
import {
|
|
29
29
|
APPROVAL_MODES
|
|
30
30
|
} from "./chunk-JX6XHPTX.js";
|
|
@@ -130,8 +130,10 @@ function buildWorkspaceProvidersStatus(workspaceCwd, acpChannelLive, options) {
|
|
|
130
130
|
model.authType,
|
|
131
131
|
model.id,
|
|
132
132
|
model.registryBaseUrl ?? model.baseUrl
|
|
133
|
-
)?.generationConfig.thinkingMandatory === true
|
|
134
|
-
|
|
133
|
+
)?.generationConfig.thinkingMandatory === true,
|
|
134
|
+
model.capabilities?.reasoning
|
|
135
|
+
),
|
|
136
|
+
model.capabilities?.reasoning
|
|
135
137
|
);
|
|
136
138
|
const providerModel = {
|
|
137
139
|
modelId,
|
|
@@ -20,12 +20,12 @@ import {
|
|
|
20
20
|
detectLineEnding,
|
|
21
21
|
getDiffStat,
|
|
22
22
|
needsUtf8Bom
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-43CI6YWJ.js";
|
|
24
24
|
import {
|
|
25
25
|
FileOperationEvent,
|
|
26
26
|
getLanguageFromFilePath,
|
|
27
27
|
logFileOperation
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-OIPUQE3S.js";
|
|
29
29
|
import {
|
|
30
30
|
fileExists,
|
|
31
31
|
getSpecificMimeType
|
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
} from "./chunk-TXASDT2M.js";
|
|
9
9
|
import {
|
|
10
10
|
t
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-CRZBDVP2.js";
|
|
12
12
|
import {
|
|
13
13
|
So
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-43CI6YWJ.js";
|
|
15
15
|
import {
|
|
16
16
|
createDebugLogger
|
|
17
17
|
} from "./chunk-ZAFYHRVY.js";
|
|
@@ -93,6 +93,24 @@ function escapePS(s) {
|
|
|
93
93
|
return s.replace(/'/g, "''");
|
|
94
94
|
}
|
|
95
95
|
__name(escapePS, "escapePS");
|
|
96
|
+
function resolveUpdateBaseUrl() {
|
|
97
|
+
const value = process.env["QWEN_UPDATE_BASE_URL"]?.trim();
|
|
98
|
+
if (!value) return void 0;
|
|
99
|
+
const invalidUrl = /* @__PURE__ */ __name(() => new Error(
|
|
100
|
+
"QWEN_UPDATE_BASE_URL must be an absolute HTTPS URL without credentials, query parameters, or a fragment."
|
|
101
|
+
), "invalidUrl");
|
|
102
|
+
let url;
|
|
103
|
+
try {
|
|
104
|
+
url = new URL(value);
|
|
105
|
+
} catch {
|
|
106
|
+
throw invalidUrl();
|
|
107
|
+
}
|
|
108
|
+
if (!/^https:\/\//i.test(value) || url.username || url.password || /[?#\s]/.test(value)) {
|
|
109
|
+
throw invalidUrl();
|
|
110
|
+
}
|
|
111
|
+
return url.href.replace(/\/+$/, "");
|
|
112
|
+
}
|
|
113
|
+
__name(resolveUpdateBaseUrl, "resolveUpdateBaseUrl");
|
|
96
114
|
async function tryFetch(url, timeoutMs = FETCH_TIMEOUT_MS) {
|
|
97
115
|
try {
|
|
98
116
|
const { fetch } = await loadUndici();
|
|
@@ -110,7 +128,17 @@ async function tryFetch(url, timeoutMs = FETCH_TIMEOUT_MS) {
|
|
|
110
128
|
}
|
|
111
129
|
}
|
|
112
130
|
__name(tryFetch, "tryFetch");
|
|
113
|
-
async function downloadWithFallback(versionPath, filename, timeoutMs = FETCH_TIMEOUT_MS) {
|
|
131
|
+
async function downloadWithFallback(versionPath, filename, timeoutMs = FETCH_TIMEOUT_MS, baseUrl) {
|
|
132
|
+
if (baseUrl) {
|
|
133
|
+
const result = await tryFetch(
|
|
134
|
+
`${baseUrl}/${versionPath}/${filename}`,
|
|
135
|
+
timeoutMs
|
|
136
|
+
);
|
|
137
|
+
if (result.response) return result.response;
|
|
138
|
+
throw new Error(
|
|
139
|
+
`Failed to download ${filename} from QWEN_UPDATE_BASE_URL: ${result.error.message}`
|
|
140
|
+
);
|
|
141
|
+
}
|
|
114
142
|
const ossUrl = `${OSS_BASE}/${versionPath}/${filename}`;
|
|
115
143
|
const ossResult = await tryFetch(ossUrl, timeoutMs);
|
|
116
144
|
if (ossResult.response) return ossResult.response;
|
|
@@ -122,13 +150,23 @@ async function downloadWithFallback(versionPath, filename, timeoutMs = FETCH_TIM
|
|
|
122
150
|
);
|
|
123
151
|
}
|
|
124
152
|
__name(downloadWithFallback, "downloadWithFallback");
|
|
125
|
-
async function verifyChecksum(actualHash, filename, versionPath) {
|
|
126
|
-
const response = await downloadWithFallback(
|
|
153
|
+
async function verifyChecksum(actualHash, filename, versionPath, baseUrl) {
|
|
154
|
+
const response = await downloadWithFallback(
|
|
155
|
+
versionPath,
|
|
156
|
+
"SHA256SUMS",
|
|
157
|
+
FETCH_TIMEOUT_MS,
|
|
158
|
+
baseUrl
|
|
159
|
+
);
|
|
127
160
|
const text = await response.text();
|
|
128
161
|
const requireSig = process.env["QWEN_REQUIRE_SIGNATURE"] === "1";
|
|
129
162
|
let sigResponse;
|
|
130
163
|
try {
|
|
131
|
-
sigResponse = await downloadWithFallback(
|
|
164
|
+
sigResponse = await downloadWithFallback(
|
|
165
|
+
versionPath,
|
|
166
|
+
"SHA256SUMS.sig",
|
|
167
|
+
FETCH_TIMEOUT_MS,
|
|
168
|
+
baseUrl
|
|
169
|
+
);
|
|
132
170
|
} catch (err) {
|
|
133
171
|
debugLogger.debug("SHA256SUMS.sig not available:", err);
|
|
134
172
|
}
|
|
@@ -163,11 +201,12 @@ async function verifyChecksum(actualHash, filename, versionPath) {
|
|
|
163
201
|
}
|
|
164
202
|
__name(verifyChecksum, "verifyChecksum");
|
|
165
203
|
var MAX_DOWNLOAD_BYTES = 512 * 1024 * 1024;
|
|
166
|
-
async function downloadToFile(versionPath, filename, destPath) {
|
|
204
|
+
async function downloadToFile(versionPath, filename, destPath, baseUrl) {
|
|
167
205
|
const response = await downloadWithFallback(
|
|
168
206
|
versionPath,
|
|
169
207
|
filename,
|
|
170
|
-
ARCHIVE_TIMEOUT_MS
|
|
208
|
+
ARCHIVE_TIMEOUT_MS,
|
|
209
|
+
baseUrl
|
|
171
210
|
);
|
|
172
211
|
const body = response.body;
|
|
173
212
|
if (!body) throw new Error("Empty response body");
|
|
@@ -772,6 +811,7 @@ function detectTarget() {
|
|
|
772
811
|
__name(detectTarget, "detectTarget");
|
|
773
812
|
async function performStandaloneUpdate(standaloneDir, newVersion) {
|
|
774
813
|
const versionPath = normalizeVersion(newVersion);
|
|
814
|
+
const baseUrl = resolveUpdateBaseUrl();
|
|
775
815
|
let target;
|
|
776
816
|
let isFirstTimeMigration = false;
|
|
777
817
|
const manifestPath = path.join(standaloneDir, "manifest.json");
|
|
@@ -823,10 +863,11 @@ async function performStandaloneUpdate(standaloneDir, newVersion) {
|
|
|
823
863
|
const archiveHash = await downloadToFile(
|
|
824
864
|
versionPath,
|
|
825
865
|
filename,
|
|
826
|
-
archivePath
|
|
866
|
+
archivePath,
|
|
867
|
+
baseUrl
|
|
827
868
|
);
|
|
828
869
|
debugLogger.info("Verifying checksum...");
|
|
829
|
-
await verifyChecksum(archiveHash, filename, versionPath);
|
|
870
|
+
await verifyChecksum(archiveHash, filename, versionPath, baseUrl);
|
|
830
871
|
debugLogger.info("Extracting archive...");
|
|
831
872
|
await extractArchive(archivePath, extractDir, target);
|
|
832
873
|
const newInstallDir = path.join(extractDir, "qwen-code");
|