@qwen-code/qwen-code 0.22.2-preview.1 → 0.22.3

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 (437) hide show
  1. package/bundled/computer-use/SKILL.md +3 -3
  2. package/bundled/goal-draft/SKILL.md +109 -0
  3. package/bundled/qc-helper/docs/configuration/settings.md +37 -36
  4. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  5. package/bundled/qc-helper/docs/features/channels/dws.md +2 -0
  6. package/bundled/qc-helper/docs/features/channels/overview.md +34 -3
  7. package/bundled/qc-helper/docs/features/code-review.md +3 -3
  8. package/bundled/qc-helper/docs/features/commands.md +2 -1
  9. package/bundled/qc-helper/docs/features/computer-use.md +2 -2
  10. package/bundled/qc-helper/docs/features/goals.md +58 -0
  11. package/bundled/qc-helper/docs/features/headless.md +13 -11
  12. package/bundled/qc-helper/docs/features/status-line.md +3 -3
  13. package/bundled/qc-helper/docs/features/tool-use-summaries.md +1 -1
  14. package/bundled/qc-helper/docs/qwen-serve.md +1 -1
  15. package/bundled/review/SKILL.md +81 -31
  16. package/bundled/review/references/persistence.md +7 -3
  17. package/bundled/review/references/posting.md +10 -4
  18. package/chunks/MaxSizedBox-X42SXBJH.js +110 -0
  19. package/chunks/{StandaloneSessionPicker-5D2L22SF.js → StandaloneSessionPicker-2FJAOLGG.js} +81 -83
  20. package/chunks/{acpAgent-4DCKLA32.js → acpAgent-2ZMIJAFV.js} +1153 -357
  21. package/chunks/{agent-B4AFZL6H.js → agent-X5WX3L2I.js} +44 -46
  22. package/chunks/agent-headless-IZM25LJA.js +85 -0
  23. package/chunks/{anthropicContentGenerator-U76GTVB6.js → anthropicContentGenerator-YVTB6QX7.js} +46 -50
  24. package/chunks/{artifact-tool-XDJCZZCF.js → artifact-tool-XSMPHZBT.js} +11 -3
  25. package/chunks/{askUserQuestion-ZXXERLEV.js → askUserQuestion-4SWJY65V.js} +2 -2
  26. package/chunks/bridge-ME6QXZNA.js +119 -0
  27. package/chunks/{channel-management-service-HXXS3HOZ.js → channel-management-service-HQ6KDS7C.js} +6 -6
  28. package/chunks/channel-settings-store-PEOI7XCG.js +120 -0
  29. package/chunks/{channel-worker-group-EVDC2P4K.js → channel-worker-group-6NA6BBZV.js} +8 -7
  30. package/chunks/{channel-worker-manager-IJJZHGEI.js → channel-worker-manager-NEZ2J6RK.js} +10 -8
  31. package/chunks/{channel-worker-supervisor-YSKB5GVB.js → channel-worker-supervisor-FKU7DIHJ.js} +6 -5
  32. package/chunks/{chunk-7QGEJI7M.js → chunk-23RFD54N.js} +1 -1
  33. package/chunks/{chunk-JLU3FPQR.js → chunk-2HYKTO7V.js} +5 -5
  34. package/chunks/chunk-2LNNVAUV.js +1584 -0
  35. package/chunks/{chunk-FJAITR4L.js → chunk-2OBKDPZZ.js} +2 -2
  36. package/chunks/{chunk-JSY43GMI.js → chunk-2OUD5T67.js} +185 -174
  37. package/chunks/{chunk-LJP2BBMK.js → chunk-2SXSLSQE.js} +4 -4
  38. package/chunks/chunk-2TNL5KPM.js +49 -0
  39. package/chunks/{chunk-XMSMTU6H.js → chunk-2YOHKHYR.js} +4 -4
  40. package/chunks/{chunk-MCKJTBZN.js → chunk-36GSQ3MM.js} +2 -2
  41. package/chunks/chunk-36LGBEM6.js +130 -0
  42. package/chunks/{chunk-ZWKGZB2K.js → chunk-3JXM2CVW.js} +3 -3
  43. package/chunks/{chunk-X3XGCJ32.js → chunk-3SZC4VP4.js} +28 -111
  44. package/chunks/{chunk-ILPXSKGQ.js → chunk-3WK3QDNV.js} +2 -2
  45. package/chunks/{chunk-IKN3IUJP.js → chunk-3XKLXHGK.js} +17 -9
  46. package/chunks/{chunk-ZLTEQYNC.js → chunk-42IDLQWS.js} +26 -20
  47. package/chunks/chunk-4CMJKUND.js +95 -0
  48. package/chunks/{chunk-77TOMRBG.js → chunk-4K7KNVWH.js} +3 -3
  49. package/chunks/{chunk-SQPOJ4ZI.js → chunk-4NDLQAY2.js} +27 -270
  50. package/chunks/{chunk-V3GINY6K.js → chunk-4QHPPXK2.js} +16 -8
  51. package/chunks/{chunk-VBF4KZRQ.js → chunk-4TT3IVGA.js} +1 -1
  52. package/chunks/{chunk-IOGKXPL3.js → chunk-4VPCTGH6.js} +6 -6
  53. package/chunks/chunk-4VQBQLIZ.js +293 -0
  54. package/chunks/{chunk-UCSV2IZW.js → chunk-62GQFYID.js} +3 -3
  55. package/chunks/{chunk-SLEWBQWM.js → chunk-6DIGWMGT.js} +2 -2
  56. package/chunks/{chunk-BRVWYMKV.js → chunk-6MBXY6WM.js} +1 -1
  57. package/chunks/{chunk-PVBT5QPD.js → chunk-6PJOTWAN.js} +1 -1
  58. package/chunks/{chunk-WZ3QKPMQ.js → chunk-6X7EU5TI.js} +19 -31
  59. package/chunks/{chunk-KQYW2GB5.js → chunk-6ZPDLGHN.js} +6 -6
  60. package/chunks/{chunk-AKQA3WCH.js → chunk-734C6JGI.js} +723 -3399
  61. package/chunks/{chunk-F7M6ZFGU.js → chunk-73RM4POK.js} +8 -8
  62. package/chunks/{chunk-ELY4QVIB.js → chunk-7EQQR46F.js} +1 -1
  63. package/chunks/{chunk-KGJGEEVR.js → chunk-7FA2II6K.js} +10 -1
  64. package/chunks/chunk-7J6OTNGO.js +424 -0
  65. package/chunks/{chunk-LWLEPXKK.js → chunk-7LOELM2I.js} +19 -2
  66. package/chunks/{chunk-DIMEPKCW.js → chunk-7S226YTK.js} +1 -1
  67. package/chunks/{chunk-AWFZDYSD.js → chunk-7T52W4SW.js} +1 -1
  68. package/chunks/{chunk-3JKUX4PB.js → chunk-7VMIMAVB.js} +9 -9
  69. package/chunks/{chunk-2MHGD7EE.js → chunk-A3LWD5MK.js} +1 -1
  70. package/chunks/{chunk-E4I5MVBR.js → chunk-ABS25QER.js} +1 -1
  71. package/chunks/{chunk-TDQBVEPK.js → chunk-AIAOIFY4.js} +10 -8
  72. package/chunks/{chunk-NEZZHGEI.js → chunk-AYFA7MZV.js} +6 -6
  73. package/chunks/{chunk-FVDQ5E67.js → chunk-B466ZSHZ.js} +3 -3
  74. package/chunks/{chunk-6US7BF3G.js → chunk-B5PHIJGI.js} +183 -5
  75. package/chunks/{chunk-4TPAG3O7.js → chunk-BFPESSTR.js} +1 -1
  76. package/chunks/{chunk-WBT3STGU.js → chunk-BKWNKLZB.js} +20 -20
  77. package/chunks/{chunk-T45CL2NT.js → chunk-BOWFGCEU.js} +3 -3
  78. package/chunks/{chunk-IPQA4SR5.js → chunk-BWORX6FA.js} +1 -1
  79. package/chunks/{chunk-BKDAF7ES.js → chunk-BXDAPVQU.js} +2 -2
  80. package/chunks/{chunk-ZEADBZLO.js → chunk-C2X7KY45.js} +3 -3
  81. package/chunks/{chunk-PTQF7WRA.js → chunk-C3PEFRKD.js} +6 -6
  82. package/chunks/{chunk-7OBH4AM2.js → chunk-CAJTKR6W.js} +5 -5
  83. package/chunks/{chunk-2FN2HNTI.js → chunk-CFJY4DGX.js} +2 -2
  84. package/chunks/{chunk-SUE2ZMUH.js → chunk-CIZCL2MW.js} +49 -31
  85. package/chunks/{chunk-W2WRNJKX.js → chunk-CLWO3B77.js} +6 -6
  86. package/chunks/{chunk-U45D46O5.js → chunk-CMHFCLBU.js} +1 -1
  87. package/chunks/{chunk-LRKMQPMD.js → chunk-CQH5KTKC.js} +1 -1
  88. package/chunks/{chunk-JECO75XD.js → chunk-D5LUXLUH.js} +2 -2
  89. package/chunks/chunk-DJBQCO2E.js +842 -0
  90. package/chunks/{chunk-BQBUZDDH.js → chunk-DJECZIJX.js} +42 -42
  91. package/chunks/{chunk-GTUZ3R6I.js → chunk-DJEZ55D4.js} +351 -113
  92. package/chunks/{chunk-HPECDZ6X.js → chunk-DJPASAUV.js} +3866 -1077
  93. package/chunks/{chunk-VYWCFWI5.js → chunk-DMLVSW7L.js} +542 -654
  94. package/chunks/{chunk-EB4VDXNI.js → chunk-DYXFD5RO.js} +182 -3
  95. package/chunks/{chunk-ZKAZP2ZG.js → chunk-EB6QRGHM.js} +3 -3
  96. package/chunks/{chunk-UWICO5KN.js → chunk-EFWRMA2I.js} +3 -3
  97. package/chunks/{chunk-3UZCLCXR.js → chunk-EKSCLBBF.js} +3 -3
  98. package/chunks/{chunk-ALTQLFEG.js → chunk-EQSBPBZ3.js} +5 -194
  99. package/chunks/{chunk-624NHDGB.js → chunk-ERFDKH32.js} +11 -0
  100. package/chunks/{chunk-4K44OMLI.js → chunk-FROAFEFB.js} +3 -3
  101. package/chunks/{chunk-MZS7GEC7.js → chunk-FTF2YIZ5.js} +1 -1
  102. package/chunks/{chunk-Z7VOMGDC.js → chunk-FTJMWDND.js} +0 -24
  103. package/chunks/{chunk-ZJG323IA.js → chunk-G6FECKTJ.js} +7 -5
  104. package/chunks/{chunk-TMGAS5TO.js → chunk-GBJBJ4HX.js} +26 -4
  105. package/chunks/{chunk-UCQOSV6A.js → chunk-GPGU4S2N.js} +3 -3
  106. package/chunks/{chunk-BHTJAO36.js → chunk-GVIVASYK.js} +7 -7
  107. package/chunks/chunk-H72BQNM3.js +645 -0
  108. package/chunks/{chunk-Z4X5MTRT.js → chunk-HCOBAG2L.js} +2 -4
  109. package/chunks/{chunk-FCSWZAS3.js → chunk-HP5LR5HL.js} +5 -5
  110. package/chunks/{chunk-7JPW6IYH.js → chunk-HVC3PNVC.js} +1 -1
  111. package/chunks/{chunk-OI2DR6QB.js → chunk-I6LYRJPB.js} +3 -3
  112. package/chunks/{chunk-E55H6BZ7.js → chunk-ICURCKIU.js} +1335 -119
  113. package/chunks/{chunk-PAJGKZAA.js → chunk-ISKH4QX3.js} +14 -12
  114. package/chunks/{chunk-AYVIGUUK.js → chunk-JB4JIVTJ.js} +1 -1
  115. package/chunks/{chunk-FN5C6C7G.js → chunk-JHYH6PYQ.js} +192 -478
  116. package/chunks/{chunk-T6OODF2U.js → chunk-JWALNCLT.js} +1 -1
  117. package/chunks/{chunk-SKNVVYIJ.js → chunk-K5KXUXWC.js} +3 -3
  118. package/chunks/{chunk-XUX6O2ZT.js → chunk-KID24ZFN.js} +4 -1
  119. package/chunks/{chunk-I6DY753S.js → chunk-KJO2LBUK.js} +944 -18
  120. package/chunks/{chunk-5T4LWWNX.js → chunk-KYWTPLBJ.js} +18 -21
  121. package/chunks/{chunk-CZFQ62RM.js → chunk-LHBUKJG2.js} +4 -4
  122. package/chunks/{chunk-TOF4UZHH.js → chunk-LUEHOUHM.js} +3 -3
  123. package/chunks/{chunk-2YDYDDE2.js → chunk-M3QRM3DE.js} +3 -3
  124. package/chunks/{chunk-GNMJNDZE.js → chunk-M6FOJXW3.js} +1 -1
  125. package/chunks/{chunk-ZGWDHSUM.js → chunk-MF7HCQWZ.js} +4 -4
  126. package/chunks/{chunk-66GIFJ63.js → chunk-MK2GIB46.js} +1 -1
  127. package/chunks/{chunk-TFV4RXPU.js → chunk-MO3FC2WT.js} +1 -1
  128. package/chunks/{chunk-TR7G7XFQ.js → chunk-MPNBVAEU.js} +5 -5
  129. package/chunks/{chunk-K3LPAED5.js → chunk-MQM5PJML.js} +24 -4
  130. package/chunks/{chunk-3WBMPR3S.js → chunk-MSBO7X2W.js} +1 -1
  131. package/chunks/{chunk-5PA6UEYA.js → chunk-MZCJWS5Y.js} +1 -1
  132. package/chunks/{chunk-BGXZBI5B.js → chunk-N4X7G4J2.js} +2 -1
  133. package/chunks/{chunk-27ONXAFY.js → chunk-NIFYWDYN.js} +1 -1
  134. package/chunks/{chunk-AP7WZONS.js → chunk-NMOD2FXQ.js} +19 -9
  135. package/chunks/{chunk-IJVDHPKD.js → chunk-NU7RKEZR.js} +2 -2
  136. package/chunks/{chunk-5URK47RN.js → chunk-NV55WWD6.js} +11595 -10375
  137. package/chunks/{chunk-HABT2Z7R.js → chunk-OU5APVWO.js} +4 -4
  138. package/chunks/{chunk-QR4AHMGQ.js → chunk-P2G476QN.js} +13 -13
  139. package/chunks/{chunk-5SM2AK65.js → chunk-PADPMMYM.js} +5 -5
  140. package/chunks/{chunk-RRKNX553.js → chunk-PDQGMSZK.js} +1 -1
  141. package/chunks/{chunk-GTUKW3I6.js → chunk-PPKZ7JOE.js} +1 -1
  142. package/chunks/{chunk-SAH4BD2J.js → chunk-PQEISIKS.js} +67 -0
  143. package/chunks/{chunk-XIRDDFRS.js → chunk-PZ66FRIC.js} +2644 -2296
  144. package/chunks/{chunk-H3HZ4AWW.js → chunk-Q2MSPKIJ.js} +1 -1
  145. package/chunks/{chunk-WEGXPP5E.js → chunk-QFCDF5PL.js} +1 -1
  146. package/chunks/{chunk-OF2DPXUS.js → chunk-QYMAKPY5.js} +119 -24
  147. package/chunks/{chunk-JVPFTDBK.js → chunk-RFIDDFAL.js} +1 -1
  148. package/chunks/chunk-RKFGE7JH.js +93 -0
  149. package/chunks/{chunk-CPPYZHBN.js → chunk-RU7BK6B3.js} +1 -1
  150. package/chunks/chunk-SEONHUS3.js +275 -0
  151. package/chunks/{chunk-DEYPMJPD.js → chunk-SMPR7SPO.js} +1 -1
  152. package/chunks/chunk-SS4MRMKE.js +3525 -0
  153. package/chunks/{chunk-BPMVPWBT.js → chunk-SS5SDCD3.js} +6 -6
  154. package/chunks/{chunk-J3CBIEDS.js → chunk-ST5MDGH3.js} +32 -15
  155. package/chunks/{chunk-J5352S3S.js → chunk-ST5V3ZOC.js} +3 -3
  156. package/chunks/{chunk-7CWEZQ6T.js → chunk-STUJ7IMZ.js} +0 -77
  157. package/chunks/{chunk-4K7NQDCG.js → chunk-T4EFG2P5.js} +18 -9
  158. package/chunks/{chunk-TWSKM647.js → chunk-T7KMERIX.js} +1 -1
  159. package/chunks/{chunk-5CMWFBML.js → chunk-TEBDFQBZ.js} +1 -1
  160. package/chunks/{chunk-EC5BONC3.js → chunk-TPI7O7HR.js} +1 -1
  161. package/chunks/{chunk-T2CRBIDJ.js → chunk-TTX2JUE6.js} +1 -1
  162. package/chunks/{chunk-VOEMVOM4.js → chunk-TVC6HQ2U.js} +2 -2
  163. package/chunks/{chunk-WXDZZFH3.js → chunk-TZBSGJ6C.js} +6 -6
  164. package/chunks/chunk-U54AYGEC.js +337 -0
  165. package/chunks/{chunk-2NNTE2ED.js → chunk-UHQFIS7N.js} +15 -0
  166. package/chunks/{chunk-76WGY6LW.js → chunk-URE3QBBB.js} +3 -3
  167. package/chunks/{chunk-KOJ6MHD5.js → chunk-UTLCH2FK.js} +1 -1
  168. package/chunks/{chunk-7DPKPBOQ.js → chunk-V2NDP3I4.js} +2 -2
  169. package/chunks/{chunk-FJWICLG7.js → chunk-V4264FEG.js} +9 -9
  170. package/chunks/{chunk-XR7OIAQF.js → chunk-V5J4J5TP.js} +2 -2
  171. package/chunks/{chunk-7UJTY5V3.js → chunk-V7EESTJV.js} +1 -1
  172. package/chunks/{chunk-Z6L3C4VF.js → chunk-VBCPNIQD.js} +39 -39
  173. package/chunks/{chunk-ATLGYSYH.js → chunk-VGIFXISB.js} +4 -4
  174. package/chunks/{chunk-X2UOOG5V.js → chunk-VQUGEVGR.js} +1 -1
  175. package/chunks/{chunk-XJS54K4A.js → chunk-VTHREBQM.js} +2 -2
  176. package/chunks/{chunk-AA7VBRBG.js → chunk-W3JH33JE.js} +8 -8
  177. package/chunks/{chunk-FPH6TXD3.js → chunk-WAOIHTJS.js} +1 -1
  178. package/chunks/{chunk-CDUN63IN.js → chunk-WGY3AVGM.js} +3 -3
  179. package/chunks/{chunk-JLGFGPZJ.js → chunk-WNPDGUJO.js} +22 -3
  180. package/chunks/{chunk-O3BUXIPM.js → chunk-WXEA74YB.js} +3 -3
  181. package/chunks/{chunk-YRLW2MSX.js → chunk-XBVNNDPK.js} +11 -4
  182. package/chunks/{chunk-VL4YX3FH.js → chunk-XF63PKEN.js} +1 -1
  183. package/chunks/{chunk-R7G7GKOX.js → chunk-XHF7WQ6B.js} +3 -3
  184. package/chunks/{chunk-3FSBMAYD.js → chunk-XQFT3QUF.js} +1 -1
  185. package/chunks/{chunk-3D6PDLNJ.js → chunk-XSG6G3G6.js} +49 -32
  186. package/chunks/{chunk-5JCZ3UKB.js → chunk-Y5S7LBOZ.js} +44 -7
  187. package/chunks/{chunk-OLS3MAXQ.js → chunk-YLSQLSH7.js} +15 -9
  188. package/chunks/{chunk-2SERYG4T.js → chunk-YTDVNSUQ.js} +1 -1
  189. package/chunks/{chunk-KPF2K55D.js → chunk-ZEYFMJQA.js} +39 -8
  190. package/chunks/{chunk-OT4YKUUV.js → chunk-ZU4UDIWX.js} +2 -2
  191. package/chunks/chunk-ZWJDJ6RU.js +2597 -0
  192. package/chunks/{chunk-R3T33BG5.js → chunk-ZYMLPEZQ.js} +3 -3
  193. package/chunks/{chunk-DID6IRGC.js → chunk-ZZMSC3RG.js} +56 -39
  194. package/chunks/{chunk-L436XFLJ.js → chunk-ZZUKP7HV.js} +1 -1
  195. package/chunks/config-utils-R6M3TA34.js +113 -0
  196. package/chunks/contextCommand-ZCAP23J6.js +106 -0
  197. package/chunks/{core-runtime-CEJRHCRF.js → core-runtime-AXB6SK5D.js} +59 -61
  198. package/chunks/{create-sub-session-RVHSWVAP.js → create-sub-session-23ITIELI.js} +3 -3
  199. package/chunks/{create-sub-session-DFZVIG56.js → create-sub-session-4QNE64MR.js} +164 -85
  200. package/chunks/{cron-create-IJGVR5R2.js → cron-create-KJ4IY6PP.js} +57 -10
  201. package/chunks/{cron-delete-4N5BI6GL.js → cron-delete-MBLQCAYY.js} +4 -4
  202. package/chunks/{cron-list-2CATIPUX.js → cron-list-DWH2PQ47.js} +4 -4
  203. package/chunks/{daemon-NAYK4XXU.js → daemon-3GNHB3M2.js} +523 -8
  204. package/chunks/{daemon-git-worktree-guard-L6ZUFKF7.js → daemon-git-worktree-guard-IVAJJWYK.js} +56 -58
  205. package/chunks/daemon-status-provider-K3SJ5C2U.js +117 -0
  206. package/chunks/daemon-trust-policy-DOR3YG62.js +112 -0
  207. package/chunks/{daemon-trust-policy-monitor-2G3EKQEU.js → daemon-trust-policy-monitor-KGGROSIV.js} +64 -66
  208. package/chunks/deferred-core-runtime-WOYLUQQ7.js +114 -0
  209. package/chunks/{display-image-6KHQNEAE.js → display-image-BE7I6ZB6.js} +5 -5
  210. package/chunks/{dist-DJBNNPLN.js → dist-4WXLCBDR.js} +1 -1
  211. package/chunks/{dist-TJUDJTCB.js → dist-5VXFRTWU.js} +280 -48
  212. package/chunks/{dist-6H6RZ5H6.js → dist-6BPYWHVD.js} +89 -65
  213. package/chunks/{dist-ZBVOXSKF.js → dist-GFN5DCBX.js} +74 -65
  214. package/chunks/{dist-SATKXKUR.js → dist-HZNT6GQS.js} +1 -1
  215. package/chunks/{dist-FVJZSIO4.js → dist-LVZCXVPF.js} +72 -20
  216. package/chunks/{dist-7CKN54NL.js → dist-N6W6E753.js} +71 -64
  217. package/chunks/{dist-4Q7NTUNB.js → dist-NSV4NBPK.js} +31 -14
  218. package/chunks/{dist-UQUFZDIY.js → dist-SWQMYP2Q.js} +18 -16
  219. package/chunks/earlyInputCapture-OHBEVO4K.js +107 -0
  220. package/chunks/{edit-ZERGX3RV.js → edit-LEQLAGPZ.js} +45 -47
  221. package/chunks/{en-6MDBWMTG.js → en-YLXBXM4Z.js} +2 -1
  222. package/chunks/{enter-worktree-UOZ6ZTP7.js → enter-worktree-35QCAAFP.js} +7 -7
  223. package/chunks/{enterPlanMode-W2RP3P5B.js → enterPlanMode-ONQN3WHE.js} +47 -49
  224. package/chunks/{environment-ZBJ23YVR.js → environment-UANTR7A4.js} +60 -62
  225. package/chunks/errors-WAK6KFBC.js +113 -0
  226. package/chunks/{exit-worktree-G2QATUCV.js → exit-worktree-XQD6D543.js} +7 -7
  227. package/chunks/exitPlanMode-UEYBG6P5.js +83 -0
  228. package/chunks/{fast-path-4MWBCEUF.js → fast-path-WUL7UZ6H.js} +7 -7
  229. package/chunks/{fast-path-settings-XMFBYFUH.js → fast-path-settings-XH426LUU.js} +3 -3
  230. package/chunks/{glob-DKTNG32L.js → glob-Y54QUWDY.js} +44 -46
  231. package/chunks/{goal-tools-CNVXMSZD.js → goal-tools-PTD3MBA7.js} +10 -8
  232. package/chunks/{grep-3NLSS32D.js → grep-5GPICQBU.js} +6 -6
  233. package/chunks/handleAutoUpdate-FP3NWNSG.js +109 -0
  234. package/chunks/i18n-INIU5X7A.js +124 -0
  235. package/chunks/{image-gen-63NN2H5N.js → image-gen-J6FDGUZP.js} +8 -10
  236. package/chunks/initializer-TYODV6GE.js +113 -0
  237. package/chunks/installationInfo-AAPKYDSZ.js +107 -0
  238. package/chunks/{keychain-token-storage-3MGFRYGM.js → keychain-token-storage-37XPR34V.js} +2 -2
  239. package/chunks/list-TUODDN6J.js +116 -0
  240. package/chunks/{list-agents-EXRSHIDJ.js → list-agents-DI3YFTDT.js} +2 -2
  241. package/chunks/{gemini-X5GQHQYF.js → llm-NSAVK5V3.js} +117 -114
  242. package/chunks/{geminiContentGenerator-UDSWXZXL.js → llm-content-generator-AY2QKXHE.js} +29 -29
  243. package/chunks/loadedSettingsAdapter-KJCLZ3C4.js +110 -0
  244. package/chunks/{loggingContentGenerator-73C7TKDK.js → loggingContentGenerator-DSFQHXIF.js} +328 -37
  245. package/chunks/{loop-wakeup-XBPB2BRO.js → loop-wakeup-XJFONSQ7.js} +5 -5
  246. package/chunks/{ls-WFONAND2.js → ls-3VAT2J7A.js} +4 -4
  247. package/chunks/{lsp-DUKPDUXN.js → lsp-5W7IRUBH.js} +2 -2
  248. package/chunks/{managed-npm-update-H2KOLQZU.js → managed-npm-update-TSWENTK5.js} +57 -59
  249. package/chunks/mcp-MWSAPFOL.js +110 -0
  250. package/chunks/{monitor-TGCMNJJH.js → monitor-RW4GWJHB.js} +44 -46
  251. package/chunks/nonInteractiveCli-JXKL343Q.js +185 -0
  252. package/chunks/{notebook-edit-YEUNZYDX.js → notebook-edit-CQNYS5OR.js} +45 -47
  253. package/chunks/{open-with-auth-4UI3KHUR.js → open-with-auth-YN3QZHVM.js} +1 -1
  254. package/chunks/{openaiContentGenerator-J7LD4VSL.js → openaiContentGenerator-J6QIF7EX.js} +26 -28
  255. package/chunks/pidfile-QOIQZFT2.js +111 -0
  256. package/chunks/process-registry-OAEG6WGC.js +662 -0
  257. package/chunks/{processUtils-ZHFC7CSL.js → processUtils-GPHNANKZ.js} +2 -2
  258. package/chunks/prompt-terminal-ledger-FOMFTYOM.js +105 -0
  259. package/chunks/{qwenContentGenerator-YEWWK3JQ.js → qwenContentGenerator-WWDXPYQI.js} +49 -51
  260. package/chunks/{qwenOAuth2-JIYAWXTW.js → qwenOAuth2-OF5WRBQT.js} +7 -9
  261. package/chunks/{read-file-ZQI3WPVK.js → read-file-FQUQHC6N.js} +13 -13
  262. package/chunks/{read-mcp-resource-7A7NFSFL.js → read-mcp-resource-XD257PGJ.js} +2 -2
  263. package/chunks/{record-artifact-CPJ4IJSD.js → record-artifact-VW23GS4F.js} +4 -4
  264. package/chunks/{report-findings-VFM5DENC.js → report-findings-AO5VYFLR.js} +9 -5
  265. package/chunks/{request-shutdown-6IW46GD7.js → request-shutdown-BCLA3JV2.js} +7 -7
  266. package/chunks/resumeHistoryUtils-NSGF3UCB.js +118 -0
  267. package/chunks/ripGrep-4CAT6SKV.js +39 -0
  268. package/chunks/{run-qwen-serve-WHWU7NZ6.js → run-qwen-serve-5X6IDZER.js} +371 -357
  269. package/chunks/{runtime-E7BSPWQP.js → runtime-HK27GMPF.js} +69 -71
  270. package/chunks/scheduled-tasks-MN2ZZ5P6.js +127 -0
  271. package/chunks/{scheduler-TJPATFOM.js → scheduler-WD4MHMO5.js} +58 -60
  272. package/chunks/{sdk-exporters-http-XXSKBD2C.js → sdk-exporters-http-TTU2CHBU.js} +2 -2
  273. package/chunks/{sdk-impl-VPNBLV7I.js → sdk-impl-UUMVYMAL.js} +11 -5
  274. package/chunks/{send-message-OXZK6USO.js → send-message-AJ4OCUBV.js} +25 -9
  275. package/chunks/serve-2XCHPPGG.js +118 -0
  276. package/chunks/{server-AXCN7QBJ.js → server-GO2N5DH7.js} +6080 -4964
  277. package/chunks/{session-HO4US3AG.js → session-IFNHTUBT.js} +112 -112
  278. package/chunks/session-pr-refresh-I3UBWMVP.js +364 -0
  279. package/chunks/{settings-B2PFJJN4.js → settings-L6N54CU6.js} +63 -65
  280. package/chunks/{shell-7XMSANI3.js → shell-4Y5LLW6N.js} +44 -46
  281. package/chunks/{skill-NL3VH562.js → skill-YOWTRAKQ.js} +68 -24
  282. package/chunks/skill-settings-ZL4JY5UE.js +118 -0
  283. package/chunks/spawnChannel-ZST6XJVJ.js +112 -0
  284. package/chunks/standalone-update-THVU3OKY.js +118 -0
  285. package/chunks/{startInteractiveUI-G2XKSCQ7.js → startInteractiveUI-XDFSHBZD.js} +3076 -2475
  286. package/chunks/{stdioHelpers-7A2EE64Z.js → stdioHelpers-AY6XCDY2.js} +3 -1
  287. package/chunks/{syntheticOutput-5AJ444QT.js → syntheticOutput-ML43GEFN.js} +3 -3
  288. package/chunks/{task-create-TY7P6UHG.js → task-create-QN4LYRSE.js} +11 -11
  289. package/chunks/{task-list-BELMPA75.js → task-list-JPLGK45U.js} +5 -5
  290. package/chunks/{task-stop-U3S3KZG2.js → task-stop-CXEH5L2D.js} +2 -2
  291. package/chunks/{task-update-O4IGDPCK.js → task-update-IWEOJFV2.js} +11 -11
  292. package/chunks/{team-create-IYBUOORE.js → team-create-OOPXCDBA.js} +44 -46
  293. package/chunks/{team-delete-YWFXX77L.js → team-delete-RZVVSGCY.js} +5 -5
  294. package/chunks/{team-plan-approval-YKU57LBM.js → team-plan-approval-DSX5EWAT.js} +44 -46
  295. package/chunks/terminal-image-renderer-KS25G33E.js +114 -0
  296. package/chunks/theme-manager-YMZNG45F.js +102 -0
  297. package/chunks/{todoWrite-435EO2CS.js → todoWrite-WDJNQEMW.js} +43 -25
  298. package/chunks/{tool-search-4Q3KASIQ.js → tool-search-J5Q6U7DN.js} +22 -22
  299. package/chunks/total-session-admission-PVN64JVV.js +114 -0
  300. package/chunks/trustedFolders-FATSC4YI.js +122 -0
  301. package/chunks/{types-WYCFCEHR.js → types-HKLPXZB3.js} +1 -3
  302. package/chunks/{update-relaunch-4DC2KKFS.js → update-relaunch-SIKHLHVR.js} +6 -6
  303. package/chunks/updateCheck-D3YG2WCD.js +118 -0
  304. package/chunks/useAutoAcceptIndicator-ILINOSAS.js +120 -0
  305. package/chunks/{validateNonInterActiveAuth-YAE4YPO3.js → validateNonInterActiveAuth-JUDQP6V4.js} +105 -105
  306. package/chunks/{version-QFP7OGWX.js → version-C63GDDWN.js} +1 -1
  307. package/chunks/{web-fetch-6T23IK6Q.js → web-fetch-FOQZMNSC.js} +16 -18
  308. package/chunks/{web-search-WBWTCZK2.js → web-search-PUJTBFUC.js} +9 -11
  309. package/chunks/{web-shell-static-A6QMUNNV.js → web-shell-static-HNB4FDOE.js} +2 -2
  310. package/chunks/{workflow-FMAA3D4R.js → workflow-Y5IPINVH.js} +128 -94
  311. package/chunks/workspace-providers-status-IJ4VHFMB.js +114 -0
  312. package/chunks/{workspace-registration-store-CMMX7EPX.js → workspace-registration-store-SMJWI2AI.js} +1 -1
  313. package/chunks/workspace-registry-BTGZIMPK.js +123 -0
  314. package/chunks/workspace-service-SIN67ITC.js +126 -0
  315. package/chunks/workspace-skills-status-F3RKCUIX.js +113 -0
  316. package/chunks/{workspace-trust-reconciler-PJDQUTJL.js → workspace-trust-reconciler-PLIDLJZX.js} +72 -72
  317. package/chunks/write-file-PAIGB33C.js +88 -0
  318. package/chunks/{zh-TW-MV4FWFB6.js → zh-TW-RPTMRTHG.js} +2 -1
  319. package/chunks/{zh-X3WGU6SI.js → zh-UNY63FR3.js} +2 -1
  320. package/chunks/{zoom-image-WVYVFRXF.js → zoom-image-LYQD7BQA.js} +13 -13
  321. package/cli.js +16 -16
  322. package/locales/en.js +2 -0
  323. package/locales/zh-TW.js +2 -0
  324. package/locales/zh.js +2 -0
  325. package/package.json +3 -3
  326. package/web-shell/assets/{abnfDiagram-VCTEODGH-d-8xa8uz.js → abnfDiagram-VCTEODGH-TRCMSA_6.js} +1 -1
  327. package/web-shell/assets/{arc-BhB7CrGK.js → arc-D9Uls5b3.js} +1 -1
  328. package/web-shell/assets/{architectureDiagram-5GKGNRK7-BDCd_IcJ.js → architectureDiagram-5GKGNRK7-Bwb8jPXg.js} +1 -1
  329. package/web-shell/assets/{blockDiagram-NRAW4CY4-C-AHu6mi.js → blockDiagram-NRAW4CY4-DHj71TSX.js} +1 -1
  330. package/web-shell/assets/{c4Diagram-UCG6FXSJ-CFjQt0vl.js → c4Diagram-UCG6FXSJ-uKBBdbyr.js} +1 -1
  331. package/web-shell/assets/channel-CXjVLaBa.js +1 -0
  332. package/web-shell/assets/{chunk-2Q5K7J3B-DRjwqaDq.js → chunk-2Q5K7J3B-BZd0Phrl.js} +1 -1
  333. package/web-shell/assets/{chunk-5VM5RSS4-eHM9noJE.js → chunk-5VM5RSS4-7KNeNBqN.js} +1 -1
  334. package/web-shell/assets/{chunk-F27PBJKO-CcSWUYn1.js → chunk-F27PBJKO-BeboS7Fi.js} +1 -1
  335. package/web-shell/assets/{chunk-G27WJ6UU-DNr-RF5S.js → chunk-G27WJ6UU-RV3JONoj.js} +1 -1
  336. package/web-shell/assets/{chunk-JWPE2WC7-rVJHoNF8.js → chunk-JWPE2WC7-Yw9FCFsP.js} +1 -1
  337. package/web-shell/assets/{chunk-LCL6LL3I-B2aX0Gzy.js → chunk-LCL6LL3I-GIMnydDe.js} +1 -1
  338. package/web-shell/assets/{chunk-POPQ4Y6H-DVp07n32.js → chunk-POPQ4Y6H-Cfrux7bL.js} +1 -1
  339. package/web-shell/assets/{chunk-SVP7TREG-C6QB_KUr.js → chunk-SVP7TREG-BlvIN0CO.js} +1 -1
  340. package/web-shell/assets/{chunk-XXDRQBXY-CLVxDNCy.js → chunk-XXDRQBXY-DMs7Rr4t.js} +1 -1
  341. package/web-shell/assets/classDiagram-DTDB5LWJ-DANEijO3.js +1 -0
  342. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DANEijO3.js +1 -0
  343. package/web-shell/assets/{cose-bilkent-JH36ORCC-B_aKX3A3.js → cose-bilkent-JH36ORCC-DNGqTNwI.js} +1 -1
  344. package/web-shell/assets/{cynefin-OW5HDTMX-BBw2pPUa.js → cynefin-OW5HDTMX-CojMpaoH.js} +1 -1
  345. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-WWPiBTwk.js → cynefinDiagram-5FMLGOSQ-DF07YXGo.js} +1 -1
  346. package/web-shell/assets/{dagre-3AP2YEHR-CPtIdka-.js → dagre-3AP2YEHR-17-4WtCH.js} +1 -1
  347. package/web-shell/assets/{diagram-S7CK7UJ4-Dj5og1Xi.js → diagram-S7CK7UJ4-G3Wuyz9m.js} +1 -1
  348. package/web-shell/assets/{diagram-UQ7AKVKN-CC_x70YC.js → diagram-UQ7AKVKN-nyWIKZ8P.js} +1 -1
  349. package/web-shell/assets/{diagram-VSXAHHWV-rXMfsO4n.js → diagram-VSXAHHWV-tKHhmYSC.js} +1 -1
  350. package/web-shell/assets/{diagram-VX7I27RA-DEmLYQbh.js → diagram-VX7I27RA-CpDf1hYk.js} +1 -1
  351. package/web-shell/assets/{diagram-Z3DM3KII-B0ys6Vxx.js → diagram-Z3DM3KII-Cah2IFXG.js} +1 -1
  352. package/web-shell/assets/{ebnfDiagram-PWID7BFC-Bq6y6lKH.js → ebnfDiagram-PWID7BFC-DNaCkgxy.js} +1 -1
  353. package/web-shell/assets/{erDiagram-SSCWMZ5O-l69JeBZ4.js → erDiagram-SSCWMZ5O-CAdRgcf1.js} +1 -1
  354. package/web-shell/assets/{flowDiagram-A5DVABFB-Cm-EzGY4.js → flowDiagram-A5DVABFB-CMUJAShL.js} +1 -1
  355. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BRS9ZOp7.js → ganttDiagram-EL5Y4UJY-o-_MUNey.js} +1 -1
  356. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-DAMRKgLk.js → gitGraphDiagram-WWUBYQGX-_aG-2Z7O.js} +1 -1
  357. package/web-shell/assets/{index-Bncx8E8M.js → index-BK_NKxiJ.js} +1 -1
  358. package/web-shell/assets/index-Ci-z4zWY.js +1913 -0
  359. package/web-shell/assets/index-LDlXZRHA.css +36 -0
  360. package/web-shell/assets/{infoDiagram-RXCK75RN-DasffaZp.js → infoDiagram-RXCK75RN-qJPeZbGP.js} +1 -1
  361. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-CmRUt3C-.js → ishikawaDiagram-5VMMS53U-7Om4vNo1.js} +1 -1
  362. package/web-shell/assets/{journeyDiagram-EYS64GPL-DzhE_c1Z.js → journeyDiagram-EYS64GPL-BNtXqmBW.js} +1 -1
  363. package/web-shell/assets/{kanban-definition-3QL26DDD-BH5b6nn3.js → kanban-definition-3QL26DDD-COgFec8P.js} +1 -1
  364. package/web-shell/assets/{layout-BxoLK-LY.js → layout-B9n81PC9.js} +1 -1
  365. package/web-shell/assets/{linear-CqDPvVI7.js → linear-Bb6nXZQq.js} +1 -1
  366. package/web-shell/assets/{mermaid.core-DBoN4plo.js → mermaid.core-Cgrm3JVT.js} +6 -6
  367. package/web-shell/assets/{mindmap-definition-FBJOCRG2-DJJtXPEM.js → mindmap-definition-FBJOCRG2-TKwLTjnG.js} +1 -1
  368. package/web-shell/assets/{pegDiagram-XKGWAZYB-DmgPXP5l.js → pegDiagram-XKGWAZYB-BJPuvlpi.js} +1 -1
  369. package/web-shell/assets/{pieDiagram-E7YTZNPT-1ezjzcI5.js → pieDiagram-E7YTZNPT-D01VkNsW.js} +1 -1
  370. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-ChKARz3k.js → quadrantDiagram-AXDQQJYC-C4hHsiv-.js} +1 -1
  371. package/web-shell/assets/{railroadDiagram-O6MQD6OU-k7mNB_QT.js → railroadDiagram-O6MQD6OU-CuEO4xK2.js} +1 -1
  372. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-B0XFsii0.js → requirementDiagram-EFPCY7ZU-D5J_vIo5.js} +1 -1
  373. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-repJ2Ukk.js → sankeyDiagram-P5KCCOFB-DQKY223V.js} +1 -1
  374. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-D0gUSKGu.js → sequenceDiagram-WJ2MYXX4-D27YV_cm.js} +1 -1
  375. package/web-shell/assets/{sizeCapture-X5ZJPWSS-CE463F74.js → sizeCapture-X5ZJPWSS-TJg8UcwV.js} +1 -1
  376. package/web-shell/assets/{stateDiagram-HBIQ2CUA-003zYtJa.js → stateDiagram-HBIQ2CUA-CmnPzUIx.js} +1 -1
  377. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DNKPyrDc.js +1 -0
  378. package/web-shell/assets/{swimlanes-XN3QIQJK-DBj8MFpu.js → swimlanes-XN3QIQJK-ByeP3_Nu.js} +1 -1
  379. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-ZL1HPC6w.js +8 -0
  380. package/web-shell/assets/{timeline-definition-24CTP7MA-D2aCh4a9.js → timeline-definition-24CTP7MA-BsFA5juR.js} +1 -1
  381. package/web-shell/assets/{vennDiagram-4TSXK5OY-BHMfWBpl.js → vennDiagram-4TSXK5OY-DREP2ECo.js} +1 -1
  382. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-RdHAj66j.js → wardleyDiagram-VM6X3IG4-iyd9lKi2.js} +1 -1
  383. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-BgJWOvq0.js → xychartDiagram-S5SC5T6Z-CVr1_j9q.js} +1 -1
  384. package/web-shell/index.html +3 -3
  385. package/chunks/MaxSizedBox-BFVLZP2E.js +0 -112
  386. package/chunks/agent-headless-UCBCS4V4.js +0 -87
  387. package/chunks/bridge-FRNYLYY7.js +0 -119
  388. package/chunks/channel-settings-store-IV4KDL7N.js +0 -117
  389. package/chunks/chunk-I6VVOZDK.js +0 -202
  390. package/chunks/chunk-JS73NNWF.js +0 -30
  391. package/chunks/chunk-K2OJUPOE.js +0 -78
  392. package/chunks/chunk-P3QQPMQA.js +0 -19
  393. package/chunks/chunk-SDVF6A42.js +0 -945
  394. package/chunks/chunk-VGHZT6JR.js +0 -51
  395. package/chunks/config-utils-PMX4QZ5Y.js +0 -113
  396. package/chunks/contextCommand-NZRLVAFC.js +0 -108
  397. package/chunks/daemon-status-provider-FTTYZEKN.js +0 -118
  398. package/chunks/daemon-trust-policy-WMGFPA3Z.js +0 -114
  399. package/chunks/deferred-core-runtime-BUFEFYNA.js +0 -116
  400. package/chunks/earlyInputCapture-ROPLMXA7.js +0 -109
  401. package/chunks/errors-U5KNAADB.js +0 -115
  402. package/chunks/exitPlanMode-VFJ5R5DD.js +0 -85
  403. package/chunks/handleAutoUpdate-W4BUYFT7.js +0 -111
  404. package/chunks/i18n-KX7FEKJJ.js +0 -126
  405. package/chunks/initializer-SNVVLS7Y.js +0 -115
  406. package/chunks/installationInfo-D4XGQNHJ.js +0 -109
  407. package/chunks/list-WYECMLXZ.js +0 -118
  408. package/chunks/loadedSettingsAdapter-5WZBXBCR.js +0 -112
  409. package/chunks/mcp-CBWAROY3.js +0 -112
  410. package/chunks/nonInteractiveCli-O232UUV7.js +0 -185
  411. package/chunks/pidfile-MSPQ255Y.js +0 -113
  412. package/chunks/process-registry-PMJOA5CO.js +0 -172
  413. package/chunks/prompt-terminal-ledger-YPGMNDXT.js +0 -107
  414. package/chunks/resumeHistoryUtils-35D4KAVT.js +0 -120
  415. package/chunks/ripGrep-46N4FLOS.js +0 -39
  416. package/chunks/serve-WQ54UIYG.js +0 -120
  417. package/chunks/skill-settings-SKMN5YXC.js +0 -120
  418. package/chunks/spawnChannel-NE43EEO3.js +0 -113
  419. package/chunks/standalone-update-XOCWGXAH.js +0 -120
  420. package/chunks/terminal-image-renderer-NREKYTAD.js +0 -116
  421. package/chunks/theme-manager-IJS6OICX.js +0 -104
  422. package/chunks/total-session-admission-L5RPEFZ2.js +0 -114
  423. package/chunks/trustedFolders-OILZCHRD.js +0 -124
  424. package/chunks/updateCheck-AK4COHNK.js +0 -120
  425. package/chunks/useAutoAcceptIndicator-O2N2Q6KG.js +0 -122
  426. package/chunks/workspace-providers-status-OCFEWIPQ.js +0 -116
  427. package/chunks/workspace-registry-WJLZPRTG.js +0 -123
  428. package/chunks/workspace-service-5ZOBMMIB.js +0 -131
  429. package/chunks/workspace-skills-status-B6NJZD4B.js +0 -115
  430. package/chunks/write-file-B2RNX6SU.js +0 -90
  431. package/web-shell/assets/channel-CU-Zyv0r.js +0 -1
  432. package/web-shell/assets/classDiagram-DTDB5LWJ-C0J2_LKs.js +0 -1
  433. package/web-shell/assets/classDiagram-v2-JRS7N3AN-C0J2_LKs.js +0 -1
  434. package/web-shell/assets/index-C-XlQn24.css +0 -5
  435. package/web-shell/assets/index-gdvMN4J1.js +0 -1860
  436. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-2uACDdJN.js +0 -1
  437. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-C4JJkavU.js +0 -8
