@qwen-code/qwen-code 0.23.1-preview.1 → 0.23.1
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 +57 -7
- package/bundled/qc-helper/docs/conversations-recovery.md +102 -0
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +26 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +1 -1
- package/bundled/qc-helper/docs/features/commands.md +71 -6
- 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/features/skills.md +40 -0
- package/bundled/qc-helper/docs/qwen-serve.md +19 -1
- package/chunks/{MaxSizedBox-5ARLO5PR.js → MaxSizedBox-UDO6Y7RB.js} +35 -36
- package/chunks/{StandaloneSessionPicker-T6B322CB.js → StandaloneSessionPicker-D4CUOO4H.js} +55 -56
- package/chunks/{acp-startup-profiler-6ULXXQMS.js → acp-startup-profiler-KEU6VAYR.js} +2 -2
- package/chunks/{acpAgent-WTDEY5KD.js → acpAgent-KWLJFADK.js} +210 -131
- package/chunks/{agent-NXPUXEVZ.js → agent-GSUPGEOL.js} +24 -25
- package/chunks/{agent-headless-QQZTWOKO.js → agent-headless-HNYCQUJB.js} +24 -25
- package/chunks/{anthropicContentGenerator-6XDHXIII.js → anthropicContentGenerator-I7LQZH26.js} +30 -7
- package/chunks/{artifact-tool-DFVVJXL2.js → artifact-tool-P52OKKEF.js} +1 -1
- package/chunks/{askUserQuestion-GF7VQ44M.js → askUserQuestion-I5W5S3D6.js} +2 -2
- package/chunks/{bridge-OHY5OGOZ.js → bridge-B7CV6RVI.js} +40 -41
- package/chunks/{channel-management-service-ZDDG3G5S.js → channel-management-service-TRTLQTSV.js} +4 -4
- package/chunks/{channel-settings-store-7BJAS2SU.js → channel-settings-store-FW45IRUP.js} +46 -47
- package/chunks/{channel-worker-group-2ISMRENV.js → channel-worker-group-PIYPVCTF.js} +6 -6
- package/chunks/{channel-worker-manager-VSRPVPRH.js → channel-worker-manager-FQHEDTD2.js} +6 -6
- package/chunks/{channel-worker-supervisor-SRJBK72Z.js → channel-worker-supervisor-XJPZZ3VK.js} +3 -3
- package/chunks/{chunk-2WGJG2KW.js → chunk-25CBAK3H.js} +4 -4
- package/chunks/{chunk-XUSOYE2I.js → chunk-27LTEY6D.js} +1 -1
- package/chunks/{chunk-WTW36TJ3.js → chunk-2EKVPSIJ.js} +1 -1
- package/chunks/{chunk-NAKALAL4.js → chunk-2TMJRF46.js} +116 -15
- package/chunks/{chunk-E4L5BM2B.js → chunk-2YS3NU4A.js} +4 -4
- package/chunks/chunk-2Z3T52OC.js +82 -0
- package/chunks/{chunk-ER273QE6.js → chunk-2ZFO5JD7.js} +21 -4
- package/chunks/{chunk-WXC6OAWD.js → chunk-3BTHHXXE.js} +1 -1
- package/chunks/{chunk-GXZHYPHZ.js → chunk-3LPJ776W.js} +5 -2
- package/chunks/{chunk-XY3USGFE.js → chunk-3VDLQUR2.js} +1 -1
- package/chunks/{chunk-LK7S2D6V.js → chunk-3VWPPK5Q.js} +58 -4
- package/chunks/{chunk-IKLFS6SC.js → chunk-3YQMUBTS.js} +3 -3
- package/chunks/{chunk-P4RUUG64.js → chunk-45ROPFQY.js} +1 -1
- package/chunks/{chunk-W4LL5RZO.js → chunk-4ALNJDHL.js} +52 -13
- package/chunks/{chunk-D6PIMKY3.js → chunk-4VY3ITHR.js} +4 -4
- package/chunks/{chunk-H3UDNQLO.js → chunk-5CVY5Q2P.js} +3 -3
- package/chunks/{chunk-6UIACMGH.js → chunk-5DQ4YTIZ.js} +1 -1
- package/chunks/{chunk-P6LATTDG.js → chunk-5IL2BZHW.js} +3 -3
- package/chunks/{chunk-537SQ2AI.js → chunk-5WC2ECUK.js} +104 -16
- package/chunks/{chunk-HFTB354P.js → chunk-5Z4FCEPY.js} +60 -6
- package/chunks/{chunk-3K65MUKD.js → chunk-65I7S4Z3.js} +2 -1
- package/chunks/{chunk-AQ5NAGWI.js → chunk-66JBCTJF.js} +8 -7
- package/chunks/{chunk-54TF2ZIQ.js → chunk-6JXHO7LG.js} +3 -3
- package/chunks/{chunk-YCDL2SAS.js → chunk-6QILGINT.js} +2 -2
- package/chunks/{chunk-P5LDR7FI.js → chunk-6QV7Z74P.js} +3 -3
- package/chunks/{chunk-4HC4DYKN.js → chunk-6RZX2HIH.js} +1 -1
- package/chunks/{chunk-O45WBTNS.js → chunk-6SADVYQQ.js} +3 -3
- package/chunks/{chunk-KE3Q4JMY.js → chunk-6TPVIESH.js} +5 -7
- package/chunks/{chunk-2LD5U7Q3.js → chunk-6YEOCHSE.js} +29 -1
- package/chunks/{chunk-QWZOOIR3.js → chunk-75LBC7SV.js} +69 -12
- package/chunks/{chunk-7BZS4ZDV.js → chunk-7SL55L5H.js} +25 -18
- package/chunks/{chunk-O2GG7H4C.js → chunk-ARYNBBBM.js} +3 -3
- package/chunks/{chunk-CZACBHAW.js → chunk-B3EL44K3.js} +5 -5
- package/chunks/{chunk-VY6UVU7G.js → chunk-CABDNUJ4.js} +2 -2
- package/chunks/{chunk-RVNS7NWN.js → chunk-CALNF3Z3.js} +1 -1
- package/chunks/{chunk-MWHY26G3.js → chunk-CHVU543W.js} +1 -1
- package/chunks/{chunk-GZWW2QWR.js → chunk-CIKL2DQP.js} +2 -2
- package/chunks/{chunk-R355CUNQ.js → chunk-CLKE4IY3.js} +1 -77
- package/chunks/{chunk-MUZCSTOO.js → chunk-CRZBDVP2.js} +5 -4
- package/chunks/{chunk-SFMCYMVF.js → chunk-D6AQNMUA.js} +4 -4
- package/chunks/{chunk-D4CU6DKR.js → chunk-DO5SMV52.js} +10 -8
- package/chunks/{chunk-ZAZ3NFL6.js → chunk-DXQ6Z7AH.js} +315 -63
- package/chunks/{chunk-IXSGOSEG.js → chunk-DZ6D4B3K.js} +28 -25
- package/chunks/{chunk-GMNLYQOS.js → chunk-E6TI726I.js} +1 -1
- package/chunks/{chunk-JBTZUFR4.js → chunk-E7XSUYCZ.js} +6 -6
- package/chunks/{chunk-AHBLRVD5.js → chunk-EEKU6COG.js} +4 -4
- package/chunks/{chunk-47BZVBTE.js → chunk-EHTKOO6W.js} +4 -4
- package/chunks/{chunk-HJ34U5J4.js → chunk-ENZDGHGJ.js} +4 -4
- package/chunks/{chunk-IFD3BTEA.js → chunk-EOET4H7C.js} +3 -3
- package/chunks/{chunk-ZTAVGFKA.js → chunk-ERXNTINK.js} +1 -1
- package/chunks/{chunk-F47DITLZ.js → chunk-FAWTMDX7.js} +14 -0
- package/chunks/{chunk-KPXRFTT7.js → chunk-FETY36NQ.js} +1 -1
- package/chunks/{chunk-5JLQWQK6.js → chunk-FV4DM2M4.js} +2 -2
- package/chunks/{chunk-4F2QRVW6.js → chunk-FW4E4QPG.js} +1 -1
- package/chunks/{chunk-KJJPJYHI.js → chunk-FWRRUITH.js} +8 -8
- package/chunks/{chunk-4VUVBN3Y.js → chunk-G6UUOCUT.js} +87 -0
- package/chunks/{chunk-4JAGXZR3.js → chunk-GM44O6F7.js} +1 -1
- package/chunks/{chunk-4MCY33Y2.js → chunk-GNY7B3CA.js} +1 -1
- package/chunks/{chunk-VEFRT7NX.js → chunk-H3Q3RSKZ.js} +1 -1
- package/chunks/{chunk-43NOB5NM.js → chunk-HIXUUCGY.js} +188 -13
- package/chunks/{chunk-EJNYBDYC.js → chunk-HNLMYDQE.js} +1 -1
- package/chunks/{chunk-JOPC3FND.js → chunk-HUX2DOTF.js} +5 -5
- package/chunks/{chunk-GCFZ2LAX.js → chunk-HZ2HUXX7.js} +2 -2
- package/chunks/{chunk-CWNC7M73.js → chunk-IKG2YVRZ.js} +2 -2
- package/chunks/{chunk-L4R7BCVV.js → chunk-J3TJH52D.js} +1 -1
- package/chunks/{chunk-QMFOYPGV.js → chunk-J3VZF2AL.js} +2 -2
- package/chunks/{chunk-ZJ2LM2SI.js → chunk-JGDRB4FP.js} +104 -33
- package/chunks/{chunk-LMJQSPWB.js → chunk-KA5HR3G2.js} +1 -1
- package/chunks/{chunk-G34YLYCS.js → chunk-L7V52QEZ.js} +10 -10
- package/chunks/{chunk-GVVCLL2P.js → chunk-LNCNUMJ5.js} +451 -396
- package/chunks/{chunk-RDKXZ2LS.js → chunk-LYT2OU7D.js} +1 -1
- package/chunks/{chunk-SAZS4IWW.js → chunk-LZGFVUWZ.js} +3 -3
- package/chunks/{chunk-32YDNYXP.js → chunk-M73KHGNR.js} +13 -66
- package/chunks/{chunk-ADJD4LZF.js → chunk-MA5OUNN6.js} +1 -1
- package/chunks/{chunk-2RYWGYB3.js → chunk-MFYH2VXV.js} +3 -3
- package/chunks/{chunk-RPBMP6BN.js → chunk-MWIO7MF6.js} +3 -0
- package/chunks/{chunk-OECNP26L.js → chunk-N6S3NUYJ.js} +1 -1
- package/chunks/{chunk-5MTARK4Y.js → chunk-N7YQEKGX.js} +6 -6
- package/chunks/{chunk-XOVVCGZX.js → chunk-NB3NDQQK.js} +1 -1
- package/chunks/chunk-NOO4QFXM.js +171 -0
- package/chunks/{chunk-NGX4NUNP.js → chunk-O2FEO2CB.js} +131 -6
- package/chunks/{chunk-XHGGYCTA.js → chunk-O2JBJQCF.js} +1 -1
- package/chunks/{chunk-LPBQODMR.js → chunk-OESZTXTG.js} +4 -4
- package/chunks/{chunk-UKADFFL2.js → chunk-OFVAS4AR.js} +1 -1
- package/chunks/{chunk-TDP7UULF.js → chunk-OPMKGOLD.js} +1 -1
- package/chunks/{chunk-LDS57224.js → chunk-OWCFKIFQ.js} +1 -1
- package/chunks/{chunk-I72PHOKL.js → chunk-PDUMGZ2P.js} +1524 -1382
- package/chunks/{chunk-JRYL3T2O.js → chunk-PQSCGZT2.js} +1 -1
- package/chunks/{chunk-WEXA2DNG.js → chunk-PSPAM24S.js} +14 -0
- package/chunks/{chunk-UKKYOIVT.js → chunk-QAZ2MGYT.js} +2 -2
- package/chunks/{chunk-J3O5I5ZD.js → chunk-QK4K76T6.js} +3 -3
- package/chunks/{chunk-NUQFUXOG.js → chunk-QTNCGZHQ.js} +2 -0
- package/chunks/{chunk-5YY5MZT6.js → chunk-QZOXVQPK.js} +1 -1
- package/chunks/{chunk-QJVZLILI.js → chunk-R7OO56VZ.js} +1 -1
- package/chunks/{chunk-IQN2CCIE.js → chunk-RNYENHN5.js} +398 -55
- package/chunks/{chunk-64MQTIX7.js → chunk-RPFJJ33Z.js} +2 -2
- package/chunks/{chunk-4VZCORNT.js → chunk-RXT4QBDX.js} +1 -1
- package/chunks/{chunk-SN5FV4FY.js → chunk-S6QVI3MV.js} +3 -3
- package/chunks/{chunk-NXWYCSPL.js → chunk-SOA4HKRJ.js} +1 -1
- package/chunks/{chunk-JLWFGYXU.js → chunk-T2IHCZLS.js} +2 -2
- package/chunks/{chunk-DNPHKA72.js → chunk-TGC4264Q.js} +6 -6
- package/chunks/{chunk-PZV2FASB.js → chunk-TRWQQBVH.js} +1 -1
- package/chunks/{chunk-Y3ZKI4RQ.js → chunk-TWAMIEQ2.js} +85 -22
- package/chunks/{chunk-KK2GZGBK.js → chunk-TWWS7XUW.js} +14 -11
- package/chunks/{chunk-4IQKBLTQ.js → chunk-UHUT4IDM.js} +18 -9
- package/chunks/{chunk-BKNY7PDI.js → chunk-USN6VNTO.js} +1 -1
- package/chunks/{chunk-TMWB67LS.js → chunk-UXDVUFKU.js} +3 -3
- package/chunks/{chunk-HY3DXYZK.js → chunk-UYDQYDW2.js} +1 -1
- package/chunks/{chunk-3K456UJF.js → chunk-VF6D6EGV.js} +12 -4
- package/chunks/{chunk-PZUOHCWI.js → chunk-WAASYFPK.js} +2 -2
- package/chunks/{chunk-OHOO527W.js → chunk-WG7BL3FY.js} +52 -2
- package/chunks/{chunk-JPEAQJNS.js → chunk-WJDXKQIO.js} +1 -1
- package/chunks/{chunk-MNEYUNOE.js → chunk-WNISCNTA.js} +40 -2
- package/chunks/{chunk-Z6WZPXQH.js → chunk-WQMUGQ6G.js} +2 -2
- package/chunks/{chunk-N7VURC4O.js → chunk-WXFCI3O5.js} +2 -2
- package/chunks/{chunk-VU7O7CGQ.js → chunk-XDNFODER.js} +1 -1
- package/chunks/{chunk-N7EYO2E7.js → chunk-XQ4RDO5B.js} +1 -1
- package/chunks/{chunk-VDXYYVCD.js → chunk-XVTCSVBK.js} +579 -57
- package/chunks/{chunk-PTFFWTTO.js → chunk-XZ3Z43XL.js} +3 -3
- package/chunks/{chunk-QSC5YOEC.js → chunk-YAC7H4K3.js} +2 -2
- package/chunks/{chunk-43JNQAHO.js → chunk-YCEKI7QX.js} +51 -10
- package/chunks/{chunk-7IKXTGZT.js → chunk-YI2YCNSP.js} +1 -1
- package/chunks/{chunk-VUSSAGKI.js → chunk-YZTGGCEE.js} +10 -2
- package/chunks/{chunk-WR3SH3EY.js → chunk-ZNO5BUAD.js} +149 -66
- package/chunks/{chunk-URSCX7S7.js → chunk-ZPL2TZNA.js} +353 -11
- package/chunks/{chunk-UEZOXZNI.js → chunk-ZU2T5JIS.js} +804 -371
- package/chunks/{config-utils-QXDOTXEQ.js → config-utils-KTDSQ4MU.js} +39 -40
- package/chunks/{contextCommand-RN4KARWC.js → contextCommand-UQ3KRYGK.js} +37 -38
- package/chunks/{core-runtime-NAZCOKHB.js → core-runtime-JR34JAFH.js} +35 -36
- package/chunks/{create-sub-session-BCSM4WKB.js → create-sub-session-RGPJOI4S.js} +45 -40
- package/chunks/{create-sub-session-BQ3SE4TX.js → create-sub-session-TGIX63YU.js} +2 -2
- package/chunks/{cron-create-D6HQ7I7I.js → cron-create-GTPVMJCF.js} +1 -1
- package/chunks/{cron-delete-KK3D2SQV.js → cron-delete-ZBK27Z4K.js} +1 -1
- package/chunks/{cron-list-VBF3IZMF.js → cron-list-KTFKFDKC.js} +1 -1
- package/chunks/{daemon-LCUELM6E.js → daemon-UI6SQSBV.js} +1 -1
- package/chunks/{daemon-git-worktree-guard-3K5CAU36.js → daemon-git-worktree-guard-H3OA26KQ.js} +35 -36
- package/chunks/{daemon-status-provider-4X3ZZQTZ.js → daemon-status-provider-6WZLKSZU.js} +45 -46
- package/chunks/{daemon-trust-policy-R45CFUJA.js → daemon-trust-policy-3EDP2BYD.js} +42 -43
- package/chunks/{daemon-trust-policy-monitor-DSSFCO3K.js → daemon-trust-policy-monitor-CRHZPK52.js} +42 -43
- package/chunks/{deferred-core-runtime-UO2M6WYI.js → deferred-core-runtime-LO5NTQQ4.js} +35 -36
- package/chunks/{discovery-TUM3ZQ6U.js → discovery-XP4RMDUM.js} +4 -2
- package/chunks/{display-image-EVVTBVYE.js → display-image-CTNHJRZC.js} +4 -4
- package/chunks/{dist-SIHF5MU2.js → dist-24TCWK5H.js} +1 -1
- package/chunks/{dist-AFH3BMZZ.js → dist-5I4HLUTO.js} +1 -1
- package/chunks/{dist-3T5MDUHP.js → dist-FDISN4AK.js} +1 -1
- package/chunks/{dist-SB2XRXZA.js → dist-M4CBX53H.js} +1 -1
- package/chunks/{dist-UVHW2U56.js → dist-NQ2636VT.js} +1 -1
- package/chunks/{dist-PH5RSTEA.js → dist-OR2ZQTXZ.js} +1 -1
- package/chunks/{dist-MK5PPBRF.js → dist-STAGIFNB.js} +1099 -67
- package/chunks/{dist-R5Y34V6T.js → dist-WZTUKIDR.js} +2 -2
- package/chunks/{dist-QUU7TVE3.js → dist-XJ25G6OH.js} +1 -1
- package/chunks/{edit-VNBCTRWP.js → edit-LB7Z7XK5.js} +24 -25
- package/chunks/{en-JMR535HP.js → en-YJNRUQG4.js} +1 -1
- package/chunks/{enter-worktree-CEVK7MQ2.js → enter-worktree-YFTKHXHZ.js} +4 -4
- package/chunks/{enterPlanMode-4KMZMUIA.js → enterPlanMode-P6TVUFIY.js} +24 -25
- package/chunks/{environment-S2HYQDON.js → environment-QATJNNKI.js} +38 -39
- package/chunks/{errors-DAAN5TL7.js → errors-3XJ37PS2.js} +37 -38
- package/chunks/{exit-worktree-D3YE6MUN.js → exit-worktree-NF2XEMES.js} +5 -5
- package/chunks/{exitPlanMode-HR36HG3D.js → exitPlanMode-A3OKL5UO.js} +24 -25
- package/chunks/{fast-path-4IWSW3UV.js → fast-path-DBIT5YQQ.js} +3 -3
- package/chunks/{fast-path-settings-ISEJPRYE.js → fast-path-settings-SATXY3PD.js} +3 -3
- package/chunks/{glob-IZYB2XH2.js → glob-73EDTXUE.js} +24 -25
- package/chunks/{goal-tools-VGUPKQDJ.js → goal-tools-DFI6YMSD.js} +24 -25
- package/chunks/{grep-OUVLNXG7.js → grep-BLHF2S5D.js} +2 -2
- package/chunks/{handleAutoUpdate-D56FMDTW.js → handleAutoUpdate-2FUNJO3B.js} +38 -39
- package/chunks/{i18n-BKE5WO6T.js → i18n-FDIA6KFI.js} +38 -37
- package/chunks/{image-gen-SHVQ3XID.js → image-gen-XP4NNIYG.js} +5 -5
- package/chunks/{initializer-MS4SGEHF.js → initializer-4MJTJOTW.js} +42 -43
- package/chunks/{installationInfo-542MGC4S.js → installationInfo-232RA2OK.js} +35 -36
- package/chunks/{list-H6XTKUWL.js → list-WN6WSGEB.js} +45 -46
- package/chunks/{list-agents-ULYBGJXC.js → list-agents-I5TRH3J7.js} +2 -2
- package/chunks/{llm-3NUC4EJY.js → llm-UDFWQWZA.js} +77 -78
- package/chunks/{llm-content-generator-R4NL3OQN.js → llm-content-generator-VLMZ2A7A.js} +23 -8
- package/chunks/{loadedSettingsAdapter-3XLKYDVT.js → loadedSettingsAdapter-OBQEIXM7.js} +42 -43
- package/chunks/{loggingContentGenerator-ZYSWVNEO.js → loggingContentGenerator-RGVUMUVX.js} +26 -27
- package/chunks/{loop-wakeup-B27BEYRL.js → loop-wakeup-HL6XOWI4.js} +2 -2
- package/chunks/{ls-3IIMMVKF.js → ls-YV7RKLKY.js} +1 -1
- package/chunks/{lsp-VJAT7XKS.js → lsp-NO3AMRZT.js} +1 -1
- package/chunks/{managed-npm-update-L2I53ZAI.js → managed-npm-update-QBAJYCFU.js} +35 -36
- package/chunks/{mcp-4PIXQASW.js → mcp-OTIZZCPY.js} +42 -43
- package/chunks/{monitor-O2YQTOZZ.js → monitor-BV5XF6LL.js} +24 -25
- package/chunks/{nonInteractiveCli-LV7CDBA2.js → nonInteractiveCli-W6MUKDVJ.js} +79 -77
- package/chunks/{notebook-edit-4RE2ALH4.js → notebook-edit-HGBEKGTE.js} +24 -25
- package/chunks/{openaiContentGenerator-7ND7K5CP.js → openaiContentGenerator-NSU3ERBH.js} +15 -15
- package/chunks/{pidfile-UFTLQ7NP.js → pidfile-LE3TU4GE.js} +35 -36
- package/chunks/{processUtils-3XBB4FYV.js → processUtils-YFBGJK67.js} +2 -2
- package/chunks/{prompt-terminal-ledger-2QASOGMM.js → prompt-terminal-ledger-4W4W7DSO.js} +36 -37
- package/chunks/{qwenContentGenerator-AELTUTH6.js → qwenContentGenerator-HTA57WFC.js} +28 -29
- package/chunks/{qwenOAuth2-BS5D2LYV.js → qwenOAuth2-KX6LVYQ3.js} +4 -4
- package/chunks/{read-file-PDWHZPHX.js → read-file-KHPQ2MB6.js} +4 -4
- package/chunks/{read-mcp-resource-YXJZ75UB.js → read-mcp-resource-D3N75DGF.js} +1 -1
- package/chunks/{record-artifact-WJDOV6XU.js → record-artifact-Q5CRGJTP.js} +2 -2
- package/chunks/{report-findings-Q4UACKWR.js → report-findings-TJ34R7QK.js} +3 -3
- package/chunks/{request-shutdown-2YZ3E3GH.js → request-shutdown-LRKMTBAD.js} +6 -6
- package/chunks/{resumeHistoryUtils-QRXZEEBA.js → resumeHistoryUtils-K7RV3QBN.js} +39 -40
- package/chunks/{ripGrep-KSOOLE6H.js → ripGrep-NBBVCMG4.js} +7 -7
- package/chunks/{run-qwen-serve-RTAREPT6.js → run-qwen-serve-A3JBOZCM.js} +58 -60
- package/chunks/{runtime-ESFSCJRZ.js → runtime-7YOU2KJ3.js} +47 -48
- package/chunks/{scheduled-tasks-6ZHRNBH6.js → scheduled-tasks-52LXK7LN.js} +42 -43
- package/chunks/{scheduler-DQI6KV7T.js → scheduler-J44M72VM.js} +37 -38
- package/chunks/{send-message-PQCVSVMN.js → send-message-AWKUDJBH.js} +8 -8
- package/chunks/{serve-FY7ZEW52.js → serve-TRC6XJUB.js} +42 -43
- package/chunks/{server-KNDY6K5F.js → server-YPNTJLX2.js} +1314 -841
- package/chunks/{session-MCEPXAZP.js → session-FMMIBFYX.js} +98 -84
- package/chunks/{session-attachments-root-OLNAE6GF.js → session-attachments-root-LDJMNK7K.js} +35 -36
- package/chunks/{session-pr-refresh-HKJHQQQK.js → session-pr-refresh-NLR4EK2J.js} +41 -42
- package/chunks/{settings-VXO4WBMK.js → settings-A46L577J.js} +41 -42
- package/chunks/{shell-U263OTES.js → shell-Q5LSQPPY.js} +24 -25
- package/chunks/{skill-SDODGBKL.js → skill-75KPJRCM.js} +10 -57
- package/chunks/{skill-settings-YEIA22QJ.js → skill-settings-775YT4YR.js} +41 -42
- package/chunks/{spawnChannel-4WJZVFPP.js → spawnChannel-XY73I5CU.js} +37 -38
- package/chunks/{standalone-update-ZWVQUO64.js → standalone-update-L46XXNQ2.js} +37 -38
- package/chunks/{start-opentui-ui-BFYCJQRZ.js → start-opentui-ui-WLV43247.js} +2007 -1003
- package/chunks/{startInteractiveUI-JYAFCMHL.js → startInteractiveUI-F5DKMLOV.js} +1231 -1528
- package/chunks/{syntheticOutput-AUAJBNXR.js → syntheticOutput-D2P5V6RG.js} +2 -2
- package/chunks/{task-create-LD5ISM3E.js → task-create-PMAFST2T.js} +7 -7
- package/chunks/{task-list-YISJ4RJA.js → task-list-R2HSY2NC.js} +1 -1
- package/chunks/{task-stop-65ZOVATJ.js → task-stop-BFSKRTGV.js} +1 -1
- package/chunks/{task-update-AAN4ZVEY.js → task-update-JYC57USF.js} +7 -7
- package/chunks/{team-create-KU7MABNO.js → team-create-2PATB77U.js} +24 -25
- package/chunks/{team-delete-XFRRTJTT.js → team-delete-CBHVBTPB.js} +1 -1
- package/chunks/{team-plan-approval-DPB377A3.js → team-plan-approval-QTANEWOS.js} +24 -25
- package/chunks/{terminal-image-renderer-WGWRENOF.js → terminal-image-renderer-OGULCFNF.js} +37 -38
- package/chunks/{theme-manager-GBUFULSO.js → theme-manager-CNO3QERP.js} +35 -36
- package/chunks/{todoWrite-G7NT4IFP.js → todoWrite-5ERKFWAK.js} +3 -5
- package/chunks/{tool-search-6YUXHBPT.js → tool-search-VXWEOZE7.js} +9 -9
- package/chunks/{total-session-admission-54R2JQ5L.js → total-session-admission-4KAADZPB.js} +41 -42
- package/chunks/{trustedFolders-KAJIDJTH.js → trustedFolders-PPJSOPOT.js} +36 -37
- package/chunks/{update-relaunch-XM4IWBFD.js → update-relaunch-4PT4MW7B.js} +5 -5
- package/chunks/{updateCheck-W6UZFURI.js → updateCheck-WAVFLWNG.js} +37 -38
- package/chunks/{useAutoAcceptIndicator-LAWYHY3U.js → useAutoAcceptIndicator-XNED4NRB.js} +44 -45
- package/chunks/{validateNonInterActiveAuth-7WCKHRN2.js → validateNonInterActiveAuth-J676DUQ2.js} +74 -74
- package/chunks/{version-3ZU43RJ6.js → version-J6SRRQB2.js} +1 -1
- package/chunks/{web-fetch-QHI2SQL4.js → web-fetch-FMZZYX44.js} +7 -7
- package/chunks/{web-search-3KZZKWNY.js → web-search-3G2KXCX5.js} +19 -8
- package/chunks/{workflow-HRW7Y2X4.js → workflow-PPZZICQ7.js} +26 -27
- package/chunks/{workspace-providers-status-KTGCWCPC.js → workspace-providers-status-IIYTAQST.js} +46 -47
- package/chunks/{workspace-registration-store-LHLPPWNE.js → workspace-registration-store-VHCDXAV7.js} +1 -1
- package/chunks/{workspace-registry-X34MLN52.js → workspace-registry-I7VQIPS2.js} +41 -42
- package/chunks/{workspace-runtime-coordinator-U4PW4P7K.js → workspace-runtime-coordinator-DBGNY32G.js} +41 -42
- package/chunks/{workspace-service-KD7BCGYL.js → workspace-service-QSKB2T54.js} +47 -48
- package/chunks/{workspace-skills-status-YJGO6Y3T.js → workspace-skills-status-T7GPT65J.js} +43 -44
- package/chunks/{workspace-trust-reconciler-EUYHISCH.js → workspace-trust-reconciler-2PKRDAU4.js} +48 -49
- package/chunks/{write-file-EBSB34NJ.js → write-file-L76CGFTQ.js} +26 -27
- package/chunks/{zh-TW-W2GNP2IU.js → zh-TW-N2TBF2F2.js} +1 -1
- package/chunks/{zh-DVFYHRK5.js → zh-VBFCRQBL.js} +1 -1
- package/chunks/{zoom-image-UJ5VKWKP.js → zoom-image-TDJJY2VZ.js} +4 -4
- package/cli.js +13 -13
- package/export-transcript-document.js +126 -122
- package/locales/en.js +2 -2
- package/locales/zh-TW.js +2 -2
- package/locales/zh.js +2 -2
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-Dur--luQ.js → abnfDiagram-VCTEODGH-DHc6plZn.js} +1 -1
- package/web-shell/assets/{arc-tYLobxFi.js → arc-BQ9m8TDV.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-IG6aXD03.js → architectureDiagram-5GKGNRK7-D5ap3oVB.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-C6eBSkfA.js → blockDiagram-NRAW4CY4-BIbnyNph.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BrX3HJqB.js → c4Diagram-UCG6FXSJ-BRsdx_iG.js} +1 -1
- package/web-shell/assets/channel-uMMdTrYk.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-B3fcJ8ee.js → chunk-2Q5K7J3B-3lf1fNlx.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-CeC90yKM.js → chunk-5VM5RSS4-DP8VNRc4.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-CW44RVki.js → chunk-F27PBJKO-DrohDmZ6.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-D1PAMukD.js → chunk-G27WJ6UU-UZ2QhSx6.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-Dt3Y2Fvx.js → chunk-JWPE2WC7-BIMHVcZK.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-CZHw2lLI.js → chunk-LCL6LL3I-izRxdSDd.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-ysNAdTGx.js → chunk-POPQ4Y6H-CXADD4PP.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-BdNXW6YQ.js → chunk-SVP7TREG-B96d8Y_1.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-DgqQ9UA8.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-BILImXzJ.js → cose-bilkent-JH36ORCC-CT6tXVAS.js} +1 -1
- package/web-shell/assets/csv-CX7rUNeC.svg +1 -0
- package/web-shell/assets/{cynefin-OW5HDTMX-DR88Pund.js → cynefin-OW5HDTMX-X1NS4vtV.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-BYFbfkA6.js → cynefinDiagram-5FMLGOSQ-DNsKNOT4.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-rfpyc6sX.js → dagre-3AP2YEHR-9-AHKqsb.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-BJxLmEwH.js → diagram-S7CK7UJ4-Bjgms7j6.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-H34xm7k3.js → diagram-UQ7AKVKN-h6bCprbE.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-HYxhwNLx.js → diagram-VSXAHHWV-4SbQXVLt.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-BJazso8F.js → diagram-VX7I27RA-B5gPCzzB.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-Clje1aNy.js → diagram-Z3DM3KII-DFJXIA3A.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-M93YBkFh.js → ebnfDiagram-PWID7BFC-FwyaU7VY.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-DY8XzSHU.js → erDiagram-SSCWMZ5O-8vJQh2te.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-CE6Aylcq.js → flowDiagram-A5DVABFB-BzA_1gMN.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-DI-5LL22.js → ganttDiagram-EL5Y4UJY-Co-ABbVX.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-C7BZWElk.js → gitGraphDiagram-WWUBYQGX-DW_FcyrX.js} +1 -1
- package/web-shell/assets/{index-DclFHns9.js → index-BbMXfhNG.js} +1 -1
- package/web-shell/assets/{index-CVyqwW7y.js → index-Bu-rZoJ-.js} +483 -475
- package/web-shell/assets/index-CsPwZ1ut.css +36 -0
- package/web-shell/assets/{infoDiagram-RXCK75RN-CGUSy4Pc.js → infoDiagram-RXCK75RN-BEgfhUFN.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-B5BVks9q.js → ishikawaDiagram-5VMMS53U-DCsMxQmc.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-CFh6Tf7h.js → journeyDiagram-EYS64GPL-DyIEYoHz.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-B7TlxP7c.js → kanban-definition-3QL26DDD-CkxjqCNr.js} +1 -1
- package/web-shell/assets/{layout-Br_pZq2Q.js → layout-BEWc0Al9.js} +1 -1
- package/web-shell/assets/{linear-BVlP6fte.js → linear-CNuNxirL.js} +1 -1
- package/web-shell/assets/{mermaid.core-TrcYWoiF.js → mermaid.core-DZBre674.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-BJ4LzqjZ.js → mindmap-definition-FBJOCRG2-CpafFz_F.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-1b_MxlOl.js → pegDiagram-XKGWAZYB-DfZqk_dq.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-B8zl0YhY.js → pieDiagram-E7YTZNPT-S0UWXlgC.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-CIZO8ukl.js → quadrantDiagram-AXDQQJYC-dd37_Ohj.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-CepHSbCj.js → railroadDiagram-O6MQD6OU-CH8NJZ7u.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BCgxkcSW.js → requirementDiagram-EFPCY7ZU-CFdqWYih.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CE5CcoMM.js → sankeyDiagram-P5KCCOFB-CsddcEGD.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-DvgHi-d5.js → sequenceDiagram-WJ2MYXX4-BZ270mGw.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-T-fAsCPX.js → sizeCapture-X5ZJPWSS-CGaS4DBV.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-DYHaul-5.js → stateDiagram-HBIQ2CUA-COpIzMu6.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-D6qEVAji.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-Dbz3Qiej.js → swimlanes-XN3QIQJK-CMF889m3.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-mem5Jj4m.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-9NVRts3N.js → timeline-definition-24CTP7MA-BelnxYz5.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-C7cb7vnH.js → vennDiagram-4TSXK5OY-CU-NRqIB.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CG-8Ddjm.js → wardleyDiagram-VM6X3IG4-CDNKqWh-.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-iGeYAcP4.js → xychartDiagram-S5SC5T6Z-CLqguL5D.js} +1 -1
- package/web-shell/index.html +6 -3
- package/chunks/chunk-3UMWOKJC.js +0 -78
- package/chunks/chunk-FKJM6JKY.js +0 -98
- package/chunks/chunk-IQAFKVXS.js +0 -22
- package/web-shell/assets/channel-uEkvKckd.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DuPsnhWS.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DuPsnhWS.js +0 -1
- package/web-shell/assets/index-FO7JXPnH.css +0 -36
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BcYho9a4.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6HsOIgX.js +0 -8
|
@@ -23,10 +23,11 @@ import {
|
|
|
23
23
|
SessionConflictError,
|
|
24
24
|
SessionNotArchivedError,
|
|
25
25
|
SessionNotFoundError
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-FAWTMDX7.js";
|
|
27
27
|
import {
|
|
28
|
-
readWorktreeSession
|
|
29
|
-
|
|
28
|
+
readWorktreeSession,
|
|
29
|
+
readWorktreeSessionStrict
|
|
30
|
+
} from "./chunk-YZTGGCEE.js";
|
|
30
31
|
import {
|
|
31
32
|
SESSION_PR_LIST_LIMIT,
|
|
32
33
|
SESSION_PR_URL_MAX_LENGTH,
|
|
@@ -40,7 +41,12 @@ import {
|
|
|
40
41
|
gitEnv,
|
|
41
42
|
readSessionPrs,
|
|
42
43
|
toSessionPrInfo
|
|
43
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-PDUMGZ2P.js";
|
|
45
|
+
import {
|
|
46
|
+
GitWorktreeService,
|
|
47
|
+
WORKTREE_SESSION_FILE,
|
|
48
|
+
readWorktreeSessionMarkerStrict
|
|
49
|
+
} from "./chunk-HIXUUCGY.js";
|
|
44
50
|
import {
|
|
45
51
|
updateCronTasks
|
|
46
52
|
} from "./chunk-F53KKZUD.js";
|
|
@@ -1322,6 +1328,7 @@ __name(createWorkspaceRuntimeSessionService, "createWorkspaceRuntimeSessionServi
|
|
|
1322
1328
|
|
|
1323
1329
|
// packages/cli/src/serve/server/session-archive.ts
|
|
1324
1330
|
init_esbuild_shims();
|
|
1331
|
+
import fs2 from "node:fs";
|
|
1325
1332
|
|
|
1326
1333
|
// packages/cli/src/serve/scheduled-task-session-lifecycle.ts
|
|
1327
1334
|
init_esbuild_shims();
|
|
@@ -1394,6 +1401,296 @@ async function removeTasksForSessions(projectRoot, sessionIds, options = {}) {
|
|
|
1394
1401
|
}
|
|
1395
1402
|
__name(removeTasksForSessions, "removeTasksForSessions");
|
|
1396
1403
|
|
|
1404
|
+
// packages/cli/src/serve/server/worktree-orphan-cleanup.ts
|
|
1405
|
+
init_esbuild_shims();
|
|
1406
|
+
import fs from "node:fs";
|
|
1407
|
+
import * as fsp from "node:fs/promises";
|
|
1408
|
+
import path2 from "node:path";
|
|
1409
|
+
import { execFile } from "node:child_process";
|
|
1410
|
+
import { promisify } from "node:util";
|
|
1411
|
+
|
|
1412
|
+
// packages/cli/src/serve/server/worktree-ownership-op.ts
|
|
1413
|
+
init_esbuild_shims();
|
|
1414
|
+
var worktreeOwnershipOpTails = /* @__PURE__ */ new Map();
|
|
1415
|
+
async function acquireWorktreeOwnershipOp(worktreeKey) {
|
|
1416
|
+
const previous = worktreeOwnershipOpTails.get(worktreeKey);
|
|
1417
|
+
let releaseGate;
|
|
1418
|
+
const gate = new Promise((resolve) => {
|
|
1419
|
+
releaseGate = resolve;
|
|
1420
|
+
});
|
|
1421
|
+
const tail = (previous ?? Promise.resolve()).then(() => gate);
|
|
1422
|
+
worktreeOwnershipOpTails.set(worktreeKey, tail);
|
|
1423
|
+
if (previous) {
|
|
1424
|
+
await previous;
|
|
1425
|
+
}
|
|
1426
|
+
let released = false;
|
|
1427
|
+
return () => {
|
|
1428
|
+
if (released) return;
|
|
1429
|
+
released = true;
|
|
1430
|
+
releaseGate();
|
|
1431
|
+
if (worktreeOwnershipOpTails.get(worktreeKey) === tail) {
|
|
1432
|
+
worktreeOwnershipOpTails.delete(worktreeKey);
|
|
1433
|
+
}
|
|
1434
|
+
};
|
|
1435
|
+
}
|
|
1436
|
+
__name(acquireWorktreeOwnershipOp, "acquireWorktreeOwnershipOp");
|
|
1437
|
+
|
|
1438
|
+
// packages/cli/src/serve/server/worktree-orphan-cleanup.ts
|
|
1439
|
+
function canonicalPath(candidate) {
|
|
1440
|
+
try {
|
|
1441
|
+
return fs.realpathSync(candidate);
|
|
1442
|
+
} catch {
|
|
1443
|
+
return candidate;
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1446
|
+
__name(canonicalPath, "canonicalPath");
|
|
1447
|
+
var execFileAsync = promisify(execFile);
|
|
1448
|
+
var DISPOSABLE_IGNORED_ROOTS = /* @__PURE__ */ new Set(["node_modules", "dist", "coverage"]);
|
|
1449
|
+
async function checkoutHasWork(worktreePath) {
|
|
1450
|
+
try {
|
|
1451
|
+
const { stdout } = await execFileAsync(
|
|
1452
|
+
"git",
|
|
1453
|
+
[
|
|
1454
|
+
"status",
|
|
1455
|
+
"--porcelain",
|
|
1456
|
+
"--untracked-files=normal",
|
|
1457
|
+
"--ignored=matching"
|
|
1458
|
+
],
|
|
1459
|
+
{ cwd: worktreePath, env: gitEnv() }
|
|
1460
|
+
);
|
|
1461
|
+
return stdout.split("\n").filter((line) => line.trim().length > 0).some((line) => {
|
|
1462
|
+
const entry = line.slice(3);
|
|
1463
|
+
if (entry === WORKTREE_SESSION_FILE) return false;
|
|
1464
|
+
if (line.startsWith("!!")) {
|
|
1465
|
+
return !DISPOSABLE_IGNORED_ROOTS.has(entry.split("/")[0]);
|
|
1466
|
+
}
|
|
1467
|
+
return true;
|
|
1468
|
+
});
|
|
1469
|
+
} catch {
|
|
1470
|
+
return true;
|
|
1471
|
+
}
|
|
1472
|
+
}
|
|
1473
|
+
__name(checkoutHasWork, "checkoutHasWork");
|
|
1474
|
+
function logWarning(message) {
|
|
1475
|
+
writeStderrLine(`qwen serve: ${message}`);
|
|
1476
|
+
}
|
|
1477
|
+
__name(logWarning, "logWarning");
|
|
1478
|
+
function logWorktreeCleanupPreserve(sessionId, reason) {
|
|
1479
|
+
logWarning(
|
|
1480
|
+
`worktree cleanup preserved checkout action=delete session=${safeLogValue(
|
|
1481
|
+
sessionId
|
|
1482
|
+
)} reason=${safeLogValue(reason)}`
|
|
1483
|
+
);
|
|
1484
|
+
}
|
|
1485
|
+
__name(logWorktreeCleanupPreserve, "logWorktreeCleanupPreserve");
|
|
1486
|
+
async function preclassifyWorktreeCleanup(service, sessionId, runtimeWorkspaceCwd) {
|
|
1487
|
+
let sidecarPath = service.getWorktreeSessionPath(sessionId);
|
|
1488
|
+
let sidecar = await readWorktreeSessionStrict(sidecarPath);
|
|
1489
|
+
if (sidecar.state === "missing") {
|
|
1490
|
+
const archivedPath = service.getWorktreeSessionPathForArchiveState(
|
|
1491
|
+
sessionId,
|
|
1492
|
+
"archived"
|
|
1493
|
+
);
|
|
1494
|
+
if (archivedPath !== sidecarPath) {
|
|
1495
|
+
sidecarPath = archivedPath;
|
|
1496
|
+
sidecar = await readWorktreeSessionStrict(sidecarPath);
|
|
1497
|
+
}
|
|
1498
|
+
}
|
|
1499
|
+
if (sidecar.state === "missing") return void 0;
|
|
1500
|
+
if (sidecar.state === "invalid") {
|
|
1501
|
+
logWorktreeCleanupPreserve(
|
|
1502
|
+
sessionId,
|
|
1503
|
+
`unreadable sidecar (${sidecar.reason})`
|
|
1504
|
+
);
|
|
1505
|
+
return void 0;
|
|
1506
|
+
}
|
|
1507
|
+
const session = sidecar.session;
|
|
1508
|
+
if (session.workspaceCwd === void 0) return void 0;
|
|
1509
|
+
if (session.supersededBy !== void 0) return void 0;
|
|
1510
|
+
if (!path2.isAbsolute(session.workspaceCwd) || !path2.isAbsolute(session.originalCwd)) {
|
|
1511
|
+
logWorktreeCleanupPreserve(
|
|
1512
|
+
sessionId,
|
|
1513
|
+
"sidecar base is not an absolute path"
|
|
1514
|
+
);
|
|
1515
|
+
return void 0;
|
|
1516
|
+
}
|
|
1517
|
+
if (runtimeWorkspaceCwd !== void 0) {
|
|
1518
|
+
if (canonicalPath(session.workspaceCwd) !== canonicalPath(runtimeWorkspaceCwd)) {
|
|
1519
|
+
logWorktreeCleanupPreserve(
|
|
1520
|
+
sessionId,
|
|
1521
|
+
"sidecar belongs to another workspace"
|
|
1522
|
+
);
|
|
1523
|
+
return void 0;
|
|
1524
|
+
}
|
|
1525
|
+
const workspaceRoots = [canonicalPath(runtimeWorkspaceCwd)];
|
|
1526
|
+
try {
|
|
1527
|
+
const repoTop = await new GitWorktreeService(
|
|
1528
|
+
runtimeWorkspaceCwd
|
|
1529
|
+
).getRepoTopLevel();
|
|
1530
|
+
if (repoTop && canonicalPath(repoTop) !== workspaceRoots[0]) {
|
|
1531
|
+
workspaceRoots.push(canonicalPath(repoTop));
|
|
1532
|
+
}
|
|
1533
|
+
} catch {
|
|
1534
|
+
}
|
|
1535
|
+
if (!workspaceRoots.includes(canonicalPath(session.originalCwd))) {
|
|
1536
|
+
logWorktreeCleanupPreserve(
|
|
1537
|
+
sessionId,
|
|
1538
|
+
"sidecar original cwd is outside the accepted roots"
|
|
1539
|
+
);
|
|
1540
|
+
return void 0;
|
|
1541
|
+
}
|
|
1542
|
+
}
|
|
1543
|
+
return {
|
|
1544
|
+
sessionId,
|
|
1545
|
+
sidecar: session,
|
|
1546
|
+
sidecarPath,
|
|
1547
|
+
lockKey: canonicalPath(session.worktreePath)
|
|
1548
|
+
};
|
|
1549
|
+
}
|
|
1550
|
+
__name(preclassifyWorktreeCleanup, "preclassifyWorktreeCleanup");
|
|
1551
|
+
function acquireWorktreeCleanupLock(plan) {
|
|
1552
|
+
return acquireWorktreeOwnershipOp(plan.lockKey);
|
|
1553
|
+
}
|
|
1554
|
+
__name(acquireWorktreeCleanupLock, "acquireWorktreeCleanupLock");
|
|
1555
|
+
async function worktreeAllowedRoots(workspaceCwd, originalCwd) {
|
|
1556
|
+
const roots = /* @__PURE__ */ new Set();
|
|
1557
|
+
for (const base of [workspaceCwd, originalCwd]) {
|
|
1558
|
+
if (!path2.isAbsolute(base)) continue;
|
|
1559
|
+
roots.add(path2.join(base, ".qwen", "worktrees"));
|
|
1560
|
+
try {
|
|
1561
|
+
const repoTop = await new GitWorktreeService(base).getRepoTopLevel();
|
|
1562
|
+
if (repoTop) {
|
|
1563
|
+
roots.add(path2.join(repoTop, ".qwen", "worktrees"));
|
|
1564
|
+
}
|
|
1565
|
+
} catch {
|
|
1566
|
+
}
|
|
1567
|
+
}
|
|
1568
|
+
return [...roots];
|
|
1569
|
+
}
|
|
1570
|
+
__name(worktreeAllowedRoots, "worktreeAllowedRoots");
|
|
1571
|
+
async function verifyWorktreeCleanupOwnership(plan) {
|
|
1572
|
+
const { sessionId, sidecar } = plan;
|
|
1573
|
+
const locked = await readWorktreeSessionStrict(plan.sidecarPath);
|
|
1574
|
+
if (locked.state !== "valid") {
|
|
1575
|
+
return {
|
|
1576
|
+
ok: false,
|
|
1577
|
+
reason: locked.state === "missing" ? "sidecar disappeared before delete" : `unreadable sidecar (${locked.reason})`
|
|
1578
|
+
};
|
|
1579
|
+
}
|
|
1580
|
+
const current = locked.session;
|
|
1581
|
+
if (current.workspaceCwd === void 0 || current.supersededBy !== void 0 || current.slug !== sidecar.slug || current.worktreePath !== sidecar.worktreePath || current.originalCwd !== sidecar.originalCwd || current.workspaceCwd !== sidecar.workspaceCwd) {
|
|
1582
|
+
return { ok: false, reason: "sidecar changed before delete" };
|
|
1583
|
+
}
|
|
1584
|
+
const marker = await readWorktreeSessionMarkerStrict(plan.lockKey);
|
|
1585
|
+
if (marker.state !== "valid" || marker.sessionId !== sessionId) {
|
|
1586
|
+
return {
|
|
1587
|
+
ok: false,
|
|
1588
|
+
reason: marker.state === "valid" ? "marker names another session" : `marker ${marker.state}`
|
|
1589
|
+
};
|
|
1590
|
+
}
|
|
1591
|
+
const allowedRoots = await worktreeAllowedRoots(
|
|
1592
|
+
current.workspaceCwd,
|
|
1593
|
+
current.originalCwd
|
|
1594
|
+
);
|
|
1595
|
+
const contained = allowedRoots.some((root) => {
|
|
1596
|
+
try {
|
|
1597
|
+
const realRoot = fs.realpathSync(root);
|
|
1598
|
+
return plan.lockKey === realRoot || plan.lockKey.startsWith(realRoot + path2.sep);
|
|
1599
|
+
} catch {
|
|
1600
|
+
return false;
|
|
1601
|
+
}
|
|
1602
|
+
});
|
|
1603
|
+
if (!contained) {
|
|
1604
|
+
return { ok: false, reason: "checkout outside workspace worktree roots" };
|
|
1605
|
+
}
|
|
1606
|
+
const chatsDir = path2.dirname(plan.sidecarPath);
|
|
1607
|
+
const ownFile = path2.basename(plan.sidecarPath);
|
|
1608
|
+
let entries;
|
|
1609
|
+
try {
|
|
1610
|
+
entries = await fsp.readdir(chatsDir);
|
|
1611
|
+
} catch (error) {
|
|
1612
|
+
return {
|
|
1613
|
+
ok: false,
|
|
1614
|
+
reason: `sidecar scan failed: ${error instanceof Error ? error.message : String(error)}`
|
|
1615
|
+
};
|
|
1616
|
+
}
|
|
1617
|
+
for (const entry of entries) {
|
|
1618
|
+
if (!entry.endsWith(".worktree.json") || entry === ownFile) continue;
|
|
1619
|
+
const other = await readWorktreeSessionStrict(path2.join(chatsDir, entry));
|
|
1620
|
+
if (other.state === "missing") continue;
|
|
1621
|
+
if (other.state === "invalid") {
|
|
1622
|
+
return { ok: false, reason: `unreadable sibling sidecar ${entry}` };
|
|
1623
|
+
}
|
|
1624
|
+
if (canonicalPath(other.session.worktreePath) === plan.lockKey) {
|
|
1625
|
+
if (other.session.supersededBy === sessionId) continue;
|
|
1626
|
+
return { ok: false, reason: `checkout shared with ${entry}` };
|
|
1627
|
+
}
|
|
1628
|
+
}
|
|
1629
|
+
const removalTarget = canonicalPath(
|
|
1630
|
+
new GitWorktreeService(current.originalCwd).getUserWorktreePath(
|
|
1631
|
+
current.slug
|
|
1632
|
+
)
|
|
1633
|
+
);
|
|
1634
|
+
if (removalTarget !== plan.lockKey) {
|
|
1635
|
+
return {
|
|
1636
|
+
ok: false,
|
|
1637
|
+
reason: "slug does not resolve to the verified checkout"
|
|
1638
|
+
};
|
|
1639
|
+
}
|
|
1640
|
+
plan.sidecar = current;
|
|
1641
|
+
return { ok: true };
|
|
1642
|
+
}
|
|
1643
|
+
__name(verifyWorktreeCleanupOwnership, "verifyWorktreeCleanupOwnership");
|
|
1644
|
+
async function checkoutStillPopulated(worktreePath) {
|
|
1645
|
+
try {
|
|
1646
|
+
return (await fsp.readdir(worktreePath)).length > 0;
|
|
1647
|
+
} catch {
|
|
1648
|
+
return false;
|
|
1649
|
+
}
|
|
1650
|
+
}
|
|
1651
|
+
__name(checkoutStillPopulated, "checkoutStillPopulated");
|
|
1652
|
+
async function executeWorktreeCleanup(plan) {
|
|
1653
|
+
const { sessionId, sidecar } = plan;
|
|
1654
|
+
const marker = await readWorktreeSessionMarkerStrict(plan.lockKey);
|
|
1655
|
+
if (marker.state !== "valid" || marker.sessionId !== sessionId) {
|
|
1656
|
+
logWorktreeCleanupPreserve(sessionId, "marker changed after delete");
|
|
1657
|
+
return;
|
|
1658
|
+
}
|
|
1659
|
+
if (await checkoutHasWork(plan.lockKey)) {
|
|
1660
|
+
logWorktreeCleanupPreserve(sessionId, "checkout has uncommitted work");
|
|
1661
|
+
return;
|
|
1662
|
+
}
|
|
1663
|
+
const result = await new GitWorktreeService(
|
|
1664
|
+
sidecar.originalCwd
|
|
1665
|
+
).removeUserWorktree(sidecar.slug, { deleteBranch: true });
|
|
1666
|
+
if (!result.success) {
|
|
1667
|
+
const errorText = result.error ?? "unknown error";
|
|
1668
|
+
if (await checkoutStillPopulated(plan.lockKey)) {
|
|
1669
|
+
logWorktreeCleanupPreserve(
|
|
1670
|
+
sessionId,
|
|
1671
|
+
`checkout removal failed: ${errorText}`
|
|
1672
|
+
);
|
|
1673
|
+
} else {
|
|
1674
|
+
logWarning(
|
|
1675
|
+
`worktree cleanup removal failed, checkout may be partially deleted action=delete session=${safeLogValue(
|
|
1676
|
+
sessionId
|
|
1677
|
+
)} reason=${safeLogValue(errorText)}`
|
|
1678
|
+
);
|
|
1679
|
+
}
|
|
1680
|
+
return;
|
|
1681
|
+
}
|
|
1682
|
+
if (result.branchPreserved) {
|
|
1683
|
+
logWarning(
|
|
1684
|
+
`worktree cleanup removed checkout but kept branch action=delete session=${safeLogValue(
|
|
1685
|
+
sessionId
|
|
1686
|
+
)} slug=${safeLogValue(sidecar.slug)} branch=${safeLogValue(
|
|
1687
|
+
sidecar.worktreeBranch
|
|
1688
|
+
)} reason=unmerged commits`
|
|
1689
|
+
);
|
|
1690
|
+
}
|
|
1691
|
+
}
|
|
1692
|
+
__name(executeWorktreeCleanup, "executeWorktreeCleanup");
|
|
1693
|
+
|
|
1397
1694
|
// packages/cli/src/serve/server/session-archive.ts
|
|
1398
1695
|
var DaemonDrainingError = class extends Error {
|
|
1399
1696
|
static {
|
|
@@ -1755,6 +2052,7 @@ async function deleteDaemonSessions(params) {
|
|
|
1755
2052
|
coordinator,
|
|
1756
2053
|
coordinatorLockHeld = false,
|
|
1757
2054
|
assertCanMutate,
|
|
2055
|
+
runtimeWorkspaceCwd,
|
|
1758
2056
|
onError
|
|
1759
2057
|
} = params;
|
|
1760
2058
|
const uniqueSessionIds = [
|
|
@@ -1765,6 +2063,49 @@ async function deleteDaemonSessions(params) {
|
|
|
1765
2063
|
coordinator.assertNotTransitioning(sessionId);
|
|
1766
2064
|
}
|
|
1767
2065
|
}
|
|
2066
|
+
const runWithWorktreeCleanup = /* @__PURE__ */ __name(async (sessionId, mutateSession) => {
|
|
2067
|
+
const activeSidecarPath = service.getWorktreeSessionPath(sessionId);
|
|
2068
|
+
const archivedSidecarPath = service.getWorktreeSessionPathForArchiveState(
|
|
2069
|
+
sessionId,
|
|
2070
|
+
"archived"
|
|
2071
|
+
);
|
|
2072
|
+
if (!fs2.existsSync(activeSidecarPath) && (archivedSidecarPath === activeSidecarPath || !fs2.existsSync(archivedSidecarPath))) {
|
|
2073
|
+
return coordinator.runExclusiveMany([sessionId], mutateSession);
|
|
2074
|
+
}
|
|
2075
|
+
const cleanupPlan = await preclassifyWorktreeCleanup(
|
|
2076
|
+
service,
|
|
2077
|
+
sessionId,
|
|
2078
|
+
runtimeWorkspaceCwd
|
|
2079
|
+
);
|
|
2080
|
+
if (!cleanupPlan) {
|
|
2081
|
+
return coordinator.runExclusiveMany([sessionId], mutateSession);
|
|
2082
|
+
}
|
|
2083
|
+
const releaseCleanupLock = await acquireWorktreeCleanupLock(cleanupPlan);
|
|
2084
|
+
try {
|
|
2085
|
+
const ownership = await verifyWorktreeCleanupOwnership(cleanupPlan);
|
|
2086
|
+
if (!ownership.ok) {
|
|
2087
|
+
logWorktreeCleanupPreserve(sessionId, ownership.reason);
|
|
2088
|
+
}
|
|
2089
|
+
const result = await coordinator.runExclusiveMany(
|
|
2090
|
+
[sessionId],
|
|
2091
|
+
mutateSession
|
|
2092
|
+
);
|
|
2093
|
+
if (ownership.ok && result.kind === "removed") {
|
|
2094
|
+
try {
|
|
2095
|
+
assertCanMutate?.();
|
|
2096
|
+
await executeWorktreeCleanup(cleanupPlan);
|
|
2097
|
+
} catch (error) {
|
|
2098
|
+
logWorktreeCleanupPreserve(
|
|
2099
|
+
sessionId,
|
|
2100
|
+
`cleanup execution failed: ${errorMessage(error)}`
|
|
2101
|
+
);
|
|
2102
|
+
}
|
|
2103
|
+
}
|
|
2104
|
+
return result;
|
|
2105
|
+
} finally {
|
|
2106
|
+
releaseCleanupLock();
|
|
2107
|
+
}
|
|
2108
|
+
}, "runWithWorktreeCleanup");
|
|
1768
2109
|
const results = await Promise.all(
|
|
1769
2110
|
uniqueSessionIds.map(async (sessionId) => {
|
|
1770
2111
|
try {
|
|
@@ -1810,7 +2151,7 @@ async function deleteDaemonSessions(params) {
|
|
|
1810
2151
|
try {
|
|
1811
2152
|
await bridge.closeSession(sessionId);
|
|
1812
2153
|
} catch (error) {
|
|
1813
|
-
if (isSessionNotFoundError(error)) {
|
|
2154
|
+
if (isSessionNotFoundError(error) && error.code !== "session_closing") {
|
|
1814
2155
|
return await removePersistedSession();
|
|
1815
2156
|
}
|
|
1816
2157
|
onError?.({
|
|
@@ -1826,7 +2167,7 @@ async function deleteDaemonSessions(params) {
|
|
|
1826
2167
|
}
|
|
1827
2168
|
return await removePersistedSession();
|
|
1828
2169
|
}, "mutateSession");
|
|
1829
|
-
return await (coordinatorLockHeld ? mutateSession() :
|
|
2170
|
+
return await (coordinatorLockHeld ? mutateSession() : runWithWorktreeCleanup(sessionId, mutateSession));
|
|
1830
2171
|
} catch (error) {
|
|
1831
2172
|
if (error instanceof DaemonDrainingError) {
|
|
1832
2173
|
throw error;
|
|
@@ -2361,12 +2702,12 @@ __name(unarchiveDaemonSessions, "unarchiveDaemonSessions");
|
|
|
2361
2702
|
|
|
2362
2703
|
// packages/cli/src/serve/server/aone-mrs.ts
|
|
2363
2704
|
init_esbuild_shims();
|
|
2364
|
-
import { execFile } from "node:child_process";
|
|
2365
|
-
import { promisify } from "node:util";
|
|
2366
|
-
var
|
|
2705
|
+
import { execFile as execFile2 } from "node:child_process";
|
|
2706
|
+
import { promisify as promisify2 } from "node:util";
|
|
2707
|
+
var execFileAsync2 = promisify2(execFile2);
|
|
2367
2708
|
var a1AvailabilityVerified = false;
|
|
2368
2709
|
var defaultA1Exec = /* @__PURE__ */ __name(async (args, options) => {
|
|
2369
|
-
const { stdout } = await
|
|
2710
|
+
const { stdout } = await execFileAsync2("a1", [...args], {
|
|
2370
2711
|
...options,
|
|
2371
2712
|
encoding: "utf8",
|
|
2372
2713
|
windowsHide: true
|
|
@@ -2409,7 +2750,7 @@ async function resolveAoneWorkspaceRepo(workspaceCwd, env) {
|
|
|
2409
2750
|
if (!gitRoot) return void 0;
|
|
2410
2751
|
let origin;
|
|
2411
2752
|
try {
|
|
2412
|
-
({ stdout: origin } = await
|
|
2753
|
+
({ stdout: origin } = await execFileAsync2(
|
|
2413
2754
|
"git",
|
|
2414
2755
|
["remote", "get-url", "origin"],
|
|
2415
2756
|
{
|
|
@@ -2578,6 +2919,7 @@ export {
|
|
|
2578
2919
|
parseSessionPageSizeQuery,
|
|
2579
2920
|
runWithWorkspaceRuntimeStorage,
|
|
2580
2921
|
createWorkspaceRuntimeSessionService,
|
|
2922
|
+
acquireWorktreeOwnershipOp,
|
|
2581
2923
|
DaemonDrainingError,
|
|
2582
2924
|
SessionArchiveCoordinator,
|
|
2583
2925
|
deleteDaemonSessions,
|