@qwen-code/qwen-code 0.21.13 → 0.21.14-nightly.20260822.7a4566cb3b

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 (400) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +15 -7
  2. package/bundled/qc-helper/docs/extension/introduction.md +2 -0
  3. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  4. package/bundled/qc-helper/docs/features/channels/dingtalk.md +1 -1
  5. package/bundled/qc-helper/docs/features/code-review.md +25 -3
  6. package/bundled/qc-helper/docs/features/commands.md +120 -8
  7. package/bundled/qc-helper/docs/features/markdown-rendering.md +6 -0
  8. package/bundled/qc-helper/docs/features/sub-agents.md +3 -3
  9. package/bundled/qc-helper/docs/features/terminal-images.md +50 -0
  10. package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +1 -1
  11. package/bundled/qc-helper/docs/qwen-serve.md +21 -4
  12. package/bundled/review/SKILL.md +113 -62
  13. package/chunks/MaxSizedBox-NCWYES5B.js +98 -0
  14. package/chunks/{StandaloneSessionPicker-KEGXNUG6.js → StandaloneSessionPicker-A4V4F64Y.js} +80 -79
  15. package/chunks/{acp-startup-profiler-NMDXYGDN.js → acp-startup-profiler-DDVSJKJK.js} +2 -2
  16. package/chunks/{acpAgent-XPES32S7.js → acpAgent-YYRH7HTQ.js} +1094 -278
  17. package/chunks/{agent-DPTOZFEM.js → agent-NEM254CJ.js} +52 -51
  18. package/chunks/agent-headless-AVFYIRPV.js +88 -0
  19. package/chunks/{anthropicContentGenerator-G7BVXTKN.js → anthropicContentGenerator-IWFTSBSV.js} +25 -25
  20. package/chunks/{artifact-tool-GEXTOPVO.js → artifact-tool-SBXMTVCB.js} +3 -3
  21. package/chunks/{askUserQuestion-B33XRSB7.js → askUserQuestion-KEQJRFD6.js} +3 -3
  22. package/chunks/{bridge-YNQBAA4Z.js → bridge-2CGOUO25.js} +59 -57
  23. package/chunks/{ca-4CQ6MYNQ.js → ca-SLZJD6QH.js} +8 -0
  24. package/chunks/{channel-management-service-GWY2GAIC.js → channel-management-service-FUJ2EFTF.js} +1 -1
  25. package/chunks/channel-settings-store-AZKNHHDC.js +103 -0
  26. package/chunks/{channel-worker-group-7LXCMZ77.js → channel-worker-group-CTE54QL6.js} +8 -7
  27. package/chunks/{channel-worker-manager-RYEME4ZZ.js → channel-worker-manager-4EHTD3T4.js} +8 -7
  28. package/chunks/{channel-worker-supervisor-OEVWBHGT.js → channel-worker-supervisor-F6I6WSWW.js} +6 -5
  29. package/chunks/{chunk-KD5BOPLP.js → chunk-2G4QF4VI.js} +125 -31
  30. package/chunks/{chunk-BHILXOC3.js → chunk-2MTIAN5Z.js} +3 -3
  31. package/chunks/{chunk-A4QRWUDE.js → chunk-2NWPB6T4.js} +6 -6
  32. package/chunks/{chunk-KV27IEHM.js → chunk-2TRNCJK4.js} +1 -1
  33. package/chunks/{chunk-EL5SXY3T.js → chunk-32CHFLGV.js} +198 -23
  34. package/chunks/{chunk-5CVO7YES.js → chunk-36OF5PRW.js} +1 -1
  35. package/chunks/{chunk-X26JYGTD.js → chunk-37BZSWEV.js} +1 -1
  36. package/chunks/{chunk-WFSTRPRO.js → chunk-3CLIDIVQ.js} +3 -3
  37. package/chunks/{chunk-A267JX7H.js → chunk-3HWN4E7N.js} +18 -18
  38. package/chunks/{chunk-ZYYTZUI2.js → chunk-3LYGXZ2H.js} +3 -3
  39. package/chunks/chunk-3SIGAHUX.js +3969 -0
  40. package/chunks/{chunk-BVJS5BSP.js → chunk-3XD4PT3B.js} +1 -1
  41. package/chunks/{chunk-6QFDQMQX.js → chunk-3ZFJUBTP.js} +1 -1
  42. package/chunks/{chunk-HUTNYWBG.js → chunk-45UD2TU4.js} +19 -11
  43. package/chunks/{chunk-4W5U2TUT.js → chunk-4F5WV4RF.js} +4 -4
  44. package/chunks/{chunk-I3G5JWBV.js → chunk-4GP3MNQ2.js} +2695 -1524
  45. package/chunks/{chunk-V26NVGAU.js → chunk-4MIDDJLJ.js} +8 -3
  46. package/chunks/{chunk-TS6625XH.js → chunk-5MK45KZ3.js} +9 -5
  47. package/chunks/{chunk-V57QC6WW.js → chunk-5OTMZVPL.js} +11 -9
  48. package/chunks/{chunk-MC4TLKEI.js → chunk-5PHLBWBL.js} +3 -3
  49. package/chunks/chunk-64LXOKG4.js +367 -0
  50. package/chunks/{chunk-6HY6IF3Z.js → chunk-6NFAEG54.js} +22 -2
  51. package/chunks/{chunk-TIGA2IVL.js → chunk-6NJIPX6W.js} +10 -298
  52. package/chunks/{chunk-MRMJCLIY.js → chunk-6RB2S4QP.js} +3 -3
  53. package/chunks/chunk-6S2OXVJT.js +369 -0
  54. package/chunks/{chunk-O4D7SPJN.js → chunk-6U46RZ25.js} +3 -3
  55. package/chunks/{chunk-JOOFMXGF.js → chunk-6UDHEIUT.js} +6 -6
  56. package/chunks/{chunk-VOQXFAY5.js → chunk-74TONY4F.js} +286 -0
  57. package/chunks/{chunk-LJQAUZMR.js → chunk-7CPJMZVJ.js} +1627 -180
  58. package/chunks/{chunk-T3CHYWJZ.js → chunk-7E7UCJHS.js} +100 -4
  59. package/chunks/{chunk-YZHRN3CF.js → chunk-7IV52LTO.js} +2 -2
  60. package/chunks/{chunk-4PKCUT7F.js → chunk-7JDGSJQH.js} +7 -7
  61. package/chunks/{chunk-GO7STP6N.js → chunk-7VITNOH6.js} +4 -4
  62. package/chunks/{chunk-CU6GJD55.js → chunk-7WLFSDLG.js} +1 -1
  63. package/chunks/{chunk-4WKAA4KS.js → chunk-A4N4FTMH.js} +1 -11
  64. package/chunks/{chunk-BUQDLC2G.js → chunk-A5F2YNO6.js} +3 -3
  65. package/chunks/{chunk-OY5RNSV4.js → chunk-AGCLK4G7.js} +3 -3
  66. package/chunks/{chunk-IA2K2HJE.js → chunk-AP3B7LKD.js} +2 -2
  67. package/chunks/{chunk-Y3YCSWG5.js → chunk-AZF6SME3.js} +2 -2
  68. package/chunks/{chunk-QFJ5JHQR.js → chunk-C72BXMJ5.js} +1 -1
  69. package/chunks/chunk-CETB5XY4.js +3654 -0
  70. package/chunks/{chunk-AA2BEKV3.js → chunk-CTAP6PO3.js} +3 -3
  71. package/chunks/{chunk-MS7GNABG.js → chunk-CXJHQVEK.js} +8 -0
  72. package/chunks/{chunk-QF2NHSPB.js → chunk-D534POS2.js} +274 -225
  73. package/chunks/{chunk-UKMR3CKV.js → chunk-D7QQ6RUB.js} +24 -9
  74. package/chunks/{chunk-DXIBNLBZ.js → chunk-DB2OKNTU.js} +2 -2
  75. package/chunks/{chunk-DGZEMW5R.js → chunk-DJEHYM4H.js} +3 -3
  76. package/chunks/{chunk-O565M6A4.js → chunk-DRVS6K7A.js} +260 -16
  77. package/chunks/{chunk-U3VNBPUO.js → chunk-DV4375RD.js} +5 -5
  78. package/chunks/{chunk-OXCMMLED.js → chunk-E63A23D7.js} +3 -3
  79. package/chunks/{chunk-4NFY2S7N.js → chunk-E7REAOTN.js} +15 -0
  80. package/chunks/{chunk-6ORZ2EDC.js → chunk-EW2IQ3ID.js} +3 -3
  81. package/chunks/{chunk-DGK6P3BQ.js → chunk-EXVK5R7X.js} +13 -13
  82. package/chunks/{chunk-NWNEANAT.js → chunk-FOGQO4FG.js} +953 -660
  83. package/chunks/{chunk-3U3VAL47.js → chunk-FV6PXZRO.js} +1 -1
  84. package/chunks/{chunk-76J3IJ3M.js → chunk-FX5TGHDE.js} +8 -8
  85. package/chunks/{chunk-QIH2HAEN.js → chunk-GXG4PYQB.js} +1 -1
  86. package/chunks/{chunk-FDGGZIYW.js → chunk-HDKCKCYO.js} +3 -3
  87. package/chunks/{chunk-RIAABG2K.js → chunk-HERHU33B.js} +2 -2
  88. package/chunks/{chunk-ZYBBISBY.js → chunk-HETN3NE2.js} +18 -15
  89. package/chunks/{chunk-XIT3GURH.js → chunk-HGBACZGD.js} +3 -3
  90. package/chunks/{chunk-UZPM4XHR.js → chunk-HGH7DXNI.js} +29 -8
  91. package/chunks/{chunk-CHHABXPE.js → chunk-HIK2OF33.js} +1 -1
  92. package/chunks/{chunk-FC4KQFCS.js → chunk-HMJ2P3SV.js} +1 -1
  93. package/chunks/chunk-HRVMTN37.js +26 -0
  94. package/chunks/{chunk-PQ36L4F5.js → chunk-HZZGYJIP.js} +1 -1
  95. package/chunks/{chunk-PT4I7NBA.js → chunk-I432KXWD.js} +1 -1
  96. package/chunks/{chunk-3EZLLVDF.js → chunk-IBJ5S45N.js} +3 -3
  97. package/chunks/{chunk-A4MFR4C5.js → chunk-IO257NUD.js} +3 -5
  98. package/chunks/{chunk-MIPFDQAF.js → chunk-ISJMN3ML.js} +1 -1
  99. package/chunks/chunk-IWOWEENB.js +9169 -0
  100. package/chunks/{chunk-XHRY7BXD.js → chunk-J6SIP2IT.js} +4 -4
  101. package/chunks/{chunk-OD2WU5QY.js → chunk-J7JQXYVL.js} +1 -1
  102. package/chunks/{chunk-NEFOOD54.js → chunk-J7VPB2HF.js} +4 -4
  103. package/chunks/{chunk-P7MPQI75.js → chunk-JGUBDRBC.js} +2 -2
  104. package/chunks/{chunk-SXCOEJO4.js → chunk-JOLJTKIG.js} +1 -1
  105. package/chunks/{chunk-NTTBXH7U.js → chunk-JS73NNWF.js} +8 -0
  106. package/chunks/{chunk-QRCNA3SR.js → chunk-JXLPQTMW.js} +50 -70
  107. package/chunks/{chunk-NNHNLJ2X.js → chunk-K2MSGB3W.js} +317 -72
  108. package/chunks/{chunk-KBXKR5R2.js → chunk-K52PZNU4.js} +1 -1
  109. package/chunks/{chunk-OOQUVWIG.js → chunk-K5OIW3I7.js} +4 -4
  110. package/chunks/{chunk-SOORFWKY.js → chunk-KSPRQSB4.js} +1 -1
  111. package/chunks/{chunk-WSH6GRKG.js → chunk-KVGR4MCF.js} +3 -3
  112. package/chunks/{chunk-6YKYPVDV.js → chunk-LC5M7YVE.js} +4 -4
  113. package/chunks/{chunk-M6NDLY2T.js → chunk-LD5VIJ7S.js} +1 -1
  114. package/chunks/{chunk-OMLJNPBE.js → chunk-LDGWX737.js} +84 -4
  115. package/chunks/{chunk-FAAUPSY2.js → chunk-LI4YHTQK.js} +1 -1
  116. package/chunks/{chunk-CXAOG665.js → chunk-LIKIJAUH.js} +2 -2
  117. package/chunks/chunk-LJZSMWOH.js +18 -0
  118. package/chunks/{chunk-BKPPWD33.js → chunk-M2IL2RTA.js} +22 -2
  119. package/chunks/{chunk-N5YPT6PH.js → chunk-MHOY756Q.js} +25 -13
  120. package/chunks/{chunk-YP5KH5Y7.js → chunk-ND7NOI4P.js} +1 -1
  121. package/chunks/{chunk-AW4TRXOC.js → chunk-NP2LV67M.js} +1 -1
  122. package/chunks/{chunk-GGDBMYGZ.js → chunk-NQB52P65.js} +5 -5
  123. package/chunks/{chunk-E3DYKPYZ.js → chunk-NUGZAFR2.js} +3 -3
  124. package/chunks/{chunk-GMIEIY3Y.js → chunk-O5BDEWBC.js} +3 -3
  125. package/chunks/{chunk-GDXET5XU.js → chunk-O5Z7EB6Y.js} +3 -3
  126. package/chunks/{chunk-5EYKMUUY.js → chunk-OTXXOZKW.js} +1 -1
  127. package/chunks/{chunk-M732YJPW.js → chunk-PALTIYXB.js} +6 -6
  128. package/chunks/{chunk-7UXUJ5T3.js → chunk-PLECQWDB.js} +1 -1
  129. package/chunks/{chunk-MLPXSYXR.js → chunk-PMIKPGDF.js} +66 -32
  130. package/chunks/{chunk-IWPYVAO2.js → chunk-PSQJ24ZZ.js} +3 -3
  131. package/chunks/{chunk-CPHEPGAO.js → chunk-PZRUV52H.js} +2 -2
  132. package/chunks/{chunk-PP4FUZNV.js → chunk-Q7RPLE33.js} +2 -2
  133. package/chunks/{chunk-S5DWMTHO.js → chunk-QQUVPMMZ.js} +2 -0
  134. package/chunks/{chunk-JUEPY766.js → chunk-RNGTMHKN.js} +3 -3
  135. package/chunks/{chunk-TUGSVUJB.js → chunk-ROV6B34L.js} +6 -6
  136. package/chunks/{chunk-RVOJ2FBP.js → chunk-RPJOOK6N.js} +1576 -10633
  137. package/chunks/{chunk-AXN7UPYQ.js → chunk-RQJJZQOH.js} +2 -2
  138. package/chunks/{chunk-AFSG32D5.js → chunk-RRRCWDFO.js} +1 -1
  139. package/chunks/{chunk-2M55OBEB.js → chunk-S3G6YFQC.js} +1 -1
  140. package/chunks/{chunk-4S5337WV.js → chunk-SVU5KGR7.js} +6527 -3314
  141. package/chunks/chunk-TBVSALA3.js +1109 -0
  142. package/chunks/{chunk-QUGAUQGJ.js → chunk-TBWQLLFO.js} +2 -0
  143. package/chunks/{chunk-AS5IN4GK.js → chunk-THK3QUU6.js} +5 -5
  144. package/chunks/{chunk-JNDY2MDR.js → chunk-TLDZKNZP.js} +1 -1
  145. package/chunks/{chunk-ZZO74WKW.js → chunk-TNAIZBPQ.js} +115 -28
  146. package/chunks/{chunk-3Z43GZUQ.js → chunk-TXASDT2M.js} +1 -1
  147. package/chunks/{chunk-CZBYX5MY.js → chunk-U53XZHAE.js} +1 -1
  148. package/chunks/{chunk-HIBNSEJE.js → chunk-UDG5EZJI.js} +0 -2
  149. package/chunks/{chunk-QNQAPSN2.js → chunk-URN2JIAQ.js} +4 -1
  150. package/chunks/{chunk-EZ5RP345.js → chunk-UYQTX2P6.js} +44 -13
  151. package/chunks/{chunk-BZ263IKX.js → chunk-UZPYR3EV.js} +1 -1
  152. package/chunks/{chunk-YZOSNW4R.js → chunk-VFACN2CE.js} +1 -1
  153. package/chunks/{chunk-RWDNJBWN.js → chunk-VLRBJ24J.js} +2 -2
  154. package/chunks/{chunk-NHDR76JX.js → chunk-VMJL7RH6.js} +4 -4
  155. package/chunks/{chunk-E23IPNGS.js → chunk-VOTDAZR7.js} +35 -6
  156. package/chunks/{chunk-XLLKYULU.js → chunk-VSNPOSDN.js} +2 -2
  157. package/chunks/{chunk-25EYDK42.js → chunk-VUMLT7E5.js} +2 -2
  158. package/chunks/{chunk-H4A72DE5.js → chunk-W4CRPSC5.js} +1 -1
  159. package/chunks/{chunk-NM5V5OVW.js → chunk-WJJYJVQE.js} +3 -3
  160. package/chunks/{chunk-ROIYNTHJ.js → chunk-WRT324N6.js} +3 -3
  161. package/chunks/chunk-WZAD4ZNJ.js +59 -0
  162. package/chunks/{chunk-SG7ZP5PG.js → chunk-WZDM44SB.js} +4 -4
  163. package/chunks/{chunk-JE7KQ2UP.js → chunk-XIQ5HQ2F.js} +469 -77
  164. package/chunks/{chunk-QV5YN5YD.js → chunk-XJOHLP2A.js} +5 -5
  165. package/chunks/{chunk-XUJNK7Y6.js → chunk-XL5K4SVK.js} +1 -1
  166. package/chunks/{chunk-CKSJECTU.js → chunk-XZJKSETB.js} +9 -5
  167. package/chunks/{chunk-YEYY7TEP.js → chunk-Y2FEAXLP.js} +7 -7
  168. package/chunks/{chunk-2B2BF7P7.js → chunk-YDJRMQU4.js} +3 -3
  169. package/chunks/{chunk-46UV252V.js → chunk-YHC2EYYG.js} +35 -38
  170. package/chunks/{chunk-OVZPVYZB.js → chunk-YMVFIYHV.js} +96 -18
  171. package/chunks/{chunk-WGHHA7ZH.js → chunk-Z3JMO2CH.js} +1 -1
  172. package/chunks/{chunk-MA2HEDVP.js → chunk-ZRYQMWEP.js} +3 -3
  173. package/chunks/{chunk-IGGGG5CX.js → chunk-ZTAT23TL.js} +15948 -10201
  174. package/chunks/{computer-use-77C5FHMW.js → computer-use-H2T7IFYX.js} +55 -54
  175. package/chunks/{config-utils-IVHRSXWI.js → config-utils-3DY73VIJ.js} +2 -2
  176. package/chunks/contextCommand-5AAZFFFV.js +94 -0
  177. package/chunks/{core-runtime-7VMIKUTG.js → core-runtime-JWFNKO2S.js} +57 -55
  178. package/chunks/{create-sub-session-2L5MQRN4.js → create-sub-session-33HIYIJE.js} +58 -56
  179. package/chunks/{create-sub-session-KRQULJE6.js → create-sub-session-XBCVGNFU.js} +6 -4
  180. package/chunks/{cron-create-H7UEPDSN.js → cron-create-IKA56DAF.js} +5 -5
  181. package/chunks/{cron-delete-6SZK7YFM.js → cron-delete-K5Q62EGH.js} +5 -5
  182. package/chunks/{cron-list-H25JIHEZ.js → cron-list-QBFGAMP7.js} +5 -5
  183. package/chunks/{daemon-2KTG7ZBN.js → daemon-NNCQ3HWT.js} +806 -147
  184. package/chunks/{daemon-git-worktree-guard-DXYIMWFT.js → daemon-git-worktree-guard-6233JAPJ.js} +54 -53
  185. package/chunks/daemon-status-provider-3EI2KALQ.js +104 -0
  186. package/chunks/daemon-trust-policy-QWWU7CON.js +100 -0
  187. package/chunks/{daemon-trust-policy-monitor-RYYGCQ3J.js → daemon-trust-policy-monitor-FH7GBAKN.js} +60 -59
  188. package/chunks/{de-UBEBKG6V.js → de-AH4LGCF5.js} +8 -0
  189. package/chunks/{deferred-core-runtime-3SGXFXEQ.js → deferred-core-runtime-EDUZQRME.js} +52 -51
  190. package/chunks/{discovery-ORA5J7YP.js → discovery-X2NV535U.js} +1 -1
  191. package/chunks/{display-image-ON3EYFRD.js → display-image-OEJMJV3S.js} +5 -5
  192. package/chunks/{dist-YEPL4RAW.js → dist-5EV2G6MC.js} +2 -3
  193. package/chunks/{dist-MAQXAQ2Y.js → dist-EQ3Q5XHX.js} +45337 -32756
  194. package/chunks/{dist-WJ4BHIEW.js → dist-ESS34DHC.js} +72 -0
  195. package/chunks/{dist-JWMKPWT5.js → dist-EUOUPUFO.js} +3 -4
  196. package/chunks/{dist-IYYN3RUT.js → dist-UOFRXJT6.js} +2798 -1250
  197. package/chunks/{earlyInputCapture-KJMLFVQV.js → earlyInputCapture-VSP42LUR.js} +53 -52
  198. package/chunks/{edit-I4LQFAEC.js → edit-ZTLO5ASX.js} +60 -58
  199. package/chunks/{en-X6YV7GME.js → en-MD3GP5YL.js} +8 -0
  200. package/chunks/{enter-worktree-YNPOJSRH.js → enter-worktree-TMTPDS2S.js} +55 -54
  201. package/chunks/{enterPlanMode-XCPK62ER.js → enterPlanMode-UBAXFMYI.js} +55 -54
  202. package/chunks/{environment-S7CTIHMX.js → environment-C2CZN7CB.js} +55 -54
  203. package/chunks/{errors-7HB2AIDS.js → errors-ZUNFQINF.js} +54 -53
  204. package/chunks/{exit-worktree-AIIY7SR6.js → exit-worktree-572NWEPJ.js} +55 -54
  205. package/chunks/exitPlanMode-QTIXFGZT.js +86 -0
  206. package/chunks/{fast-path-NDJV3ZFJ.js → fast-path-CEEVHQL3.js} +3 -3
  207. package/chunks/{fast-path-settings-LNOFM2YP.js → fast-path-settings-WHX3J3ZI.js} +2 -2
  208. package/chunks/{fr-VENTC2BS.js → fr-ZEML2JWS.js} +8 -0
  209. package/chunks/{gemini-RSUFP5OE.js → gemini-I2YR6GMS.js} +114 -112
  210. package/chunks/{geminiContentGenerator-SQ5XBPZ7.js → geminiContentGenerator-GQWNDZQF.js} +7 -7
  211. package/chunks/getMachineId-bsd-FBOAYNSY.js +48 -0
  212. package/chunks/{getMachineId-bsd-FG7IUY6U.js → getMachineId-bsd-YH7RURBZ.js} +4 -4
  213. package/chunks/{getMachineId-darwin-GLCJI2RA.js → getMachineId-darwin-H6USQYNI.js} +4 -4
  214. package/chunks/getMachineId-darwin-RNJLJUXY.js +47 -0
  215. package/chunks/{getMachineId-linux-O6OPPAKO.js → getMachineId-linux-HF2N63ET.js} +3 -3
  216. package/chunks/getMachineId-linux-UEVRAIAB.js +41 -0
  217. package/chunks/getMachineId-unsupported-FWXYJ7HW.js +31 -0
  218. package/chunks/{getMachineId-unsupported-S6CKYVGC.js → getMachineId-unsupported-NYA5DXRB.js} +3 -3
  219. package/chunks/getMachineId-win-LRVGMHLW.js +50 -0
  220. package/chunks/{getMachineId-win-X5SRNEH7.js → getMachineId-win-SMEGY2DW.js} +4 -4
  221. package/chunks/{glob-J4RUJAHX.js → glob-XFBL2RVT.js} +58 -57
  222. package/chunks/{goal-tools-VHTNVOKK.js → goal-tools-TLJCE7YZ.js} +6 -6
  223. package/chunks/{grep-VJWPLFOT.js → grep-U675LEXE.js} +55 -54
  224. package/chunks/handleAutoUpdate-R6RUCIA2.js +97 -0
  225. package/chunks/{i18n-RM5YOICI.js → i18n-SJCZDZ4C.js} +53 -52
  226. package/chunks/{image-gen-EXECB5XM.js → image-gen-6VY7CA7C.js} +14 -14
  227. package/chunks/initializer-CRDZXJOG.js +101 -0
  228. package/chunks/installationInfo-EW3NEJDZ.js +95 -0
  229. package/chunks/{ja-QHT4EQTO.js → ja-UM5B2HMD.js} +8 -0
  230. package/chunks/{keychain-token-storage-3XFJ5ZB2.js → keychain-token-storage-MTFTAESK.js} +3 -3
  231. package/chunks/list-TZEMTXDH.js +104 -0
  232. package/chunks/{list-agents-OSVDFI6S.js → list-agents-43XUEXJV.js} +6 -6
  233. package/chunks/loadedSettingsAdapter-47DG424L.js +98 -0
  234. package/chunks/{loggingContentGenerator-WF4ZOJEZ.js → loggingContentGenerator-77C6O5VW.js} +31 -29
  235. package/chunks/{loop-wakeup-WQS6JYAG.js → loop-wakeup-E54KDUXC.js} +6 -6
  236. package/chunks/{ls-D3HUFHDP.js → ls-CGL2UC3H.js} +7 -7
  237. package/chunks/{lsp-3QDDJTCS.js → lsp-5IKUO5DX.js} +3 -3
  238. package/chunks/{managed-npm-update-E7IW6N7V.js → managed-npm-update-AJ5GZRUA.js} +53 -52
  239. package/chunks/mcp-AQK656Y4.js +98 -0
  240. package/chunks/{monitor-EE2UYMGE.js → monitor-UDZXKYT3.js} +55 -54
  241. package/chunks/nonInteractiveCli-6NC3NLZM.js +166 -0
  242. package/chunks/{notebook-edit-NTDY4QDU.js → notebook-edit-G6WZI2YT.js} +59 -57
  243. package/chunks/{openaiContentGenerator-YNFVJMRJ.js → openaiContentGenerator-IHVHP3VB.js} +32 -32
  244. package/chunks/{pidfile-4XSFLYBZ.js → pidfile-EBKS2HBK.js} +53 -52
  245. package/chunks/{processUtils-WDA2MJFD.js → processUtils-B7M35ZLR.js} +2 -2
  246. package/chunks/prompt-terminal-ledger-5JYOPOII.js +93 -0
  247. package/chunks/{pt-VL3I5RNY.js → pt-5BMJ3XYH.js} +8 -0
  248. package/chunks/{qwenContentGenerator-434M7QKY.js → qwenContentGenerator-WCJPPTED.js} +59 -58
  249. package/chunks/{qwenOAuth2-GMYZOO6A.js → qwenOAuth2-S2CLBSEZ.js} +10 -10
  250. package/chunks/read-file-WFM53FTW.js +33 -0
  251. package/chunks/{read-mcp-resource-XD54ZQMC.js → read-mcp-resource-XYES2B42.js} +3 -3
  252. package/chunks/{record-artifact-SEYFJEJF.js → record-artifact-W3IBTGL7.js} +10 -6
  253. package/chunks/{resumeHistoryUtils-EVG3WYK2.js → resumeHistoryUtils-CK4ZC6YO.js} +59 -58
  254. package/chunks/ripGrep-B3PBLEQ3.js +86 -0
  255. package/chunks/{ru-4RCKL4PY.js → ru-6GL66ORV.js} +8 -0
  256. package/chunks/{run-qwen-serve-3QSGRXAN.js → run-qwen-serve-DC5RXI6N.js} +537 -185
  257. package/chunks/{runtime-5MLLZ7DC.js → runtime-UVEETF54.js} +63 -62
  258. package/chunks/{scheduler-RPBJ63CH.js → scheduler-MWT3UMVN.js} +54 -53
  259. package/chunks/{sdk-exporters-grpc-54L4LS5L.js → sdk-exporters-grpc-6J5CKOMO.js} +194 -75
  260. package/chunks/{sdk-exporters-http-XUVP63H6.js → sdk-exporters-http-Q3YZ4752.js} +40 -45
  261. package/chunks/{sdk-impl-YXUEN2Z2.js → sdk-impl-BOMCAN2Z.js} +7211 -5454
  262. package/chunks/{send-message-VZENRWRH.js → send-message-J4VT46OI.js} +8 -8
  263. package/chunks/{serve-HS3XLPXU.js → serve-AKM75GTE.js} +60 -61
  264. package/chunks/{server-TC4A7AAZ.js → server-KU7XIDVT.js} +2221 -399
  265. package/chunks/{session-UBOFXVMN.js → session-DKVYIRWN.js} +108 -105
  266. package/chunks/{settings-D5644OM5.js → settings-NS3PXZDP.js} +63 -62
  267. package/chunks/{shell-3PZULQQV.js → shell-UXCNM2OK.js} +52 -51
  268. package/chunks/{skill-PEVVXQ3L.js → skill-KV7YCCTM.js} +30 -28
  269. package/chunks/{skill-settings-J65JKKES.js → skill-settings-EXW7ESWJ.js} +59 -58
  270. package/chunks/{spawnChannel-IYGXRHSQ.js → spawnChannel-FCP44P4V.js} +55 -54
  271. package/chunks/{standalone-update-IFM53PE7.js → standalone-update-RGW3B2DX.js} +55 -54
  272. package/chunks/{startInteractiveUI-3AVH7L6H.js → startInteractiveUI-UZMF2BIJ.js} +615 -392
  273. package/chunks/{syntheticOutput-7GWFIDXT.js → syntheticOutput-JAXMIMZP.js} +4 -4
  274. package/chunks/{task-create-FCBDX7UH.js → task-create-I2H322E4.js} +12 -12
  275. package/chunks/{task-list-YIYIUFUA.js → task-list-3OLIWFTQ.js} +21 -7
  276. package/chunks/{task-stop-X37KYTKB.js → task-stop-JAUY6MSY.js} +3 -3
  277. package/chunks/{task-update-MYPFVOVM.js → task-update-B3XO4CPI.js} +87 -16
  278. package/chunks/{team-create-ZAIA7KAV.js → team-create-77XY3KAE.js} +56 -56
  279. package/chunks/{team-delete-6UMU4XLS.js → team-delete-Q7GE7RRI.js} +6 -6
  280. package/chunks/{team-plan-approval-UNIUS7OD.js → team-plan-approval-TAQANDQG.js} +55 -54
  281. package/chunks/{terminal-image-renderer-G343P2RV.js → terminal-image-renderer-V4LIF5NS.js} +54 -53
  282. package/chunks/theme-manager-KKBAJ574.js +90 -0
  283. package/chunks/{todoWrite-U2R4NVF4.js → todoWrite-FJJTY2TI.js} +7 -7
  284. package/chunks/{tool-search-5R2OE4C7.js → tool-search-GZJYRK4I.js} +25 -24
  285. package/chunks/{total-session-admission-4KBHMQQ2.js → total-session-admission-NIBNWXHE.js} +59 -57
  286. package/chunks/{trustedFolders-LK6T4XC7.js → trustedFolders-7GEI2NYC.js} +53 -52
  287. package/chunks/{undici-PYHBDDPN.js → undici-S7WJSKGJ.js} +962 -391
  288. package/chunks/{update-relaunch-UBKROIC6.js → update-relaunch-OA3OEBMD.js} +5 -5
  289. package/chunks/{updateCheck-W4Y2GFSD.js → updateCheck-QVHQEVIY.js} +56 -55
  290. package/chunks/{useAutoAcceptIndicator-C7BEICBF.js → useAutoAcceptIndicator-WZ27J7NY.js} +64 -63
  291. package/chunks/{validateNonInterActiveAuth-LTEI2TB6.js → validateNonInterActiveAuth-OXJA2JWG.js} +99 -96
  292. package/chunks/{version-G5A5DGVS.js → version-KJO64WD7.js} +1 -1
  293. package/chunks/{web-fetch-RTEQTR5Z.js → web-fetch-CC5INI2R.js} +25 -23
  294. package/chunks/{web-search-5OXHEZPV.js → web-search-MOAUAN6N.js} +18 -18
  295. package/chunks/{web-shell-static-O73YPVVC.js → web-shell-static-3NUTRHAH.js} +4 -5
  296. package/chunks/{workflow-ISQJHPG2.js → workflow-BN2ZEJMK.js} +366 -105
  297. package/chunks/workspace-providers-status-R5QTZFK3.js +101 -0
  298. package/chunks/{workspace-registration-store-CYNY6IP6.js → workspace-registration-store-WMSLM36M.js} +1 -1
  299. package/chunks/{workspace-registry-34GTUUHB.js → workspace-registry-J3RUCXH6.js} +59 -57
  300. package/chunks/{workspace-service-XCDQLE2Y.js → workspace-service-JJZFPKM4.js} +66 -65
  301. package/chunks/workspace-skills-status-DRIOZRIA.js +101 -0
  302. package/chunks/{workspace-trust-reconciler-AYGXC7A3.js → workspace-trust-reconciler-YAYSN6CX.js} +69 -67
  303. package/chunks/write-file-7HXHFFOY.js +88 -0
  304. package/chunks/{zh-TW-SQ4HTSCW.js → zh-TW-LVLBK4KF.js} +8 -0
  305. package/chunks/{zh-LMSTK4WD.js → zh-UBMWS2BJ.js} +8 -0
  306. package/chunks/{zoom-image-4BFYJ3HG.js → zoom-image-EFMQMU4G.js} +24 -22
  307. package/cli.js +15 -15
  308. package/locales/ca.js +13 -0
  309. package/locales/de.js +12 -0
  310. package/locales/en.js +11 -0
  311. package/locales/fr.js +13 -0
  312. package/locales/ja.js +13 -0
  313. package/locales/pt.js +12 -0
  314. package/locales/ru.js +12 -0
  315. package/locales/zh-TW.js +11 -0
  316. package/locales/zh.js +11 -0
  317. package/package.json +3 -3
  318. package/web-shell/assets/{arc-CgOpDKvm.js → arc-BCP1f-bN.js} +1 -1
  319. package/web-shell/assets/{architectureDiagram-3BPJPVTR-0Ag_m34F.js → architectureDiagram-3BPJPVTR-D-6ajMay.js} +1 -1
  320. package/web-shell/assets/{blockDiagram-GPEHLZMM-IwTwFau0.js → blockDiagram-GPEHLZMM-CcLlnVnf.js} +1 -1
  321. package/web-shell/assets/{c4Diagram-AAUBKEIU-DLa5GUv8.js → c4Diagram-AAUBKEIU-C_Sp9UwQ.js} +1 -1
  322. package/web-shell/assets/channel-BcImYzbA.js +1 -0
  323. package/web-shell/assets/{chunk-2J33WTMH-DcYP-WFG.js → chunk-2J33WTMH-CG0ngvo9.js} +1 -1
  324. package/web-shell/assets/{chunk-4BX2VUAB-C8MVPMiQ.js → chunk-4BX2VUAB-D43LsVdk.js} +1 -1
  325. package/web-shell/assets/{chunk-55IACEB6-BUi4Yfv3.js → chunk-55IACEB6-BqNIn5rz.js} +1 -1
  326. package/web-shell/assets/{chunk-727SXJPM-Cy3Su2YY.js → chunk-727SXJPM-BSHmO08Y.js} +1 -1
  327. package/web-shell/assets/{chunk-AQP2D5EJ-Dp8Teqv6.js → chunk-AQP2D5EJ-CMUbr5tQ.js} +1 -1
  328. package/web-shell/assets/{chunk-FMBD7UC4-BDTDM-4j.js → chunk-FMBD7UC4-Cm6JflnZ.js} +1 -1
  329. package/web-shell/assets/{chunk-ND2GUHAM-7HfDt0r2.js → chunk-ND2GUHAM-CBR39YQZ.js} +1 -1
  330. package/web-shell/assets/{chunk-QZHKN3VN-BIBU0uCF.js → chunk-QZHKN3VN-CWnqaLb-.js} +1 -1
  331. package/web-shell/assets/classDiagram-4FO5ZUOK-OWx0rDRW.js +1 -0
  332. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-OWx0rDRW.js +1 -0
  333. package/web-shell/assets/{cose-bilkent-S5V4N54A-DRLdcg9p.js → cose-bilkent-S5V4N54A-DJlTdnfD.js} +1 -1
  334. package/web-shell/assets/{dagre-BM42HDAG-DCCgDwqW.js → dagre-BM42HDAG-1AFN1uVc.js} +1 -1
  335. package/web-shell/assets/{diagram-2AECGRRQ-CsBTBmk3.js → diagram-2AECGRRQ-gC0GGNSW.js} +1 -1
  336. package/web-shell/assets/{diagram-5GNKFQAL-C9qjH8Lt.js → diagram-5GNKFQAL-CPmRPT1s.js} +1 -1
  337. package/web-shell/assets/{diagram-KO2AKTUF-Brjs_lj2.js → diagram-KO2AKTUF-atigp6Hr.js} +1 -1
  338. package/web-shell/assets/{diagram-LMA3HP47-DtiWCl_F.js → diagram-LMA3HP47-BJnJFSRQ.js} +1 -1
  339. package/web-shell/assets/{diagram-OG6HWLK6-DmfKLkBT.js → diagram-OG6HWLK6-CyvJ4fG2.js} +1 -1
  340. package/web-shell/assets/{erDiagram-TEJ5UH35-Bve_4deH.js → erDiagram-TEJ5UH35-CZac_jT6.js} +1 -1
  341. package/web-shell/assets/{flowDiagram-I6XJVG4X-C2_kXCcV.js → flowDiagram-I6XJVG4X-pd-LQxWB.js} +1 -1
  342. package/web-shell/assets/{ganttDiagram-6RSMTGT7-BSBIjiTF.js → ganttDiagram-6RSMTGT7-CvB1at7l.js} +1 -1
  343. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CyebwI55.js → gitGraphDiagram-PVQCEYII-B5Y6nkil.js} +1 -1
  344. package/web-shell/assets/index-Bg3DAn8Z.js +1788 -0
  345. package/web-shell/assets/{index-d0yfnV1M.js → index-Bj3ZSUHL.js} +1 -1
  346. package/web-shell/assets/index-mp32EO88.css +5 -0
  347. package/web-shell/assets/{infoDiagram-5YYISTIA-CSDGnWxU.js → infoDiagram-5YYISTIA-BdyWvU4P.js} +1 -1
  348. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-BK4jU13p.js → ishikawaDiagram-YF4QCWOH-CaHbUdvN.js} +1 -1
  349. package/web-shell/assets/{journeyDiagram-JHISSGLW-D_W6j-oF.js → journeyDiagram-JHISSGLW-DR9F3FpG.js} +1 -1
  350. package/web-shell/assets/{kanban-definition-UN3LZRKU-C7xf-SdC.js → kanban-definition-UN3LZRKU-BoEUbkw2.js} +1 -1
  351. package/web-shell/assets/{linear-DQmzxpxd.js → linear-DUbfzV4T.js} +1 -1
  352. package/web-shell/assets/{mermaid.core-9P7AGOLG.js → mermaid.core-CLLkPcpD.js} +5 -5
  353. package/web-shell/assets/{mindmap-definition-RKZ34NQL-DgcgMyPk.js → mindmap-definition-RKZ34NQL-FuKI3Stt.js} +1 -1
  354. package/web-shell/assets/{pieDiagram-4H26LBE5-3wWGb9eG.js → pieDiagram-4H26LBE5-CVAHL7l5.js} +1 -1
  355. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-BeCXnQw9.js → quadrantDiagram-W4KKPZXB-BkGi5fRj.js} +1 -1
  356. package/web-shell/assets/{requirementDiagram-4Y6WPE33-Bi1UOHDz.js → requirementDiagram-4Y6WPE33-B5ghV8-K.js} +1 -1
  357. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-lrLUjjbb.js → sankeyDiagram-5OEKKPKP-CKFbVhkQ.js} +1 -1
  358. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-BFuqKz6Q.js → sequenceDiagram-3UESZ5HK-C5P9ujPd.js} +1 -1
  359. package/web-shell/assets/{stateDiagram-AJRCARHV-8DemQLhu.js → stateDiagram-AJRCARHV-CsDn-Rez.js} +1 -1
  360. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DpGKD1ez.js +1 -0
  361. package/web-shell/assets/{timeline-definition-PNZ67QCA-uzEuVQXg.js → timeline-definition-PNZ67QCA-B6oLBkTr.js} +1 -1
  362. package/web-shell/assets/{vennDiagram-CIIHVFJN-BQTeZ_-o.js → vennDiagram-CIIHVFJN-DvtBkYwp.js} +1 -1
  363. package/web-shell/assets/{wardley-L42UT6IY-B6yM5Im7.js → wardley-L42UT6IY-D2UwTX16.js} +1 -1
  364. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-ChM8bmgn.js → wardleyDiagram-YWT4CUSO-FnnfCxYI.js} +1 -1
  365. package/web-shell/assets/{xychartDiagram-2RQKCTM6-oNG6HyB1.js → xychartDiagram-2RQKCTM6-C1SaMQ7d.js} +1 -1
  366. package/web-shell/index.html +2 -2
  367. package/chunks/MaxSizedBox-UQALOVVT.js +0 -97
  368. package/chunks/agent-headless-GJCQMURW.js +0 -87
  369. package/chunks/channel-settings-store-WNWYFHG7.js +0 -102
  370. package/chunks/chunk-AZQ3DT76.js +0 -10017
  371. package/chunks/chunk-CR3C7WXL.js +0 -113
  372. package/chunks/chunk-K5IDV3PC.js +0 -519
  373. package/chunks/chunk-MPHPFVKK.js +0 -48
  374. package/chunks/chunk-RLKC46YT.js +0 -3582
  375. package/chunks/chunk-UPDOZBWO.js +0 -358
  376. package/chunks/contextCommand-PJ77GBWL.js +0 -93
  377. package/chunks/daemon-status-provider-ZDOYJCU6.js +0 -102
  378. package/chunks/daemon-trust-policy-E67OYUK2.js +0 -99
  379. package/chunks/exitPlanMode-R4JY7V2O.js +0 -85
  380. package/chunks/handleAutoUpdate-POCX2MNB.js +0 -94
  381. package/chunks/initializer-Z2AFGBNR.js +0 -100
  382. package/chunks/installationInfo-4I5FXNMH.js +0 -92
  383. package/chunks/list-ZMBFIGZA.js +0 -103
  384. package/chunks/loadedSettingsAdapter-T6TV4YJ7.js +0 -97
  385. package/chunks/mcp-6UNYX4HG.js +0 -97
  386. package/chunks/nonInteractiveCli-WAY237O4.js +0 -163
  387. package/chunks/read-file-TAFBKMNI.js +0 -32
  388. package/chunks/ripGrep-WOEK2PXS.js +0 -85
  389. package/chunks/theme-manager-Z3RIT7DB.js +0 -89
  390. package/chunks/undici-3FJYTMOF.js +0 -25914
  391. package/chunks/workspace-providers-status-2ZPZPUPZ.js +0 -100
  392. package/chunks/workspace-skills-status-RS4O7AIJ.js +0 -100
  393. package/chunks/write-file-EWXKVVXF.js +0 -87
  394. package/web-shell/assets/channel-BrGVBa2L.js +0 -1
  395. package/web-shell/assets/classDiagram-4FO5ZUOK-B5TUzJzI.js +0 -1
  396. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B5TUzJzI.js +0 -1
  397. package/web-shell/assets/index-CIDsgxTe.js +0 -1792
  398. package/web-shell/assets/index-DiQnWi_E.css +0 -5
  399. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DhM5ixYd.js +0 -1
  400. package/chunks/{dist-BROOP2EG.js → dist-LZO24N3E.js} +1 -1