@@ -3,12 +3,12 @@
3
3
  import {
4
4
  computeCpuPercent
5
5
  } from "./chunk-LBOVL47Y.js";
6
- import {
7
- RUNTIME_STARTUP_CANCELLED_MESSAGE
8
- } from "./chunk-QUPXZXLV.js";
9
6
  import {
10
7
  resolveServeToken
11
8
  } from "./chunk-ZELCTN6Y.js";
9
+ import {
10
+ RUNTIME_STARTUP_CANCELLED_MESSAGE
11
+ } from "./chunk-QUPXZXLV.js";
12
12
  import {
13
13
  ACCESS_LOG_CONTROLLER_LOCAL,
14
14
  CAPABILITIES_SCHEMA_VERSION,
@@ -38,13 +38,20 @@ import {
38
38
  positiveFiniteOrNull,
39
39
  prepareManagedScratchRoot,
40
40
  resolveAcpHttpEnabled,
41
- setDeferredRuntimeRequestTiming,
42
41
  toDaemonStatusMemoryLimits
43
- } from "./chunk-SQPOJ4ZI.js";
44
- import "./chunk-VGHZT6JR.js";
42
+ } from "./chunk-4NDLQAY2.js";
45
43
  import {
46
- normalizeSessionIdForLookup
47
- } from "./chunk-ZEZKIS2K.js";
44
+ ConversationDirectoryIdentityError,
45
+ assertExactConversationRootIdentity,
46
+ createConversationRootIdentity,
47
+ getConversationDirectoryName,
48
+ getConversationStagedDirectoryName,
49
+ inspectConversationDirectoryIdentity,
50
+ inspectConversationStagedDirectoryIdentity,
51
+ isSameConversationDirectoryObject,
52
+ materializeConversationDirectoryIdentity,
53
+ revalidateConversationRootIdentity
54
+ } from "./chunk-U54AYGEC.js";
48
55
  import {
49
56
  isLoopbackBind
50
57
  } from "./chunk-RXFQM6FQ.js";
