@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.
Files changed (351) hide show
  1. package/bundled/computer-use/SKILL.md +189 -116
  2. package/bundled/goal-draft/SKILL.md +23 -13
  3. package/bundled/qc-helper/docs/_meta.ts +1 -0
  4. package/bundled/qc-helper/docs/configuration/model-providers.md +47 -1
  5. package/bundled/qc-helper/docs/configuration/settings.md +57 -7
  6. package/bundled/qc-helper/docs/conversations-recovery.md +102 -0
  7. package/bundled/qc-helper/docs/features/channels/dingtalk.md +26 -0
  8. package/bundled/qc-helper/docs/features/channels/overview.md +1 -1
  9. package/bundled/qc-helper/docs/features/commands.md +71 -6
  10. package/bundled/qc-helper/docs/features/computer-use.md +9 -7
  11. package/bundled/qc-helper/docs/features/followup-suggestions.md +2 -2
  12. package/bundled/qc-helper/docs/features/goals.md +15 -3
  13. package/bundled/qc-helper/docs/features/skills.md +40 -0
  14. package/bundled/qc-helper/docs/qwen-serve.md +19 -1
  15. package/chunks/{MaxSizedBox-5ARLO5PR.js → MaxSizedBox-UDO6Y7RB.js} +35 -36
  16. package/chunks/{StandaloneSessionPicker-T6B322CB.js → StandaloneSessionPicker-D4CUOO4H.js} +55 -56
  17. package/chunks/{acp-startup-profiler-6ULXXQMS.js → acp-startup-profiler-KEU6VAYR.js} +2 -2
  18. package/chunks/{acpAgent-WTDEY5KD.js → acpAgent-KWLJFADK.js} +210 -131
  19. package/chunks/{agent-NXPUXEVZ.js → agent-GSUPGEOL.js} +24 -25
  20. package/chunks/{agent-headless-QQZTWOKO.js → agent-headless-HNYCQUJB.js} +24 -25
  21. package/chunks/{anthropicContentGenerator-6XDHXIII.js → anthropicContentGenerator-I7LQZH26.js} +30 -7
  22. package/chunks/{artifact-tool-DFVVJXL2.js → artifact-tool-P52OKKEF.js} +1 -1
  23. package/chunks/{askUserQuestion-GF7VQ44M.js → askUserQuestion-I5W5S3D6.js} +2 -2
  24. package/chunks/{bridge-OHY5OGOZ.js → bridge-B7CV6RVI.js} +40 -41
  25. package/chunks/{channel-management-service-ZDDG3G5S.js → channel-management-service-TRTLQTSV.js} +4 -4
  26. package/chunks/{channel-settings-store-7BJAS2SU.js → channel-settings-store-FW45IRUP.js} +46 -47
  27. package/chunks/{channel-worker-group-2ISMRENV.js → channel-worker-group-PIYPVCTF.js} +6 -6
  28. package/chunks/{channel-worker-manager-VSRPVPRH.js → channel-worker-manager-FQHEDTD2.js} +6 -6
  29. package/chunks/{channel-worker-supervisor-SRJBK72Z.js → channel-worker-supervisor-XJPZZ3VK.js} +3 -3
  30. package/chunks/{chunk-2WGJG2KW.js → chunk-25CBAK3H.js} +4 -4
  31. package/chunks/{chunk-XUSOYE2I.js → chunk-27LTEY6D.js} +1 -1
  32. package/chunks/{chunk-WTW36TJ3.js → chunk-2EKVPSIJ.js} +1 -1
  33. package/chunks/{chunk-NAKALAL4.js → chunk-2TMJRF46.js} +116 -15
  34. package/chunks/{chunk-E4L5BM2B.js → chunk-2YS3NU4A.js} +4 -4
  35. package/chunks/chunk-2Z3T52OC.js +82 -0
  36. package/chunks/{chunk-ER273QE6.js → chunk-2ZFO5JD7.js} +21 -4
  37. package/chunks/{chunk-WXC6OAWD.js → chunk-3BTHHXXE.js} +1 -1
  38. package/chunks/{chunk-GXZHYPHZ.js → chunk-3LPJ776W.js} +5 -2
  39. package/chunks/{chunk-XY3USGFE.js → chunk-3VDLQUR2.js} +1 -1
  40. package/chunks/{chunk-LK7S2D6V.js → chunk-3VWPPK5Q.js} +58 -4
  41. package/chunks/{chunk-IKLFS6SC.js → chunk-3YQMUBTS.js} +3 -3
  42. package/chunks/{chunk-P4RUUG64.js → chunk-45ROPFQY.js} +1 -1
  43. package/chunks/{chunk-W4LL5RZO.js → chunk-4ALNJDHL.js} +52 -13
  44. package/chunks/{chunk-D6PIMKY3.js → chunk-4VY3ITHR.js} +4 -4
  45. package/chunks/{chunk-H3UDNQLO.js → chunk-5CVY5Q2P.js} +3 -3
  46. package/chunks/{chunk-6UIACMGH.js → chunk-5DQ4YTIZ.js} +1 -1
  47. package/chunks/{chunk-P6LATTDG.js → chunk-5IL2BZHW.js} +3 -3
  48. package/chunks/{chunk-537SQ2AI.js → chunk-5WC2ECUK.js} +104 -16
  49. package/chunks/{chunk-HFTB354P.js → chunk-5Z4FCEPY.js} +60 -6
  50. package/chunks/{chunk-3K65MUKD.js → chunk-65I7S4Z3.js} +2 -1
  51. package/chunks/{chunk-AQ5NAGWI.js → chunk-66JBCTJF.js} +8 -7
  52. package/chunks/{chunk-54TF2ZIQ.js → chunk-6JXHO7LG.js} +3 -3
  53. package/chunks/{chunk-YCDL2SAS.js → chunk-6QILGINT.js} +2 -2
  54. package/chunks/{chunk-P5LDR7FI.js → chunk-6QV7Z74P.js} +3 -3
  55. package/chunks/{chunk-4HC4DYKN.js → chunk-6RZX2HIH.js} +1 -1
  56. package/chunks/{chunk-O45WBTNS.js → chunk-6SADVYQQ.js} +3 -3
  57. package/chunks/{chunk-KE3Q4JMY.js → chunk-6TPVIESH.js} +5 -7
  58. package/chunks/{chunk-2LD5U7Q3.js → chunk-6YEOCHSE.js} +29 -1
  59. package/chunks/{chunk-QWZOOIR3.js → chunk-75LBC7SV.js} +69 -12
  60. package/chunks/{chunk-7BZS4ZDV.js → chunk-7SL55L5H.js} +25 -18
  61. package/chunks/{chunk-O2GG7H4C.js → chunk-ARYNBBBM.js} +3 -3
  62. package/chunks/{chunk-CZACBHAW.js → chunk-B3EL44K3.js} +5 -5
  63. package/chunks/{chunk-VY6UVU7G.js → chunk-CABDNUJ4.js} +2 -2
  64. package/chunks/{chunk-RVNS7NWN.js → chunk-CALNF3Z3.js} +1 -1
  65. package/chunks/{chunk-MWHY26G3.js → chunk-CHVU543W.js} +1 -1
  66. package/chunks/{chunk-GZWW2QWR.js → chunk-CIKL2DQP.js} +2 -2
  67. package/chunks/{chunk-R355CUNQ.js → chunk-CLKE4IY3.js} +1 -77
  68. package/chunks/{chunk-MUZCSTOO.js → chunk-CRZBDVP2.js} +5 -4
  69. package/chunks/{chunk-SFMCYMVF.js → chunk-D6AQNMUA.js} +4 -4
  70. package/chunks/{chunk-D4CU6DKR.js → chunk-DO5SMV52.js} +10 -8
  71. package/chunks/{chunk-ZAZ3NFL6.js → chunk-DXQ6Z7AH.js} +315 -63
  72. package/chunks/{chunk-IXSGOSEG.js → chunk-DZ6D4B3K.js} +28 -25
  73. package/chunks/{chunk-GMNLYQOS.js → chunk-E6TI726I.js} +1 -1
  74. package/chunks/{chunk-JBTZUFR4.js → chunk-E7XSUYCZ.js} +6 -6
  75. package/chunks/{chunk-AHBLRVD5.js → chunk-EEKU6COG.js} +4 -4
  76. package/chunks/{chunk-47BZVBTE.js → chunk-EHTKOO6W.js} +4 -4
  77. package/chunks/{chunk-HJ34U5J4.js → chunk-ENZDGHGJ.js} +4 -4
  78. package/chunks/{chunk-IFD3BTEA.js → chunk-EOET4H7C.js} +3 -3
  79. package/chunks/{chunk-ZTAVGFKA.js → chunk-ERXNTINK.js} +1 -1
  80. package/chunks/{chunk-F47DITLZ.js → chunk-FAWTMDX7.js} +14 -0
  81. package/chunks/{chunk-KPXRFTT7.js → chunk-FETY36NQ.js} +1 -1
  82. package/chunks/{chunk-5JLQWQK6.js → chunk-FV4DM2M4.js} +2 -2
  83. package/chunks/{chunk-4F2QRVW6.js → chunk-FW4E4QPG.js} +1 -1
  84. package/chunks/{chunk-KJJPJYHI.js → chunk-FWRRUITH.js} +8 -8
  85. package/chunks/{chunk-4VUVBN3Y.js → chunk-G6UUOCUT.js} +87 -0
  86. package/chunks/{chunk-4JAGXZR3.js → chunk-GM44O6F7.js} +1 -1
  87. package/chunks/{chunk-4MCY33Y2.js → chunk-GNY7B3CA.js} +1 -1
  88. package/chunks/{chunk-VEFRT7NX.js → chunk-H3Q3RSKZ.js} +1 -1
  89. package/chunks/{chunk-43NOB5NM.js → chunk-HIXUUCGY.js} +188 -13
  90. package/chunks/{chunk-EJNYBDYC.js → chunk-HNLMYDQE.js} +1 -1
  91. package/chunks/{chunk-JOPC3FND.js → chunk-HUX2DOTF.js} +5 -5
  92. package/chunks/{chunk-GCFZ2LAX.js → chunk-HZ2HUXX7.js} +2 -2
  93. package/chunks/{chunk-CWNC7M73.js → chunk-IKG2YVRZ.js} +2 -2
  94. package/chunks/{chunk-L4R7BCVV.js → chunk-J3TJH52D.js} +1 -1
  95. package/chunks/{chunk-QMFOYPGV.js → chunk-J3VZF2AL.js} +2 -2
  96. package/chunks/{chunk-ZJ2LM2SI.js → chunk-JGDRB4FP.js} +104 -33
  97. package/chunks/{chunk-LMJQSPWB.js → chunk-KA5HR3G2.js} +1 -1
  98. package/chunks/{chunk-G34YLYCS.js → chunk-L7V52QEZ.js} +10 -10
  99. package/chunks/{chunk-GVVCLL2P.js → chunk-LNCNUMJ5.js} +451 -396
  100. package/chunks/{chunk-RDKXZ2LS.js → chunk-LYT2OU7D.js} +1 -1
  101. package/chunks/{chunk-SAZS4IWW.js → chunk-LZGFVUWZ.js} +3 -3
  102. package/chunks/{chunk-32YDNYXP.js → chunk-M73KHGNR.js} +13 -66
  103. package/chunks/{chunk-ADJD4LZF.js → chunk-MA5OUNN6.js} +1 -1
  104. package/chunks/{chunk-2RYWGYB3.js → chunk-MFYH2VXV.js} +3 -3
  105. package/chunks/{chunk-RPBMP6BN.js → chunk-MWIO7MF6.js} +3 -0
  106. package/chunks/{chunk-OECNP26L.js → chunk-N6S3NUYJ.js} +1 -1
  107. package/chunks/{chunk-5MTARK4Y.js → chunk-N7YQEKGX.js} +6 -6
  108. package/chunks/{chunk-XOVVCGZX.js → chunk-NB3NDQQK.js} +1 -1
  109. package/chunks/chunk-NOO4QFXM.js +171 -0
  110. package/chunks/{chunk-NGX4NUNP.js → chunk-O2FEO2CB.js} +131 -6
  111. package/chunks/{chunk-XHGGYCTA.js → chunk-O2JBJQCF.js} +1 -1
  112. package/chunks/{chunk-LPBQODMR.js → chunk-OESZTXTG.js} +4 -4
  113. package/chunks/{chunk-UKADFFL2.js → chunk-OFVAS4AR.js} +1 -1
  114. package/chunks/{chunk-TDP7UULF.js → chunk-OPMKGOLD.js} +1 -1
  115. package/chunks/{chunk-LDS57224.js → chunk-OWCFKIFQ.js} +1 -1
  116. package/chunks/{chunk-I72PHOKL.js → chunk-PDUMGZ2P.js} +1524 -1382
  117. package/chunks/{chunk-JRYL3T2O.js → chunk-PQSCGZT2.js} +1 -1
  118. package/chunks/{chunk-WEXA2DNG.js → chunk-PSPAM24S.js} +14 -0
  119. package/chunks/{chunk-UKKYOIVT.js → chunk-QAZ2MGYT.js} +2 -2
  120. package/chunks/{chunk-J3O5I5ZD.js → chunk-QK4K76T6.js} +3 -3
  121. package/chunks/{chunk-NUQFUXOG.js → chunk-QTNCGZHQ.js} +2 -0
  122. package/chunks/{chunk-5YY5MZT6.js → chunk-QZOXVQPK.js} +1 -1
  123. package/chunks/{chunk-QJVZLILI.js → chunk-R7OO56VZ.js} +1 -1
  124. package/chunks/{chunk-IQN2CCIE.js → chunk-RNYENHN5.js} +398 -55
  125. package/chunks/{chunk-64MQTIX7.js → chunk-RPFJJ33Z.js} +2 -2
  126. package/chunks/{chunk-4VZCORNT.js → chunk-RXT4QBDX.js} +1 -1
  127. package/chunks/{chunk-SN5FV4FY.js → chunk-S6QVI3MV.js} +3 -3
  128. package/chunks/{chunk-NXWYCSPL.js → chunk-SOA4HKRJ.js} +1 -1
  129. package/chunks/{chunk-JLWFGYXU.js → chunk-T2IHCZLS.js} +2 -2
  130. package/chunks/{chunk-DNPHKA72.js → chunk-TGC4264Q.js} +6 -6
  131. package/chunks/{chunk-PZV2FASB.js → chunk-TRWQQBVH.js} +1 -1
  132. package/chunks/{chunk-Y3ZKI4RQ.js → chunk-TWAMIEQ2.js} +85 -22
  133. package/chunks/{chunk-KK2GZGBK.js → chunk-TWWS7XUW.js} +14 -11
  134. package/chunks/{chunk-4IQKBLTQ.js → chunk-UHUT4IDM.js} +18 -9
  135. package/chunks/{chunk-BKNY7PDI.js → chunk-USN6VNTO.js} +1 -1
  136. package/chunks/{chunk-TMWB67LS.js → chunk-UXDVUFKU.js} +3 -3
  137. package/chunks/{chunk-HY3DXYZK.js → chunk-UYDQYDW2.js} +1 -1
  138. package/chunks/{chunk-3K456UJF.js → chunk-VF6D6EGV.js} +12 -4
  139. package/chunks/{chunk-PZUOHCWI.js → chunk-WAASYFPK.js} +2 -2
  140. package/chunks/{chunk-OHOO527W.js → chunk-WG7BL3FY.js} +52 -2
  141. package/chunks/{chunk-JPEAQJNS.js → chunk-WJDXKQIO.js} +1 -1
  142. package/chunks/{chunk-MNEYUNOE.js → chunk-WNISCNTA.js} +40 -2
  143. package/chunks/{chunk-Z6WZPXQH.js → chunk-WQMUGQ6G.js} +2 -2
  144. package/chunks/{chunk-N7VURC4O.js → chunk-WXFCI3O5.js} +2 -2
  145. package/chunks/{chunk-VU7O7CGQ.js → chunk-XDNFODER.js} +1 -1
  146. package/chunks/{chunk-N7EYO2E7.js → chunk-XQ4RDO5B.js} +1 -1
  147. package/chunks/{chunk-VDXYYVCD.js → chunk-XVTCSVBK.js} +579 -57
  148. package/chunks/{chunk-PTFFWTTO.js → chunk-XZ3Z43XL.js} +3 -3
  149. package/chunks/{chunk-QSC5YOEC.js → chunk-YAC7H4K3.js} +2 -2
  150. package/chunks/{chunk-43JNQAHO.js → chunk-YCEKI7QX.js} +51 -10
  151. package/chunks/{chunk-7IKXTGZT.js → chunk-YI2YCNSP.js} +1 -1
  152. package/chunks/{chunk-VUSSAGKI.js → chunk-YZTGGCEE.js} +10 -2
  153. package/chunks/{chunk-WR3SH3EY.js → chunk-ZNO5BUAD.js} +149 -66
  154. package/chunks/{chunk-URSCX7S7.js → chunk-ZPL2TZNA.js} +353 -11
  155. package/chunks/{chunk-UEZOXZNI.js → chunk-ZU2T5JIS.js} +804 -371
  156. package/chunks/{config-utils-QXDOTXEQ.js → config-utils-KTDSQ4MU.js} +39 -40
  157. package/chunks/{contextCommand-RN4KARWC.js → contextCommand-UQ3KRYGK.js} +37 -38
  158. package/chunks/{core-runtime-NAZCOKHB.js → core-runtime-JR34JAFH.js} +35 -36
  159. package/chunks/{create-sub-session-BCSM4WKB.js → create-sub-session-RGPJOI4S.js} +45 -40
  160. package/chunks/{create-sub-session-BQ3SE4TX.js → create-sub-session-TGIX63YU.js} +2 -2
  161. package/chunks/{cron-create-D6HQ7I7I.js → cron-create-GTPVMJCF.js} +1 -1
  162. package/chunks/{cron-delete-KK3D2SQV.js → cron-delete-ZBK27Z4K.js} +1 -1
  163. package/chunks/{cron-list-VBF3IZMF.js → cron-list-KTFKFDKC.js} +1 -1
  164. package/chunks/{daemon-LCUELM6E.js → daemon-UI6SQSBV.js} +1 -1
  165. package/chunks/{daemon-git-worktree-guard-3K5CAU36.js → daemon-git-worktree-guard-H3OA26KQ.js} +35 -36
  166. package/chunks/{daemon-status-provider-4X3ZZQTZ.js → daemon-status-provider-6WZLKSZU.js} +45 -46
  167. package/chunks/{daemon-trust-policy-R45CFUJA.js → daemon-trust-policy-3EDP2BYD.js} +42 -43
  168. package/chunks/{daemon-trust-policy-monitor-DSSFCO3K.js → daemon-trust-policy-monitor-CRHZPK52.js} +42 -43
  169. package/chunks/{deferred-core-runtime-UO2M6WYI.js → deferred-core-runtime-LO5NTQQ4.js} +35 -36
  170. package/chunks/{discovery-TUM3ZQ6U.js → discovery-XP4RMDUM.js} +4 -2
  171. package/chunks/{display-image-EVVTBVYE.js → display-image-CTNHJRZC.js} +4 -4
  172. package/chunks/{dist-SIHF5MU2.js → dist-24TCWK5H.js} +1 -1
  173. package/chunks/{dist-AFH3BMZZ.js → dist-5I4HLUTO.js} +1 -1
  174. package/chunks/{dist-3T5MDUHP.js → dist-FDISN4AK.js} +1 -1
  175. package/chunks/{dist-SB2XRXZA.js → dist-M4CBX53H.js} +1 -1
  176. package/chunks/{dist-UVHW2U56.js → dist-NQ2636VT.js} +1 -1
  177. package/chunks/{dist-PH5RSTEA.js → dist-OR2ZQTXZ.js} +1 -1
  178. package/chunks/{dist-MK5PPBRF.js → dist-STAGIFNB.js} +1099 -67
  179. package/chunks/{dist-R5Y34V6T.js → dist-WZTUKIDR.js} +2 -2
  180. package/chunks/{dist-QUU7TVE3.js → dist-XJ25G6OH.js} +1 -1
  181. package/chunks/{edit-VNBCTRWP.js → edit-LB7Z7XK5.js} +24 -25
  182. package/chunks/{en-JMR535HP.js → en-YJNRUQG4.js} +1 -1
  183. package/chunks/{enter-worktree-CEVK7MQ2.js → enter-worktree-YFTKHXHZ.js} +4 -4
  184. package/chunks/{enterPlanMode-4KMZMUIA.js → enterPlanMode-P6TVUFIY.js} +24 -25
  185. package/chunks/{environment-S2HYQDON.js → environment-QATJNNKI.js} +38 -39
  186. package/chunks/{errors-DAAN5TL7.js → errors-3XJ37PS2.js} +37 -38
  187. package/chunks/{exit-worktree-D3YE6MUN.js → exit-worktree-NF2XEMES.js} +5 -5
  188. package/chunks/{exitPlanMode-HR36HG3D.js → exitPlanMode-A3OKL5UO.js} +24 -25
  189. package/chunks/{fast-path-4IWSW3UV.js → fast-path-DBIT5YQQ.js} +3 -3
  190. package/chunks/{fast-path-settings-ISEJPRYE.js → fast-path-settings-SATXY3PD.js} +3 -3
  191. package/chunks/{glob-IZYB2XH2.js → glob-73EDTXUE.js} +24 -25
  192. package/chunks/{goal-tools-VGUPKQDJ.js → goal-tools-DFI6YMSD.js} +24 -25
  193. package/chunks/{grep-OUVLNXG7.js → grep-BLHF2S5D.js} +2 -2
  194. package/chunks/{handleAutoUpdate-D56FMDTW.js → handleAutoUpdate-2FUNJO3B.js} +38 -39
  195. package/chunks/{i18n-BKE5WO6T.js → i18n-FDIA6KFI.js} +38 -37
  196. package/chunks/{image-gen-SHVQ3XID.js → image-gen-XP4NNIYG.js} +5 -5
  197. package/chunks/{initializer-MS4SGEHF.js → initializer-4MJTJOTW.js} +42 -43
  198. package/chunks/{installationInfo-542MGC4S.js → installationInfo-232RA2OK.js} +35 -36
  199. package/chunks/{list-H6XTKUWL.js → list-WN6WSGEB.js} +45 -46
  200. package/chunks/{list-agents-ULYBGJXC.js → list-agents-I5TRH3J7.js} +2 -2
  201. package/chunks/{llm-3NUC4EJY.js → llm-UDFWQWZA.js} +77 -78
  202. package/chunks/{llm-content-generator-R4NL3OQN.js → llm-content-generator-VLMZ2A7A.js} +23 -8
  203. package/chunks/{loadedSettingsAdapter-3XLKYDVT.js → loadedSettingsAdapter-OBQEIXM7.js} +42 -43
  204. package/chunks/{loggingContentGenerator-ZYSWVNEO.js → loggingContentGenerator-RGVUMUVX.js} +26 -27
  205. package/chunks/{loop-wakeup-B27BEYRL.js → loop-wakeup-HL6XOWI4.js} +2 -2
  206. package/chunks/{ls-3IIMMVKF.js → ls-YV7RKLKY.js} +1 -1
  207. package/chunks/{lsp-VJAT7XKS.js → lsp-NO3AMRZT.js} +1 -1
  208. package/chunks/{managed-npm-update-L2I53ZAI.js → managed-npm-update-QBAJYCFU.js} +35 -36
  209. package/chunks/{mcp-4PIXQASW.js → mcp-OTIZZCPY.js} +42 -43
  210. package/chunks/{monitor-O2YQTOZZ.js → monitor-BV5XF6LL.js} +24 -25
  211. package/chunks/{nonInteractiveCli-LV7CDBA2.js → nonInteractiveCli-W6MUKDVJ.js} +79 -77
  212. package/chunks/{notebook-edit-4RE2ALH4.js → notebook-edit-HGBEKGTE.js} +24 -25
  213. package/chunks/{openaiContentGenerator-7ND7K5CP.js → openaiContentGenerator-NSU3ERBH.js} +15 -15
  214. package/chunks/{pidfile-UFTLQ7NP.js → pidfile-LE3TU4GE.js} +35 -36
  215. package/chunks/{processUtils-3XBB4FYV.js → processUtils-YFBGJK67.js} +2 -2
  216. package/chunks/{prompt-terminal-ledger-2QASOGMM.js → prompt-terminal-ledger-4W4W7DSO.js} +36 -37
  217. package/chunks/{qwenContentGenerator-AELTUTH6.js → qwenContentGenerator-HTA57WFC.js} +28 -29
  218. package/chunks/{qwenOAuth2-BS5D2LYV.js → qwenOAuth2-KX6LVYQ3.js} +4 -4
  219. package/chunks/{read-file-PDWHZPHX.js → read-file-KHPQ2MB6.js} +4 -4
  220. package/chunks/{read-mcp-resource-YXJZ75UB.js → read-mcp-resource-D3N75DGF.js} +1 -1
  221. package/chunks/{record-artifact-WJDOV6XU.js → record-artifact-Q5CRGJTP.js} +2 -2
  222. package/chunks/{report-findings-Q4UACKWR.js → report-findings-TJ34R7QK.js} +3 -3
  223. package/chunks/{request-shutdown-2YZ3E3GH.js → request-shutdown-LRKMTBAD.js} +6 -6
  224. package/chunks/{resumeHistoryUtils-QRXZEEBA.js → resumeHistoryUtils-K7RV3QBN.js} +39 -40
  225. package/chunks/{ripGrep-KSOOLE6H.js → ripGrep-NBBVCMG4.js} +7 -7
  226. package/chunks/{run-qwen-serve-RTAREPT6.js → run-qwen-serve-A3JBOZCM.js} +58 -60
  227. package/chunks/{runtime-ESFSCJRZ.js → runtime-7YOU2KJ3.js} +47 -48
  228. package/chunks/{scheduled-tasks-6ZHRNBH6.js → scheduled-tasks-52LXK7LN.js} +42 -43
  229. package/chunks/{scheduler-DQI6KV7T.js → scheduler-J44M72VM.js} +37 -38
  230. package/chunks/{send-message-PQCVSVMN.js → send-message-AWKUDJBH.js} +8 -8
  231. package/chunks/{serve-FY7ZEW52.js → serve-TRC6XJUB.js} +42 -43
  232. package/chunks/{server-KNDY6K5F.js → server-YPNTJLX2.js} +1314 -841
  233. package/chunks/{session-MCEPXAZP.js → session-FMMIBFYX.js} +98 -84
  234. package/chunks/{session-attachments-root-OLNAE6GF.js → session-attachments-root-LDJMNK7K.js} +35 -36
  235. package/chunks/{session-pr-refresh-HKJHQQQK.js → session-pr-refresh-NLR4EK2J.js} +41 -42
  236. package/chunks/{settings-VXO4WBMK.js → settings-A46L577J.js} +41 -42
  237. package/chunks/{shell-U263OTES.js → shell-Q5LSQPPY.js} +24 -25
  238. package/chunks/{skill-SDODGBKL.js → skill-75KPJRCM.js} +10 -57
  239. package/chunks/{skill-settings-YEIA22QJ.js → skill-settings-775YT4YR.js} +41 -42
  240. package/chunks/{spawnChannel-4WJZVFPP.js → spawnChannel-XY73I5CU.js} +37 -38
  241. package/chunks/{standalone-update-ZWVQUO64.js → standalone-update-L46XXNQ2.js} +37 -38
  242. package/chunks/{start-opentui-ui-BFYCJQRZ.js → start-opentui-ui-WLV43247.js} +2007 -1003
  243. package/chunks/{startInteractiveUI-JYAFCMHL.js → startInteractiveUI-F5DKMLOV.js} +1231 -1528
  244. package/chunks/{syntheticOutput-AUAJBNXR.js → syntheticOutput-D2P5V6RG.js} +2 -2
  245. package/chunks/{task-create-LD5ISM3E.js → task-create-PMAFST2T.js} +7 -7
  246. package/chunks/{task-list-YISJ4RJA.js → task-list-R2HSY2NC.js} +1 -1
  247. package/chunks/{task-stop-65ZOVATJ.js → task-stop-BFSKRTGV.js} +1 -1
  248. package/chunks/{task-update-AAN4ZVEY.js → task-update-JYC57USF.js} +7 -7
  249. package/chunks/{team-create-KU7MABNO.js → team-create-2PATB77U.js} +24 -25
  250. package/chunks/{team-delete-XFRRTJTT.js → team-delete-CBHVBTPB.js} +1 -1
  251. package/chunks/{team-plan-approval-DPB377A3.js → team-plan-approval-QTANEWOS.js} +24 -25
  252. package/chunks/{terminal-image-renderer-WGWRENOF.js → terminal-image-renderer-OGULCFNF.js} +37 -38
  253. package/chunks/{theme-manager-GBUFULSO.js → theme-manager-CNO3QERP.js} +35 -36
  254. package/chunks/{todoWrite-G7NT4IFP.js → todoWrite-5ERKFWAK.js} +3 -5
  255. package/chunks/{tool-search-6YUXHBPT.js → tool-search-VXWEOZE7.js} +9 -9
  256. package/chunks/{total-session-admission-54R2JQ5L.js → total-session-admission-4KAADZPB.js} +41 -42
  257. package/chunks/{trustedFolders-KAJIDJTH.js → trustedFolders-PPJSOPOT.js} +36 -37
  258. package/chunks/{update-relaunch-XM4IWBFD.js → update-relaunch-4PT4MW7B.js} +5 -5
  259. package/chunks/{updateCheck-W6UZFURI.js → updateCheck-WAVFLWNG.js} +37 -38
  260. package/chunks/{useAutoAcceptIndicator-LAWYHY3U.js → useAutoAcceptIndicator-XNED4NRB.js} +44 -45
  261. package/chunks/{validateNonInterActiveAuth-7WCKHRN2.js → validateNonInterActiveAuth-J676DUQ2.js} +74 -74
  262. package/chunks/{version-3ZU43RJ6.js → version-J6SRRQB2.js} +1 -1
  263. package/chunks/{web-fetch-QHI2SQL4.js → web-fetch-FMZZYX44.js} +7 -7
  264. package/chunks/{web-search-3KZZKWNY.js → web-search-3G2KXCX5.js} +19 -8
  265. package/chunks/{workflow-HRW7Y2X4.js → workflow-PPZZICQ7.js} +26 -27
  266. package/chunks/{workspace-providers-status-KTGCWCPC.js → workspace-providers-status-IIYTAQST.js} +46 -47
  267. package/chunks/{workspace-registration-store-LHLPPWNE.js → workspace-registration-store-VHCDXAV7.js} +1 -1
  268. package/chunks/{workspace-registry-X34MLN52.js → workspace-registry-I7VQIPS2.js} +41 -42
  269. package/chunks/{workspace-runtime-coordinator-U4PW4P7K.js → workspace-runtime-coordinator-DBGNY32G.js} +41 -42
  270. package/chunks/{workspace-service-KD7BCGYL.js → workspace-service-QSKB2T54.js} +47 -48
  271. package/chunks/{workspace-skills-status-YJGO6Y3T.js → workspace-skills-status-T7GPT65J.js} +43 -44
  272. package/chunks/{workspace-trust-reconciler-EUYHISCH.js → workspace-trust-reconciler-2PKRDAU4.js} +48 -49
  273. package/chunks/{write-file-EBSB34NJ.js → write-file-L76CGFTQ.js} +26 -27
  274. package/chunks/{zh-TW-W2GNP2IU.js → zh-TW-N2TBF2F2.js} +1 -1
  275. package/chunks/{zh-DVFYHRK5.js → zh-VBFCRQBL.js} +1 -1
  276. package/chunks/{zoom-image-UJ5VKWKP.js → zoom-image-TDJJY2VZ.js} +4 -4
  277. package/cli.js +13 -13
  278. package/export-transcript-document.js +126 -122
  279. package/locales/en.js +2 -2
  280. package/locales/zh-TW.js +2 -2
  281. package/locales/zh.js +2 -2
  282. package/package.json +3 -3
  283. package/web-shell/assets/{abnfDiagram-VCTEODGH-Dur--luQ.js → abnfDiagram-VCTEODGH-DHc6plZn.js} +1 -1
  284. package/web-shell/assets/{arc-tYLobxFi.js → arc-BQ9m8TDV.js} +1 -1
  285. package/web-shell/assets/{architectureDiagram-5GKGNRK7-IG6aXD03.js → architectureDiagram-5GKGNRK7-D5ap3oVB.js} +1 -1
  286. package/web-shell/assets/{blockDiagram-NRAW4CY4-C6eBSkfA.js → blockDiagram-NRAW4CY4-BIbnyNph.js} +1 -1
  287. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BrX3HJqB.js → c4Diagram-UCG6FXSJ-BRsdx_iG.js} +1 -1
  288. package/web-shell/assets/channel-uMMdTrYk.js +1 -0
  289. package/web-shell/assets/{chunk-2Q5K7J3B-B3fcJ8ee.js → chunk-2Q5K7J3B-3lf1fNlx.js} +1 -1
  290. package/web-shell/assets/{chunk-5VM5RSS4-CeC90yKM.js → chunk-5VM5RSS4-DP8VNRc4.js} +1 -1
  291. package/web-shell/assets/{chunk-F27PBJKO-CW44RVki.js → chunk-F27PBJKO-DrohDmZ6.js} +1 -1
  292. package/web-shell/assets/{chunk-G27WJ6UU-D1PAMukD.js → chunk-G27WJ6UU-UZ2QhSx6.js} +1 -1
  293. package/web-shell/assets/{chunk-JWPE2WC7-Dt3Y2Fvx.js → chunk-JWPE2WC7-BIMHVcZK.js} +1 -1
  294. package/web-shell/assets/{chunk-LCL6LL3I-CZHw2lLI.js → chunk-LCL6LL3I-izRxdSDd.js} +1 -1
  295. package/web-shell/assets/{chunk-POPQ4Y6H-ysNAdTGx.js → chunk-POPQ4Y6H-CXADD4PP.js} +1 -1
  296. package/web-shell/assets/{chunk-SVP7TREG-BdNXW6YQ.js → chunk-SVP7TREG-B96d8Y_1.js} +1 -1
  297. package/web-shell/assets/{chunk-XXDRQBXY-DgqQ9UA8.js → chunk-XXDRQBXY-CF2sVQpv.js} +1 -1
  298. package/web-shell/assets/classDiagram-DTDB5LWJ-DcY-26Ig.js +1 -0
  299. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DcY-26Ig.js +1 -0
  300. package/web-shell/assets/{cose-bilkent-JH36ORCC-BILImXzJ.js → cose-bilkent-JH36ORCC-CT6tXVAS.js} +1 -1
  301. package/web-shell/assets/csv-CX7rUNeC.svg +1 -0
  302. package/web-shell/assets/{cynefin-OW5HDTMX-DR88Pund.js → cynefin-OW5HDTMX-X1NS4vtV.js} +1 -1
  303. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-BYFbfkA6.js → cynefinDiagram-5FMLGOSQ-DNsKNOT4.js} +1 -1
  304. package/web-shell/assets/{dagre-3AP2YEHR-rfpyc6sX.js → dagre-3AP2YEHR-9-AHKqsb.js} +1 -1
  305. package/web-shell/assets/{diagram-S7CK7UJ4-BJxLmEwH.js → diagram-S7CK7UJ4-Bjgms7j6.js} +1 -1
  306. package/web-shell/assets/{diagram-UQ7AKVKN-H34xm7k3.js → diagram-UQ7AKVKN-h6bCprbE.js} +1 -1
  307. package/web-shell/assets/{diagram-VSXAHHWV-HYxhwNLx.js → diagram-VSXAHHWV-4SbQXVLt.js} +1 -1
  308. package/web-shell/assets/{diagram-VX7I27RA-BJazso8F.js → diagram-VX7I27RA-B5gPCzzB.js} +1 -1
  309. package/web-shell/assets/{diagram-Z3DM3KII-Clje1aNy.js → diagram-Z3DM3KII-DFJXIA3A.js} +1 -1
  310. package/web-shell/assets/{ebnfDiagram-PWID7BFC-M93YBkFh.js → ebnfDiagram-PWID7BFC-FwyaU7VY.js} +1 -1
  311. package/web-shell/assets/{erDiagram-SSCWMZ5O-DY8XzSHU.js → erDiagram-SSCWMZ5O-8vJQh2te.js} +1 -1
  312. package/web-shell/assets/{flowDiagram-A5DVABFB-CE6Aylcq.js → flowDiagram-A5DVABFB-BzA_1gMN.js} +1 -1
  313. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-DI-5LL22.js → ganttDiagram-EL5Y4UJY-Co-ABbVX.js} +1 -1
  314. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-C7BZWElk.js → gitGraphDiagram-WWUBYQGX-DW_FcyrX.js} +1 -1
  315. package/web-shell/assets/{index-DclFHns9.js → index-BbMXfhNG.js} +1 -1
  316. package/web-shell/assets/{index-CVyqwW7y.js → index-Bu-rZoJ-.js} +483 -475
  317. package/web-shell/assets/index-CsPwZ1ut.css +36 -0
  318. package/web-shell/assets/{infoDiagram-RXCK75RN-CGUSy4Pc.js → infoDiagram-RXCK75RN-BEgfhUFN.js} +1 -1
  319. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-B5BVks9q.js → ishikawaDiagram-5VMMS53U-DCsMxQmc.js} +1 -1
  320. package/web-shell/assets/{journeyDiagram-EYS64GPL-CFh6Tf7h.js → journeyDiagram-EYS64GPL-DyIEYoHz.js} +1 -1
  321. package/web-shell/assets/{kanban-definition-3QL26DDD-B7TlxP7c.js → kanban-definition-3QL26DDD-CkxjqCNr.js} +1 -1
  322. package/web-shell/assets/{layout-Br_pZq2Q.js → layout-BEWc0Al9.js} +1 -1
  323. package/web-shell/assets/{linear-BVlP6fte.js → linear-CNuNxirL.js} +1 -1
  324. package/web-shell/assets/{mermaid.core-TrcYWoiF.js → mermaid.core-DZBre674.js} +6 -6
  325. package/web-shell/assets/{mindmap-definition-FBJOCRG2-BJ4LzqjZ.js → mindmap-definition-FBJOCRG2-CpafFz_F.js} +1 -1
  326. package/web-shell/assets/{pegDiagram-XKGWAZYB-1b_MxlOl.js → pegDiagram-XKGWAZYB-DfZqk_dq.js} +1 -1
  327. package/web-shell/assets/{pieDiagram-E7YTZNPT-B8zl0YhY.js → pieDiagram-E7YTZNPT-S0UWXlgC.js} +1 -1
  328. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-CIZO8ukl.js → quadrantDiagram-AXDQQJYC-dd37_Ohj.js} +1 -1
  329. package/web-shell/assets/{railroadDiagram-O6MQD6OU-CepHSbCj.js → railroadDiagram-O6MQD6OU-CH8NJZ7u.js} +1 -1
  330. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BCgxkcSW.js → requirementDiagram-EFPCY7ZU-CFdqWYih.js} +1 -1
  331. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CE5CcoMM.js → sankeyDiagram-P5KCCOFB-CsddcEGD.js} +1 -1
  332. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-DvgHi-d5.js → sequenceDiagram-WJ2MYXX4-BZ270mGw.js} +1 -1
  333. package/web-shell/assets/{sizeCapture-X5ZJPWSS-T-fAsCPX.js → sizeCapture-X5ZJPWSS-CGaS4DBV.js} +1 -1
  334. package/web-shell/assets/{stateDiagram-HBIQ2CUA-DYHaul-5.js → stateDiagram-HBIQ2CUA-COpIzMu6.js} +1 -1
  335. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-D6qEVAji.js +1 -0
  336. package/web-shell/assets/{swimlanes-XN3QIQJK-Dbz3Qiej.js → swimlanes-XN3QIQJK-CMF889m3.js} +1 -1
  337. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-mem5Jj4m.js +8 -0
  338. package/web-shell/assets/{timeline-definition-24CTP7MA-9NVRts3N.js → timeline-definition-24CTP7MA-BelnxYz5.js} +1 -1
  339. package/web-shell/assets/{vennDiagram-4TSXK5OY-C7cb7vnH.js → vennDiagram-4TSXK5OY-CU-NRqIB.js} +1 -1
  340. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CG-8Ddjm.js → wardleyDiagram-VM6X3IG4-CDNKqWh-.js} +1 -1
  341. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-iGeYAcP4.js → xychartDiagram-S5SC5T6Z-CLqguL5D.js} +1 -1
  342. package/web-shell/index.html +6 -3
  343. package/chunks/chunk-3UMWOKJC.js +0 -78
  344. package/chunks/chunk-FKJM6JKY.js +0 -98
  345. package/chunks/chunk-IQAFKVXS.js +0 -22
  346. package/web-shell/assets/channel-uEkvKckd.js +0 -1
  347. package/web-shell/assets/classDiagram-DTDB5LWJ-DuPsnhWS.js +0 -1
  348. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DuPsnhWS.js +0 -1
  349. package/web-shell/assets/index-FO7JXPnH.css +0 -36
  350. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BcYho9a4.js +0 -1
  351. 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-F47DITLZ.js";
26
+ } from "./chunk-FAWTMDX7.js";
27
27
  import {
28
- readWorktreeSession
29
- } from "./chunk-VUSSAGKI.js";
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-I72PHOKL.js";
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() : coordinator.runExclusiveMany([sessionId], 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 execFileAsync = promisify(execFile);
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 execFileAsync("a1", [...args], {
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 execFileAsync(
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,