@@ -36,10 +36,11 @@ import {
36
36
  resolveAcpHttpEnabled,
37
37
  setDeferredRuntimeRequestTiming,
38
38
  toDaemonStatusMemoryLimits
39
- } from "./chunk-O565M6A4.js";
39
+ } from "./chunk-DRVS6K7A.js";
40
40
  import "./chunk-VGHZT6JR.js";
41
41
  import {
42
- isLoopbackBind
42
+ isLoopbackBind,
43
+ normalizeSessionIdForLookup
43
44
  } from "./chunk-TQOF5KBL.js";
44
45
  import {
45
46
  formatMemoryBudgetStderr,
@@ -47,9 +48,16 @@ import {
47
48
  serveJournalGrowthPoolMb
48
49
  } from "./chunk-UXEO7E3V.js";
49
50
  import "./chunk-NYWWQ437.js";
51
+ import {
52
+ require_express,
53
+ resolveWebShellDir
54
+ } from "./chunk-O5Z7EB6Y.js";
50
55
  import {
51
56
  resolveSessionRestoreTimeoutMs
52
57
  } from "./chunk-4JRM2BSM.js";
58
+ import {
59
+ LIVE_HOST_PROTOCOL_VERSION
60
+ } from "./chunk-NKLP3DCK.js";
53
61
  import {
54
62
  DEFAULT_COMPACTED_REPLAY_MAX_BYTES,
55
63
  DEFAULT_MAX_JOURNAL_BYTES,
@@ -59,39 +67,25 @@ import {
59
67
  normalizeMaxJournalBytes,
60
68
  normalizeMaxJournalEvents
61
69
  } from "./chunk-WCCLLK7X.js";
62
- import {
63
- require_express,
64
- resolveWebShellDir
65
- } from "./chunk-GDXET5XU.js";
70
+ import "./chunk-HMJ2P3SV.js";
66
71
  import {
67
72
  resolveChannelCwd
68
73
  } from "./chunk-45NQKMYB.js";
69
- import {
70
- LIVE_HOST_PROTOCOL_VERSION
71
- } from "./chunk-NKLP3DCK.js";
72
- import "./chunk-K6KS3LTN.js";
73
- import "./chunk-FC4KQFCS.js";
74
- import "./chunk-T3CHYWJZ.js";
75
- import {
76
- consumeServeFastPathRejectedLoaderKeys,
77
- loadServeFastPathSettings,
78
- preResolveServeFastPathHomeEnvOverrides
79
- } from "./chunk-M6NDLY2T.js";
80
74
  import {
81
75
  MAX_REGISTERED_WORKSPACES,
82
76
  resolveWorkspaceInputs,
83
77
  workspaceRegistrationId
84
- } from "./chunk-JNDY2MDR.js";
85
- import "./chunk-AA2BEKV3.js";
78
+ } from "./chunk-TLDZKNZP.js";
79
+ import "./chunk-CTAP6PO3.js";
86
80
  import {
87
81
  LOAD_REPLAY_META_KEY
88
- } from "./chunk-S5DWMTHO.js";
82
+ } from "./chunk-QQUVPMMZ.js";
89
83
  import "./chunk-624NHDGB.js";