@@ -53,6 +60,12 @@ import {
53
60
  resolveDaemonMemoryBudget,
54
61
  serveJournalGrowthPoolMb
55
62
  } from "./chunk-UXEO7E3V.js";
63
+ import {
64
+ setDeferredRuntimeRequestTiming
65
+ } from "./chunk-SEONHUS3.js";
66
+ import {
67
+ normalizeSessionIdForLookup
68
+ } from "./chunk-ZEZKIS2K.js";
56
69
  import "./chunk-NYWWQ437.js";
57
70
  import {
58
71
  resolveSessionRestoreTimeoutMs
@@ -74,7 +87,7 @@ import {
74
87
  } from "./chunk-FBX2SDQ4.js";
75
88
  import {
76
89
  resolveChannelCwd
77
- } from "./chunk-7JPW6IYH.js";
90
+ } from "./chunk-HVC3PNVC.js";
78
91
  import {
79
92
  LIVE_HOST_PROTOCOL_VERSION
80
93
  } from "./chunk-NKLP3DCK.js";
@@ -85,17 +98,17 @@ import {
85
98
  consumeServeFastPathRejectedLoaderKeys,
86
99
  loadServeFastPathSettings,
87
100
  preResolveServeFastPathHomeEnvOverrides
88
- } from "./chunk-TWSKM647.js";
101
+ } from "./chunk-T7KMERIX.js";
89
102
  import {
90
103
  MAX_REGISTERED_WORKSPACES,
91
104
  resolveWorkspaceInputs,
92
105
  workspaceRegistrationId
93
- } from "./chunk-5CMWFBML.js";
94
- import "./chunk-ZJG323IA.js";
106
+ } from "./chunk-TEBDFQBZ.js";
107
+ import "./chunk-G6FECKTJ.js";
95
108
  import {
96
109
  LOAD_REPLAY_META_KEY
97
110
  } from "./chunk-OZ6KS6KW.js";