90
84
  import {
91
85
  canonicalizeWorkspace,
92
86
  translateAndCheckAbsoluteWorkspacePath
93
87
  } from "./chunk-6PLDPT2C.js";
94
- import "./chunk-4W5U2TUT.js";
88
+ import "./chunk-4F5WV4RF.js";
95
89
  import "./chunk-FYJ7W2PI.js";
96
90
  import "./chunk-Z7B6SRPM.js";
97
91
  import {
@@ -99,7 +93,7 @@ import {
99
93
  ChannelWebhookEnqueueError,
100
94
  QWEN_SERVER_TOKEN_ENV,
101
95
  isChannelDeliveryError
102
- } from "./chunk-YP5KH5Y7.js";
96
+ } from "./chunk-ND7NOI4P.js";
103
97
  import {
104
98
  normalizeWorkerDiagnostic,
105
99
  sanitizeWorkerDiagnostic
@@ -107,8 +101,7 @@ import {
107
101
  import {
108
102
  channelSelectionNames
109
103
  } from "./chunk-ALMR3E6Q.js";
110
- import "./chunk-HIBNSEJE.js";
111
- import "./chunk-M5GB774H.js";
104
+ import "./chunk-UDG5EZJI.js";
112
105
  import {
113
106
  EXTERNAL_TOOL_GUARD_PROVIDER_ATTACHED_VALUE,
114
107
  EXTERNAL_TOOL_GUARD_REQUIRED_VALUE,
@@ -116,13 +109,21 @@ import {
116
109
  PRIVATE_EXTERNAL_TOOL_GUARD_ENV,
117
110
  PRIVATE_EXTERNAL_TOOL_GUARD_PROVIDER_ENV
118
111
  } from "./chunk-3VUENPWF.js";
112
+ import "./chunk-M5GB774H.js";
113
+ import {
114
+ MAX_DAEMON_WORKSPACES
115
+ } from "./chunk-5HBA2Z7V.js";
116
+ import "./chunk-K6KS3LTN.js";
117
+ import "./chunk-7E7UCJHS.js";
119
118
  import {
120
119
  sanitizeLogText
121
120
  } from "./chunk-AW27A43Y.js";
122
121
  import "./chunk-IW6RQPQB.js";
123
122
  import {
124
- MAX_DAEMON_WORKSPACES
125
- } from "./chunk-5HBA2Z7V.js";
123
+ consumeServeFastPathRejectedLoaderKeys,
124
+ loadServeFastPathSettings,
125
+ preResolveServeFastPathHomeEnvOverrides
126
+ } from "./chunk-LD5VIJ7S.js";
126
127
  import "./chunk-GOXKNSDZ.js";
127
128
  import {
128
129
  getGlobalQwenDirLite,
@@ -133,23 +134,23 @@ import {
133
134
  clearLoaderKeyRejectionReporterIfCurrent,
134
135
  scrubInheritedLoaderEnv,
135
136
  setLoaderKeyRejectionReporter
136
- } from "./chunk-MS7GNABG.js";
137
+ } from "./chunk-CXJHQVEK.js";
137
138
  import {
138
139
  getCliVersion
139
- } from "./chunk-CU6GJD55.js";
140
+ } from "./chunk-7WLFSDLG.js";
140
141
  import "./chunk-WZMH7II3.js";
141
142
  import "./chunk-NPQ5ZKRP.js";
142
143
  import {
143
144
  isWithinRoot
144
145
  } from "./chunk-MR3PXB6E.js";
146
+ import "./chunk-LJZSMWOH.js";
145
147
  import "./chunk-GOFAQQZA.js";
146
- import "./chunk-5M6IDOMF.js";
147
148
  import "./chunk-TWPJO254.js";
148
149
  import "./chunk-CQ35AJ4Z.js";
150
+ import "./chunk-5M6IDOMF.js";
149
151
  import {
150
152
  require_proper_lockfile
151
153
  } from "./chunk-MLXTMF7H.js";
152
- import "./chunk-CR3C7WXL.js";
153
154
  import "./chunk-XWRJCPHC.js";
154
155
  import {
155
156
  finalizeStartupProfile,
@@ -167,7 +168,7 @@ import {
167
168
  init_esm,
168
169
  isSpanContextValid,
169
170
  trace
170
- } from "./chunk-QUGAUQGJ.js";
171
+ } from "./chunk-TBWQLLFO.js";
171
172
  import {
172
173
  init_esbuild_shims
173
174
  } from "./chunk-5O2XNYP6.js";
@@ -1388,7 +1389,7 @@ function createConcreteLogger(input) {
1388
1389
  }
1389
1390
  });