98
- import "./chunk-624NHDGB.js";
111
+ import "./chunk-ERFDKH32.js";
99
112
  import {
100
113
  canonicalizeWorkspace,
101
114
  translateAndCheckAbsoluteWorkspacePath
@@ -103,26 +116,27 @@ import {
103
116
  import {
104
117
  ExtraCaInspectionError,
105
118
  loadableCertificates
106
- } from "./chunk-PAJGKZAA.js";
119
+ } from "./chunk-ISKH4QX3.js";
107
120
  import "./chunk-FYJ7W2PI.js";
108
121
  import "./chunk-Z7B6SRPM.js";
109
122
  import {
110
- ChannelDeliveryError,
111
- ChannelWebhookEnqueueError,
112
- isChannelDeliveryError
113
- } from "./chunk-7CWEZQ6T.js";
114
- import {
115
- normalizeWorkerDiagnostic,
116
- sanitizeWorkerDiagnostic
117
- } from "./chunk-JVPFTDBK.js";
123
+ ChannelWebhookEnqueueError
124
+ } from "./chunk-STUJ7IMZ.js";
118
125
  import {
119
126
  QWEN_SERVER_TOKEN_ENV
120
127
  } from "./chunk-GYTKQYDB.js";
128
+ import {
129
+ normalizeWorkerDiagnostic,
130
+ sanitizeWorkerDiagnostic
131
+ } from "./chunk-RFIDDFAL.js";
121
132
  import {
122
133
  channelSelectionNames
123
134
  } from "./chunk-ALMR3E6Q.js";
135
+ import {
136
+ ChannelDeliveryError,
137
+ isChannelDeliveryError
138
+ } from "./chunk-RKFGE7JH.js";
124
139
  import "./chunk-UDG5EZJI.js";
125
- import "./chunk-M5GB774H.js";
126
140
  import {
127
141
  EXTERNAL_TOOL_GUARD_PROVIDER_ATTACHED_VALUE,
128
142
  EXTERNAL_TOOL_GUARD_REQUIRED_VALUE,
@@ -130,12 +144,13 @@ import {
130
144
  PRIVATE_EXTERNAL_TOOL_GUARD_ENV,
131
145
  PRIVATE_EXTERNAL_TOOL_GUARD_PROVIDER_ENV
132
146
  } from "./chunk-3VUENPWF.js";
147
+ import "./chunk-M5GB774H.js";
133
148
  import {
134
149
  MAX_DAEMON_WORKSPACES
135
150
  } from "./chunk-5HBA2Z7V.js";
136
151
  import {
137
152
  sanitizeLogText
138
- } from "./chunk-E55H6BZ7.js";
153
+ } from "./chunk-ICURCKIU.js";
139
154
  import "./chunk-IW6RQPQB.js";
140
155
  import "./chunk-GOXKNSDZ.js";
141
156
  import {
@@ -147,10 +162,10 @@ import {
147
162
  clearLoaderKeyRejectionReporterIfCurrent,
148
163
  scrubInheritedLoaderEnv,
149
164
  setLoaderKeyRejectionReporter
150
- } from "./chunk-5PA6UEYA.js";
165
+ } from "./chunk-MZCJWS5Y.js";
151
166
  import {
152
167
  getCliVersion
153
- } from "./chunk-H3HZ4AWW.js";
168
+ } from "./chunk-Q2MSPKIJ.js";
154
169
  import "./chunk-W3N5XAZ6.js";
155
170
  import "./chunk-NPQ5ZKRP.js";
156
171
  import {
@@ -173,7 +188,7 @@ import "./chunk-JVEGA3MM.js";
173
188
  import {
174
189
  writeStderrLine,
175
190
  writeStdoutLine
176
- } from "./chunk-KGJGEEVR.js";
191
+ } from "./chunk-7FA2II6K.js";
177
192
  import "./chunk-DMTGGOSA.js";
178
193
  import "./chunk-YQ3U5MUC.js";