1390
1391
  let timeout;
1391
- const deadline = new Promise((resolve3) => {
1392
+ const deadline = new Promise((resolve4) => {
1392
1393
  timeout = setTimeout(() => {
1393
1394
  try {
1394
1395
  input.warnOnce(
@@ -1397,7 +1398,7 @@ function createConcreteLogger(input) {
1397
1398
  );
1398
1399
  } catch {
1399
1400
  } finally {
1400
- resolve3();
1401
+ resolve4();
1401
1402
  }
1402
1403
  }, input.policy.closeDrainBudgetMs);
1403
1404
  timeout.unref();
@@ -1743,61 +1744,81 @@ __name(initDaemonLogger, "initDaemonLogger");
1743
1744
 
1744
1745
  // packages/cli/src/serve/conversations/conversation-workspace.ts
1745
1746
  init_esbuild_shims();
1746
- import { createHash as createHash2 } from "node:crypto";
1747
- import { lstat, mkdir, realpath, rmdir } from "node:fs/promises";
1747
+ import { readdir, rmdir } from "node:fs/promises";
1748
1748
  import { homedir } from "node:os";
1749
+ import { resolve as resolve2 } from "node:path";
1750
+
1751
+ // packages/cli/src/utils/conversation-directory-identity.ts
1752
+ init_esbuild_shims();
1753
+ import { createHash as createHash2 } from "node:crypto";
1754
+ import { lstat, mkdir, realpath } from "node:fs/promises";
1749
1755
  import { isAbsolute, join as join2, relative as relative2, resolve, sep } from "node:path";
1750
- var isSamePath = /* @__PURE__ */ __name((left, right) => process.platform === "win32" ? left.toLowerCase() === right.toLowerCase() : left === right, "isSamePath");
1751
- function conversationDirectoryName(sessionId) {
1752
- if (sessionId.length === 0 || sessionId.length > 256) {
1753
- throw new Error("Live conversation session id is invalid");
1756
+ function hasVerifiableInode(ino) {
1757
+ return Number(ino) !== 0;
1758
+ }
1759
+ __name(hasVerifiableInode, "hasVerifiableInode");
1760
+ var ConversationDirectoryIdentityError = class extends Error {
1761
+ constructor(scope, reason, cause) {
1762
+ super(
1763
+ `Conversation ${scope} identity validation failed: ${reason}`,
1764
+ cause !== void 0 ? { cause } : void 0
1765
+ );
1766
+ this.scope = scope;
1767
+ this.reason = reason;
1768
+ }
1769
+ static {
1770
+ __name(this, "ConversationDirectoryIdentityError");
1771
+ }
1772
+ name = "ConversationDirectoryIdentityError";
1773
+ };
1774
+ function throwIdentityIoError(scope, cause) {
1775
+ throw new ConversationDirectoryIdentityError(scope, "io_error", cause);
1776
+ }
1777
+ __name(throwIdentityIoError, "throwIdentityIoError");
1778
+ var isSameConversationPath = /* @__PURE__ */ __name((left, right) => process.platform === "win32" ? left.toLowerCase() === right.toLowerCase() : left === right, "isSameConversationPath");
1779
+ function getConversationDirectoryName(storageSessionId) {
1780
+ if (storageSessionId.length === 0 || storageSessionId.length > 256) {
1781
+ throw new ConversationDirectoryIdentityError("child", "invalid_session_id");
1754
1782
  }
1755
- return `conversation-${createHash2("sha256").update(sessionId).digest("hex")}`;
1783
+ return `conversation-${createHash2("sha256").update(storageSessionId).digest("hex")}`;
1756
1784
  }
1757
- __name(conversationDirectoryName, "conversationDirectoryName");
1758
- function validateRootStats(stats, label = "root") {
1785
+ __name(getConversationDirectoryName, "getConversationDirectoryName");
1786
+ function validateDirectoryStats(stats, scope) {
1759
1787
  if (stats.isSymbolicLink() || !stats.isDirectory()) {
1760
- throw new Error(
1761
- `Live conversation ${label} must be a non-symlink directory`
1762
- );
1788
+ throw new ConversationDirectoryIdentityError(scope, "not_directory");
1763
1789
  }
1764
1790
  if (process.platform !== "win32" && typeof process.getuid === "function" && stats.uid !== process.getuid()) {
1765
- throw new Error(
1766
- `Live conversation ${label} must be owned by the daemon user`
1767
- );
1791
+ throw new ConversationDirectoryIdentityError(scope, "wrong_owner");
1768
1792
  }
1769
1793
  if (process.platform !== "win32" && (stats.mode & 63) !== 0) {
1770
- throw new Error(
1771
- `Live conversation ${label} must be accessible only to its owner`
1772
- );
1773
- }
1774
- }
1775
- __name(validateRootStats, "validateRootStats");
1776
- function hasIdentity(stats, root) {
1777
- return stats.dev === root.device && stats.ino === root.inode;
1778
- }
1779
- __name(hasIdentity, "hasIdentity");
1780
- async function validateConversationDirectory(root, name, candidate, parent = root.canonicalRoot) {
1781
- const before = await lstat(candidate);
1782
- validateRootStats(before, "directory");
1783
- const canonical = await realpath(candidate);
1784
- const after = await lstat(canonical);
1785
- validateRootStats(after, "directory");
1786
- const child = relative2(parent, canonical);
1787
- if (child !== name || child.includes(sep) || child.startsWith("..") || isAbsolute(child) || before.dev !== after.dev || before.ino !== after.ino) {
1788
- throw new Error(
1789
- "Live conversation directory must be an owned direct child"
1790
- );
1791
- }
1792
- await revalidateConversationRoot(root);
1793
- return canonical;
1794
- }
1795
- __name(validateConversationDirectory, "validateConversationDirectory");
1796
- function getConversationRootPath(homeDir = homedir()) {
1797
- return resolve(homeDir, "Documents", "Qwen Code", "Conversations");
1798
- }
1799
- __name(getConversationRootPath, "getConversationRootPath");
1800
- async function createRoot(configuredRoot) {
1794
+ throw new ConversationDirectoryIdentityError(scope, "wrong_mode");
1795
+ }
1796
+ }
1797
+ __name(validateDirectoryStats, "validateDirectoryStats");
1798
+ function hasRootIdentity(stats, root) {
1799
+ if (!root.inodeVerifiable) return stats.dev === root.device;
1800
+ return hasVerifiableInode(stats.ino) && stats.dev === root.device && stats.ino === root.inode;
1801
+ }
1802
+ __name(hasRootIdentity, "hasRootIdentity");
1803
+ function isSameDirectoryIdentity(before, after) {
1804
+ if (!hasVerifiableInode(before.ino) || !hasVerifiableInode(after.ino)) {
1805
+ return before.dev === after.dev;
1806
+ }
1807
+ return before.dev === after.dev && before.ino === after.ino;
1808
+ }
1809
+ __name(isSameDirectoryIdentity, "isSameDirectoryIdentity");
1810
+ function hasExpectedDirectoryIdentity(identity, expected) {
1811
+ const inodesProvable = hasVerifiableInode(identity.inode) && hasVerifiableInode(expected.inode);
1812
+ return identity.storageSessionId === expected.storageSessionId && identity.name === expected.name && isSameConversationPath(identity.canonicalPath, expected.canonicalPath) && identity.device === expected.device && (!inodesProvable || identity.inode === expected.inode) && isSameConversationPath(
1813
+ identity.root.configuredRoot,
1814
+ expected.root.configuredRoot
1815
+ ) && isSameConversationPath(
1816
+ identity.root.canonicalRoot,
1817
+ expected.root.canonicalRoot
1818
+ ) && identity.root.device === expected.root.device && (!identity.root.inodeVerifiable || !expected.root.inodeVerifiable || identity.root.inode === expected.root.inode);
1819
+ }
1820
+ __name(hasExpectedDirectoryIdentity, "hasExpectedDirectoryIdentity");
1821
+ async function createConversationRootIdentity(configuredRoot) {
1801
1822
  try {
1802
1823
  await mkdir(configuredRoot, { recursive: true, mode: 448 });
1803
1824
  } catch (error) {
@@ -1805,61 +1826,246 @@ async function createRoot(configuredRoot) {
1805
1826
  try {
1806
1827
  existing = await lstat(configuredRoot);
1807
1828
  } catch {
1808
- throw error;
1829
+ throwIdentityIoError("root", error);
1809
1830
  }
1810
- validateRootStats(existing);
1811
- throw error;
1831
+ validateDirectoryStats(existing, "root");
1832
+ throwIdentityIoError("root", error);
1812
1833
  }
1813
- const before = await lstat(configuredRoot);
1814
- validateRootStats(before);
1815
- const canonicalRoot = await realpath(configuredRoot);
1816
- const after = await lstat(canonicalRoot);
1817
- validateRootStats(after);
1818
- if (before.dev !== after.dev || before.ino !== after.ino) {
1819
- throw new Error(
1820
- "Live conversation root identity changed during validation"
1821
- );
1834
+ let before;
1835
+ try {
1836
+ before = await lstat(configuredRoot);
1837
+ } catch (error) {
1838
+ throwIdentityIoError("root", error);
1839
+ }
1840
+ validateDirectoryStats(before, "root");
1841
+ let canonicalRoot;
1842
+ let after;
1843
+ try {
1844
+ canonicalRoot = await realpath(configuredRoot);
1845
+ after = await lstat(canonicalRoot);
1846
+ } catch (error) {
1847
+ throwIdentityIoError("root", error);
1848
+ }
1849
+ validateDirectoryStats(after, "root");
1850
+ if (!isSameDirectoryIdentity(before, after)) {
1851
+ throw new ConversationDirectoryIdentityError("root", "identity_changed");
1822
1852
  }
1823
1853
  return {
1824
1854
  configuredRoot,
1825
1855
  canonicalRoot,
1826
1856
  device: after.dev,
1827
- inode: after.ino
1857
+ inode: after.ino,
1858
+ inodeVerifiable: hasVerifiableInode(after.ino)
1828
1859
  };
1829
1860
  }
1830
- __name(createRoot, "createRoot");
1831
- async function revalidateConversationRoot(root) {
1832
- const configuredStats = await lstat(root.configuredRoot);
1833
- validateRootStats(configuredStats);
1834
- if (!hasIdentity(configuredStats, root)) {
1835
- throw new Error("Live conversation root identity changed");
1861
+ __name(createConversationRootIdentity, "createConversationRootIdentity");
1862
+ async function revalidateConversationRootIdentity(root) {
1863
+ let configuredStats;
1864
+ try {
1865
+ configuredStats = await lstat(root.configuredRoot);
1866
+ } catch (error) {
1867
+ throwIdentityIoError("root", error);
1868
+ }
1869
+ validateDirectoryStats(configuredStats, "root");
1870
+ if (!hasRootIdentity(configuredStats, root)) {
1871
+ throw new ConversationDirectoryIdentityError("root", "identity_changed");
1836
1872
  }
1837
- const canonical = await realpath(root.configuredRoot);
1838
- if (!isSamePath(canonical, root.canonicalRoot)) {
1839
- throw new Error("Live conversation root canonical path changed");
1873
+ let canonical;
1874
+ try {
1875
+ canonical = await realpath(root.configuredRoot);
1876
+ } catch (error) {
1877
+ throwIdentityIoError("root", error);
1878
+ }
1879
+ if (!isSameConversationPath(canonical, root.canonicalRoot)) {
1880
+ throw new ConversationDirectoryIdentityError(
1881
+ "root",
1882
+ "canonical_path_changed"
1883
+ );
1884
+ }
1885
+ let canonicalStats;
1886
+ try {
1887
+ canonicalStats = await lstat(root.canonicalRoot);
1888
+ } catch (error) {
1889
+ throwIdentityIoError("root", error);
1840
1890
  }
1841
- const canonicalStats = await lstat(root.canonicalRoot);
1842
- validateRootStats(canonicalStats);
1843
- if (!hasIdentity(canonicalStats, root)) {
1844
- throw new Error("Live conversation root identity changed");
1891
+ validateDirectoryStats(canonicalStats, "root");
1892
+ if (!hasRootIdentity(canonicalStats, root)) {
1893
+ throw new ConversationDirectoryIdentityError("root", "identity_changed");
1845
1894
  }
1846
1895
  return root;
1847
1896
  }
1848
- __name(revalidateConversationRoot, "revalidateConversationRoot");
1849
- async function assertExactConversationRoot(root, candidate) {
1850
- await revalidateConversationRoot(root);
1897
+ __name(revalidateConversationRootIdentity, "revalidateConversationRootIdentity");
1898
+ async function assertExactConversationRootIdentity(root, candidate) {
1899
+ await revalidateConversationRootIdentity(root);
1851
1900
  const resolvedCandidate = resolve(candidate);
1852
- if (!isSamePath(resolvedCandidate, root.configuredRoot) && !isSamePath(resolvedCandidate, root.canonicalRoot)) {
1853
- throw new Error("Workspace must be the exact Live conversation root");
1901
+ if (!isSameConversationPath(resolvedCandidate, root.configuredRoot) && !isSameConversationPath(resolvedCandidate, root.canonicalRoot)) {
1902
+ throw new ConversationDirectoryIdentityError("root", "unexpected_identity");
1854
1903
  }
1855
- const stats = await lstat(resolvedCandidate);
1856
- validateRootStats(stats);
1857
- const canonical = await realpath(resolvedCandidate);
1858
- if (!isSamePath(canonical, root.canonicalRoot) || !hasIdentity(stats, root)) {
1859
- throw new Error("Workspace must be the exact Live conversation root");
1904
+ let stats;
1905
+ let canonical;
1906
+ try {
1907
+ stats = await lstat(resolvedCandidate);
1908
+ validateDirectoryStats(stats, "root");
1909
+ canonical = await realpath(resolvedCandidate);
1910
+ } catch (error) {
1911
+ if (error instanceof ConversationDirectoryIdentityError) throw error;
1912
+ throwIdentityIoError("root", error);
1913
+ }
1914
+ if (!isSameConversationPath(canonical, root.canonicalRoot) || !hasRootIdentity(stats, root)) {
1915
+ throw new ConversationDirectoryIdentityError("root", "unexpected_identity");
1860
1916
  }
1861
1917
  return root;
1862
1918
  }
1919
+ __name(assertExactConversationRootIdentity, "assertExactConversationRootIdentity");
1920
+ async function inspectConversationDirectoryIdentity(root, storageSessionId, expected) {
1921
+ await revalidateConversationRootIdentity(root);
1922
+ const name = getConversationDirectoryName(storageSessionId);
1923
+ const candidate = join2(root.canonicalRoot, name);
1924
+ let before;
1925
+ try {
1926
+ before = await lstat(candidate);
1927
+ } catch (error) {
1928
+ if (error.code === "ENOENT") return void 0;
1929
+ throwIdentityIoError("child", error);
1930
+ }
1931
+ validateDirectoryStats(before, "child");
1932
+ let canonical;
1933
+ let after;
1934
+ try {
1935
+ canonical = await realpath(candidate);
1936
+ after = await lstat(canonical);
1937
+ } catch (error) {
1938
+ if (error.code === "ENOENT") {
1939
+ throw new ConversationDirectoryIdentityError("child", "identity_changed");
1940
+ }
1941
+ throwIdentityIoError("child", error);
1942
+ }
1943
+ validateDirectoryStats(after, "child");
1944
+ const child = relative2(root.canonicalRoot, canonical);
1945
+ if (child !== name || child.includes(sep) || child.startsWith("..") || isAbsolute(child)) {
1946
+ throw new ConversationDirectoryIdentityError("child", "not_direct_child");
1947
+ }
1948
+ if (!isSameDirectoryIdentity(before, after)) {
1949
+ throw new ConversationDirectoryIdentityError("child", "identity_changed");
1950
+ }
1951
+ await revalidateConversationRootIdentity(root);
1952
+ const identity = {
1953
+ root,
1954
+ storageSessionId,
1955
+ name,
1956
+ canonicalPath: canonical,
1957
+ device: after.dev,
1958
+ inode: after.ino
1959
+ };
1960
+ if (expected && !hasExpectedDirectoryIdentity(identity, expected)) {
1961
+ throw new ConversationDirectoryIdentityError(
1962
+ "child",
1963
+ "unexpected_identity"
1964
+ );
1965
+ }
1966
+ return identity;
1967
+ }
1968
+ __name(inspectConversationDirectoryIdentity, "inspectConversationDirectoryIdentity");
1969
+ async function materializeConversationDirectoryIdentity(root, storageSessionId) {
1970
+ await revalidateConversationRootIdentity(root);
1971
+ const name = getConversationDirectoryName(storageSessionId);
1972
+ const candidate = join2(root.canonicalRoot, name);
1973
+ let created = false;
1974
+ try {
1975
+ await mkdir(candidate, { mode: 448 });
1976
+ created = true;
1977
+ } catch (error) {
1978
+ if (error.code !== "EEXIST") {
1979
+ throwIdentityIoError("child", error);
1980
+ }
1981
+ }
1982
+ const identity = await inspectConversationDirectoryIdentity(
1983
+ root,
1984
+ storageSessionId
1985
+ );
1986
+ if (!identity) {
1987
+ throw new ConversationDirectoryIdentityError("child", "identity_changed");
1988
+ }
1989
+ return { identity, created };
1990
+ }
1991
+ __name(materializeConversationDirectoryIdentity, "materializeConversationDirectoryIdentity");
1992
+
1993
+ // packages/cli/src/serve/conversations/conversation-workspace.ts
1994
+ function liveIdentityError(error, exactRoot = false, creatingRoot = false) {
1995
+ if (!(error instanceof ConversationDirectoryIdentityError)) throw error;
1996
+ if (error.reason === "io_error" && error.cause !== void 0) {
1997
+ throw error.cause;
1998
+ }
1999
+ if (error.scope === "root") {
2000
+ switch (error.reason) {
2001
+ case "not_directory":
2002
+ throw new Error(
2003
+ "Live conversation root must be a non-symlink directory"
2004
+ );
2005
+ case "wrong_owner":
2006
+ throw new Error(
2007
+ "Live conversation root must be owned by the daemon user"
2008
+ );
2009
+ case "wrong_mode":
2010
+ throw new Error(
2011
+ "Live conversation root must be accessible only to its owner"
2012
+ );
2013
+ case "canonical_path_changed":
2014
+ throw new Error("Live conversation root canonical path changed");
2015
+ case "identity_changed":
2016
+ throw new Error(
2017
+ creatingRoot ? "Live conversation root identity changed during validation" : "Live conversation root identity changed"
2018
+ );
2019
+ case "unexpected_identity":
2020
+ if (exactRoot) {
2021
+ throw new Error("Workspace must be the exact Live conversation root");
2022
+ }
2023
+ throw new Error("Live conversation root identity changed");
2024
+ default:
2025
+ throw new Error("Live conversation root identity changed");
2026
+ }
2027
+ }
2028
+ switch (error.reason) {
2029
+ case "invalid_session_id":
2030
+ throw new Error("Live conversation session id is invalid");
2031
+ case "not_directory":
2032
+ throw new Error(
2033
+ "Live conversation directory must be a non-symlink directory"
2034
+ );
2035
+ case "wrong_owner":
2036
+ throw new Error(
2037
+ "Live conversation directory must be owned by the daemon user"
2038
+ );
2039
+ case "wrong_mode":
2040
+ throw new Error(
2041
+ "Live conversation directory must be accessible only to its owner"
2042
+ );
2043
+ default:
2044
+ throw new Error(
2045
+ "Live conversation directory must be an owned direct child"
2046
+ );
2047
+ }
2048
+ }
2049
+ __name(liveIdentityError, "liveIdentityError");
2050
+ function getConversationRootPath(homeDir = homedir()) {
2051
+ return resolve2(homeDir, "Documents", "Qwen Code", "Conversations");
2052
+ }
2053
+ __name(getConversationRootPath, "getConversationRootPath");
2054
+ async function revalidateConversationRoot(root) {
2055
+ try {
2056
+ return await revalidateConversationRootIdentity(root);
2057
+ } catch (error) {
2058
+ liveIdentityError(error);
2059
+ }
2060
+ }
2061
+ __name(revalidateConversationRoot, "revalidateConversationRoot");
2062
+ async function assertExactConversationRoot(root, candidate) {
2063
+ try {
2064
+ return await assertExactConversationRootIdentity(root, candidate);
2065
+ } catch (error) {
2066
+ liveIdentityError(error, true);
2067
+ }
2068
+ }
1863
2069
  __name(assertExactConversationRoot, "assertExactConversationRoot");
1864
2070
  var ConversationWorkspace = class {
1865
2071
  static {
@@ -1870,9 +2076,9 @@ var ConversationWorkspace = class {
1870
2076
  constructor(options = {}) {
1871
2077
  this.rootPath = getConversationRootPath(options.homeDir);
1872
2078
  }
1873
- async getRoot() {
2079
+ getRootIdentity() {
1874
2080
  if (!this.rootPromise) {
1875
- const pending = createRoot(this.rootPath);
2081
+ const pending = createConversationRootIdentity(this.rootPath);
1876
2082
  this.rootPromise = pending;
1877
2083
  void pending.catch(() => {
1878
2084
  if (this.rootPromise === pending) this.rootPromise = void 0;
@@ -1880,42 +2086,61 @@ var ConversationWorkspace = class {
1880
2086
  }
1881
2087
  return this.rootPromise;
1882
2088
  }
2089
+ async getRoot() {
2090
+ try {
2091
+ return await this.getRootIdentity();
2092
+ } catch (error) {
2093
+ liveIdentityError(error, false, true);
2094
+ }
2095
+ }
2096
+ async revalidateStandaloneRoot() {
2097
+ return revalidateConversationRootIdentity(await this.getRootIdentity());
2098
+ }
1883
2099
  async revalidate() {
1884
2100
  return revalidateConversationRoot(await this.getRoot());
1885
2101
  }
1886
2102
  async assertExactRoot(candidate) {
1887
2103
  return assertExactConversationRoot(await this.getRoot(), candidate);
1888
2104
  }
2105
+ /**
2106
+ * The private directory is derived from the canonical session id, not from
2107
+ * whatever spelling a caller happens to hold.
2108
+ *
2109
+ * `getConversationDirectoryName()` is a case-sensitive hash, and callers reach
2110
+ * these methods with a mix of request ids, live-entry ids and ids echoed back
2111
+ * from tool arguments. Canonicalizing here makes one session resolve to one
2112
+ * directory by construction instead of leaving it to every call site.
2113
+ */
2114
+ directoryKey(sessionId) {
2115
+ return normalizeSessionIdForLookup(sessionId);
2116
+ }
1889
2117
  async materializeConversationDirectory(sessionId) {
1890
2118
  const root = await this.revalidate();
1891
- const name = conversationDirectoryName(sessionId);
1892
- const candidate = join2(root.canonicalRoot, name);
1893
2119
  try {
1894
- await mkdir(candidate, { mode: 448 });
2120
+ return (await materializeConversationDirectoryIdentity(
2121
+ root,
2122
+ this.directoryKey(sessionId)
2123
+ )).identity.canonicalPath;
1895
2124
  } catch (error) {
1896
- if (!error || typeof error !== "object" || error.code !== "EEXIST") {
1897
- throw error;
1898
- }
2125
+ liveIdentityError(error);
1899
2126
  }
1900
- return validateConversationDirectory(root, name, candidate);
1901
2127
  }
1902
2128
  async discardEmptyConversationDirectory(sessionId) {
1903
2129
  const root = await this.revalidate();
1904
- const name = conversationDirectoryName(sessionId);
1905
- const candidate = join2(root.canonicalRoot, name);
1906
- let canonical;
2130
+ let identity;
1907
2131
  try {
1908
- canonical = await validateConversationDirectory(root, name, candidate);
2132
+ identity = await inspectConversationDirectoryIdentity(
2133
+ root,
2134
+ this.directoryKey(sessionId)
2135
+ );
1909
2136
  } catch (error) {
1910
- if (error && typeof error === "object" && error.code === "ENOENT") {
1911
- return false;
1912
- }
1913
- throw error;
2137
+ liveIdentityError(error);
1914
2138
  }
2139
+ if (!identity) return false;
1915
2140
  try {
1916
- await rmdir(canonical);
2141
+ await rmdir(identity.canonicalPath);
1917
2142
  } catch (error) {
1918
- if (error && typeof error === "object" && (error.code === "ENOENT" || error.code === "ENOTEMPTY")) {
2143
+ if (error.code === "ENOENT" || error.code === "ENOTEMPTY") {
1919
2144
  return false;
1920
2145
  }
1921
2146
  throw error;
@@ -1923,6 +2148,87 @@ var ConversationWorkspace = class {
1923
2148
  await revalidateConversationRoot(root);
1924
2149
  return true;
1925
2150
  }
2151
+ async prepareStandaloneDirectory(storageSessionId) {
2152
+ const root = await this.revalidateStandaloneRoot();
2153
+ const prepared = await materializeConversationDirectoryIdentity(
2154
+ root,
2155
+ storageSessionId
2156
+ );
2157
+ const identity = await inspectConversationDirectoryIdentity(
2158
+ root,
2159
+ storageSessionId,
2160
+ prepared.identity
2161
+ );
2162
+ if (!identity) {
2163
+ throw new ConversationDirectoryIdentityError("child", "identity_changed");
2164
+ }
2165
+ let entries;
2166
+ try {
2167
+ entries = await readdir(identity.canonicalPath);
2168
+ } catch (error) {
2169
+ if (error.code === "ENOENT") {
2170
+ throw new ConversationDirectoryIdentityError(
2171
+ "child",
2172
+ "identity_changed"
2173
+ );
2174
+ }
2175
+ throw new ConversationDirectoryIdentityError("child", "io_error", error);
2176
+ }
2177
+ if (entries.length > 0) {
2178
+ throw new ConversationDirectoryIdentityError("child", "not_empty");
2179
+ }
2180
+ return { identity, created: prepared.created };
2181
+ }
2182
+ async inspectStandaloneDirectory(storageSessionId, expected) {
2183
+ const root = await this.revalidateStandaloneRoot();
2184
+ try {
2185
+ const identity = await inspectConversationDirectoryIdentity(
2186
+ root,
2187
+ storageSessionId,
2188
+ expected
2189
+ );
2190
+ return identity ? { status: "ready", identity } : { status: "missing" };
2191
+ } catch (error) {
2192
+ if (error instanceof ConversationDirectoryIdentityError && error.scope === "child") {
2193
+ return { status: "compromised", error };
2194
+ }
2195
+ throw error;
2196
+ }
2197
+ }
2198
+ async ensureStandaloneDirectory(storageSessionId, expected) {
2199
+ const inspected = await this.inspectStandaloneDirectory(
2200
+ storageSessionId,
2201
+ expected
2202
+ );
2203
+ if (inspected.status !== "missing") return inspected;
2204
+ const root = await this.revalidateStandaloneRoot();
2205
+ try {
2206
+ const materialized = await materializeConversationDirectoryIdentity(
2207
+ root,
2208
+ storageSessionId
2209
+ );
2210
+ if (!materialized.created) {
2211
+ const raced = await this.inspectStandaloneDirectory(
2212
+ storageSessionId,
2213
+ expected
2214
+ );
2215
+ if (raced.status !== "missing") return raced;
2216
+ throw new ConversationDirectoryIdentityError(
2217
+ "child",
2218
+ "identity_changed"
2219
+ );
2220
+ }
2221
+ return {
2222
+ status: expected ? "recreated" : "created",
2223
+ identity: materialized.identity
2224
+ };
2225
+ } catch (error) {
2226
+ if (error instanceof ConversationDirectoryIdentityError && error.scope === "child") {
2227
+ return { status: "compromised", error };
2228
+ }
2229
+ throw error;
2230
+ }
2231
+ }
1926
2232
  };
1927
2233
 
1928
2234
  // packages/cli/src/serve/daemon-metrics-ring.ts
@@ -2783,8 +3089,8 @@ async function flushDaemonLogBounded(daemonLog, budgetMs) {
2783
3089
  await Promise.race([
2784
3090
  daemonLog.flush().catch(() => {
2785
3091
  }),
2786
- new Promise((resolve3) => {
2787
- timer = setTimeout(resolve3, budgetMs);
3092
+ new Promise((resolve4) => {
3093
+ timer = setTimeout(resolve4, budgetMs);
2788
3094
  timer.unref();
2789
3095
  })
2790
3096
  ]);
@@ -3038,12 +3344,12 @@ __name(hasRetryableChannelWorkerShutdownError, "hasRetryableChannelWorkerShutdow
3038
3344
  var channelWorkerRuntimePromise;
3039
3345
  async function loadChannelWorkerRuntime() {
3040
3346
  channelWorkerRuntimePromise ??= Promise.all([
3041
- import("./channel-worker-supervisor-OEVWBHGT.js"),
3042
- import("./pidfile-4XSFLYBZ.js"),
3043
- import("./runtime-5MLLZ7DC.js"),
3347
+ import("./channel-worker-supervisor-F6I6WSWW.js"),
3348
+ import("./pidfile-EBKS2HBK.js"),
3349
+ import("./runtime-UVEETF54.js"),
3044
3350
  import("./cli-entry-path-4VJ3Y6T2.js"),
3045
- import("./channel-worker-group-7LXCMZ77.js"),
3046
- import("./channel-worker-manager-RYEME4ZZ.js")
3351
+ import("./channel-worker-group-CTE54QL6.js"),
3352
+ import("./channel-worker-manager-4EHTD3T4.js")
3047
3353
  ]).then(
3048
3354
  ([
3049
3355
  supervisor,
@@ -3148,13 +3454,13 @@ function shouldPreheatBridge(deps) {
3148
3454
  __name(shouldPreheatBridge, "shouldPreheatBridge");
3149
3455
  var coreRuntimePromise;
3150
3456
  function loadCoreRuntime() {
3151
- coreRuntimePromise ??= import("./core-runtime-7VMIKUTG.js");
3457
+ coreRuntimePromise ??= import("./core-runtime-JWFNKO2S.js");
3152
3458
  return coreRuntimePromise;
3153
3459
  }
3154
3460
  __name(loadCoreRuntime, "loadCoreRuntime");
3155
3461
  var liveDiscoveryRuntimePromise;
3156
3462
  function loadLiveDiscoveryRuntime() {
3157
- liveDiscoveryRuntimePromise ??= import("./discovery-ORA5J7YP.js");
3463
+ liveDiscoveryRuntimePromise ??= import("./discovery-X2NV535U.js");
3158
3464
  return liveDiscoveryRuntimePromise;
3159
3465
  }
3160
3466
  __name(loadLiveDiscoveryRuntime, "loadLiveDiscoveryRuntime");
@@ -3184,10 +3490,10 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
3184
3490
  var settingsRuntimePromise;
3185
3491
  function loadSettingsRuntimeModules() {
3186
3492
  settingsRuntimePromise ??= Promise.all([
3187
- import("./settings-D5644OM5.js"),
3188
- import("./environment-S7CTIHMX.js"),
3189
- import("./loadedSettingsAdapter-T6TV4YJ7.js"),
3190
- import("./trustedFolders-LK6T4XC7.js")
3493
+ import("./settings-NS3PXZDP.js"),
3494
+ import("./environment-C2CZN7CB.js"),
3495
+ import("./loadedSettingsAdapter-47DG424L.js"),
3496
+ import("./trustedFolders-7GEI2NYC.js")
3191
3497
  ]).then(([settings, environment, loadedSettingsAdapter, trustedFolders]) => ({
3192
3498
  settings,
3193
3499
  environment,
@@ -3200,8 +3506,8 @@ __name(loadSettingsRuntimeModules, "loadSettingsRuntimeModules");
3200
3506
  var channelWebhookConfigRuntimePromise;
3201
3507
  function loadChannelWebhookConfigRuntime() {
3202
3508
  channelWebhookConfigRuntimePromise ??= Promise.all([
3203
- import("./runtime-5MLLZ7DC.js"),
3204
- import("./config-utils-IVHRSXWI.js")
3509
+ import("./runtime-UVEETF54.js"),
3510
+ import("./config-utils-3DY73VIJ.js")
3205
3511
  ]).then(([channelRuntime, configUtils]) => ({
3206
3512
  loadChannelsConfig: channelRuntime.loadChannelsConfig,
3207
3513
  parseChannelWebhookConfig: configUtils.parseChannelWebhookConfig
@@ -3224,19 +3530,21 @@ async function loadServeRuntimeModules() {
3224
3530
  workspaceProvidersStatusModule,
3225
3531
  workspaceSkillsStatusModule,
3226
3532
  totalSessionAdmissionModule,
3227
- workspaceRegistryModule
3533
+ workspaceRegistryModule,
3534
+ promptLedgerModule
3228
3535
  ] = await Promise.all([
3229
- import("./server-TC4A7AAZ.js"),
3230
- import("./bridge-YNQBAA4Z.js"),
3231
- import("./spawnChannel-IYGXRHSQ.js"),
3536
+ import("./server-KU7XIDVT.js"),
3537
+ import("./bridge-2CGOUO25.js"),
3538
+ import("./spawnChannel-FCP44P4V.js"),
3232
3539
  import("./process-registry-PMJOA5CO.js"),
3233
- import("./workspace-service-XCDQLE2Y.js"),
3540
+ import("./workspace-service-JJZFPKM4.js"),
3234
3541
  import("./types-WYCFCEHR.js"),
3235
- import("./daemon-status-provider-ZDOYJCU6.js"),
3236
- import("./workspace-providers-status-2ZPZPUPZ.js"),
3237
- import("./workspace-skills-status-RS4O7AIJ.js"),
3238
- import("./total-session-admission-4KBHMQQ2.js"),
3239
- import("./workspace-registry-34GTUUHB.js")
3542
+ import("./daemon-status-provider-3EI2KALQ.js"),
3543
+ import("./workspace-providers-status-R5QTZFK3.js"),
3544
+ import("./workspace-skills-status-DRIOZRIA.js"),
3545
+ import("./total-session-admission-NIBNWXHE.js"),
3546
+ import("./workspace-registry-J3RUCXH6.js"),
3547
+ import("./prompt-terminal-ledger-5JYOPOII.js")
3240
3548
  ]);
3241
3549
  return {
3242
3550
  createServeApp: serverModule.createServeApp,
@@ -3256,7 +3564,8 @@ async function loadServeRuntimeModules() {
3256
3564
  createTotalSessionAdmissionController: totalSessionAdmissionModule.createTotalSessionAdmissionController,
3257
3565
  createWorkspaceRegistry: workspaceRegistryModule.createWorkspaceRegistry,
3258
3566
  createWorkspaceSessionOwnerIndex: workspaceRegistryModule.createWorkspaceSessionOwnerIndex,
3259
- createWorkspaceGenerationGuard: workspaceRegistryModule.createWorkspaceGenerationGuard
3567
+ createWorkspaceGenerationGuard: workspaceRegistryModule.createWorkspaceGenerationGuard,
3568
+ createPromptLedgerSink: promptLedgerModule.createPromptLedgerSink
3260
3569
  };
3261
3570
  }
3262
3571
  __name(loadServeRuntimeModules, "loadServeRuntimeModules");
@@ -3433,12 +3742,12 @@ async function waitForRuntimeStartingForShutdown(runtimeStarting, daemonLog, tim
3433
3742
  let timer;
3434
3743
  await Promise.race([
3435
3744
  runtimeStarting,
3436
- new Promise((resolve3) => {
3745
+ new Promise((resolve4) => {
3437
3746
  timer = setTimeout(() => {
3438
3747
  daemonLog.warn(
3439
3748
  `${timeoutMs}ms runtime-startup wait reached during shutdown; continuing listener close`
3440
3749
  );
3441
- resolve3();
3750
+ resolve4();
3442
3751
  }, timeoutMs);
3443
3752
  timer.unref();
3444
3753
  })
@@ -4275,7 +4584,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4275
4584
  }
4276
4585
  let workspaceRegistrationStore = deps.workspaceRegistrationStore;
4277
4586
  if (workspaceRegistrationStore === void 0 && process.env["QWEN_SERVE_NO_PERSISTENT_REGISTRATION"] !== "1") {
4278
- const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-CYNY6IP6.js");
4587
+ const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-WMSLM36M.js");
4279
4588
  workspaceRegistrationStore = new WorkspaceRegistrationStore(boundWorkspace);
4280
4589
  }
4281
4590
  if (workspaceRegistrationStore) {
@@ -4559,7 +4868,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4559
4868
  "qwen serve: required external tool guard handshake succeeded."
4560
4869
  );
4561
4870
  }
4562
- const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-DXYIMWFT.js");
4871
+ const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-6233JAPJ.js");
4563
4872
  const daemonToolGuardHandler = createDaemonToolGuard(
4564
4873
  externalToolGuardHandler
4565
4874
  );
@@ -4602,8 +4911,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4602
4911
  let resolveServeAppStartup;
4603
4912
  let rejectServeAppStartup;
4604
4913
  let serveAppStartupSettled = false;
4605
- const serveAppStartupReady = new Promise((resolve3, reject) => {
4606
- resolveServeAppStartup = resolve3;
4914
+ const serveAppStartupReady = new Promise((resolve4, reject) => {
4915
+ resolveServeAppStartup = resolve4;
4607
4916
  rejectServeAppStartup = reject;
4608
4917
  });
4609
4918
  void serveAppStartupReady.catch(() => void 0);
@@ -4633,8 +4942,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4633
4942
  let startRuntimeAfterHealth;
4634
4943
  let startRuntimeForRequest;
4635
4944
  const deferRuntimeUntilFirstHealth = deps.resolveOnListen === true && deps.deferRuntimeUntilFirstHealth === true;
4636
- const runtimeReady = new Promise((resolve3, reject) => {
4637
- markRuntimeReady = resolve3;
4945
+ const runtimeReady = new Promise((resolve4, reject) => {
4946
+ markRuntimeReady = resolve4;
4638
4947
  markRuntimeFailed = reject;
4639
4948
  });
4640
4949
  void runtimeReady.catch(() => {
@@ -4848,6 +5157,14 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4848
5157
  );
4849
5158
  }
4850
5159
  }
5160
+ const localControlService = app2.locals?.["localControlService"];
5161
+ if (localControlService) {
5162
+ void localControlService.dispose().catch((err) => {
5163
+ daemonLog.warn(
5164
+ `Local Control dispose error: ${err instanceof Error ? err.message : String(err)}`
5165
+ );
5166
+ });
5167
+ }
4851
5168
  const acpHandle = app2.locals?.["acpHandle"];
4852
5169
  if (acpHandle?.dispose) {
4853
5170
  try {
@@ -4887,7 +5204,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4887
5204
  loadCoreRuntime(),
4888
5205
  loadSettingsRuntimeModules(),
4889
5206
  cliVersionPromise,
4890
- import("./daemon-trust-policy-E67OYUK2.js")
5207
+ import("./daemon-trust-policy-QWWU7CON.js")
4891
5208
  ]);
4892
5209
  cliVersion = resolvedCliVersion;
4893
5210
  settingsRuntime.environment.preResolveHomeEnvOverrides();
@@ -4980,6 +5297,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
4980
5297
  runtimeBootSettings,
4981
5298
  runtimeEnvSnapshot.effectiveEnv
4982
5299
  );
5300
+ const sessionAttachmentsRoot = /* @__PURE__ */ __name((workspace, runtimeBaseDir) => path.join(
5301
+ new core.Storage(workspace, runtimeBaseDir).getProjectTempDir(),
5302
+ "attachments"
5303
+ ), "sessionAttachmentsRoot");
4983
5304
  const runtimeEffectiveEnv = {
4984
5305
  ...runtimeEnvSnapshot.effectiveEnv,
4985
5306
  QWEN_RUNTIME_DIR: primarySessionRuntimeBaseDir
@@ -5259,7 +5580,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5259
5580
  resolveSkillSettings,
5260
5581
  skillSettingStrings,
5261
5582
  updateWorkspaceSkillSettingLists
5262
- } = await import("./skill-settings-J65JKKES.js");
5583
+ } = await import("./skill-settings-EXW7ESWJ.js");
5263
5584
  const fresh = loadSettingsForPersistence(workspace);
5264
5585
  const normalizedName = skillName.trim().toLowerCase();
5265
5586
  const resolved = resolveSkillSettings(fresh);
@@ -5324,7 +5645,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5324
5645
  resolveSkillSettings,
5325
5646
  skillSettingStrings,
5326
5647
  updateWorkspaceSkillSettingLists
5327
- } = await import("./skill-settings-J65JKKES.js");
5648
+ } = await import("./skill-settings-EXW7ESWJ.js");
5328
5649
  const fresh = loadSettingsForPersistence(workspace);
5329
5650
  const resolved = resolveSkillSettings(fresh);
5330
5651
  const initialDisabled = skillSettingStrings(
@@ -5429,7 +5750,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5429
5750
  );
5430
5751
  }
5431
5752
  }), "persistSettingsFn");
5432
- const { createSubSessionLauncher } = await import("./create-sub-session-2L5MQRN4.js");
5753
+ const { createSubSessionLauncher } = await import("./create-sub-session-33HIYIJE.js");
5433
5754
  const subSessionLauncher = createSubSessionLauncher({
5434
5755
  getBridge: /* @__PURE__ */ __name(() => bridgeRef, "getBridge"),
5435
5756
  boundWorkspace,
@@ -5438,6 +5759,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5438
5759
  )
5439
5760
  });
5440
5761
  const bridge = deps.bridge ?? runtime.createAcpSessionBridge({
5762
+ sessionAttachmentsRoot: sessionAttachmentsRoot(
5763
+ boundWorkspace,
5764
+ primarySessionRuntimeBaseDir
5765
+ ),
5441
5766
  // Reverse tool channel: let `BridgeClient.extMethod` reach the WS
5442
5767
  // connection that hosts a named client MCP server (#5626).
5443
5768
  clientMcpSender: clientMcpSenderRegistry.lookup,
@@ -5474,6 +5799,12 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5474
5799
  ...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
5475
5800
  ...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
5476
5801
  boundWorkspace,
5802
+ // Prompt terminal ledger: persisted beside the transcript so a
5803
+ // restarted daemon can reconcile dangling prompts on cold load.
5804
+ promptLedger: runtime.createPromptLedgerSink(
5805
+ boundWorkspace,
5806
+ primarySessionRuntimeBaseDir
5807
+ ),
5477
5808
  sessionShellCommandEnabled,
5478
5809
  childEnvOverrides,
5479
5810
  channelFactory,
@@ -5753,6 +6084,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5753
6084
  )
5754
6085
  });
5755
6086
  const secondaryBridge = runtime.createAcpSessionBridge({
6087
+ sessionAttachmentsRoot: sessionAttachmentsRoot(
6088
+ workspaceInput.cwd,
6089
+ secondaryEnv.sessionRuntimeBaseDir
6090
+ ),
5756
6091
  clientMcpSender: secondaryClientMcpSenderRegistry.lookup,
5757
6092
  onCreateSubSession: secondarySubSessionLauncher.launch,
5758
6093
  onChannelDelivery: createBoundChannelDeliveryHandler(
@@ -5787,6 +6122,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5787
6122
  ...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
5788
6123
  ...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
5789
6124
  boundWorkspace: workspaceInput.cwd,
6125
+ promptLedger: runtime.createPromptLedgerSink(
6126
+ workspaceInput.cwd,
6127
+ secondaryEnv.sessionRuntimeBaseDir
6128
+ ),
5790
6129
  sessionShellCommandEnabled,
5791
6130
  childEnvOverrides,
5792
6131
  channelFactory: secondaryChannelFactory,
@@ -6125,6 +6464,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6125
6464
  let wsBridge;
6126
6465
  try {
6127
6466
  wsBridge = runtime.createAcpSessionBridge({
6467
+ sessionAttachmentsRoot: sessionAttachmentsRoot(
6468
+ cwd,
6469
+ wsEnv.sessionRuntimeBaseDir
6470
+ ),
6128
6471
  clientMcpSender: wsClientMcpRegistry.lookup,
6129
6472
  onCreateSubSession: wsSubSessionLauncher.launch,
6130
6473
  onChannelDelivery: createBoundChannelDeliveryHandler(
@@ -6157,6 +6500,14 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6157
6500
  ...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
6158
6501
  ...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
6159
6502
  boundWorkspace: cwd,
6503
+ // Live-conversation workspaces keep transcripts outside the
6504
+ // runtime storage layout, so no ledger sink is wired there.
6505
+ ...provenance === "live-conversation" ? {} : {
6506
+ promptLedger: runtime.createPromptLedgerSink(
6507
+ cwd,
6508
+ wsEnv.sessionRuntimeBaseDir
6509
+ )
6510
+ },
6160
6511
  sessionShellCommandEnabled,
6161
6512
  childEnvOverrides,
6162
6513
  channelFactory: wsChannelFactory,
@@ -6604,8 +6955,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6604
6955
  { createChannelManagementService },
6605
6956
  { WorkspaceChannelSettingsStore }
6606
6957
  ] = await Promise.all([
6607
- import("./channel-management-service-GWY2GAIC.js"),
6608
- import("./channel-settings-store-WNWYFHG7.js")
6958
+ import("./channel-management-service-FUJ2EFTF.js"),
6959
+ import("./channel-settings-store-AZKNHHDC.js")
6609
6960
  ]);
6610
6961
  return createChannelManagementService({
6611
6962
  workspaceCwd: targetRuntime.workspaceCwd,
@@ -6808,8 +7159,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6808
7159
  { createWorkspaceTrustReconciler },
6809
7160
  { createDaemonTrustPolicyMonitor }
6810
7161
  ] = await Promise.all([
6811
- import("./workspace-trust-reconciler-AYGXC7A3.js"),
6812
- import("./daemon-trust-policy-monitor-RYYGCQ3J.js")
7162
+ import("./workspace-trust-reconciler-YAYSN6CX.js"),
7163
+ import("./daemon-trust-policy-monitor-FH7GBAKN.js")
6813
7164
  ]);
6814
7165
  const materializationFor = /* @__PURE__ */ __name((entry, snapshot, decision) => {
6815
7166
  const boundWorkspaces2 = entry.primary && decision.targetTrusted ? runtime.resolveBoundWorkspacesFromIdeEnv(
@@ -6904,7 +7255,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6904
7255
  handle?.disposeWorkspace(runtimeToDispose.workspaceId);
6905
7256
  const deadline = Date.now() + 1e3;
6906
7257
  while ((handle?.getWorkspaceActivity(runtimeToDispose.workspaceId).memoryTasks ?? 0) > 0 && Date.now() < deadline) {
6907
- await new Promise((resolve3) => setTimeout(resolve3, 25));
7258
+ await new Promise((resolve4) => setTimeout(resolve4, 25));
6908
7259
  }
6909
7260
  if ((handle?.getWorkspaceActivity(runtimeToDispose.workspaceId).memoryTasks ?? 0) > 0) {
6910
7261
  throw new Error(
@@ -7004,7 +7355,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7004
7355
  // through (and start the runtime) exactly like the warm app would.
7005
7356
  // Dynamic import keeps web-shell-static out of the serve fast-path
7006
7357
  // static closure (see the import-boundary guards in fast-path.test.ts).
7007
- isPreAuthRequest: webShellMounted ? (req) => import("./web-shell-static-O73YPVVC.js").then(
7358
+ isPreAuthRequest: webShellMounted ? (req) => import("./web-shell-static-3NUTRHAH.js").then(
7008
7359
  (webShellStatic) => webShellStatic.isPreAuthWebShellRequest(req)
7009
7360
  ) : void 0
7010
7361
  });
@@ -7024,7 +7375,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7024
7375
  );
7025
7376
  }
7026
7377
  const channelValidationSettingsRuntime = opts.channelSelection ? await loadSettingsRuntimeModules() : void 0;
7027
- const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-E67OYUK2.js") : void 0;
7378
+ const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-QWWU7CON.js") : void 0;
7028
7379
  const channelValidationTrustSnapshot = channelValidationTrustPolicy ? await channelValidationTrustPolicy.readDaemonTrustPolicySnapshot() : void 0;
7029
7380
  const resolveChannelWorkspaceGroupsAtListen = /* @__PURE__ */ __name(() => {
7030
7381
  if (!opts.channelSelection || !channelValidationSettingsRuntime || !channelRuntime) {
@@ -7130,7 +7481,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7130
7481
  if (opts.channelSelection) {
7131
7482
  reserveChannelServicePidfile(opts.channelSelection);
7132
7483
  }
7133
- return await new Promise((resolve3, reject) => {
7484
+ return await new Promise((resolve4, reject) => {
7134
7485
  let closeHost;
7135
7486
  const onListening = /* @__PURE__ */ __name((error) => {
7136
7487
  if (error) return;
@@ -7811,6 +8162,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7811
8162
  webShellMounted,
7812
8163
  resolvedToken: token,
7813
8164
  runtimeReady,
8165
+ getLocalControl: /* @__PURE__ */ __name(() => (runtimeApp ?? runtimeAppForCleanup)?.locals?.["localControlService"], "getLocalControl"),
7814
8166
  close: /* @__PURE__ */ __name(() => {
7815
8167
  if (closePromise) return closePromise;
7816
8168
  closePromise = new Promise((res, rej) => {
@@ -8099,7 +8451,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8099
8451
  loggerPublished = true;
8100
8452
  loggerLifecycle.published();
8101
8453
  void (liveDiscoveryPublish ?? Promise.resolve()).then(
8102
- () => resolve3(handle)
8454
+ () => resolve4(handle)
8103
8455
  );
8104
8456
  } else {
8105
8457
  void runtimeReady.then(
@@ -8107,7 +8459,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8107
8459
  await liveDiscoveryPublish;
8108
8460
  loggerPublished = true;
8109
8461
  loggerLifecycle.published();
8110
- resolve3(handle);
8462
+ resolve4(handle);
8111
8463
  },
8112
8464
  (err) => {
8113
8465
  void handle.close().then(
@@ -8156,10 +8508,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8156
8508
  drainHost: /* @__PURE__ */ __name(() => {
8157
8509
  if (closeHost) return closeHost();
8158
8510
  if (!server.listening) return Promise.resolve();
8159
- return new Promise((resolve4, rejectClose) => {
8511
+ return new Promise((resolve5, rejectClose) => {
8160
8512
  server.close((error) => {
8161
8513
  if (error) rejectClose(error);
8162
- else resolve4();
8514
+ else resolve5();
8163
8515
  });
8164
8516
  });
8165
8517
  }, "drainHost")
@@ -8172,7 +8524,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8172
8524
  const handleError = /* @__PURE__ */ __name((err) => {
8173
8525
  server.removeListener("listening", handleListening);
8174
8526
  const nextPort = attemptPort + 1;
8175
- if (err.code === "EADDRINUSE" && opts.strictPort !== true && opts.port !== 0 && nextPort <= 65535 && attempt < MAX_PORT_ATTEMPTS - 1) {
8527
+ if (err.code === "EADDRINUSE" && opts.port !== 0 && nextPort <= 65535 && attempt < MAX_PORT_ATTEMPTS - 1) {
8176
8528
  writeStderrLine(
8177
8529
  `qwen serve: port ${attemptPort} is in use, trying ${nextPort}...`
8178
8530
  );