179
194
  import {
@@ -193,7 +208,7 @@ import {
193
208
  // packages/cli/src/serve/run-qwen-serve.ts
194
209
  init_esbuild_shims();
195
210
  var import_express = __toESM(require_express(), 1);
196
- import { X509Certificate, createHash as createHash3, timingSafeEqual } from "node:crypto";
211
+ import { X509Certificate, createHash as createHash2, timingSafeEqual } from "node:crypto";
197
212
  import { execFile } from "node:child_process";
198
213
  import * as fs from "node:fs";
199
214
  import { createServer } from "node:http";
@@ -611,11 +626,11 @@ async function ensureRealDirectory(fs2, dirPath, mutationAllowed = () => true) {
611
626
  __name(ensureRealDirectory, "ensureRealDirectory");
612
627
  async function activeFileSize(fs2, activePath) {
613
628
  try {
614
- const stat = await fs2.lstat(activePath);
615
- if (!stat.isFile() || stat.isSymbolicLink()) {
629
+ const stat2 = await fs2.lstat(activePath);
630
+ if (!stat2.isFile() || stat2.isSymbolicLink()) {
616
631
  throw new Error(`${activePath} is not a regular file`);
617
632
  }
618
- return stat.size;
633
+ return stat2.size;
619
634
  } catch (error) {
620
635
  if (isErrno(error, "ENOENT")) return 0;
621
636
  throw error;
@@ -1036,8 +1051,8 @@ __name(closeFallbackFamily, "closeFallbackFamily");
1036
1051
  async function cleanupFallbacksBestEffort(input) {
1037
1052
  const runsDir = nodePath.join(input.daemonDir, "runs");
1038
1053
  try {
1039
- const stat = await input.fs.lstat(runsDir);
1040
- if (!stat.isDirectory() || stat.isSymbolicLink()) {
1054
+ const stat2 = await input.fs.lstat(runsDir);
1055
+ if (!stat2.isDirectory() || stat2.isSymbolicLink()) {
1041
1056
  throw new Error(`${runsDir} is not a real directory`);
1042
1057
  }
1043
1058
  } catch (error) {
@@ -1404,7 +1419,7 @@ function createConcreteLogger(input) {
1404
1419
  }
1405
1420
  });
1406
1421
  let timeout;
1407
- const deadline = new Promise((resolve4) => {
1422
+ const deadline = new Promise((resolve3) => {
1408
1423
  timeout = setTimeout(() => {
1409
1424
  try {
1410
1425
  input.warnOnce(
@@ -1413,7 +1428,7 @@ function createConcreteLogger(input) {
1413
1428
  );
1414
1429
  } catch {
1415
1430
  } finally {
1416
- resolve4();
1431
+ resolve3();
1417
1432
  }
1418
1433
  }, input.policy.closeDrainBudgetMs);
1419
1434
  timeout.unref();
@@ -1759,251 +1774,10 @@ __name(initDaemonLogger, "initDaemonLogger");
1759
1774
 
1760
1775
  // packages/cli/src/serve/conversations/conversation-workspace.ts
1761
1776
  init_esbuild_shims();
1762
- import { readdir, rmdir } from "node:fs/promises";
1777
+ import { constants as fsConstants } from "node:fs";
1778
+ import { open, readdir, rename, rm, rmdir, stat } from "node:fs/promises";
1763
1779
  import { homedir } from "node:os";
1764
- import { resolve as resolve2 } from "node:path";
1765
-
1766
- // packages/cli/src/utils/conversation-directory-identity.ts
1767
- init_esbuild_shims();
1768
- import { createHash as createHash2 } from "node:crypto";
1769
- import { lstat, mkdir, realpath } from "node:fs/promises";
1770
- import { isAbsolute, join as join2, relative as relative2, resolve, sep } from "node:path";
1771
- function hasVerifiableInode(ino) {
1772
- return Number(ino) !== 0;
1773
- }
1774
- __name(hasVerifiableInode, "hasVerifiableInode");
1775
- var ConversationDirectoryIdentityError = class extends Error {
1776
- constructor(scope, reason, cause) {
1777
- super(
1778
- `Conversation ${scope} identity validation failed: ${reason}`,
1779
- cause !== void 0 ? { cause } : void 0
1780
- );
1781
- this.scope = scope;
1782
- this.reason = reason;
1783
- }
1784
- static {
1785
- __name(this, "ConversationDirectoryIdentityError");
1786
- }
1787
- name = "ConversationDirectoryIdentityError";
1788
- };
1789
- function throwIdentityIoError(scope, cause) {
1790
- throw new ConversationDirectoryIdentityError(scope, "io_error", cause);
1791
- }
1792
- __name(throwIdentityIoError, "throwIdentityIoError");
1793
- var isSameConversationPath = /* @__PURE__ */ __name((left, right) => process.platform === "win32" ? left.toLowerCase() === right.toLowerCase() : left === right, "isSameConversationPath");
1794
- function getConversationDirectoryName(storageSessionId) {
1795
- if (storageSessionId.length === 0 || storageSessionId.length > 256) {
1796
- throw new ConversationDirectoryIdentityError("child", "invalid_session_id");
1797
- }
1798
- return `conversation-${createHash2("sha256").update(storageSessionId).digest("hex")}`;
1799
- }
1800
- __name(getConversationDirectoryName, "getConversationDirectoryName");
1801
- function validateDirectoryStats(stats, scope) {
1802
- if (stats.isSymbolicLink() || !stats.isDirectory()) {
1803
- throw new ConversationDirectoryIdentityError(scope, "not_directory");
1804
- }
1805
- if (process.platform !== "win32" && typeof process.getuid === "function" && stats.uid !== process.getuid()) {
1806
- throw new ConversationDirectoryIdentityError(scope, "wrong_owner");
1807
- }
1808
- if (process.platform !== "win32" && (stats.mode & 63) !== 0) {
1809
- throw new ConversationDirectoryIdentityError(scope, "wrong_mode");
1810
- }
1811
- }
1812
- __name(validateDirectoryStats, "validateDirectoryStats");
1813
- function hasRootIdentity(stats, root) {
1814
- if (!root.inodeVerifiable) return stats.dev === root.device;
1815
- return hasVerifiableInode(stats.ino) && stats.dev === root.device && stats.ino === root.inode;
1816
- }
1817
- __name(hasRootIdentity, "hasRootIdentity");
1818
- function isSameDirectoryIdentity(before, after) {
1819
- if (!hasVerifiableInode(before.ino) || !hasVerifiableInode(after.ino)) {
1820
- return before.dev === after.dev;
1821
- }
1822
- return before.dev === after.dev && before.ino === after.ino;
1823
- }
1824
- __name(isSameDirectoryIdentity, "isSameDirectoryIdentity");
1825
- function hasExpectedDirectoryIdentity(identity, expected) {
1826
- const inodesProvable = hasVerifiableInode(identity.inode) && hasVerifiableInode(expected.inode);
1827
- return identity.storageSessionId === expected.storageSessionId && identity.name === expected.name && isSameConversationPath(identity.canonicalPath, expected.canonicalPath) && identity.device === expected.device && (!inodesProvable || identity.inode === expected.inode) && isSameConversationPath(
1828
- identity.root.configuredRoot,
1829
- expected.root.configuredRoot
1830
- ) && isSameConversationPath(
1831
- identity.root.canonicalRoot,
1832
- expected.root.canonicalRoot
1833
- ) && identity.root.device === expected.root.device && (!identity.root.inodeVerifiable || !expected.root.inodeVerifiable || identity.root.inode === expected.root.inode);
1834
- }
1835
- __name(hasExpectedDirectoryIdentity, "hasExpectedDirectoryIdentity");
1836
- async function createConversationRootIdentity(configuredRoot) {
1837
- try {
1838
- await mkdir(configuredRoot, { recursive: true, mode: 448 });
1839
- } catch (error) {
1840
- let existing;
1841
- try {
1842
- existing = await lstat(configuredRoot);
1843
- } catch {
1844
- throwIdentityIoError("root", error);
1845
- }
1846
- validateDirectoryStats(existing, "root");
1847
- throwIdentityIoError("root", error);
1848
- }
1849
- let before;
1850
- try {
1851
- before = await lstat(configuredRoot);
1852
- } catch (error) {
1853
- throwIdentityIoError("root", error);
1854
- }
1855
- validateDirectoryStats(before, "root");
1856
- let canonicalRoot;
1857
- let after;
1858
- try {
1859
- canonicalRoot = await realpath(configuredRoot);
1860
- after = await lstat(canonicalRoot);
1861
- } catch (error) {
1862
- throwIdentityIoError("root", error);
1863
- }
1864
- validateDirectoryStats(after, "root");
1865
- if (!isSameDirectoryIdentity(before, after)) {
1866
- throw new ConversationDirectoryIdentityError("root", "identity_changed");
1867
- }
1868
- return {
1869
- configuredRoot,
1870
- canonicalRoot,
1871
- device: after.dev,
1872
- inode: after.ino,
1873
- inodeVerifiable: hasVerifiableInode(after.ino)
1874
- };
1875
- }
1876
- __name(createConversationRootIdentity, "createConversationRootIdentity");
1877
- async function revalidateConversationRootIdentity(root) {
1878
- let configuredStats;
1879
- try {
1880
- configuredStats = await lstat(root.configuredRoot);
1881
- } catch (error) {
1882
- throwIdentityIoError("root", error);
1883
- }
1884
- validateDirectoryStats(configuredStats, "root");
1885
- if (!hasRootIdentity(configuredStats, root)) {
1886
- throw new ConversationDirectoryIdentityError("root", "identity_changed");
1887
- }
1888
- let canonical;
1889
- try {
1890
- canonical = await realpath(root.configuredRoot);
1891
- } catch (error) {
1892
- throwIdentityIoError("root", error);
1893
- }
1894
- if (!isSameConversationPath(canonical, root.canonicalRoot)) {
1895
- throw new ConversationDirectoryIdentityError(
1896
- "root",
1897
- "canonical_path_changed"
1898
- );
1899
- }
1900
- let canonicalStats;
1901
- try {
1902
- canonicalStats = await lstat(root.canonicalRoot);
1903
- } catch (error) {
1904
- throwIdentityIoError("root", error);
1905
- }
1906
- validateDirectoryStats(canonicalStats, "root");
1907
- if (!hasRootIdentity(canonicalStats, root)) {
1908
- throw new ConversationDirectoryIdentityError("root", "identity_changed");
1909
- }
1910
- return root;
1911
- }
1912
- __name(revalidateConversationRootIdentity, "revalidateConversationRootIdentity");
1913
- async function assertExactConversationRootIdentity(root, candidate) {
1914
- await revalidateConversationRootIdentity(root);
1915
- const resolvedCandidate = resolve(candidate);
1916
- if (!isSameConversationPath(resolvedCandidate, root.configuredRoot) && !isSameConversationPath(resolvedCandidate, root.canonicalRoot)) {
1917
- throw new ConversationDirectoryIdentityError("root", "unexpected_identity");
1918
- }
1919
- let stats;
1920
- let canonical;
1921
- try {
1922
- stats = await lstat(resolvedCandidate);
1923
- validateDirectoryStats(stats, "root");
1924
- canonical = await realpath(resolvedCandidate);
1925
- } catch (error) {
1926
- if (error instanceof ConversationDirectoryIdentityError) throw error;
1927
- throwIdentityIoError("root", error);
1928
- }
1929
- if (!isSameConversationPath(canonical, root.canonicalRoot) || !hasRootIdentity(stats, root)) {
1930
- throw new ConversationDirectoryIdentityError("root", "unexpected_identity");
1931
- }
1932
- return root;
1933
- }
1934
- __name(assertExactConversationRootIdentity, "assertExactConversationRootIdentity");
1935
- async function inspectConversationDirectoryIdentity(root, storageSessionId, expected) {
1936
- await revalidateConversationRootIdentity(root);
1937
- const name = getConversationDirectoryName(storageSessionId);
1938
- const candidate = join2(root.canonicalRoot, name);
1939
- let before;
1940
- try {
1941
- before = await lstat(candidate);
1942
- } catch (error) {
1943
- if (error.code === "ENOENT") return void 0;
1944
- throwIdentityIoError("child", error);
1945
- }
1946
- validateDirectoryStats(before, "child");
1947
- let canonical;
1948
- let after;
1949
- try {
1950
- canonical = await realpath(candidate);
1951
- after = await lstat(canonical);
1952
- } catch (error) {
1953
- if (error.code === "ENOENT") return void 0;
1954
- throwIdentityIoError("child", error);
1955
- }
1956
- validateDirectoryStats(after, "child");
1957
- const child = relative2(root.canonicalRoot, canonical);
1958
- if (child !== name || child.includes(sep) || child.startsWith("..") || isAbsolute(child)) {
1959
- throw new ConversationDirectoryIdentityError("child", "not_direct_child");
1960
- }
1961
- if (!isSameDirectoryIdentity(before, after)) {
1962
- throw new ConversationDirectoryIdentityError("child", "identity_changed");
1963
- }
1964
- await revalidateConversationRootIdentity(root);
1965
- const identity = {
1966
- root,
1967
- storageSessionId,
1968
- name,
1969
- canonicalPath: canonical,
1970
- device: after.dev,
1971
- inode: after.ino
1972
- };
1973
- if (expected && !hasExpectedDirectoryIdentity(identity, expected)) {
1974
- throw new ConversationDirectoryIdentityError(
1975
- "child",
1976
- "unexpected_identity"
1977
- );
1978
- }
1979
- return identity;
1980
- }
1981
- __name(inspectConversationDirectoryIdentity, "inspectConversationDirectoryIdentity");
1982
- async function materializeConversationDirectoryIdentity(root, storageSessionId) {
1983
- await revalidateConversationRootIdentity(root);
1984
- const name = getConversationDirectoryName(storageSessionId);
1985
- const candidate = join2(root.canonicalRoot, name);
1986
- let created = false;
1987
- try {
1988
- await mkdir(candidate, { mode: 448 });
1989
- created = true;
1990
- } catch (error) {
1991
- if (error.code !== "EEXIST") {
1992
- throwIdentityIoError("child", error);
1993
- }
1994
- }
1995
- const identity = await inspectConversationDirectoryIdentity(
1996
- root,
1997
- storageSessionId
1998
- );
1999
- if (!identity) {
2000
- throw new ConversationDirectoryIdentityError("child", "identity_changed");
2001
- }
2002
- return { identity, created };
2003
- }
2004
- __name(materializeConversationDirectoryIdentity, "materializeConversationDirectoryIdentity");
2005
-
2006
- // packages/cli/src/serve/conversations/conversation-workspace.ts
1780
+ import { join as join2, resolve } from "node:path";
2007
1781
  function liveIdentityError(error, exactRoot = false, creatingRoot = false) {
2008
1782
  if (!(error instanceof ConversationDirectoryIdentityError)) throw error;
2009
1783
  if (error.reason === "io_error" && error.cause !== void 0) {
@@ -2061,7 +1835,7 @@ function liveIdentityError(error, exactRoot = false, creatingRoot = false) {
2061
1835
  }
2062
1836
  __name(liveIdentityError, "liveIdentityError");
2063
1837
  function getConversationRootPath(homeDir = homedir()) {
2064
- return resolve2(homeDir, "Documents", "Qwen Code", "Conversations");
1838
+ return resolve(homeDir, "Documents", "Qwen Code", "Conversations");
2065
1839
  }
2066
1840
  __name(getConversationRootPath, "getConversationRootPath");
2067
1841
  async function revalidateConversationRoot(root) {
@@ -2245,6 +2019,171 @@ var ConversationWorkspace = class {
2245
2019
  throw error;
2246
2020
  }
2247
2021
  }
2022
+ async inspectStandaloneDeletionPaths(storageSessionId, expected) {
2023
+ const root = await this.revalidateStandaloneRoot();
2024
+ try {
2025
+ const normal = await inspectConversationDirectoryIdentity(
2026
+ root,
2027
+ storageSessionId
2028
+ );
2029
+ const staged = await inspectConversationStagedDirectoryIdentity(
2030
+ root,
2031
+ storageSessionId
2032
+ );
2033
+ if (normal && staged) {
2034
+ throw new ConversationDirectoryIdentityError(
2035
+ "child",
2036
+ "unexpected_identity"
2037
+ );
2038
+ }
2039
+ const identity = normal ?? staged;
2040
+ if (identity && expected && !isSameConversationDirectoryObject(identity, expected)) {
2041
+ throw new ConversationDirectoryIdentityError(
2042
+ "child",
2043
+ "unexpected_identity"
2044
+ );
2045
+ }
2046
+ if (normal) return { status: "normal", identity: normal };
2047
+ if (staged) return { status: "staged", identity: staged };
2048
+ return { status: "absent" };
2049
+ } catch (error) {
2050
+ if (error instanceof ConversationDirectoryIdentityError && error.scope === "child") {
2051
+ return { status: "compromised", error };
2052
+ }
2053
+ throw error;
2054
+ }
2055
+ }
2056
+ async createStandaloneDeletionExpectation(storageSessionId, recorded) {
2057
+ if (recorded.inodeVerifiable !== (recorded.inode !== 0)) {
2058
+ throw new ConversationDirectoryIdentityError(
2059
+ "child",
2060
+ "unexpected_identity"
2061
+ );
2062
+ }
2063
+ const root = await this.revalidateStandaloneRoot();
2064
+ const name = getConversationDirectoryName(storageSessionId);
2065
+ return {
2066
+ root,
2067
+ storageSessionId,
2068
+ name,
2069
+ canonicalPath: join2(root.canonicalRoot, name),
2070
+ device: recorded.device,
2071
+ inode: recorded.inode
2072
+ };
2073
+ }
2074
+ async stageStandaloneDirectory(storageSessionId, expected) {
2075
+ const inspected = await this.inspectStandaloneDeletionPaths(
2076
+ storageSessionId,
2077
+ expected
2078
+ );
2079
+ if (inspected.status === "compromised") throw inspected.error;
2080
+ if (inspected.status !== "normal") {
2081
+ throw new ConversationDirectoryIdentityError("child", "identity_changed");
2082
+ }
2083
+ const root = await this.revalidateStandaloneRoot();
2084
+ await rename(
2085
+ inspected.identity.canonicalPath,
2086
+ join2(
2087
+ root.canonicalRoot,
2088
+ getConversationStagedDirectoryName(storageSessionId)
2089
+ )
2090
+ );
2091
+ await revalidateConversationRootIdentity(root);
2092
+ const staged = await inspectConversationStagedDirectoryIdentity(
2093
+ root,
2094
+ storageSessionId
2095
+ );
2096
+ if (!staged || !isSameConversationDirectoryObject(staged, inspected.identity)) {
2097
+ throw new ConversationDirectoryIdentityError("child", "identity_changed");
2098
+ }
2099
+ await this.syncStandaloneRoot(root);
2100
+ return staged;
2101
+ }
2102
+ async restoreStagedStandaloneDirectory(storageSessionId, expected) {
2103
+ const inspected = await this.inspectStandaloneDeletionPaths(
2104
+ storageSessionId,
2105
+ expected
2106
+ );
2107
+ if (inspected.status === "compromised") throw inspected.error;
2108
+ if (inspected.status !== "staged") {
2109
+ throw new ConversationDirectoryIdentityError("child", "identity_changed");
2110
+ }
2111
+ const root = await this.revalidateStandaloneRoot();
2112
+ await rename(
2113
+ inspected.identity.canonicalPath,
2114
+ join2(root.canonicalRoot, getConversationDirectoryName(storageSessionId))
2115
+ );
2116
+ await revalidateConversationRootIdentity(root);
2117
+ const restored = await inspectConversationDirectoryIdentity(
2118
+ root,
2119
+ storageSessionId
2120
+ );
2121
+ if (!restored || !isSameConversationDirectoryObject(restored, inspected.identity)) {
2122
+ throw new ConversationDirectoryIdentityError("child", "identity_changed");
2123
+ }
2124
+ await this.syncStandaloneRoot(root);
2125
+ return restored;
2126
+ }
2127
+ async removeStagedStandaloneDirectory(storageSessionId, expected) {
2128
+ const inspected = await this.inspectStandaloneDeletionPaths(
2129
+ storageSessionId,
2130
+ expected
2131
+ );
2132
+ if (inspected.status === "compromised") throw inspected.error;
2133
+ if (inspected.status !== "staged") {
2134
+ throw new ConversationDirectoryIdentityError("child", "identity_changed");
2135
+ }
2136
+ const confirmed = await inspectConversationStagedDirectoryIdentity(
2137
+ inspected.identity.root,
2138
+ storageSessionId
2139
+ );
2140
+ if (!confirmed || !isSameConversationDirectoryObject(confirmed, inspected.identity)) {
2141
+ throw new ConversationDirectoryIdentityError("child", "identity_changed");
2142
+ }
2143
+ await rm(confirmed.canonicalPath, { recursive: true });
2144
+ await this.syncStandaloneRoot(confirmed.root);
2145
+ }
2146
+ async confirmStandaloneRootDurability(root) {
2147
+ await this.syncStandaloneRoot(root);
2148
+ }
2149
+ async syncStandaloneRoot(root) {
2150
+ await revalidateConversationRootIdentity(root);
2151
+ let handle;
2152
+ try {
2153
+ handle = await open(
2154
+ root.canonicalRoot,
2155
+ fsConstants.O_RDONLY | (process.platform === "win32" ? 0 : fsConstants.O_NOFOLLOW ?? 0)
2156
+ );
2157
+ const stats = await handle.stat();
2158
+ const inodeVerifiable = Number.isSafeInteger(stats.ino) && stats.ino > 0;
2159
+ if (!stats.isDirectory() || stats.dev !== root.device || inodeVerifiable !== root.inodeVerifiable || root.inodeVerifiable && stats.ino !== root.inode) {
2160
+ throw new ConversationDirectoryIdentityError(
2161
+ "root",
2162
+ "identity_changed"
2163
+ );
2164
+ }
2165
+ try {
2166
+ await handle.sync();
2167
+ } catch (error) {
2168
+ if (process.platform !== "win32" || !["EACCES", "EINVAL", "EPERM"].includes(
2169
+ error.code ?? ""
2170
+ )) {
2171
+ throw error;
2172
+ }
2173
+ }
2174
+ const current = await stat(root.canonicalRoot);
2175
+ const currentInodeVerifiable = Number.isSafeInteger(current.ino) && current.ino > 0;
2176
+ if (!current.isDirectory() || current.dev !== root.device || currentInodeVerifiable !== root.inodeVerifiable || root.inodeVerifiable && current.ino !== root.inode) {
2177
+ throw new ConversationDirectoryIdentityError(
2178
+ "root",
2179
+ "identity_changed"
2180
+ );
2181
+ }
2182
+ } finally {
2183
+ await handle?.close().catch(() => void 0);
2184
+ }
2185
+ await revalidateConversationRootIdentity(root);
2186
+ }
2248
2187
  };
2249
2188
 
2250
2189
  // packages/cli/src/serve/daemon-metrics-ring.ts
@@ -3105,8 +3044,8 @@ async function flushDaemonLogBounded(daemonLog, budgetMs) {
3105
3044
  await Promise.race([
3106
3045
  daemonLog.flush().catch(() => {
3107
3046
  }),
3108
- new Promise((resolve4) => {
3109
- timer = setTimeout(resolve4, budgetMs);
3047
+ new Promise((resolve3) => {
3048
+ timer = setTimeout(resolve3, budgetMs);
3110
3049
  timer.unref();
3111
3050
  })
3112
3051
  ]);
@@ -3337,7 +3276,7 @@ try {
3337
3276
  `;
3338
3277
  async function verifyWorkerTlsTrust(opts) {
3339
3278
  const timeoutMs = opts.timeoutMs ?? 5e3;
3340
- return new Promise((resolve4) => {
3279
+ return new Promise((resolve3) => {
3341
3280
  execFile(
3342
3281
  process.execPath,
3343
3282
  [
@@ -3358,10 +3297,10 @@ async function verifyWorkerTlsTrust(opts) {
3358
3297
  (error, stdout) => {
3359
3298
  try {
3360
3299
  const result = JSON.parse(stdout);
3361
- resolve4(result.ok ? void 0 : result);
3300
+ resolve3(result.ok ? void 0 : result);
3362
3301
  } catch {
3363
3302
  const failure = error;
3364
- resolve4({
3303
+ resolve3({
3365
3304
  code: failure?.code != null ? String(failure.code) : "WORKER_TLS_VERIFY_FAILED",
3366
3305
  message: failure?.message ?? "TLS verification probe failed."
3367
3306
  });
@@ -3799,12 +3738,12 @@ __name(hasRetryableChannelWorkerShutdownError, "hasRetryableChannelWorkerShutdow
3799
3738
  var channelWorkerRuntimePromise;
3800
3739
  async function loadChannelWorkerRuntime() {
3801
3740
  channelWorkerRuntimePromise ??= Promise.all([
3802
- import("./channel-worker-supervisor-YSKB5GVB.js"),
3803
- import("./pidfile-MSPQ255Y.js"),
3804
- import("./runtime-E7BSPWQP.js"),
3741
+ import("./channel-worker-supervisor-FKU7DIHJ.js"),
3742
+ import("./pidfile-QOIQZFT2.js"),
3743
+ import("./runtime-HK27GMPF.js"),
3805
3744
  import("./cli-entry-path-4VJ3Y6T2.js"),
3806
- import("./channel-worker-group-EVDC2P4K.js"),
3807
- import("./channel-worker-manager-IJJZHGEI.js")
3745
+ import("./channel-worker-group-6NA6BBZV.js"),
3746
+ import("./channel-worker-manager-NEZ2J6RK.js")
3808
3747
  ]).then(
3809
3748
  ([
3810
3749
  supervisor,
@@ -3910,7 +3849,7 @@ function shouldPreheatBridge(deps) {
3910
3849
  __name(shouldPreheatBridge, "shouldPreheatBridge");
3911
3850
  var coreRuntimePromise;
3912
3851
  function loadCoreRuntime() {
3913
- coreRuntimePromise ??= import("./core-runtime-CEJRHCRF.js");
3852
+ coreRuntimePromise ??= import("./core-runtime-AXB6SK5D.js");
3914
3853
  return coreRuntimePromise;
3915
3854
  }
3916
3855
  __name(loadCoreRuntime, "loadCoreRuntime");
@@ -3946,10 +3885,10 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
3946
3885
  var settingsRuntimePromise;
3947
3886
  function loadSettingsRuntimeModules() {
3948
3887
  settingsRuntimePromise ??= Promise.all([
3949
- import("./settings-B2PFJJN4.js"),
3950
- import("./environment-ZBJ23YVR.js"),
3951
- import("./loadedSettingsAdapter-5WZBXBCR.js"),
3952
- import("./trustedFolders-OILZCHRD.js")
3888
+ import("./settings-L6N54CU6.js"),
3889
+ import("./environment-UANTR7A4.js"),
3890
+ import("./loadedSettingsAdapter-KJCLZ3C4.js"),
3891
+ import("./trustedFolders-FATSC4YI.js")
3953
3892
  ]).then(([settings, environment, loadedSettingsAdapter, trustedFolders]) => ({
3954
3893
  settings,
3955
3894
  environment,
@@ -3962,8 +3901,8 @@ __name(loadSettingsRuntimeModules, "loadSettingsRuntimeModules");
3962
3901
  var channelWebhookConfigRuntimePromise;
3963
3902
  function loadChannelWebhookConfigRuntime() {
3964
3903
  channelWebhookConfigRuntimePromise ??= Promise.all([
3965
- import("./runtime-E7BSPWQP.js"),
3966
- import("./config-utils-PMX4QZ5Y.js")
3904
+ import("./runtime-HK27GMPF.js"),
3905
+ import("./config-utils-R6M3TA34.js")
3967
3906
  ]).then(([channelRuntime, configUtils]) => ({
3968
3907
  loadChannelsConfig: channelRuntime.loadChannelsConfig,
3969
3908
  parseChannelWebhookConfig: configUtils.parseChannelWebhookConfig
@@ -3989,18 +3928,18 @@ async function loadServeRuntimeModules() {
3989
3928
  workspaceRegistryModule,
3990
3929
  promptLedgerModule
3991
3930
  ] = await Promise.all([
3992
- import("./server-AXCN7QBJ.js"),
3993
- import("./bridge-FRNYLYY7.js"),
3994
- import("./spawnChannel-NE43EEO3.js"),
3995
- import("./process-registry-PMJOA5CO.js"),
3996
- import("./workspace-service-5ZOBMMIB.js"),
3997
- import("./types-WYCFCEHR.js"),
3998
- import("./daemon-status-provider-FTTYZEKN.js"),
3999
- import("./workspace-providers-status-OCFEWIPQ.js"),
4000
- import("./workspace-skills-status-B6NJZD4B.js"),
4001
- import("./total-session-admission-L5RPEFZ2.js"),
4002
- import("./workspace-registry-WJLZPRTG.js"),
4003
- import("./prompt-terminal-ledger-YPGMNDXT.js")
3931
+ import("./server-GO2N5DH7.js"),
3932
+ import("./bridge-ME6QXZNA.js"),
3933
+ import("./spawnChannel-ZST6XJVJ.js"),
3934
+ import("./process-registry-OAEG6WGC.js"),
3935
+ import("./workspace-service-SIN67ITC.js"),
3936
+ import("./types-HKLPXZB3.js"),
3937
+ import("./daemon-status-provider-K3SJ5C2U.js"),
3938
+ import("./workspace-providers-status-IJ4VHFMB.js"),
3939
+ import("./workspace-skills-status-F3RKCUIX.js"),
3940
+ import("./total-session-admission-PVN64JVV.js"),
3941
+ import("./workspace-registry-BTGZIMPK.js"),
3942
+ import("./prompt-terminal-ledger-FOMFTYOM.js")
4004
3943
  ]);
4005
3944
  return {
4006
3945
  createServeApp: serverModule.createServeApp,
@@ -4013,7 +3952,6 @@ async function loadServeRuntimeModules() {
4013
3952
  ProcessRegistry: processRegistryModule.ProcessRegistry,
4014
3953
  createDaemonWorkspaceService: workspaceModule.createDaemonWorkspaceService,
4015
3954
  WorkspaceSettingsPartialPersistError: workspaceTypesModule.WorkspaceSettingsPartialPersistError,
4016
- WorkspaceSkillNotToggleableError: workspaceTypesModule.WorkspaceSkillNotToggleableError,
4017
3955
  createDaemonStatusProvider: daemonStatusProviderModule.createDaemonStatusProvider,
4018
3956
  createWorkspaceProvidersStatusProvider: workspaceProvidersStatusModule.createWorkspaceProvidersStatusProvider,
4019
3957
  createWorkspaceSkillsStatusProvider: workspaceSkillsStatusModule.createWorkspaceSkillsStatusProvider,
@@ -4045,7 +3983,7 @@ function sessionIdleTimeoutMs(value) {
4045
3983
  return value !== void 0 ? channelIdleTimeoutMs(value) : DEFAULT_SESSION_IDLE_TIMEOUT_MS;
4046
3984
  }
4047
3985
  __name(sessionIdleTimeoutMs, "sessionIdleTimeoutMs");
4048
- function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled, sessionArtifactsPersistenceAvailable, env) {
3986
+ function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled, sessionArtifactsPersistenceAvailable, currentSessionSchedulingAvailable, env) {
4049
3987
  return getAdvertisedServeFeatures(void 0, {
4050
3988
  requireAuth: opts.requireAuth === true,
4051
3989
  mcpPoolActive: opts.mcpPoolActive !== false,
@@ -4057,6 +3995,7 @@ function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled, s
4057
3995
  sessionShellCommandEnabled,
4058
3996
  sessionArtifactsPersistenceAvailable,
4059
3997
  sessionGenerationAvailable: true,
3998
+ currentSessionSchedulingAvailable,
4060
3999
  workspaceGenerationAvailable: true,
4061
4000
  rateLimit: opts.rateLimit === true,
4062
4001
  reloadAvailable: true,
@@ -4083,6 +4022,7 @@ function createBootstrapCapabilities(input) {
4083
4022
  input.opts,
4084
4023
  input.sessionShellCommandEnabled,
4085
4024
  input.sessionArtifactsPersistenceAvailable,
4025
+ input.currentSessionSchedulingAvailable,
4086
4026
  input.env
4087
4027
  ),
4088
4028
  modelServices: [],
@@ -4198,12 +4138,12 @@ async function waitForRuntimeStartingForShutdown(runtimeStarting, daemonLog, tim
4198
4138
  let timer;
4199
4139
  await Promise.race([
4200
4140
  runtimeStarting,
4201
- new Promise((resolve4) => {
4141
+ new Promise((resolve3) => {
4202
4142
  timer = setTimeout(() => {
4203
4143
  daemonLog.warn(
4204
4144
  `${timeoutMs}ms runtime-startup wait reached during shutdown; continuing listener close`
4205
4145
  );
4206
- resolve4();
4146
+ resolve3();
4207
4147
  }, timeoutMs);
4208
4148
  timer.unref();
4209
4149
  })
@@ -4242,6 +4182,7 @@ function createBootstrapServeApp(input) {
4242
4182
  qwenCodeVersion,
4243
4183
  sessionShellCommandEnabled,
4244
4184
  sessionArtifactsPersistenceAvailable,
4185
+ currentSessionSchedulingAvailable,
4245
4186
  permissionPolicy,
4246
4187
  multiWorkspaceCapabilitiesRequireRuntime,
4247
4188
  getRuntimeError,
@@ -4301,6 +4242,7 @@ function createBootstrapServeApp(input) {
4301
4242
  qwenCodeVersion,
4302
4243
  sessionShellCommandEnabled,
4303
4244
  sessionArtifactsPersistenceAvailable,
4245
+ currentSessionSchedulingAvailable,
4304
4246
  permissionPolicy,
4305
4247
  env: process.env
4306
4248
  })
@@ -4418,6 +4360,7 @@ function createBootstrapServeApp(input) {
4418
4360
  opts,
4419
4361
  sessionShellCommandEnabled,
4420
4362
  sessionArtifactsPersistenceAvailable,
4363
+ currentSessionSchedulingAvailable,
4421
4364
  process.env
4422
4365
  )
4423
4366
  },
@@ -4614,8 +4557,8 @@ function matchesWebhookSecret(candidate, expected) {
4614
4557
  if (typeof candidate !== "string" || typeof expected !== "string" || expected.length === 0) {
4615
4558
  return false;
4616
4559
  }
4617
- const expectedDigest = createHash3("sha256").update(expected).digest();
4618
- const candidateDigest = createHash3("sha256").update(candidate).digest();
4560
+ const expectedDigest = createHash2("sha256").update(expected).digest();
4561
+ const candidateDigest = createHash2("sha256").update(candidate).digest();
4619
4562
  return timingSafeEqual(expectedDigest, candidateDigest);
4620
4563
  }
4621
4564
  __name(matchesWebhookSecret, "matchesWebhookSecret");
@@ -5041,7 +4984,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5041
4984
  }
5042
4985
  let workspaceRegistrationStore = deps.workspaceRegistrationStore;
5043
4986
  if (workspaceRegistrationStore === void 0 && process.env["QWEN_SERVE_NO_PERSISTENT_REGISTRATION"] !== "1") {
5044
- const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-CMMX7EPX.js");
4987
+ const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-SMJWI2AI.js");
5045
4988
  workspaceRegistrationStore = new WorkspaceRegistrationStore(boundWorkspace);
5046
4989
  }
5047
4990
  if (workspaceRegistrationStore) {
@@ -5325,7 +5268,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5325
5268
  "qwen serve: required external tool guard handshake succeeded."
5326
5269
  );
5327
5270
  }
5328
- const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-L6ZUFKF7.js");
5271
+ const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-IVAJJWYK.js");
5329
5272
  const daemonToolGuardHandler = createDaemonToolGuard(
5330
5273
  externalToolGuardHandler
5331
5274
  );
@@ -5371,8 +5314,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5371
5314
  let resolveServeAppStartup;
5372
5315
  let rejectServeAppStartup;
5373
5316
  let serveAppStartupSettled = false;
5374
- const serveAppStartupReady = new Promise((resolve4, reject) => {
5375
- resolveServeAppStartup = resolve4;
5317
+ const serveAppStartupReady = new Promise((resolve3, reject) => {
5318
+ resolveServeAppStartup = resolve3;
5376
5319
  rejectServeAppStartup = reject;
5377
5320
  });
5378
5321
  void serveAppStartupReady.catch(() => void 0);
@@ -5394,6 +5337,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5394
5337
  const internalRuntimeBridgesForCleanup = [];
5395
5338
  let daemonEventLoopMonitor;
5396
5339
  let daemonMetricsSampler;
5340
+ let sessionPrRefreshTimer;
5341
+ let sessionPrRefreshGeneration = 0;
5397
5342
  let runtimeStartupError;
5398
5343
  let runtimeStarting;
5399
5344
  let markRuntimeReady;
@@ -5402,8 +5347,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5402
5347
  let startRuntimeAfterHealth;
5403
5348
  let startRuntimeForRequest;
5404
5349
  const deferRuntimeUntilFirstHealth = deps.resolveOnListen === true && deps.deferRuntimeUntilFirstHealth === true;
5405
- const runtimeReady = new Promise((resolve4, reject) => {
5406
- markRuntimeReady = resolve4;
5350
+ const runtimeReady = new Promise((resolve3, reject) => {
5351
+ markRuntimeReady = resolve3;
5407
5352
  markRuntimeFailed = reject;
5408
5353
  });
5409
5354
  void runtimeReady.catch(() => {
@@ -5413,6 +5358,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5413
5358
  daemonEventLoopMonitor = void 0;
5414
5359
  const metricsSampler = daemonMetricsSampler;
5415
5360
  daemonMetricsSampler = void 0;
5361
+ const prRefreshTimer = sessionPrRefreshTimer;
5362
+ sessionPrRefreshTimer = void 0;
5363
+ sessionPrRefreshGeneration += 1;
5364
+ prRefreshTimer?.dispose();
5416
5365
  try {
5417
5366
  eventLoopMonitor?.dispose();
5418
5367
  } catch (err) {
@@ -5597,6 +5546,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5597
5546
  stopSafely("scheduled-task keepalive", locals.stopScheduledTaskKeepalive);
5598
5547
  stopSafely("workspace git state", locals.stopWorkspaceGitState);
5599
5548
  stopSafely("Live Host coordinator", locals.stopLiveCoordinator);
5549
+ stopSafely("web terminal registry", locals.stopWebTerminalRegistry);
5600
5550
  stopTrustPolicyMonitor(app2);
5601
5551
  for (const stop of locals.subSessionStoppers ?? []) {
5602
5552
  stopSafely("sub-session launcher", stop);
@@ -5664,7 +5614,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
5664
5614
  loadCoreRuntime(),
5665
5615
  loadSettingsRuntimeModules(),
5666
5616
  cliVersionPromise,
5667
- import("./daemon-trust-policy-WMGFPA3Z.js")
5617
+ import("./daemon-trust-policy-DOR3YG62.js")
5668
5618
  ]);
5669
5619
  cliVersion = resolvedCliVersion;
5670
5620
  settingsRuntime.environment.preResolveHomeEnvOverrides();
@@ -6040,18 +5990,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6040
5990
  resolveSkillSettings,
6041
5991
  skillSettingStrings,
6042
5992
  updateWorkspaceSkillSettingLists
6043
- } = await import("./skill-settings-SKMN5YXC.js");
5993
+ } = await import("./skill-settings-ZL4JY5UE.js");
6044
5994
  const fresh = loadSettingsForPersistence(workspace);
6045
5995
  const normalizedName = skillName.trim().toLowerCase();
6046
5996
  const resolved = resolveSkillSettings(fresh);
6047
- const disablement = resolved.disablements.get(normalizedName);
6048
- if (disablement?.reason === "hard" && disablement.lockedScope) {
6049
- throw new runtime.WorkspaceSkillNotToggleableError(
6050
- skillName,
6051
- "locked",
6052
- disablement.lockedScope
6053
- );
6054
- }
6055
5997
  const workspaceDisabled = skillSettingStrings(
6056
5998
  fresh,
6057
5999
  WORKSPACE_SETTING_SCOPE,
@@ -6105,7 +6047,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6105
6047
  resolveSkillSettings,
6106
6048
  skillSettingStrings,
6107
6049
  updateWorkspaceSkillSettingLists
6108
- } = await import("./skill-settings-SKMN5YXC.js");
6050
+ } = await import("./skill-settings-ZL4JY5UE.js");
6109
6051
  const fresh = loadSettingsForPersistence(workspace);
6110
6052
  const resolved = resolveSkillSettings(fresh);
6111
6053
  const initialDisabled = skillSettingStrings(
@@ -6122,18 +6064,6 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6122
6064
  const outcomes = [];
6123
6065
  for (const skillName of skillNames) {
6124
6066
  const normalizedName = skillName.trim().toLowerCase();
6125
- const disablement = resolved.disablements.get(normalizedName);
6126
- if (disablement?.reason === "hard" && disablement.lockedScope) {
6127
- outcomes.push({
6128
- skillName,
6129
- error: new runtime.WorkspaceSkillNotToggleableError(
6130
- skillName,
6131
- "locked",
6132
- disablement.lockedScope
6133
- )
6134
- });
6135
- continue;
6136
- }
6137
6067
  const updated = updateWorkspaceSkillSettingLists(
6138
6068
  next,
6139
6069
  skillName,
@@ -6210,7 +6140,43 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6210
6140
  );
6211
6141
  }
6212
6142
  }), "persistSettingsFn");
6213
- const { createSubSessionLauncher } = await import("./create-sub-session-DFZVIG56.js");
6143
+ const [{ createSubSessionLauncher }, scheduledTaskRoutes] = await Promise.all([
6144
+ import("./create-sub-session-4QNE64MR.js"),
6145
+ import("./scheduled-tasks-MN2ZZ5P6.js")
6146
+ ]);
6147
+ const createCurrentSessionScheduledTaskHandler = /* @__PURE__ */ __name((workspaceCwd, runtimeBaseDir, getBridge, assertGenerationOpen) => async ({
6148
+ callerSessionId,
6149
+ cron,
6150
+ prompt,
6151
+ recurring,
6152
+ assertCallerPromptActive
6153
+ }) => {
6154
+ const targetBridge = getBridge();
6155
+ if (!targetBridge) {
6156
+ throw new Error(
6157
+ "Current-session scheduling is unavailable while the workspace runtime is starting."
6158
+ );
6159
+ }
6160
+ const task = await scheduledTaskRoutes.createScheduledTaskWithExistingSession(
6161
+ {
6162
+ workspaceCwd,
6163
+ runtimeBaseDir,
6164
+ bridge: targetBridge,
6165
+ assertGenerationOpen,
6166
+ resolveLiveSessionOwner: /* @__PURE__ */ __name((sessionId) => workspaceRegistryForPersistence.current === void 0 ? { kind: "unavailable" } : workspaceRegistryForPersistence.current.resolveLiveSessionOwner(
6167
+ sessionId
6168
+ ), "resolveLiveSessionOwner")
6169
+ },
6170
+ {
6171
+ sessionId: callerSessionId,
6172
+ cron,
6173
+ prompt,
6174
+ recurring
6175
+ },
6176
+ { source: "cron-tool", assertCallerPromptActive }
6177
+ );
6178
+ return { id: task.id, cron: task.cron };
6179
+ }, "createCurrentSessionScheduledTaskHandler");
6214
6180
  const subSessionLauncher = createSubSessionLauncher({
6215
6181
  getBridge: /* @__PURE__ */ __name(() => bridgeRef, "getBridge"),
6216
6182
  boundWorkspace,
@@ -6227,6 +6193,12 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6227
6193
  // connection that hosts a named client MCP server (#5626).
6228
6194
  clientMcpSender: clientMcpSenderRegistry.lookup,
6229
6195
  onCreateSubSession: subSessionLauncher.launch,
6196
+ onCreateCurrentSessionScheduledTask: createCurrentSessionScheduledTaskHandler(
6197
+ boundWorkspace,
6198
+ primarySessionRuntimeBaseDir,
6199
+ () => bridgeRef,
6200
+ () => primaryGenerationGuard.assertOpen()
6201
+ ),
6230
6202
  onChannelDelivery: createBoundChannelDeliveryHandler(
6231
6203
  boundWorkspace,
6232
6204
  () => channelWorkerManager,
@@ -6572,6 +6544,12 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6572
6544
  ),
6573
6545
  clientMcpSender: secondaryClientMcpSenderRegistry.lookup,
6574
6546
  onCreateSubSession: secondarySubSessionLauncher.launch,
6547
+ onCreateCurrentSessionScheduledTask: createCurrentSessionScheduledTaskHandler(
6548
+ workspaceInput.cwd,
6549
+ secondaryEnv.sessionRuntimeBaseDir,
6550
+ () => secondaryBridgeRef,
6551
+ () => secondaryGenerationGuard.assertOpen()
6552
+ ),
6575
6553
  onChannelDelivery: createBoundChannelDeliveryHandler(
6576
6554
  workspaceInput.cwd,
6577
6555
  () => channelWorkerManager,
@@ -6860,6 +6838,22 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6860
6838
  metricsLoopDelay.disable();
6861
6839
  }
6862
6840
  };
6841
+ sessionPrRefreshTimer?.dispose();
6842
+ const refreshGeneration = ++sessionPrRefreshGeneration;
6843
+ void import("./session-pr-refresh-I3UBWMVP.js").then((mod) => {
6844
+ if (refreshGeneration !== sessionPrRefreshGeneration) return;
6845
+ sessionPrRefreshTimer = mod.startSessionPrRefreshTimer({
6846
+ workspaceRegistry,
6847
+ // The coordinator lives on the serve app (createServeApp below),
6848
+ // which is built after this timer starts; read it per tick like
6849
+ // the metrics sampler reads `acpHandle`.
6850
+ getArchiveCoordinator: /* @__PURE__ */ __name(() => app2.locals.sessionArchiveCoordinator, "getArchiveCoordinator")
6851
+ });
6852
+ }).catch((error) => {
6853
+ daemonLog.warn(
6854
+ `session-pr-refresh load failed: ${error instanceof Error ? error.message : String(error)}`
6855
+ );
6856
+ });
6863
6857
  const createDynamicWorkspaceRuntime = /* @__PURE__ */ __name(async (cwd, buildOptions) => {
6864
6858
  const provenance = buildOptions?.provenance ?? "existing";
6865
6859
  if (provenance === "managed-scratch" && (!managedScratchRoot || !isManagedScratchChild(cwd, managedScratchRoot.canonicalRoot))) {
@@ -6931,6 +6925,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6931
6925
  boundWorkspace: cwd,
6932
6926
  ...provenance === "live-conversation" ? {
6933
6927
  notifySentCompletion: true,
6928
+ getStandaloneSessionService: /* @__PURE__ */ __name(() => (runtimeApp ?? runtimeAppForCleanup)?.locals?.["standaloneSessionService"], "getStandaloneSessionService"),
6934
6929
  isolatedWorkspace: {
6935
6930
  materializeDirectory: /* @__PURE__ */ __name((sessionId) => liveConversationWorkspace.materializeConversationDirectory(
6936
6931
  sessionId
@@ -6953,6 +6948,12 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
6953
6948
  ),
6954
6949
  clientMcpSender: wsClientMcpRegistry.lookup,
6955
6950
  onCreateSubSession: wsSubSessionLauncher.launch,
6951
+ onCreateCurrentSessionScheduledTask: createCurrentSessionScheduledTaskHandler(
6952
+ cwd,
6953
+ wsEnv.sessionRuntimeBaseDir,
6954
+ () => wsBridgeRef,
6955
+ () => generationGuard.assertOpen()
6956
+ ),
6956
6957
  onChannelDelivery: createBoundChannelDeliveryHandler(
6957
6958
  cwd,
6958
6959
  () => channelWorkerManager,
@@ -7350,6 +7351,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7350
7351
  const app3 = serveAppForRuntimeLifecycle.current ?? runtimeApp ?? runtimeAppForCleanup;
7351
7352
  const stopWorkspaceGitStateForWorkspace = app3?.locals?.["stopWorkspaceGitStateForWorkspace"];
7352
7353
  const stopScheduledTaskKeepaliveForWorkspace = app3?.locals?.["stopScheduledTaskKeepaliveForWorkspace"];
7354
+ const releaseWebTerminalsForWorkspace = app3?.locals?.["releaseWebTerminalsForWorkspace"];
7353
7355
  try {
7354
7356
  stopWorkspaceGitStateForWorkspace?.(runtimeToDrain.workspaceCwd);
7355
7357
  } catch (err) {
@@ -7368,6 +7370,14 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7368
7370
  err instanceof Error ? err : null
7369
7371
  );
7370
7372
  }
7373
+ try {
7374
+ releaseWebTerminalsForWorkspace?.(runtimeToDrain.workspaceCwd);
7375
+ } catch (err) {
7376
+ daemonLog.error(
7377
+ "workspace web-terminal cleanup error",
7378
+ err instanceof Error ? err : null
7379
+ );
7380
+ }
7371
7381
  }
7372
7382
  let bridgeStopped = false;
7373
7383
  try {
@@ -7439,8 +7449,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7439
7449
  { createChannelManagementService },
7440
7450
  { WorkspaceChannelSettingsStore }
7441
7451
  ] = await Promise.all([
7442
- import("./channel-management-service-HXXS3HOZ.js"),
7443
- import("./channel-settings-store-IV4KDL7N.js")
7452
+ import("./channel-management-service-HQ6KDS7C.js"),
7453
+ import("./channel-settings-store-PEOI7XCG.js")
7444
7454
  ]);
7445
7455
  return createChannelManagementService({
7446
7456
  workspaceCwd: targetRuntime.workspaceCwd,
@@ -7520,6 +7530,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7520
7530
  // (keepalive) and reloads them on boot (rehydration). Off by default so
7521
7531
  // direct createServeApp embeds/tests don't spawn sessions.
7522
7532
  manageScheduledTaskSessions: true,
7533
+ currentSessionSchedulingAvailable: deps.bridge === void 0,
7523
7534
  fsFactory: routeFsFactory,
7524
7535
  primaryWorkspaceTrusted: trustedWorkspace,
7525
7536
  primaryRuntimeEnv,
@@ -7644,8 +7655,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7644
7655
  { createWorkspaceTrustReconciler },
7645
7656
  { createDaemonTrustPolicyMonitor }
7646
7657
  ] = await Promise.all([
7647
- import("./workspace-trust-reconciler-PJDQUTJL.js"),
7648
- import("./daemon-trust-policy-monitor-2G3EKQEU.js")
7658
+ import("./workspace-trust-reconciler-PLIDLJZX.js"),
7659
+ import("./daemon-trust-policy-monitor-KGGROSIV.js")
7649
7660
  ]);
7650
7661
  const materializationFor = /* @__PURE__ */ __name((entry, snapshot, decision) => {
7651
7662
  const boundWorkspaces2 = entry.primary && decision.targetTrusted ? runtime.resolveBoundWorkspacesFromIdeEnv(
@@ -7740,7 +7751,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7740
7751
  handle?.disposeWorkspace(runtimeToDispose.workspaceId);
7741
7752
  const deadline = Date.now() + 1e3;
7742
7753
  while ((handle?.getWorkspaceActivity(runtimeToDispose.workspaceId).memoryTasks ?? 0) > 0 && Date.now() < deadline) {
7743
- await new Promise((resolve4) => setTimeout(resolve4, 25));
7754
+ await new Promise((resolve3) => setTimeout(resolve3, 25));
7744
7755
  }
7745
7756
  if ((handle?.getWorkspaceActivity(runtimeToDispose.workspaceId).memoryTasks ?? 0) > 0) {
7746
7757
  throw new Error(
@@ -7817,6 +7828,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7817
7828
  qwenCodeVersion: cliVersion,
7818
7829
  sessionShellCommandEnabled,
7819
7830
  sessionArtifactsPersistenceAvailable,
7831
+ currentSessionSchedulingAvailable: false,
7820
7832
  permissionPolicy,
7821
7833
  multiWorkspaceCapabilitiesRequireRuntime: workspaceInputs.length > 1,
7822
7834
  getRuntimeError: /* @__PURE__ */ __name(() => runtimeStartupError, "getRuntimeError"),
@@ -7840,7 +7852,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7840
7852
  // through (and start the runtime) exactly like the warm app would.
7841
7853
  // Dynamic import keeps web-shell-static out of the serve fast-path
7842
7854
  // static closure (see the import-boundary guards in fast-path.test.ts).
7843
- isPreAuthRequest: webShellMounted ? (req) => import("./web-shell-static-A6QMUNNV.js").then(
7855
+ isPreAuthRequest: webShellMounted ? (req) => import("./web-shell-static-HNB4FDOE.js").then(
7844
7856
  (webShellStatic) => webShellStatic.isPreAuthWebShellRequest(req)
7845
7857
  ) : void 0
7846
7858
  });
@@ -7860,7 +7872,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7860
7872
  );
7861
7873
  }
7862
7874
  const channelValidationSettingsRuntime = opts.channelSelection ? await loadSettingsRuntimeModules() : void 0;
7863
- const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-WMGFPA3Z.js") : void 0;
7875
+ const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-DOR3YG62.js") : void 0;
7864
7876
  const channelValidationTrustSnapshot = channelValidationTrustPolicy ? await channelValidationTrustPolicy.readDaemonTrustPolicySnapshot() : void 0;
7865
7877
  const resolveChannelWorkspaceGroupsAtListen = /* @__PURE__ */ __name(() => {
7866
7878
  if (!opts.channelSelection || !channelValidationSettingsRuntime || !channelRuntime) {
@@ -7966,7 +7978,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
7966
7978
  if (opts.channelSelection) {
7967
7979
  reserveChannelServicePidfile(opts.channelSelection);
7968
7980
  }
7969
- return await new Promise((resolve4, reject) => {
7981
+ return await new Promise((resolve3, reject) => {
7970
7982
  let closeHost;
7971
7983
  const onListening = /* @__PURE__ */ __name((error) => {
7972
7984
  if (error) return;
@@ -8748,6 +8760,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8748
8760
  if (!preserveSignalHandlers) {
8749
8761
  process.removeListener("SIGINT", onSignal);
8750
8762
  process.removeListener("SIGTERM", onSignal);
8763
+ process.removeListener("SIGHUP", onSignal);
8751
8764
  }
8752
8765
  process.removeListener(
8753
8766
  "uncaughtExceptionMonitor",
@@ -8967,6 +8980,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8967
8980
  }
8968
8981
  process.on("SIGINT", onSignal);
8969
8982
  process.on("SIGTERM", onSignal);
8983
+ process.on("SIGHUP", onSignal);
8970
8984
  process.on("uncaughtExceptionMonitor", onUncaughtExceptionMonitor);
8971
8985
  server.on("error", (err) => {
8972
8986
  daemonLog.error("server error", err instanceof Error ? err : null);
@@ -8997,7 +9011,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
8997
9011
  loggerPublished = true;
8998
9012
  loggerLifecycle.published();
8999
9013
  void (liveDiscoveryPublish ?? Promise.resolve()).then(
9000
- () => resolve4(handle)
9014
+ () => resolve3(handle)
9001
9015
  );
9002
9016
  } else {
9003
9017
  void runtimeReady.then(
@@ -9005,7 +9019,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
9005
9019
  await liveDiscoveryPublish;
9006
9020
  loggerPublished = true;
9007
9021
  loggerLifecycle.published();
9008
- resolve4(handle);
9022
+ resolve3(handle);
9009
9023
  },
9010
9024
  (err) => {
9011
9025
  void handle.close().then(
@@ -9054,10 +9068,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
9054
9068
  drainHost: /* @__PURE__ */ __name(() => {
9055
9069
  if (closeHost) return closeHost();
9056
9070
  if (!server.listening) return Promise.resolve();
9057
- return new Promise((resolve5, rejectClose) => {
9071
+ return new Promise((resolve4, rejectClose) => {
9058
9072
  server.close((error) => {
9059
9073
  if (error) rejectClose(error);
9060
- else resolve5();
9074
+ else resolve4();
9061
9075
  });
9062
9076
  });
9063
9077
  }, "drainHost")