@qwen-code/qwen-code 0.21.2 → 0.21.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 (351) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +41 -38
  2. package/bundled/qc-helper/docs/features/channels/github.md +7 -0
  3. package/bundled/qc-helper/docs/features/channels/gitlab.md +6 -0
  4. package/bundled/qc-helper/docs/features/code-review.md +78 -23
  5. package/bundled/qc-helper/docs/features/commands.md +2 -0
  6. package/bundled/qc-helper/docs/features/hooks.md +115 -18
  7. package/bundled/qc-helper/docs/features/memory.md +27 -0
  8. package/bundled/qc-helper/docs/features/skills.md +46 -1
  9. package/bundled/qc-helper/docs/features/sub-agents.md +42 -9
  10. package/bundled/qc-helper/docs/features/tool-use-summaries.md +7 -7
  11. package/bundled/qc-helper/docs/qwen-serve.md +21 -1
  12. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +13 -13
  13. package/bundled/qc-helper/docs/support/troubleshooting.md +6 -1
  14. package/bundled/review/DESIGN.md +167 -32
  15. package/bundled/review/SKILL.md +156 -32
  16. package/chunks/{MaxSizedBox-TQBQ247P.js → MaxSizedBox-OJR636GP.js} +40 -38
  17. package/chunks/{StandaloneSessionPicker-2HPTKCLX.js → StandaloneSessionPicker-AMMBF5UY.js} +62 -59
  18. package/chunks/{acp-startup-profiler-2C4A5ZTJ.js → acp-startup-profiler-3RICG2YW.js} +2 -2
  19. package/chunks/{acpAgent-PS6EDGH3.js → acpAgent-M57LVIQA.js} +662 -560
  20. package/chunks/{agent-VDOUB35F.js → agent-PE37ARLM.js} +36 -34
  21. package/chunks/{agent-headless-EO53EFS2.js → agent-headless-45ASME4R.js} +36 -34
  22. package/chunks/{anthropicContentGenerator-OFHSZJBF.js → anthropicContentGenerator-WCBYB6JG.js} +337 -27
  23. package/chunks/{artifact-tool-RDN2W7ND.js → artifact-tool-TBOYEKTY.js} +2 -2
  24. package/chunks/{askUserQuestion-OZERWH5R.js → askUserQuestion-23Y5WZFJ.js} +2 -2
  25. package/chunks/{bridge-W7AZSRZQ.js → bridge-K3ZRPO4D.js} +42 -40
  26. package/chunks/{ca-6W3SK7OQ.js → ca-4OJN75WT.js} +46 -5
  27. package/chunks/{channel-management-service-5S7YCWX5.js → channel-management-service-IXJ2MZTS.js} +7 -7
  28. package/chunks/{channel-settings-store-JFVRSNER.js → channel-settings-store-PEAR3IME.js} +43 -41
  29. package/chunks/{channel-worker-group-OVWGYMZS.js → channel-worker-group-NDG4WOOZ.js} +8 -8
  30. package/chunks/{channel-worker-manager-H55GKOQA.js → channel-worker-manager-ZCW6UW34.js} +8 -8
  31. package/chunks/{channel-worker-supervisor-CABBXYHK.js → channel-worker-supervisor-ATGFTZRN.js} +4 -4
  32. package/chunks/{chunk-W3UKBMSI.js → chunk-22YFMJBW.js} +84 -8
  33. package/chunks/{chunk-6MPDY6ZG.js → chunk-24ER7UV4.js} +1 -1
  34. package/chunks/{chunk-QDK4F2N5.js → chunk-2DNKEBXY.js} +1 -1
  35. package/chunks/{chunk-D6MDRSZ6.js → chunk-2LZCLQIS.js} +22 -11
  36. package/chunks/{chunk-JYBU6YUE.js → chunk-2M5N3DHY.js} +1 -1
  37. package/chunks/{chunk-KR32NIAN.js → chunk-2MI7ZTRT.js} +10 -10
  38. package/chunks/{chunk-LHKCY7DY.js → chunk-2UISUFHQ.js} +3 -3
  39. package/chunks/{chunk-JXVC2PL3.js → chunk-33FNCQSY.js} +2 -2
  40. package/chunks/{chunk-NBD76HUW.js → chunk-3LGZEYOF.js} +2 -2
  41. package/chunks/{chunk-CO2U743O.js → chunk-3MWNROHB.js} +4 -4
  42. package/chunks/{chunk-E2BHWIDT.js → chunk-3RXUYQJI.js} +6 -2
  43. package/chunks/{chunk-E5Z2AVNV.js → chunk-3SH53ANB.js} +0 -11
  44. package/chunks/{chunk-LYI2PZDK.js → chunk-3XF4WT3B.js} +2 -2
  45. package/chunks/{chunk-N4ACHWNH.js → chunk-432XCUHF.js} +1 -1
  46. package/chunks/{chunk-FNDXMN7I.js → chunk-4AGGSHCH.js} +774 -205
  47. package/chunks/{chunk-DUNI4EBW.js → chunk-4K3RV3OA.js} +80 -50
  48. package/chunks/{chunk-L2E5GFAG.js → chunk-4LKVQFHM.js} +2 -2
  49. package/chunks/{chunk-YDLJGZHL.js → chunk-4NFY2S7N.js} +0 -33
  50. package/chunks/{chunk-JLZ3RBQG.js → chunk-5JPVOYWA.js} +144 -11
  51. package/chunks/{chunk-6TAASXWL.js → chunk-5VYFXHY2.js} +3 -3
  52. package/chunks/{chunk-EU5TBFJI.js → chunk-6NE5NTHJ.js} +2 -2
  53. package/chunks/{chunk-XQK4XXTN.js → chunk-6O5DVH27.js} +1 -1
  54. package/chunks/{chunk-2RFKHEXL.js → chunk-6PLDPT2C.js} +1 -1
  55. package/chunks/{chunk-3APUUXRF.js → chunk-A5YZ3FA2.js} +2 -1
  56. package/chunks/{chunk-SHN4KHDK.js → chunk-A6SX5TAH.js} +3 -3
  57. package/chunks/{chunk-SZ3KHTDR.js → chunk-AKA24BGO.js} +1 -1
  58. package/chunks/{chunk-Q3T5KA2V.js → chunk-BFHXDAR7.js} +1 -1
  59. package/chunks/{chunk-L55JWS76.js → chunk-BGXZBI5B.js} +1 -1
  60. package/chunks/{chunk-P5VC5USY.js → chunk-BKGA75MU.js} +1 -1
  61. package/chunks/{chunk-2KKCCLPT.js → chunk-BKXTHMOZ.js} +1 -1
  62. package/chunks/{chunk-V4XNUDPE.js → chunk-BSKUTHLO.js} +15 -7
  63. package/chunks/{chunk-MM7TH7ZM.js → chunk-CFDR3GNL.js} +18 -3
  64. package/chunks/{chunk-E2FN6SM7.js → chunk-CIUUYB23.js} +5 -5
  65. package/chunks/{chunk-A7Y5H4TX.js → chunk-D2GPKXCQ.js} +7 -7
  66. package/chunks/{chunk-JCJ7LKNA.js → chunk-DIEFUBV6.js} +1644 -1570
  67. package/chunks/{chunk-GL4JOZXU.js → chunk-DSGJLHM3.js} +4 -4
  68. package/chunks/{chunk-675H6PLP.js → chunk-DYA25Y7U.js} +1 -1
  69. package/chunks/{chunk-3I6DUGQD.js → chunk-E4WHKETF.js} +32 -4
  70. package/chunks/{chunk-CU47KXB5.js → chunk-EGYJRIDF.js} +6 -6
  71. package/chunks/{chunk-6CQWRWUC.js → chunk-EIMKVOSF.js} +3 -3
  72. package/chunks/{chunk-QTERJVPZ.js → chunk-EKTCKZV5.js} +1 -0
  73. package/chunks/{chunk-NHFEMWAZ.js → chunk-FF75UUB2.js} +1 -1
  74. package/chunks/{chunk-L32VV3ZJ.js → chunk-FG63DZQA.js} +12 -12
  75. package/chunks/{chunk-FCYYAB4S.js → chunk-FHPKHXHT.js} +3 -3
  76. package/chunks/{chunk-GJ2GBPBD.js → chunk-FXVHVCNA.js} +5 -5
  77. package/chunks/{chunk-56Z7QEAQ.js → chunk-GMSBXEH4.js} +16 -16
  78. package/chunks/chunk-GOFAQQZA.js +132 -0
  79. package/chunks/{chunk-YUFIEIWC.js → chunk-GTM6IHBB.js} +2 -2
  80. package/chunks/{chunk-HIVKI6O6.js → chunk-H35Q5CEG.js} +9 -7
  81. package/chunks/{chunk-FJ5WUMUQ.js → chunk-H36SETQS.js} +1 -1
  82. package/chunks/{chunk-AUOULH6Q.js → chunk-H6FIBBXK.js} +1610 -2196
  83. package/chunks/{chunk-VEMNQMHA.js → chunk-H6ZYP74A.js} +5 -13
  84. package/chunks/{chunk-TTJZAIFP.js → chunk-HEBW74ZW.js} +3 -3
  85. package/chunks/{chunk-6FMJLI5M.js → chunk-HFVW54NL.js} +41 -6
  86. package/chunks/{chunk-44F4LBWZ.js → chunk-HIXVWF7I.js} +56 -18
  87. package/chunks/{chunk-EQNUDTL6.js → chunk-HUIQ4FYC.js} +2 -2
  88. package/chunks/{chunk-5NNHICSA.js → chunk-I7JDGNG6.js} +3 -3
  89. package/chunks/{chunk-PVNQRENX.js → chunk-IF6K42YJ.js} +1 -1
  90. package/chunks/{chunk-PJOHNFIY.js → chunk-IWGTGH4G.js} +5 -5
  91. package/chunks/{chunk-B4AJNNOL.js → chunk-J26HHFI5.js} +1 -1
  92. package/chunks/{chunk-CNTR4GR6.js → chunk-JELIWHXD.js} +1 -1
  93. package/chunks/{chunk-V25K5ID7.js → chunk-K2J5JZ6B.js} +1 -1
  94. package/chunks/{chunk-IGTHU3T4.js → chunk-KKN2IE7Q.js} +1 -1
  95. package/chunks/{chunk-TZTAV5RH.js → chunk-KVUBYJDM.js} +2 -2
  96. package/chunks/{chunk-3F2WDAV6.js → chunk-KXWERR6P.js} +14 -14
  97. package/chunks/{chunk-JJPKFJBT.js → chunk-L7FTDKCD.js} +3 -3
  98. package/chunks/chunk-LBOVL47Y.js +29 -0
  99. package/chunks/{chunk-FS674JW4.js → chunk-LBWNSLJK.js} +3 -3
  100. package/chunks/{chunk-I5BT7ADR.js → chunk-LGT3YMLN.js} +4 -4
  101. package/chunks/{chunk-UV6KF7T3.js → chunk-LZV2BZPL.js} +3 -3
  102. package/chunks/{chunk-P755N4CS.js → chunk-M5LIY7Y6.js} +6 -6
  103. package/chunks/{chunk-YGE3IXJP.js → chunk-M744OFVE.js} +1 -1
  104. package/chunks/{chunk-NTDH4IML.js → chunk-MCXMWLFT.js} +7 -7
  105. package/chunks/chunk-MISUEWB4.js +8749 -0
  106. package/chunks/{chunk-TEGJSJDF.js → chunk-MOHAWIAW.js} +2 -2
  107. package/chunks/{chunk-KXDONCPU.js → chunk-MTR4JWQJ.js} +4 -4
  108. package/chunks/{chunk-RSVPYAGK.js → chunk-MUEJ4R3E.js} +5 -5
  109. package/chunks/{chunk-PCK4B6LR.js → chunk-N42C2FU3.js} +1 -1
  110. package/chunks/{chunk-WWCMSZII.js → chunk-NW57GHNL.js} +71 -7
  111. package/chunks/{chunk-PQNHRFJC.js → chunk-NYX53SV4.js} +0 -2
  112. package/chunks/{chunk-QARJNL2V.js → chunk-O2ZYHG33.js} +5 -4
  113. package/chunks/{chunk-V7RNNPGC.js → chunk-P5Y23G2L.js} +18 -1
  114. package/chunks/{chunk-GURGAJTX.js → chunk-PDDYAXL2.js} +4 -1
  115. package/chunks/chunk-PWCQRLM5.js +1170 -0
  116. package/chunks/{chunk-VMX5RZQH.js → chunk-Q3G5L5KF.js} +18 -9
  117. package/chunks/{chunk-DQ2O5QOJ.js → chunk-QDWLUXKP.js} +1 -1
  118. package/chunks/chunk-QL4TN4HS.js +59 -0
  119. package/chunks/{chunk-E6CJ2SMM.js → chunk-QMBEW7EW.js} +2 -2
  120. package/chunks/{chunk-U4VTUMMK.js → chunk-QONSRAEV.js} +1 -1
  121. package/chunks/{chunk-DEEABGH2.js → chunk-QPSYIV2O.js} +3320 -536
  122. package/chunks/{chunk-Q5WZTTWE.js → chunk-QWDVZH24.js} +6 -8
  123. package/chunks/{chunk-2LEOZTBT.js → chunk-QWW6I2UO.js} +111 -26
  124. package/chunks/{chunk-LOY7RWQG.js → chunk-QYPT3QUD.js} +3 -3
  125. package/chunks/{chunk-6PQPKTXP.js → chunk-R7XNRHYD.js} +1 -1
  126. package/chunks/{chunk-7SJN2IWT.js → chunk-RCXCGZG6.js} +5 -5
  127. package/chunks/{chunk-HX6RLYUO.js → chunk-RL6J3BPE.js} +4 -4
  128. package/chunks/{chunk-Z3S5EMOW.js → chunk-RPYYTL7E.js} +60 -12
  129. package/chunks/{chunk-MB32MS4U.js → chunk-RR224BUP.js} +215 -174
  130. package/chunks/{chunk-H6I4PGRV.js → chunk-SKSF3LGQ.js} +4 -4
  131. package/chunks/{chunk-77V3VIKL.js → chunk-SQ3YD5MI.js} +9 -9
  132. package/chunks/{chunk-CBBP4BMC.js → chunk-SRY26X4H.js} +72 -206
  133. package/chunks/{chunk-RDJOB6S3.js → chunk-TXABHVZD.js} +1 -1
  134. package/chunks/{chunk-R2XWGR75.js → chunk-TYERNYH4.js} +2 -2
  135. package/chunks/chunk-TZTBZ25J.js +222 -0
  136. package/chunks/{chunk-45IOTAUS.js → chunk-U25CMJYY.js} +1 -1
  137. package/chunks/{chunk-7ULQIS27.js → chunk-UEJESCS7.js} +1 -1
  138. package/chunks/{chunk-HC45LTEN.js → chunk-UH7Z7Y45.js} +1 -1
  139. package/chunks/{chunk-CPZAH673.js → chunk-UKZEXS6K.js} +2 -0
  140. package/chunks/{chunk-54YCNSK5.js → chunk-UQDFEU47.js} +4113 -10152
  141. package/chunks/{chunk-XP4L6KS3.js → chunk-URN76TKR.js} +2 -2
  142. package/chunks/{chunk-XUGZYLDH.js → chunk-UWSXFI6E.js} +1 -1
  143. package/chunks/{chunk-AOHY3QJ3.js → chunk-VA5NLVPT.js} +3 -3
  144. package/chunks/{chunk-PZEXDV3H.js → chunk-VUNRNRN6.js} +71 -43
  145. package/chunks/{chunk-FANRZEAJ.js → chunk-VWOVHOTT.js} +1 -1
  146. package/chunks/{chunk-QTHQ6Z5X.js → chunk-WK4TJUEA.js} +1 -1
  147. package/chunks/{chunk-ZPZ7ZJEE.js → chunk-WUC6ZFXO.js} +1 -1
  148. package/chunks/{chunk-7KAXXBER.js → chunk-WY2ENRDN.js} +3 -3
  149. package/chunks/{chunk-TIRRPCFS.js → chunk-X6QNZOTC.js} +1 -1
  150. package/chunks/{chunk-KWHKHSIS.js → chunk-X6WUYMOV.js} +8 -8
  151. package/chunks/{chunk-IIUGIWWY.js → chunk-XC2VAFVZ.js} +1 -1
  152. package/chunks/{chunk-D4HTUMGX.js → chunk-XC656O42.js} +3 -3
  153. package/chunks/{chunk-RG64CDT2.js → chunk-XMJO6C44.js} +131 -48
  154. package/chunks/{chunk-ZMOJ7ISP.js → chunk-XUMAD5IT.js} +1 -1
  155. package/chunks/{chunk-THVU3RNH.js → chunk-YAVY33G4.js} +1 -1
  156. package/chunks/{chunk-YANIWTRZ.js → chunk-YPUHMQXV.js} +1 -1
  157. package/chunks/{chunk-QCXGC7QB.js → chunk-YU6TBRTA.js} +3 -3
  158. package/chunks/{chunk-OFZKFPYG.js → chunk-YWMDTMAU.js} +3 -3
  159. package/chunks/{chunk-DSFHVTWD.js → chunk-YXEVDA66.js} +2 -2
  160. package/chunks/{chunk-JE2CEOBO.js → chunk-ZGSUFIL5.js} +4 -4
  161. package/chunks/{chunk-BBIQAX4V.js → chunk-ZJES4C3I.js} +30 -18
  162. package/chunks/{computer-use-5QWCFNKD.js → computer-use-UJMK6JQU.js} +36 -34
  163. package/chunks/{config-utils-WADIDWGG.js → config-utils-7COTJMWK.js} +4 -4
  164. package/chunks/{contextCommand-4Z7T7TUM.js → contextCommand-4YABGF4S.js} +40 -38
  165. package/chunks/{core-runtime-6N4EFC2Q.js → core-runtime-7M4VM3DA.js} +36 -34
  166. package/chunks/{create-sub-session-AEREHZBQ.js → create-sub-session-HOFDW4N7.js} +39 -37
  167. package/chunks/{create-sub-session-62YZWVAY.js → create-sub-session-J32WC64U.js} +2 -2
  168. package/chunks/{cron-create-6E7GIQTG.js → cron-create-HMFSHIAR.js} +4 -4
  169. package/chunks/{cron-delete-JD26XY3W.js → cron-delete-ZJFHOX57.js} +4 -4
  170. package/chunks/{cron-list-CUWFB44G.js → cron-list-ZEX2NBMN.js} +4 -4
  171. package/chunks/{daemon-PCNCI5YU.js → daemon-CCIX4BMG.js} +47 -6
  172. package/chunks/{daemon-status-provider-DDF7C5M7.js → daemon-status-provider-W2U5Q3J5.js} +47 -45
  173. package/chunks/{daemon-trust-policy-Q4KSOJTR.js → daemon-trust-policy-IFICWPXP.js} +42 -40
  174. package/chunks/{daemon-trust-policy-monitor-V6FTE3IY.js → daemon-trust-policy-monitor-GX7EO6FW.js} +42 -40
  175. package/chunks/{de-SY6O76BF.js → de-A6TI4LBB.js} +46 -5
  176. package/chunks/{deferred-core-runtime-GHJ5GQHK.js → deferred-core-runtime-U36OOOKE.js} +36 -34
  177. package/chunks/display-image-VS3TXYQH.js +184 -0
  178. package/chunks/{dist-ZHXOBXDN.js → dist-3BMEUGTG.js} +1 -1
  179. package/chunks/{dist-26BIMQT6.js → dist-4KAX7CCL.js} +289 -27
  180. package/chunks/{dist-OAOC5OV4.js → dist-7JGAAQSC.js} +2 -2
  181. package/chunks/{dist-SL2LUMML.js → dist-A7H2KKUC.js} +1 -1
  182. package/chunks/{dist-2PERFI23.js → dist-DPPHJAVL.js} +3 -3
  183. package/chunks/{dist-PVEAFLHY.js → dist-HVBMEYWK.js} +1 -1
  184. package/chunks/{dist-ULIG4M5H.js → dist-NEBRI7WO.js} +67 -15
  185. package/chunks/{dist-WGMNT3JQ.js → dist-SFQ34F4M.js} +24 -6
  186. package/chunks/{earlyInputCapture-TQXLLISD.js → earlyInputCapture-5ZWDH3SB.js} +37 -35
  187. package/chunks/{edit-FJEUV6KZ.js → edit-J7SW6UP6.js} +36 -34
  188. package/chunks/{en-NBK3JKCE.js → en-L4UQDLWW.js} +57 -6
  189. package/chunks/{enter-worktree-7GE3TZ4P.js → enter-worktree-NRLOHRB6.js} +36 -34
  190. package/chunks/{enterPlanMode-KR5TMPCJ.js → enterPlanMode-GDSTEFSM.js} +36 -34
  191. package/chunks/{environment-SWL3CMB3.js → environment-KHYEKG5W.js} +39 -37
  192. package/chunks/{errors-XQE7BGZV.js → errors-VNLAJV3O.js} +39 -37
  193. package/chunks/{exit-worktree-CHKTYNCV.js → exit-worktree-ARVID7DF.js} +36 -34
  194. package/chunks/{exitPlanMode-QYAG6LWX.js → exitPlanMode-4ZFY7KUH.js} +36 -34
  195. package/chunks/{fast-path-Z2K7W6DC.js → fast-path-KA65VREJ.js} +9 -5
  196. package/chunks/{fr-4KG5V7UT.js → fr-QF7RI5ZE.js} +46 -5
  197. package/chunks/{gemini-YU4XKEDG.js → gemini-5PMCNPF7.js} +149 -90
  198. package/chunks/{geminiContentGenerator-ZZX6NBO4.js → geminiContentGenerator-NFSYJ4HA.js} +6 -6
  199. package/chunks/{glob-VYF5CXSX.js → glob-F3EAUDAX.js} +36 -34
  200. package/chunks/{goal-tools-HGO6VXPB.js → goal-tools-SPQ5M6D3.js} +3 -3
  201. package/chunks/{grep-5DP5ZUTW.js → grep-UJMPVZER.js} +36 -34
  202. package/chunks/{handleAutoUpdate-UVBJ56DL.js → handleAutoUpdate-MG4FRZPN.js} +42 -40
  203. package/chunks/{i18n-UQNYHEUD.js → i18n-EVHV4ZF3.js} +38 -36
  204. package/chunks/{image-gen-WHPIZNWF.js → image-gen-UC7XVHI7.js} +9 -9
  205. package/chunks/{initializer-GMIICF4W.js → initializer-O5B6HUBI.js} +43 -41
  206. package/chunks/{installationInfo-4MGG4WVI.js → installationInfo-2LIKCNVX.js} +37 -35
  207. package/chunks/{ja-F3GSQXMF.js → ja-URQESVGW.js} +46 -5
  208. package/chunks/{keychain-token-storage-IKO4G53C.js → keychain-token-storage-7BT4TQ2A.js} +2 -2
  209. package/chunks/{kittyProtocolDetector-MBRTDRBK.js → kittyProtocolDetector-BFLAKYXH.js} +1 -1
  210. package/chunks/{list-CPN2W334.js → list-BPKIE3Z4.js} +45 -43
  211. package/chunks/{list-agents-PXJ7ZUFB.js → list-agents-TWEGRJWO.js} +2 -2
  212. package/chunks/{loadedSettingsAdapter-ZQAV5NDO.js → loadedSettingsAdapter-NGLFF4V4.js} +42 -40
  213. package/chunks/{loggingContentGenerator-5E7W4IEP.js → loggingContentGenerator-7TFESRG5.js} +52 -37
  214. package/chunks/{loop-wakeup-Y26NQZ5I.js → loop-wakeup-6LLEOQYV.js} +5 -5
  215. package/chunks/{ls-ONQTTMQR.js → ls-H5WX22VK.js} +4 -4
  216. package/chunks/{lsp-YGHHRGMD.js → lsp-G6FXYEIS.js} +2 -2
  217. package/chunks/{managed-npm-update-MKKAXYXA.js → managed-npm-update-CLZGGV7F.js} +39 -37
  218. package/chunks/{mcp-V5NTJF6X.js → mcp-X5OZOOXX.js} +42 -40
  219. package/chunks/{monitor-CO3ASY6E.js → monitor-TGSVSAZZ.js} +36 -34
  220. package/chunks/nonInteractiveCli-GUMJ5JLG.js +150 -0
  221. package/chunks/{notebook-edit-Z7AEE6FM.js → notebook-edit-EZISE7IC.js} +36 -34
  222. package/chunks/{openaiContentGenerator-CA3MQOP3.js → openaiContentGenerator-ZAKS5A6P.js} +18 -18
  223. package/chunks/{pidfile-NL7MKDRU.js → pidfile-PCMBX4LR.js} +37 -35
  224. package/chunks/{processUtils-PB5K2DYH.js → processUtils-2CSVE5BW.js} +2 -2
  225. package/chunks/{pt-EQ33KWEN.js → pt-EEEQXRUI.js} +46 -5
  226. package/chunks/{qwenContentGenerator-JYFNDCOS.js → qwenContentGenerator-S3H6PIC4.js} +42 -40
  227. package/chunks/{qwenOAuth2-W2ALKQDD.js → qwenOAuth2-MNU425VE.js} +8 -8
  228. package/chunks/{read-file-IEOR5H5W.js → read-file-HXJXHBI6.js} +10 -10
  229. package/chunks/{read-mcp-resource-U2IJN5HM.js → read-mcp-resource-DRZSI3HE.js} +2 -2
  230. package/chunks/{record-artifact-MGPJ7EG4.js → record-artifact-IPIRWMFY.js} +3 -3
  231. package/chunks/{resumeHistoryUtils-BNBTP5AS.js → resumeHistoryUtils-4QAMC2S6.js} +44 -42
  232. package/chunks/{ripGrep-UMQODKEB.js → ripGrep-MCETPF2E.js} +36 -34
  233. package/chunks/{ru-7OZAUKGG.js → ru-WGZDYQAB.js} +46 -5
  234. package/chunks/{run-qwen-serve-RN2R6QQW.js → run-qwen-serve-3NMODTXV.js} +219 -55
  235. package/chunks/{runtime-QFJ2MJF5.js → runtime-AQOV7DVP.js} +49 -45
  236. package/chunks/{scheduler-AMYUFOZI.js → scheduler-DN7SZ6ZE.js} +36 -34
  237. package/chunks/{sdk-exporters-http-4BQANSJ6.js → sdk-exporters-http-IKNWQJNV.js} +2 -2
  238. package/chunks/{sdk-impl-Z4VXWVFX.js → sdk-impl-7CUUMQDB.js} +2 -2
  239. package/chunks/{send-message-PMP4ATVM.js → send-message-HGCVVDTZ.js} +5 -4
  240. package/chunks/{serve-EIIYJVX3.js → serve-WZB45HVT.js} +42 -40
  241. package/chunks/{server-EP2LLAPD.js → server-GOTZFEEZ.js} +616 -387
  242. package/chunks/{session-GMPZBLOW.js → session-23LOFLWN.js} +149 -87
  243. package/chunks/{settings-LN7RNKBS.js → settings-LI2ORVXC.js} +41 -39
  244. package/chunks/{shell-EM2OWU5X.js → shell-GLC6OP3C.js} +36 -34
  245. package/chunks/{skill-T5VPSK73.js → skill-C7W6M4GO.js} +27 -14
  246. package/chunks/{skill-settings-GMR3GMNY.js → skill-settings-W25NCK5I.js} +41 -39
  247. package/chunks/{spawnChannel-YPCU62DI.js → spawnChannel-OHJLEBLD.js} +38 -36
  248. package/chunks/{standalone-update-JAKIM2NF.js → standalone-update-E4V5V7WT.js} +39 -37
  249. package/chunks/{startInteractiveUI-YETQWGYF.js → startInteractiveUI-FKILLW7Q.js} +1815 -1034
  250. package/chunks/{syntheticOutput-D7E6ZFKR.js → syntheticOutput-EYL7DWO7.js} +3 -3
  251. package/chunks/{task-create-NFCYD43L.js → task-create-CSCEG4SM.js} +10 -9
  252. package/chunks/{task-list-TAVMGEVD.js → task-list-6CVQPORX.js} +6 -6
  253. package/chunks/{task-stop-ZDF2UJRM.js → task-stop-Y5ZTFVRX.js} +2 -2
  254. package/chunks/{task-update-6L7LHGEX.js → task-update-C52LNFU5.js} +10 -9
  255. package/chunks/{team-create-LFJ6HGNY.js → team-create-HBIJ7NHT.js} +36 -34
  256. package/chunks/{team-delete-DPGGRQBU.js → team-delete-CE7DC53R.js} +6 -6
  257. package/chunks/{team-plan-approval-C2KLSDGO.js → team-plan-approval-IBJOKS4J.js} +36 -34
  258. package/chunks/terminal-image-renderer-BOQJPVLB.js +89 -0
  259. package/chunks/{theme-manager-JQ3ZGBP5.js → theme-manager-NSS7VLUD.js} +37 -35
  260. package/chunks/{todoWrite-2UO5G6G6.js → todoWrite-YKAA57W2.js} +107 -36
  261. package/chunks/{tool-search-FAZBFRJZ.js → tool-search-DEAS54VG.js} +13 -12
  262. package/chunks/{total-session-admission-5CALIVYO.js → total-session-admission-4LWTX3WD.js} +43 -41
  263. package/chunks/{trustedFolders-KOPSP44S.js → trustedFolders-NF3J2TA7.js} +38 -36
  264. package/chunks/{update-relaunch-6QL2TICS.js → update-relaunch-WUHRH5V3.js} +5 -5
  265. package/chunks/{updateCheck-4Q6RIKFW.js → updateCheck-7EG4BLBH.js} +41 -39
  266. package/chunks/{useAutoAcceptIndicator-Q5BMKZV3.js → useAutoAcceptIndicator-ZRV56GVP.js} +46 -44
  267. package/chunks/{validateNonInterActiveAuth-GKOC5F6Z.js → validateNonInterActiveAuth-WC2FPE3I.js} +86 -84
  268. package/chunks/{version-VSATY2LD.js → version-6SS7KCUP.js} +1 -1
  269. package/chunks/{web-fetch-JCLKL6NL.js → web-fetch-Y5QQMPKA.js} +13 -13
  270. package/chunks/{web-search-DSQTFUBX.js → web-search-QKKEU723.js} +8 -8
  271. package/chunks/{workflow-M6QAVKVJ.js → workflow-PWIU6Q2M.js} +418 -304
  272. package/chunks/{workspace-providers-status-YKLTLMJA.js → workspace-providers-status-B2DM6FNK.js} +45 -43
  273. package/chunks/{workspace-registration-store-5DMGKU64.js → workspace-registration-store-7Y33TTHJ.js} +2 -2
  274. package/chunks/{workspace-registry-PTYUSYXX.js → workspace-registry-TSNJKLPC.js} +43 -41
  275. package/chunks/{workspace-service-25ML3T47.js → workspace-service-4I2QHDX4.js} +50 -48
  276. package/chunks/{workspace-skills-status-YKZWOYRX.js → workspace-skills-status-HVXNWVGR.js} +44 -42
  277. package/chunks/{workspace-trust-reconciler-5FI2S3OS.js → workspace-trust-reconciler-RDBBGMWP.js} +49 -47
  278. package/chunks/{write-file-AY7VLP5X.js → write-file-RQ4DG5RY.js} +36 -34
  279. package/chunks/{zh-H3YDK5QW.js → zh-72XPUG5P.js} +54 -6
  280. package/chunks/{zh-TW-JYCP7XUA.js → zh-TW-LTB4SRH3.js} +54 -6
  281. package/chunks/{zoom-image-S4LJZMD5.js → zoom-image-O5YCB7WN.js} +10 -10
  282. package/cli.js +32 -48
  283. package/locales/ca.js +60 -4
  284. package/locales/de.js +62 -4
  285. package/locales/en.js +76 -6
  286. package/locales/fr.js +64 -4
  287. package/locales/ja.js +61 -4
  288. package/locales/pt.js +60 -4
  289. package/locales/ru.js +63 -4
  290. package/locales/zh-TW.js +67 -6
  291. package/locales/zh.js +67 -6
  292. package/package.json +3 -3
  293. package/web-shell/assets/{arc-xjArKHU2.js → arc-Bd7d781i.js} +1 -1
  294. package/web-shell/assets/{architectureDiagram-3BPJPVTR-BgrQDNYG.js → architectureDiagram-3BPJPVTR-CpnOJqNE.js} +1 -1
  295. package/web-shell/assets/{blockDiagram-GPEHLZMM-CXxWC-1_.js → blockDiagram-GPEHLZMM-NxVTiWnk.js} +1 -1
  296. package/web-shell/assets/{c4Diagram-AAUBKEIU-Dx1tLm3v.js → c4Diagram-AAUBKEIU-BWT75l82.js} +1 -1
  297. package/web-shell/assets/channel-A434sWK5.js +1 -0
  298. package/web-shell/assets/{chunk-2J33WTMH-CBxjogVR.js → chunk-2J33WTMH-Dzz03hk6.js} +1 -1
  299. package/web-shell/assets/{chunk-4BX2VUAB-izb-rY5W.js → chunk-4BX2VUAB-DRF-egfm.js} +1 -1
  300. package/web-shell/assets/{chunk-55IACEB6-NzLyvSb8.js → chunk-55IACEB6-Co15vq5x.js} +1 -1
  301. package/web-shell/assets/{chunk-727SXJPM-DVyKb0dl.js → chunk-727SXJPM-DHSUk1J7.js} +1 -1
  302. package/web-shell/assets/{chunk-AQP2D5EJ-BtqL7NzB.js → chunk-AQP2D5EJ-Br8u_E2R.js} +1 -1
  303. package/web-shell/assets/{chunk-FMBD7UC4-iNpdKIO0.js → chunk-FMBD7UC4-DXbPTnqF.js} +1 -1
  304. package/web-shell/assets/{chunk-ND2GUHAM-DI7cbFmX.js → chunk-ND2GUHAM-BleQdi4d.js} +1 -1
  305. package/web-shell/assets/{chunk-QZHKN3VN-3Y_-xFYs.js → chunk-QZHKN3VN-CqgBf-95.js} +1 -1
  306. package/web-shell/assets/classDiagram-4FO5ZUOK-CwPuhldB.js +1 -0
  307. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CwPuhldB.js +1 -0
  308. package/web-shell/assets/{cose-bilkent-S5V4N54A--raRatZn.js → cose-bilkent-S5V4N54A-WS7b13Yg.js} +1 -1
  309. package/web-shell/assets/{dagre-BM42HDAG-B8SU70mO.js → dagre-BM42HDAG-v_55ki8o.js} +1 -1
  310. package/web-shell/assets/{diagram-2AECGRRQ-ewgoakXo.js → diagram-2AECGRRQ-DaYAjbdK.js} +1 -1
  311. package/web-shell/assets/{diagram-5GNKFQAL-Bm_JLTnS.js → diagram-5GNKFQAL-D_Hy-L64.js} +1 -1
  312. package/web-shell/assets/{diagram-KO2AKTUF-DEIUjUy9.js → diagram-KO2AKTUF-dB06cZyD.js} +1 -1
  313. package/web-shell/assets/{diagram-LMA3HP47-C2Wmrpj-.js → diagram-LMA3HP47-DzSluD4F.js} +1 -1
  314. package/web-shell/assets/{diagram-OG6HWLK6-CtYe6bFx.js → diagram-OG6HWLK6-Cvb6CeXQ.js} +1 -1
  315. package/web-shell/assets/{erDiagram-TEJ5UH35-DfpHcWLV.js → erDiagram-TEJ5UH35-7eB2Hmov.js} +1 -1
  316. package/web-shell/assets/{flowDiagram-I6XJVG4X-CAiUhio5.js → flowDiagram-I6XJVG4X-B08iGCw_.js} +1 -1
  317. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CYc7ezr4.js → ganttDiagram-6RSMTGT7-BgsrCHq-.js} +1 -1
  318. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-70lbkcRS.js → gitGraphDiagram-PVQCEYII-DQLurQ2i.js} +1 -1
  319. package/web-shell/assets/{index-Ww86nT9f.js → index-B_1Z0Mgr.js} +1 -1
  320. package/web-shell/assets/index-Bi1dP2mU.css +5 -0
  321. package/web-shell/assets/index-DJ-z1Oba.js +1756 -0
  322. package/web-shell/assets/{infoDiagram-5YYISTIA-C7e8DWPa.js → infoDiagram-5YYISTIA-DXZGO8qB.js} +1 -1
  323. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-BYLr2op-.js → ishikawaDiagram-YF4QCWOH-g7gbuH2w.js} +1 -1
  324. package/web-shell/assets/{journeyDiagram-JHISSGLW-hEibAHKX.js → journeyDiagram-JHISSGLW-euefICGn.js} +1 -1
  325. package/web-shell/assets/{kanban-definition-UN3LZRKU-F2rt8Uhp.js → kanban-definition-UN3LZRKU-Dws8-mjG.js} +1 -1
  326. package/web-shell/assets/{linear-DPhyNezd.js → linear-C63F0tyh.js} +1 -1
  327. package/web-shell/assets/{mermaid.core-ZUtnug0n.js → mermaid.core-fLrhp_4-.js} +5 -5
  328. package/web-shell/assets/{mindmap-definition-RKZ34NQL-DDWcMoi8.js → mindmap-definition-RKZ34NQL-qRkydfT-.js} +1 -1
  329. package/web-shell/assets/{pieDiagram-4H26LBE5-CTRKzw1_.js → pieDiagram-4H26LBE5-BZ0wQaKN.js} +1 -1
  330. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CAEwYG_z.js → quadrantDiagram-W4KKPZXB-Fjq6GbSZ.js} +1 -1
  331. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CRjnH9D9.js → requirementDiagram-4Y6WPE33-CqWvjLHU.js} +1 -1
  332. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-LPQT_sOd.js → sankeyDiagram-5OEKKPKP-VcXX6PVZ.js} +1 -1
  333. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Ht2Iqvb0.js → sequenceDiagram-3UESZ5HK-BJSRtxFr.js} +1 -1
  334. package/web-shell/assets/{stateDiagram-AJRCARHV-CIUdqOXu.js → stateDiagram-AJRCARHV-Dt9zUwmZ.js} +1 -1
  335. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CCxQt56w.js +1 -0
  336. package/web-shell/assets/{timeline-definition-PNZ67QCA-BcilneZF.js → timeline-definition-PNZ67QCA-DQwlNRws.js} +1 -1
  337. package/web-shell/assets/{vennDiagram-CIIHVFJN-BljwiiH1.js → vennDiagram-CIIHVFJN-DwxjUEtQ.js} +1 -1
  338. package/web-shell/assets/{wardley-L42UT6IY-DeKjkYjq.js → wardley-L42UT6IY-D3QdMSpJ.js} +1 -1
  339. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-L3U1H7KG.js → wardleyDiagram-YWT4CUSO-BddN8oK8.js} +1 -1
  340. package/web-shell/assets/{xychartDiagram-2RQKCTM6-IJnWsgMT.js → xychartDiagram-2RQKCTM6-BUNuBrRJ.js} +1 -1
  341. package/web-shell/index.html +2 -2
  342. package/chunks/chunk-4KP2F2TE.js +0 -82
  343. package/chunks/chunk-HGT6JR3U.js +0 -177
  344. package/chunks/nonInteractiveCli-ZJYEOO7U.js +0 -148
  345. package/web-shell/assets/channel-B1cyk94G.js +0 -1
  346. package/web-shell/assets/classDiagram-4FO5ZUOK-BpBYZoRE.js +0 -1
  347. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BpBYZoRE.js +0 -1
  348. package/web-shell/assets/index-C1k3PDuU.css +0 -5
  349. package/web-shell/assets/index-DZLIXILO.js +0 -1750
  350. package/web-shell/assets/insert-DmRbh9Rv.svg +0 -1
  351. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BmqqQZ6w.js +0 -1
@@ -8,6 +8,7 @@ import {
8
8
  formatWorkspaceMemoryDreamSummary,
9
9
  formatWorkspaceMemoryForgetSummary,
10
10
  isValidServerName,
11
+ loadSettingsCached,
11
12
  normalizeChannelDelivery,
12
13
  parseChannelDelivery,
13
14
  redactMcpServersSetting,
@@ -16,12 +17,12 @@ import {
16
17
  shouldSuppressRememberErrorDetails,
17
18
  workspaceMemoryFailureCode,
18
19
  workspaceMemoryFailureDiagnostics
19
- } from "./chunk-JLZ3RBQG.js";
20
+ } from "./chunk-5JPVOYWA.js";
20
21
  import {
21
22
  openQwenAsrRealtimeStream,
22
23
  openVoiceStream,
23
24
  openVoiceStreamWithRetry
24
- } from "./chunk-YUFIEIWC.js";
25
+ } from "./chunk-GTM6IHBB.js";
25
26
  import {
26
27
  SetupGithubError,
27
28
  collectSessionData,
@@ -33,17 +34,20 @@ import {
33
34
  toJson,
34
35
  toJsonl,
35
36
  toMarkdown
36
- } from "./chunk-PZEXDV3H.js";
37
+ } from "./chunk-VUNRNRN6.js";
37
38
  import {
38
39
  OBSERVED_CONTACT_MAX_FRESH_WITHIN_SECONDS,
39
40
  ObservedChannelContactStore
40
- } from "./chunk-675H6PLP.js";
41
- import "./chunk-YDLJGZHL.js";
42
- import "./chunk-PCK4B6LR.js";
41
+ } from "./chunk-DYA25Y7U.js";
42
+ import "./chunk-4NFY2S7N.js";
43
+ import "./chunk-N42C2FU3.js";
43
44
  import "./chunk-2MIN6GRR.js";
44
45
  import "./chunk-QHTIBUWB.js";
45
- import "./chunk-QTERJVPZ.js";
46
+ import "./chunk-EKTCKZV5.js";
46
47
  import "./chunk-3Z43GZUQ.js";
48
+ import {
49
+ assertValidChannelSecretUpdates
50
+ } from "./chunk-HUIQ4FYC.js";
47
51
  import {
48
52
  CAPABILITIES_SCHEMA_VERSION,
49
53
  CLIENT_ID_HEADER,
@@ -101,18 +105,18 @@ import {
101
105
  setRateLimiter,
102
106
  unsafeRevealSecret,
103
107
  validateMcpRuntimeServerName
104
- } from "./chunk-MB32MS4U.js";
108
+ } from "./chunk-RR224BUP.js";
105
109
  import {
106
110
  isLoopbackBind
107
111
  } from "./chunk-RXFQM6FQ.js";
108
112
  import {
109
113
  createWorkspaceSkillsStatusProvider
110
- } from "./chunk-BBIQAX4V.js";
111
- import "./chunk-L55JWS76.js";
114
+ } from "./chunk-ZJES4C3I.js";
115
+ import "./chunk-BGXZBI5B.js";
112
116
  import {
113
117
  evaluateDaemonWorkspaceTrust,
114
118
  readDaemonTrustPolicySnapshot
115
- } from "./chunk-TTJZAIFP.js";
119
+ } from "./chunk-HEBW74ZW.js";
116
120
  import {
117
121
  EMPTY_WORKSPACE_VOICE_UPDATE_ERROR,
118
122
  MAX_WORKSPACE_SKILL_NAME_LENGTH,
@@ -126,14 +130,14 @@ import {
126
130
  validateWorkspaceSkillName,
127
131
  validateWorkspaceVoiceState,
128
132
  voiceSettingsScopeToWire
129
- } from "./chunk-56Z7QEAQ.js";
133
+ } from "./chunk-GMSBXEH4.js";
130
134
  import {
131
135
  PermissionRulesValidationError,
132
136
  buildPermissionSettings,
133
137
  isPermissionRuleType,
134
138
  normalizePermissionRules,
135
139
  readPermissionRuleSet
136
- } from "./chunk-YANIWTRZ.js";
140
+ } from "./chunk-YPUHMQXV.js";
137
141
  import {
138
142
  assertVoiceBaseUrlNetworkAllowed,
139
143
  isStreamingVoiceModel,
@@ -141,13 +145,14 @@ import {
141
145
  resolveVoiceTranscriptionConfig,
142
146
  sanitizeVoiceErrorMessage,
143
147
  transcribeVoiceAudio
144
- } from "./chunk-7KAXXBER.js";
148
+ } from "./chunk-WY2ENRDN.js";
145
149
  import {
146
150
  isVoiceEnabled,
147
151
  isVoiceMode,
148
152
  readVoiceModel
149
- } from "./chunk-P5VC5USY.js";
150
- import "./chunk-CNTR4GR6.js";
153
+ } from "./chunk-BKGA75MU.js";
154
+ import "./chunk-JELIWHXD.js";
155
+ import "./chunk-Z4X5MTRT.js";
151
156
  import {
152
157
  WorkspacePermissionRulesSessionRequiredError,
153
158
  WorkspaceSettingsPartialPersistError,
@@ -156,28 +161,31 @@ import {
156
161
  } from "./chunk-OA4JVLSA.js";
157
162
  import {
158
163
  createTotalSessionAdmissionController
159
- } from "./chunk-SZ3KHTDR.js";
164
+ } from "./chunk-AKA24BGO.js";
160
165
  import {
161
166
  WorkspaceGenerationClosedError,
162
167
  createSingleWorkspaceRegistry,
163
168
  createWorkspaceSessionOwnerIndex
164
- } from "./chunk-JYBU6YUE.js";
169
+ } from "./chunk-2M5N3DHY.js";
165
170
  import "./chunk-GRC5HGPI.js";
166
171
  import {
167
- assertValidChannelSecretUpdates
168
- } from "./chunk-EQNUDTL6.js";
172
+ daemonObservedContactsPath,
173
+ loadChannelsConfig
174
+ } from "./chunk-2LZCLQIS.js";
175
+ import "./chunk-D2GPKXCQ.js";
176
+ import "./chunk-57OAHC2Y.js";
169
177
  import {
170
178
  createDaemonStatusProvider
171
- } from "./chunk-GL4JOZXU.js";
179
+ } from "./chunk-DSGJLHM3.js";
172
180
  import "./chunk-VXZBKKQR.js";
173
- import "./chunk-Q5WZTTWE.js";
174
- import "./chunk-E5Z2AVNV.js";
181
+ import "./chunk-QWDVZH24.js";
182
+ import "./chunk-3SH53ANB.js";
175
183
  import {
176
184
  SessionArtifactAuthorizationError,
177
185
  SessionArtifactValidationError,
178
186
  createAcpSessionBridge,
179
187
  parseSessionSource
180
- } from "./chunk-44F4LBWZ.js";
188
+ } from "./chunk-HIXVWF7I.js";
181
189
  import {
182
190
  EVENT_SCHEMA_VERSION,
183
191
  EventBus,
@@ -185,37 +193,32 @@ import {
185
193
  } from "./chunk-GLWP3FDB.js";
186
194
  import "./chunk-XCGIMOLN.js";
187
195
  import "./chunk-OCPBI7J5.js";
188
- import "./chunk-XUGZYLDH.js";
196
+ import "./chunk-UWSXFI6E.js";
189
197
  import {
190
198
  createWorkspaceProvidersStatusProvider
191
- } from "./chunk-NTDH4IML.js";
199
+ } from "./chunk-MCXMWLFT.js";
192
200
  import {
193
201
  getAuthTypeFromEnv,
194
202
  resolveCliGenerationConfig
195
- } from "./chunk-6TAASXWL.js";
203
+ } from "./chunk-5VYFXHY2.js";
196
204
  import {
197
205
  snapshotProcessEnv
198
- } from "./chunk-VEMNQMHA.js";
206
+ } from "./chunk-H6ZYP74A.js";
199
207
  import {
200
208
  STATUS_SCHEMA_VERSION,
201
209
  createIdleWorkspaceMemoryStatus,
202
210
  mapDomainErrorToErrorKind
203
- } from "./chunk-GURGAJTX.js";
204
- import "./chunk-Z4X5MTRT.js";
211
+ } from "./chunk-PDDYAXL2.js";
212
+ import "./chunk-K6KS3LTN.js";
205
213
  import "./chunk-FC4KQFCS.js";
206
- import {
207
- daemonObservedContactsPath,
208
- loadChannelsConfig
209
- } from "./chunk-D6MDRSZ6.js";
210
- import "./chunk-A7Y5H4TX.js";
211
- import "./chunk-57OAHC2Y.js";
214
+ import "./chunk-T3CHYWJZ.js";
212
215
  import {
213
216
  parseChannelWebhookConfigLenient
214
- } from "./chunk-I5BT7ADR.js";
215
- import "./chunk-FANRZEAJ.js";
217
+ } from "./chunk-LGT3YMLN.js";
216
218
  import {
217
219
  supportedChannelCatalog
218
- } from "./chunk-KWHKHSIS.js";
220
+ } from "./chunk-X6WUYMOV.js";
221
+ import "./chunk-VWOVHOTT.js";
219
222
  import "./chunk-V6WHFGST.js";
220
223
  import {
221
224
  MAX_REGISTERED_WORKSPACES,
@@ -224,8 +227,8 @@ import {
224
227
  WorkspaceRegistrationStoreLimitError,
225
228
  normalizeWorkspaceDisplayName,
226
229
  workspaceRegistrationId
227
- } from "./chunk-LYI2PZDK.js";
228
- import "./chunk-CPZAH673.js";
230
+ } from "./chunk-3XF4WT3B.js";
231
+ import "./chunk-UKZEXS6K.js";
229
232
  import {
230
233
  BranchWhilePromptActiveError,
231
234
  CancelSentinelCollisionError,
@@ -258,13 +261,13 @@ import {
258
261
  WorkspaceInitRaceError,
259
262
  WorkspaceInitSymlinkError,
260
263
  WorkspaceMismatchError
261
- } from "./chunk-B4AJNNOL.js";
264
+ } from "./chunk-J26HHFI5.js";
262
265
  import {
263
266
  MAX_WORKSPACE_PATH_LENGTH,
264
267
  canonicalizeWorkspace,
265
268
  canonicalizeWorkspaces,
266
269
  translateAndCheckAbsoluteWorkspacePath
267
- } from "./chunk-2RFKHEXL.js";
270
+ } from "./chunk-6PLDPT2C.js";
268
271
  import {
269
272
  ChannelDeliveryError,
270
273
  MAX_CHANNEL_STARTUP_FAILURES,
@@ -274,10 +277,10 @@ import {
274
277
  QWEN_SERVER_TOKEN_ENV,
275
278
  isChannelDeliveryError,
276
279
  isChannelWebhookEnqueueError
277
- } from "./chunk-U4VTUMMK.js";
280
+ } from "./chunk-QONSRAEV.js";
278
281
  import {
279
282
  normalizeWorkerDiagnostic
280
- } from "./chunk-6MPDY6ZG.js";
283
+ } from "./chunk-24ER7UV4.js";
281
284
  import {
282
285
  normalizeServeChannelSelection
283
286
  } from "./chunk-ALMR3E6Q.js";
@@ -286,11 +289,9 @@ import {
286
289
  redactLogCredentials
287
290
  } from "./chunk-M5GB774H.js";
288
291
  import "./chunk-5HBA2Z7V.js";
289
- import "./chunk-K6KS3LTN.js";
290
- import "./chunk-T3CHYWJZ.js";
291
292
  import {
292
293
  sanitizeLogText
293
- } from "./chunk-JCJ7LKNA.js";
294
+ } from "./chunk-DIEFUBV6.js";
294
295
  import "./chunk-UDXSXLER.js";
295
296
  import {
296
297
  getDialogSettingKeys,
@@ -301,7 +302,7 @@ import {
301
302
  getWritableScopes,
302
303
  loadSettings,
303
304
  validateSettingValue
304
- } from "./chunk-W3UKBMSI.js";
305
+ } from "./chunk-22YFMJBW.js";
305
306
  import "./chunk-RKUWKYED.js";
306
307
  import "./chunk-GOXKNSDZ.js";
307
308
  import "./chunk-IDS7MSUP.js";
@@ -310,22 +311,18 @@ import {
310
311
  detectSystemLanguage,
311
312
  resolveLanguageSetting,
312
313
  resolveSupportedLanguage
313
- } from "./chunk-3F2WDAV6.js";
314
- import "./chunk-EU5TBFJI.js";
314
+ } from "./chunk-KXWERR6P.js";
315
+ import "./chunk-6NE5NTHJ.js";
315
316
  import "./chunk-6PEXNQTX.js";
317
+ import "./chunk-BKXTHMOZ.js";
318
+ import "./chunk-VJNBRRZG.js";
316
319
  import {
317
320
  getWorkspaceTrustStatus
318
- } from "./chunk-P755N4CS.js";
321
+ } from "./chunk-M5LIY7Y6.js";
319
322
  import "./chunk-ALGGS7UH.js";
320
323
  import {
321
324
  isWithinRoot as isWithinRoot2
322
325
  } from "./chunk-MR3PXB6E.js";
323
- import "./chunk-2KKCCLPT.js";
324
- import "./chunk-VJNBRRZG.js";
325
- import {
326
- writeStderrLine,
327
- writeStderrLineSafe
328
- } from "./chunk-OWAK7LMW.js";
329
326
  import {
330
327
  ALL_PROVIDERS,
331
328
  BTW_MAX_INPUT_LENGTH,
@@ -399,20 +396,20 @@ import {
399
396
  writeWorkspaceContextFile,
400
397
  writeWorktreeSession,
401
398
  writeWorktreeSessionMarker
402
- } from "./chunk-54YCNSK5.js";
399
+ } from "./chunk-UQDFEU47.js";
400
+ import "./chunk-GOFAQQZA.js";
403
401
  import "./chunk-5M6IDOMF.js";
404
402
  import "./chunk-TWPJO254.js";
405
403
  import "./chunk-H6XPXXMH.js";
406
404
  import {
407
405
  MAX_JOBS,
408
406
  nextDurableFireMs
409
- } from "./chunk-AOHY3QJ3.js";
410
- import "./chunk-5NNHICSA.js";
411
- import "./chunk-SHN4KHDK.js";
412
- import "./chunk-JXVC2PL3.js";
413
- import "./chunk-KRXPRVGL.js";
407
+ } from "./chunk-VA5NLVPT.js";
408
+ import "./chunk-I7JDGNG6.js";
409
+ import "./chunk-A6SX5TAH.js";
410
+ import "./chunk-33FNCQSY.js";
414
411
  import "./chunk-6PVPNMXU.js";
415
- import "./chunk-ZMOJ7ISP.js";
412
+ import "./chunk-XUMAD5IT.js";
416
413
  import {
417
414
  nextFireTime,
418
415
  parseCron
@@ -425,26 +422,29 @@ import {
425
422
  readCronTasks,
426
423
  taskHasLegacyCondition,
427
424
  updateCronTasks
428
- } from "./chunk-TEGJSJDF.js";
429
- import "./chunk-TIRRPCFS.js";
425
+ } from "./chunk-MOHAWIAW.js";
426
+ import "./chunk-X6QNZOTC.js";
430
427
  import "./chunk-O6GEWCJA.js";
431
428
  import "./chunk-T26EAKDL.js";
429
+ import "./chunk-ZPJWUGCS.js";
432
430
  import "./chunk-CPBF7KYF.js";
433
- import "./chunk-4KP2F2TE.js";
434
- import "./chunk-3APUUXRF.js";
435
- import "./chunk-THVU3RNH.js";
436
- import "./chunk-LHKCY7DY.js";
437
- import "./chunk-6FMJLI5M.js";
431
+ import "./chunk-MISUEWB4.js";
432
+ import "./chunk-KRXPRVGL.js";
433
+ import "./chunk-A5YZ3FA2.js";
434
+ import "./chunk-YAVY33G4.js";
435
+ import "./chunk-2UISUFHQ.js";
436
+ import "./chunk-HFVW54NL.js";
437
+ import {
438
+ APPROVAL_MODES
439
+ } from "./chunk-TZTBZ25J.js";
440
+ import "./chunk-S6LOFUVP.js";
438
441
  import {
439
- APPROVAL_MODES,
440
442
  SubagentError,
441
443
  SubagentErrorCode
442
- } from "./chunk-CBBP4BMC.js";
443
- import "./chunk-S6LOFUVP.js";
444
+ } from "./chunk-SRY26X4H.js";
444
445
  import "./chunk-K623ENWT.js";
445
446
  import "./chunk-AQ37AY7B.js";
446
- import "./chunk-N4ACHWNH.js";
447
- import "./chunk-ZPJWUGCS.js";
447
+ import "./chunk-432XCUHF.js";
448
448
  import {
449
449
  QwenOAuth2Client,
450
450
  QwenOAuthPollError,
@@ -453,15 +453,15 @@ import {
453
453
  isDeviceAuthorizationSuccess,
454
454
  isDeviceTokenPending,
455
455
  isDeviceTokenSuccess
456
- } from "./chunk-D4HTUMGX.js";
456
+ } from "./chunk-XC656O42.js";
457
457
  import "./chunk-NAVJD2PQ.js";
458
- import "./chunk-LOY7RWQG.js";
459
- import "./chunk-E6CJ2SMM.js";
458
+ import "./chunk-QYPT3QUD.js";
459
+ import "./chunk-QMBEW7EW.js";
460
460
  import "./chunk-DGEIYUC3.js";
461
461
  import "./chunk-MPHPFVKK.js";
462
462
  import "./chunk-GLNBDYUX.js";
463
463
  import "./chunk-DJ2GSRLV.js";
464
- import "./chunk-6CQWRWUC.js";
464
+ import "./chunk-EIMKVOSF.js";
465
465
  import {
466
466
  addDaemonRequestAttribute,
467
467
  emitDaemonLog,
@@ -471,12 +471,12 @@ import {
471
471
  recordDaemonHttpRequest,
472
472
  recordDaemonHttpResponse,
473
473
  withDaemonRequestSpan
474
- } from "./chunk-Z3S5EMOW.js";
474
+ } from "./chunk-RPYYTL7E.js";
475
475
  import "./chunk-2J3OJGTL.js";
476
476
  import "./chunk-P3QQPMQA.js";
477
- import "./chunk-XQK4XXTN.js";
477
+ import "./chunk-6O5DVH27.js";
478
478
  import "./chunk-GLCZKT5V.js";
479
- import "./chunk-QDK4F2N5.js";
479
+ import "./chunk-2DNKEBXY.js";
480
480
  import "./chunk-CR3C7WXL.js";
481
481
  import "./chunk-XWRJCPHC.js";
482
482
  import {
@@ -489,18 +489,18 @@ import {
489
489
  isWithinRoot,
490
490
  parseLineTolerant,
491
491
  read
492
- } from "./chunk-DUNI4EBW.js";
492
+ } from "./chunk-4K3RV3OA.js";
493
493
  import "./chunk-VGC4I5JJ.js";
494
- import "./chunk-3I6DUGQD.js";
495
- import "./chunk-7ULQIS27.js";
496
- import "./chunk-MM7TH7ZM.js";
497
- import "./chunk-HIVKI6O6.js";
494
+ import "./chunk-E4WHKETF.js";
495
+ import "./chunk-UEJESCS7.js";
496
+ import "./chunk-CFDR3GNL.js";
497
+ import "./chunk-H35Q5CEG.js";
498
498
  import "./chunk-46UV252V.js";
499
499
  import "./chunk-ZBVS26BY.js";
500
- import "./chunk-Q3T5KA2V.js";
501
- import "./chunk-R2XWGR75.js";
502
- import "./chunk-HC45LTEN.js";
503
- import "./chunk-QARJNL2V.js";
500
+ import "./chunk-BFHXDAR7.js";
501
+ import "./chunk-TYERNYH4.js";
502
+ import "./chunk-UH7Z7Y45.js";
503
+ import "./chunk-O2ZYHG33.js";
504
504
  import "./chunk-W4RQUHY3.js";
505
505
  import "./chunk-G7XXKQYS.js";
506
506
  import {
@@ -508,8 +508,12 @@ import {
508
508
  Storage,
509
509
  createDebugLogger,
510
510
  runWithoutDebugLogSession
511
- } from "./chunk-E2BHWIDT.js";
511
+ } from "./chunk-3RXUYQJI.js";
512
512
  import "./chunk-VOQXFAY5.js";
513
+ import {
514
+ writeStderrLine,
515
+ writeStderrLineSafe
516
+ } from "./chunk-OWAK7LMW.js";
513
517
  import "./chunk-75DOP5OR.js";
514
518
  import "./chunk-DMTGGOSA.js";
515
519
  import "./chunk-YQ3U5MUC.js";
@@ -4854,11 +4858,16 @@ async function validateManagedMemoryAvailable(deps, res, kind, assertGenerationO
4854
4858
  }
4855
4859
  }
4856
4860
  __name(validateManagedMemoryAvailable, "validateManagedMemoryAvailable");
4857
- function mountWorkspaceMemoryRememberRoutes(app, deps) {
4861
+ function mountWorkspaceMemoryRememberRoutesAt(app, basePath, mutate, resolveRouteDeps) {
4858
4862
  app.post(
4859
- "/workspace/memory/remember",
4860
- deps.mutate({ strict: true }),
4863
+ `${basePath}/remember`,
4864
+ mutate({ strict: true }),
4861
4865
  async (req, res) => {
4866
+ const deps = resolveRouteDeps(req, res, {
4867
+ creating: true,
4868
+ kind: "remember"
4869
+ });
4870
+ if (!deps) return;
4862
4871
  const assertGenerationOpen = deps.captureGenerationAssertion?.();
4863
4872
  if (!requireOpenGeneration(assertGenerationOpen, res)) return;
4864
4873
  if (!requireTrustedWorkspace(deps, res)) return;
@@ -4922,9 +4931,14 @@ function mountWorkspaceMemoryRememberRoutes(app, deps) {
4922
4931
  }
4923
4932
  );
4924
4933
  app.get(
4925
- "/workspace/memory/remember/:taskId",
4926
- deps.mutate({ strict: true }),
4934
+ `${basePath}/remember/:taskId`,
4935
+ mutate({ strict: true }),
4927
4936
  (req, res) => {
4937
+ const deps = resolveRouteDeps(req, res, {
4938
+ creating: false,
4939
+ kind: "remember"
4940
+ });
4941
+ if (!deps) return;
4928
4942
  const assertGenerationOpen = deps.captureGenerationAssertion?.();
4929
4943
  if (!requireOpenGeneration(assertGenerationOpen, res)) return;
4930
4944
  if (!requireTrustedWorkspace(deps, res)) return;
@@ -4945,64 +4959,70 @@ function mountWorkspaceMemoryRememberRoutes(app, deps) {
4945
4959
  res.status(200).json(task);
4946
4960
  }
4947
4961
  );
4948
- app.post(
4949
- "/workspace/memory/forget",
4950
- deps.mutate({ strict: true }),
4951
- async (req, res) => {
4952
- const assertGenerationOpen = deps.captureGenerationAssertion?.();
4953
- if (!requireOpenGeneration(assertGenerationOpen, res)) return;
4954
- if (!requireTrustedWorkspace(deps, res)) return;
4955
- const body = deps.safeBody(req);
4956
- const query = body["query"];
4957
- const trimmedQuery = typeof query === "string" ? query.trim() : "";
4958
- if (!trimmedQuery) {
4959
- res.status(400).json({
4960
- error: "`query` must be a non-empty string",
4961
- code: "invalid_query"
4962
- });
4963
- return;
4964
- }
4965
- if (Buffer.byteLength(trimmedQuery, "utf8") > MAX_REMEMBER_CONTENT_BYTES) {
4966
- res.status(400).json({
4967
- error: `\`query\` exceeds the ${MAX_REMEMBER_CONTENT_BYTES}-byte limit`,
4968
- code: "invalid_query"
4969
- });
4970
- return;
4971
- }
4972
- const originatorClientId = validateOriginatorClientId(deps, req, res);
4973
- if (originatorClientId === null) return;
4974
- if (!await validateManagedMemoryAvailable(
4975
- deps,
4976
- res,
4977
- "forget",
4978
- assertGenerationOpen
4979
- ))
4980
- return;
4981
- if (!requireOpenGeneration(assertGenerationOpen, res)) return;
4982
- try {
4983
- const task = deps.lane.enqueueForget({
4984
- query: trimmedQuery,
4985
- ...originatorClientId ? { originatorClientId } : {},
4986
- ...assertGenerationOpen ? { assertGenerationOpen } : {}
4987
- });
4988
- res.status(202).json(task);
4989
- } catch (err) {
4990
- const code = workspaceMemoryFailureCode(
4991
- err,
4992
- "forget_failed",
4993
- logWorkspaceMemoryExtractionError
4994
- );
4995
- res.status(publicErrorStatus(code)).json({
4996
- error: publicErrorMessage(code, "forget"),
4997
- code
4998
- });
4999
- }
4962
+ app.post(`${basePath}/forget`, mutate({ strict: true }), async (req, res) => {
4963
+ const deps = resolveRouteDeps(req, res, {
4964
+ creating: true,
4965
+ kind: "forget"
4966
+ });
4967
+ if (!deps) return;
4968
+ const assertGenerationOpen = deps.captureGenerationAssertion?.();
4969
+ if (!requireOpenGeneration(assertGenerationOpen, res)) return;
4970
+ if (!requireTrustedWorkspace(deps, res)) return;
4971
+ const body = deps.safeBody(req);
4972
+ const query = body["query"];
4973
+ const trimmedQuery = typeof query === "string" ? query.trim() : "";
4974
+ if (!trimmedQuery) {
4975
+ res.status(400).json({
4976
+ error: "`query` must be a non-empty string",
4977
+ code: "invalid_query"
4978
+ });
4979
+ return;
5000
4980
  }
5001
- );
4981
+ if (Buffer.byteLength(trimmedQuery, "utf8") > MAX_REMEMBER_CONTENT_BYTES) {
4982
+ res.status(400).json({
4983
+ error: `\`query\` exceeds the ${MAX_REMEMBER_CONTENT_BYTES}-byte limit`,
4984
+ code: "invalid_query"
4985
+ });
4986
+ return;
4987
+ }
4988
+ const originatorClientId = validateOriginatorClientId(deps, req, res);
4989
+ if (originatorClientId === null) return;
4990
+ if (!await validateManagedMemoryAvailable(
4991
+ deps,
4992
+ res,
4993
+ "forget",
4994
+ assertGenerationOpen
4995
+ ))
4996
+ return;
4997
+ if (!requireOpenGeneration(assertGenerationOpen, res)) return;
4998
+ try {
4999
+ const task = deps.lane.enqueueForget({
5000
+ query: trimmedQuery,
5001
+ ...originatorClientId ? { originatorClientId } : {},
5002
+ ...assertGenerationOpen ? { assertGenerationOpen } : {}
5003
+ });
5004
+ res.status(202).json(task);
5005
+ } catch (err) {
5006
+ const code = workspaceMemoryFailureCode(
5007
+ err,
5008
+ "forget_failed",
5009
+ logWorkspaceMemoryExtractionError
5010
+ );
5011
+ res.status(publicErrorStatus(code)).json({
5012
+ error: publicErrorMessage(code, "forget"),
5013
+ code
5014
+ });
5015
+ }
5016
+ });
5002
5017
  app.get(
5003
- "/workspace/memory/forget/:taskId",
5004
- deps.mutate({ strict: true }),
5018
+ `${basePath}/forget/:taskId`,
5019
+ mutate({ strict: true }),
5005
5020
  (req, res) => {
5021
+ const deps = resolveRouteDeps(req, res, {
5022
+ creating: false,
5023
+ kind: "forget"
5024
+ });
5025
+ if (!deps) return;
5006
5026
  const assertGenerationOpen = deps.captureGenerationAssertion?.();
5007
5027
  if (!requireOpenGeneration(assertGenerationOpen, res)) return;
5008
5028
  if (!requireTrustedWorkspace(deps, res)) return;
@@ -5023,68 +5043,88 @@ function mountWorkspaceMemoryRememberRoutes(app, deps) {
5023
5043
  res.status(200).json(task);
5024
5044
  }
5025
5045
  );
5026
- app.post(
5027
- "/workspace/memory/dream",
5028
- deps.mutate({ strict: true }),
5029
- async (req, res) => {
5030
- const assertGenerationOpen = deps.captureGenerationAssertion?.();
5031
- if (!requireOpenGeneration(assertGenerationOpen, res)) return;
5032
- if (!requireTrustedWorkspace(deps, res)) return;
5033
- const originatorClientId = validateOriginatorClientId(deps, req, res);
5034
- if (originatorClientId === null) return;
5035
- if (!await validateManagedMemoryAvailable(
5036
- deps,
5037
- res,
5038
- "dream",
5039
- assertGenerationOpen
5040
- ))
5041
- return;
5042
- if (!requireOpenGeneration(assertGenerationOpen, res)) return;
5043
- try {
5044
- const task = deps.lane.enqueueDream({
5045
- ...originatorClientId ? { originatorClientId } : {},
5046
- ...assertGenerationOpen ? { assertGenerationOpen } : {}
5047
- });
5048
- res.status(202).json(task);
5049
- } catch (err) {
5050
- const code = workspaceMemoryFailureCode(
5051
- err,
5052
- "dream_failed",
5053
- logWorkspaceMemoryExtractionError
5054
- );
5055
- res.status(publicErrorStatus(code)).json({
5056
- error: publicErrorMessage(code, "dream"),
5057
- code
5058
- });
5059
- }
5060
- }
5061
- );
5062
- app.get(
5063
- "/workspace/memory/dream/:taskId",
5064
- deps.mutate({ strict: true }),
5065
- (req, res) => {
5066
- const assertGenerationOpen = deps.captureGenerationAssertion?.();
5067
- if (!requireOpenGeneration(assertGenerationOpen, res)) return;
5068
- if (!requireTrustedWorkspace(deps, res)) return;
5069
- const requesterClientId = validateOriginatorClientId(deps, req, res);
5070
- if (requesterClientId === null) return;
5071
- const task = deps.lane.get(
5072
- req.params["taskId"],
5073
- requesterClientId,
5074
- "dream"
5046
+ app.post(`${basePath}/dream`, mutate({ strict: true }), async (req, res) => {
5047
+ const deps = resolveRouteDeps(req, res, {
5048
+ creating: true,
5049
+ kind: "dream"
5050
+ });
5051
+ if (!deps) return;
5052
+ const assertGenerationOpen = deps.captureGenerationAssertion?.();
5053
+ if (!requireOpenGeneration(assertGenerationOpen, res)) return;
5054
+ if (!requireTrustedWorkspace(deps, res)) return;
5055
+ const originatorClientId = validateOriginatorClientId(deps, req, res);
5056
+ if (originatorClientId === null) return;
5057
+ if (!await validateManagedMemoryAvailable(
5058
+ deps,
5059
+ res,
5060
+ "dream",
5061
+ assertGenerationOpen
5062
+ ))
5063
+ return;
5064
+ if (!requireOpenGeneration(assertGenerationOpen, res)) return;
5065
+ try {
5066
+ const task = deps.lane.enqueueDream({
5067
+ ...originatorClientId ? { originatorClientId } : {},
5068
+ ...assertGenerationOpen ? { assertGenerationOpen } : {}
5069
+ });
5070
+ res.status(202).json(task);
5071
+ } catch (err) {
5072
+ const code = workspaceMemoryFailureCode(
5073
+ err,
5074
+ "dream_failed",
5075
+ logWorkspaceMemoryExtractionError
5075
5076
  );
5076
- if (!task) {
5077
- res.status(404).json({
5078
- error: "Workspace memory dream task not found",
5079
- code: "dream_task_not_found"
5080
- });
5081
- return;
5082
- }
5083
- res.status(200).json(task);
5077
+ res.status(publicErrorStatus(code)).json({
5078
+ error: publicErrorMessage(code, "dream"),
5079
+ code
5080
+ });
5084
5081
  }
5082
+ });
5083
+ app.get(`${basePath}/dream/:taskId`, mutate({ strict: true }), (req, res) => {
5084
+ const deps = resolveRouteDeps(req, res, {
5085
+ creating: false,
5086
+ kind: "dream"
5087
+ });
5088
+ if (!deps) return;
5089
+ const assertGenerationOpen = deps.captureGenerationAssertion?.();
5090
+ if (!requireOpenGeneration(assertGenerationOpen, res)) return;
5091
+ if (!requireTrustedWorkspace(deps, res)) return;
5092
+ const requesterClientId = validateOriginatorClientId(deps, req, res);
5093
+ if (requesterClientId === null) return;
5094
+ const task = deps.lane.get(
5095
+ req.params["taskId"],
5096
+ requesterClientId,
5097
+ "dream"
5098
+ );
5099
+ if (!task) {
5100
+ res.status(404).json({
5101
+ error: "Workspace memory dream task not found",
5102
+ code: "dream_task_not_found"
5103
+ });
5104
+ return;
5105
+ }
5106
+ res.status(200).json(task);
5107
+ });
5108
+ }
5109
+ __name(mountWorkspaceMemoryRememberRoutesAt, "mountWorkspaceMemoryRememberRoutesAt");
5110
+ function mountWorkspaceMemoryRememberRoutes(app, deps) {
5111
+ mountWorkspaceMemoryRememberRoutesAt(
5112
+ app,
5113
+ "/workspace/memory",
5114
+ deps.mutate,
5115
+ () => deps
5085
5116
  );
5086
5117
  }
5087
5118
  __name(mountWorkspaceMemoryRememberRoutes, "mountWorkspaceMemoryRememberRoutes");
5119
+ function mountWorkspaceQualifiedMemoryRememberRoutes(app, deps) {
5120
+ mountWorkspaceMemoryRememberRoutesAt(
5121
+ app,
5122
+ "/workspaces/:workspace/memory",
5123
+ deps.mutate,
5124
+ deps.resolveRouteDeps
5125
+ );
5126
+ }
5127
+ __name(mountWorkspaceQualifiedMemoryRememberRoutes, "mountWorkspaceQualifiedMemoryRememberRoutes");
5088
5128
 
5089
5129
  // packages/cli/src/serve/workspace-memory.ts
5090
5130
  init_esbuild_shims();
@@ -14850,6 +14890,16 @@ function mountAcpHttp(app, bridge, opts) {
14850
14890
  memoryTasks: mount?.workspaceRememberLane.pendingCount() ?? 0
14851
14891
  };
14852
14892
  }, "getWorkspaceActivity"),
14893
+ ensureWorkspaceRememberLane: /* @__PURE__ */ __name((workspaceId) => {
14894
+ if (disposed) return void 0;
14895
+ const existing = mountForWorkspace(workspaceId);
14896
+ if (existing) return existing.workspaceRememberLane;
14897
+ const rt = opts.workspaceRegistry?.getByWorkspaceId(workspaceId);
14898
+ if (!rt) return void 0;
14899
+ const mount = getOrCreateSecondaryMount(rt);
14900
+ return mount?.workspaceRememberLane;
14901
+ }, "ensureWorkspaceRememberLane"),
14902
+ getWorkspaceRememberLane: /* @__PURE__ */ __name((workspaceId) => mountForWorkspace(workspaceId)?.workspaceRememberLane, "getWorkspaceRememberLane"),
14853
14903
  commitWorkspaceRemoval: /* @__PURE__ */ __name((workspaceId) => {
14854
14904
  const mount = secondaryMounts.get(workspaceId);
14855
14905
  mount?.workspaceRememberLane.dispose();
@@ -20035,6 +20085,12 @@ var legacySessionTelemetryRoutes = [
20035
20085
  attribution: "handler_resolved",
20036
20086
  route: "POST /session/:id/mid-turn-message"
20037
20087
  },
20088
+ {
20089
+ method: "DELETE",
20090
+ path: "/session/:id/mid-turn-messages/:messageId",
20091
+ attribution: "handler_resolved",
20092
+ route: "DELETE /session/:id/mid-turn-messages/:messageId"
20093
+ },
20038
20094
  {
20039
20095
  method: "GET",
20040
20096
  path: "/session/:id/pending-prompts",
@@ -22013,6 +22069,7 @@ __name(createWorkspaceRuntimeSessionService, "createWorkspaceRuntimeSessionServi
22013
22069
  var GIT_RESERVED_BRANCH = "HEAD";
22014
22070
  var MAX_BRANCH_NAME_BYTES = 1e3;
22015
22071
  var MAX_BRANCH_COMPONENT_BYTES = 200;
22072
+ var HTTP_SESSION_ID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
22016
22073
  var WORKSPACE_TRANSCRIPT_RESPONSE_MAX_BYTES = 32 * 1024 * 1024;
22017
22074
  var WORKSPACE_TRANSCRIPT_CURSOR_MAX_BYTES = 64 * 1024;
22018
22075
  var TRANSCRIPT_CURSOR_TOO_LARGE_REPLAY_ERROR = "Transcript pagination state exceeds the safe limit";
@@ -22172,6 +22229,15 @@ function shouldPreserveTranscriptResolutionError(err) {
22172
22229
  return err instanceof SessionArchivedError || err instanceof SessionConflictError || err instanceof SessionNotFoundError;
22173
22230
  }
22174
22231
  __name(shouldPreserveTranscriptResolutionError, "shouldPreserveTranscriptResolutionError");
22232
+ function isSessionLive(bridge, sessionId) {
22233
+ try {
22234
+ bridge.getSessionSummary(sessionId);
22235
+ return true;
22236
+ } catch (err) {
22237
+ return !(err instanceof SessionNotFoundError);
22238
+ }
22239
+ }
22240
+ __name(isSessionLive, "isSessionLive");
22175
22241
  function parseOptionalApprovalMode(body, res) {
22176
22242
  const rawApprovalMode = body["approvalMode"];
22177
22243
  if (rawApprovalMode === void 0) {
@@ -22206,6 +22272,7 @@ function registerSessionRoutes(app, deps) {
22206
22272
  const transcriptCursorCodecs = /* @__PURE__ */ new Map();
22207
22273
  const activeBranchSessions = /* @__PURE__ */ new Map();
22208
22274
  const inFlightBranchWorkspaces = /* @__PURE__ */ new Set();
22275
+ const inFlightSessionIds = /* @__PURE__ */ new Set();
22209
22276
  const clearBranchSessionEntry = /* @__PURE__ */ __name((sessionId) => {
22210
22277
  for (const [cwd, sid] of activeBranchSessions) {
22211
22278
  if (sid === sessionId) {
@@ -22833,201 +22900,246 @@ function registerSessionRoutes(app, deps) {
22833
22900
  }
22834
22901
  const clientId = parseClientIdHeader(req, res);
22835
22902
  if (clientId === null) return;
22836
- let branchMeta;
22837
- let branchBaseCommit;
22838
- const rawBranch = body["branch"];
22839
- if (rawBranch !== void 0 && rawBranch !== null) {
22840
- if (body["worktree"] !== void 0 && body["worktree"] !== null) {
22903
+ const rawSessionId = body["sessionId"];
22904
+ let requestedSessionId;
22905
+ if (rawSessionId !== void 0 && rawSessionId !== null) {
22906
+ if (typeof rawSessionId !== "string" || !HTTP_SESSION_ID_REGEX.test(rawSessionId)) {
22841
22907
  res.status(400).json({
22842
- error: "`branch` and `worktree` are mutually exclusive",
22843
- code: "branch_and_worktree_conflict"
22908
+ error: '`sessionId` must be a UUID (e.g. "550e8400-e29b-41d4-a716-446655440000")',
22909
+ code: "invalid_session_id"
22844
22910
  });
22845
22911
  return;
22846
22912
  }
22847
- if (typeof rawBranch !== "object" || Array.isArray(rawBranch)) {
22848
- res.status(400).json({
22849
- error: '`branch` must be an object (e.g. `{"name":"feat/my-feature"}`)',
22850
- code: "invalid_branch"
22913
+ requestedSessionId = rawSessionId.toLowerCase();
22914
+ const sessionIdToCheck = requestedSessionId;
22915
+ if (isSessionLive(runtime.bridge, sessionIdToCheck)) {
22916
+ res.status(409).json({
22917
+ error: `Session "${requestedSessionId}" already exists`,
22918
+ code: "session_id_conflict"
22851
22919
  });
22852
22920
  return;
22853
22921
  }
22854
- const branchReq = rawBranch;
22855
- const branchName = branchReq["name"];
22856
- if (typeof branchName !== "string" || branchName.length === 0) {
22857
- res.status(400).json({
22858
- error: "`branch.name` must be a non-empty string",
22859
- code: "branch_invalid_name"
22922
+ const runtimeOutputDir = loadSettingsCached(workspaceCwd).merged.advanced?.runtimeOutputDir;
22923
+ if (await Storage.runWithRuntimeBaseDir(
22924
+ runtimeOutputDir,
22925
+ workspaceCwd,
22926
+ () => new SessionService(workspaceCwd).sessionExistsInAnyState(
22927
+ sessionIdToCheck
22928
+ )
22929
+ )) {
22930
+ res.status(409).json({
22931
+ error: `Session "${requestedSessionId}" already exists`,
22932
+ code: "session_id_conflict"
22860
22933
  });
22861
22934
  return;
22862
22935
  }
22863
- if (/[^\p{L}\p{N}._/-]/u.test(branchName) || branchName.includes("..") || branchName.includes("//") || branchName.startsWith(".") || branchName.startsWith("-") || branchName.startsWith("/") || branchName.endsWith("/") || branchName.endsWith(".") || branchName.endsWith(".git") || branchName.includes("@{") || branchName.split("/").some((c) => c.startsWith(".") || c.endsWith(".lock")) || branchName.toUpperCase() === GIT_RESERVED_BRANCH || Buffer.byteLength(branchName, "utf8") > MAX_BRANCH_NAME_BYTES || branchName.split("/").some(
22864
- (c) => Buffer.byteLength(c, "utf8") > MAX_BRANCH_COMPONENT_BYTES
22865
- )) {
22866
- res.status(400).json({
22867
- error: `Invalid branch name: ${branchName}`,
22868
- code: "branch_invalid_name"
22936
+ if (inFlightSessionIds.has(requestedSessionId)) {
22937
+ res.status(409).json({
22938
+ error: `Session "${requestedSessionId}" creation already in progress`,
22939
+ code: "session_id_conflict"
22869
22940
  });
22870
22941
  return;
22871
22942
  }
22872
- const existingBranchSession = activeBranchSessions.get(workspaceCwd);
22873
- if (existingBranchSession) {
22874
- try {
22875
- runtime.bridge.getSessionSummary(existingBranchSession);
22943
+ inFlightSessionIds.add(requestedSessionId);
22944
+ }
22945
+ let branchMeta;
22946
+ let branchBaseCommit;
22947
+ let worktreeMeta;
22948
+ try {
22949
+ const rawBranch = body["branch"];
22950
+ if (rawBranch !== void 0 && rawBranch !== null) {
22951
+ if (body["worktree"] !== void 0 && body["worktree"] !== null) {
22952
+ res.status(400).json({
22953
+ error: "`branch` and `worktree` are mutually exclusive",
22954
+ code: "branch_and_worktree_conflict"
22955
+ });
22956
+ return;
22957
+ }
22958
+ if (typeof rawBranch !== "object" || Array.isArray(rawBranch)) {
22959
+ res.status(400).json({
22960
+ error: '`branch` must be an object (e.g. `{"name":"feat/my-feature"}`)',
22961
+ code: "invalid_branch"
22962
+ });
22963
+ return;
22964
+ }
22965
+ const branchReq = rawBranch;
22966
+ const branchName = branchReq["name"];
22967
+ if (typeof branchName !== "string" || branchName.length === 0) {
22968
+ res.status(400).json({
22969
+ error: "`branch.name` must be a non-empty string",
22970
+ code: "branch_invalid_name"
22971
+ });
22972
+ return;
22973
+ }
22974
+ if (/[^\p{L}\p{N}._/-]/u.test(branchName) || branchName.includes("..") || branchName.includes("//") || branchName.startsWith(".") || branchName.startsWith("-") || branchName.startsWith("/") || branchName.endsWith("/") || branchName.endsWith(".") || branchName.endsWith(".git") || branchName.includes("@{") || branchName.split("/").some((c) => c.startsWith(".") || c.endsWith(".lock")) || branchName.toUpperCase() === GIT_RESERVED_BRANCH || Buffer.byteLength(branchName, "utf8") > MAX_BRANCH_NAME_BYTES || branchName.split("/").some(
22975
+ (c) => Buffer.byteLength(c, "utf8") > MAX_BRANCH_COMPONENT_BYTES
22976
+ )) {
22977
+ res.status(400).json({
22978
+ error: `Invalid branch name: ${branchName}`,
22979
+ code: "branch_invalid_name"
22980
+ });
22981
+ return;
22982
+ }
22983
+ const existingBranchSession = activeBranchSessions.get(workspaceCwd);
22984
+ if (existingBranchSession) {
22985
+ try {
22986
+ runtime.bridge.getSessionSummary(existingBranchSession);
22987
+ res.status(409).json({
22988
+ error: "A branch session is already active for this workspace",
22989
+ code: "branch_session_conflict",
22990
+ existingSessionId: existingBranchSession
22991
+ });
22992
+ return;
22993
+ } catch {
22994
+ activeBranchSessions.delete(workspaceCwd);
22995
+ }
22996
+ }
22997
+ const sharedCheckoutSession = runtime.bridge.listWorkspaceSessions(workspaceCwd).find((session2) => !session2.worktree && session2.clientCount > 0);
22998
+ if (sharedCheckoutSession) {
22876
22999
  res.status(409).json({
22877
- error: "A branch session is already active for this workspace",
23000
+ error: "Another session is already active in this workspace; creating a branch would move its shared checkout",
22878
23001
  code: "branch_session_conflict",
22879
- existingSessionId: existingBranchSession
23002
+ existingSessionId: sharedCheckoutSession.sessionId
22880
23003
  });
22881
23004
  return;
23005
+ }
23006
+ let wtService;
23007
+ try {
23008
+ wtService = new GitWorktreeService(workspaceCwd);
22882
23009
  } catch {
22883
- activeBranchSessions.delete(workspaceCwd);
23010
+ res.status(500).json({
23011
+ error: "Failed to initialize git service",
23012
+ code: "branch_init_failed"
23013
+ });
23014
+ return;
22884
23015
  }
23016
+ if (!await wtService.isGitRepository()) {
23017
+ res.status(400).json({
23018
+ error: "Branch creation requires a git repository",
23019
+ code: "branch_not_git_repo"
23020
+ });
23021
+ return;
23022
+ }
23023
+ if (await branchExists(workspaceCwd, branchName)) {
23024
+ res.status(409).json({
23025
+ error: `Branch "${branchName}" already exists`,
23026
+ code: "branch_already_exists"
23027
+ });
23028
+ return;
23029
+ }
23030
+ let dirty;
23031
+ try {
23032
+ dirty = await isDirtyTree(workspaceCwd);
23033
+ } catch {
23034
+ res.status(500).json({
23035
+ error: "Failed to check working tree status",
23036
+ code: "branch_status_failed"
23037
+ });
23038
+ return;
23039
+ }
23040
+ if (dirty) {
23041
+ res.status(409).json({
23042
+ error: "Uncommitted changes detected. Commit or stash first.",
23043
+ code: "branch_dirty_tree"
23044
+ });
23045
+ return;
23046
+ }
23047
+ const baseCommit = await getHeadCommit(workspaceCwd);
23048
+ const baseBranch = await wtService.getCurrentBranch().catch(() => "HEAD");
23049
+ if (inFlightBranchWorkspaces.has(workspaceCwd) || activeBranchSessions.has(workspaceCwd)) {
23050
+ res.status(409).json({
23051
+ error: "A branch session is already being created for this workspace",
23052
+ code: "branch_session_conflict"
23053
+ });
23054
+ return;
23055
+ }
23056
+ inFlightBranchWorkspaces.add(workspaceCwd);
23057
+ try {
23058
+ await createBranch(workspaceCwd, branchName);
23059
+ } catch (checkoutErr) {
23060
+ daemonLog?.warn("branch checkout failed", {
23061
+ error: checkoutErr instanceof Error ? checkoutErr.message : String(checkoutErr)
23062
+ });
23063
+ await rollbackBranchCreation(
23064
+ workspaceCwd,
23065
+ { name: branchName, baseBranch },
23066
+ baseCommit,
23067
+ daemonLog
23068
+ );
23069
+ res.status(500).json({
23070
+ error: "Failed to create branch",
23071
+ code: "branch_checkout_failed"
23072
+ });
23073
+ return;
23074
+ }
23075
+ branchMeta = { name: branchName, baseBranch };
23076
+ branchBaseCommit = baseCommit;
23077
+ sessionScope = "thread";
22885
23078
  }
22886
- const sharedCheckoutSession = runtime.bridge.listWorkspaceSessions(workspaceCwd).find((session) => !session.worktree && session.clientCount > 0);
22887
- if (sharedCheckoutSession) {
22888
- res.status(409).json({
22889
- error: "Another session is already active in this workspace; creating a branch would move its shared checkout",
22890
- code: "branch_session_conflict",
22891
- existingSessionId: sharedCheckoutSession.sessionId
22892
- });
22893
- return;
22894
- }
22895
- let wtService;
22896
- try {
22897
- wtService = new GitWorktreeService(workspaceCwd);
22898
- } catch {
22899
- res.status(500).json({
22900
- error: "Failed to initialize git service",
22901
- code: "branch_init_failed"
22902
- });
22903
- return;
22904
- }
22905
- if (!await wtService.isGitRepository()) {
22906
- res.status(400).json({
22907
- error: "Branch creation requires a git repository",
22908
- code: "branch_not_git_repo"
22909
- });
22910
- return;
22911
- }
22912
- if (await branchExists(workspaceCwd, branchName)) {
22913
- res.status(409).json({
22914
- error: `Branch "${branchName}" already exists`,
22915
- code: "branch_already_exists"
22916
- });
22917
- return;
22918
- }
22919
- let dirty;
22920
- try {
22921
- dirty = await isDirtyTree(workspaceCwd);
22922
- } catch {
22923
- res.status(500).json({
22924
- error: "Failed to check working tree status",
22925
- code: "branch_status_failed"
22926
- });
22927
- return;
22928
- }
22929
- if (dirty) {
22930
- res.status(409).json({
22931
- error: "Uncommitted changes detected. Commit or stash first.",
22932
- code: "branch_dirty_tree"
22933
- });
22934
- return;
22935
- }
22936
- const baseCommit = await getHeadCommit(workspaceCwd);
22937
- const baseBranch = await wtService.getCurrentBranch().catch(() => "HEAD");
22938
- if (inFlightBranchWorkspaces.has(workspaceCwd) || activeBranchSessions.has(workspaceCwd)) {
22939
- res.status(409).json({
22940
- error: "A branch session is already being created for this workspace",
22941
- code: "branch_session_conflict"
22942
- });
22943
- return;
22944
- }
22945
- inFlightBranchWorkspaces.add(workspaceCwd);
22946
- try {
22947
- await createBranch(workspaceCwd, branchName);
22948
- } catch (checkoutErr) {
22949
- daemonLog?.warn("branch checkout failed", {
22950
- error: checkoutErr instanceof Error ? checkoutErr.message : String(checkoutErr)
22951
- });
22952
- await rollbackBranchCreation(
22953
- workspaceCwd,
22954
- { name: branchName, baseBranch },
22955
- baseCommit,
22956
- daemonLog
22957
- );
22958
- res.status(500).json({
22959
- error: "Failed to create branch",
22960
- code: "branch_checkout_failed"
22961
- });
22962
- return;
22963
- }
22964
- branchMeta = { name: branchName, baseBranch };
22965
- branchBaseCommit = baseCommit;
22966
- sessionScope = "thread";
22967
- }
22968
- let worktreeMeta;
22969
- const rawWorktree = body["worktree"];
22970
- if (rawWorktree !== void 0 && rawWorktree !== null) {
22971
- if (typeof rawWorktree !== "object" || Array.isArray(rawWorktree)) {
22972
- res.status(400).json({
22973
- error: '`worktree` must be an object (e.g. `{}` or `{"slug":"my-task"}`)',
22974
- code: "invalid_worktree"
22975
- });
22976
- return;
22977
- }
22978
- const wtReq = rawWorktree;
22979
- let wtService;
22980
- try {
22981
- wtService = new GitWorktreeService(workspaceCwd);
22982
- } catch {
22983
- res.status(500).json({
22984
- error: "Failed to initialize worktree service",
22985
- code: "worktree_init_failed"
22986
- });
22987
- return;
22988
- }
22989
- if (!await wtService.isGitRepository()) {
22990
- res.status(400).json({
22991
- error: "Worktree isolation requires a git repository",
22992
- code: "worktree_not_git_repo"
22993
- });
22994
- return;
22995
- }
22996
- const rawSlug = wtReq["slug"];
22997
- let slug;
22998
- if (rawSlug === void 0 || rawSlug === null) {
22999
- slug = GitWorktreeService.generateAutoSlug();
23000
- } else if (typeof rawSlug !== "string" || rawSlug.length === 0) {
23001
- res.status(400).json({
23002
- error: "`worktree.slug` must be a non-empty string when provided",
23003
- code: "worktree_invalid_slug"
23004
- });
23005
- return;
23006
- } else {
23007
- slug = rawSlug;
23008
- }
23009
- const slugError = GitWorktreeService.validateUserWorktreeSlug(slug);
23010
- if (slugError) {
23011
- res.status(400).json({ error: slugError, code: "worktree_invalid_slug" });
23012
- return;
23079
+ const rawWorktree = body["worktree"];
23080
+ if (rawWorktree !== void 0 && rawWorktree !== null) {
23081
+ if (typeof rawWorktree !== "object" || Array.isArray(rawWorktree)) {
23082
+ res.status(400).json({
23083
+ error: '`worktree` must be an object (e.g. `{}` or `{"slug":"my-task"}`)',
23084
+ code: "invalid_worktree"
23085
+ });
23086
+ return;
23087
+ }
23088
+ const wtReq = rawWorktree;
23089
+ let wtService;
23090
+ try {
23091
+ wtService = new GitWorktreeService(workspaceCwd);
23092
+ } catch {
23093
+ res.status(500).json({
23094
+ error: "Failed to initialize worktree service",
23095
+ code: "worktree_init_failed"
23096
+ });
23097
+ return;
23098
+ }
23099
+ if (!await wtService.isGitRepository()) {
23100
+ res.status(400).json({
23101
+ error: "Worktree isolation requires a git repository",
23102
+ code: "worktree_not_git_repo"
23103
+ });
23104
+ return;
23105
+ }
23106
+ const rawSlug = wtReq["slug"];
23107
+ let slug;
23108
+ if (rawSlug === void 0 || rawSlug === null) {
23109
+ slug = GitWorktreeService.generateAutoSlug();
23110
+ } else if (typeof rawSlug !== "string" || rawSlug.length === 0) {
23111
+ res.status(400).json({
23112
+ error: "`worktree.slug` must be a non-empty string when provided",
23113
+ code: "worktree_invalid_slug"
23114
+ });
23115
+ return;
23116
+ } else {
23117
+ slug = rawSlug;
23118
+ }
23119
+ const slugError = GitWorktreeService.validateUserWorktreeSlug(slug);
23120
+ if (slugError) {
23121
+ res.status(400).json({ error: slugError, code: "worktree_invalid_slug" });
23122
+ return;
23123
+ }
23124
+ const baseBranch = await wtService.getCurrentBranch().catch(() => void 0);
23125
+ const wtResult = await wtService.createUserWorktree(slug, baseBranch);
23126
+ if (!wtResult.success || !wtResult.worktree) {
23127
+ res.status(500).json({
23128
+ error: wtResult.error ?? "Failed to create worktree",
23129
+ code: "worktree_create_failed"
23130
+ });
23131
+ return;
23132
+ }
23133
+ worktreeMeta = {
23134
+ slug,
23135
+ path: wtResult.worktree.path,
23136
+ branch: wtResult.worktree.branch
23137
+ };
23138
+ sessionScope = "thread";
23013
23139
  }
23014
- const baseBranch = await wtService.getCurrentBranch().catch(() => void 0);
23015
- const wtResult = await wtService.createUserWorktree(slug, baseBranch);
23016
- if (!wtResult.success || !wtResult.worktree) {
23017
- res.status(500).json({
23018
- error: wtResult.error ?? "Failed to create worktree",
23019
- code: "worktree_create_failed"
23020
- });
23021
- return;
23140
+ if (requestedSessionId !== void 0) {
23141
+ sessionScope = "thread";
23022
23142
  }
23023
- worktreeMeta = {
23024
- slug,
23025
- path: wtResult.worktree.path,
23026
- branch: wtResult.worktree.branch
23027
- };
23028
- sessionScope = "thread";
23029
- }
23030
- try {
23031
23143
  const session = await runtime.bridge.spawnOrAttach({
23032
23144
  workspaceCwd,
23033
23145
  modelServiceId,
@@ -23037,8 +23149,45 @@ function registerSessionRoutes(app, deps) {
23037
23149
  ...source.sourceType !== void 0 ? { sourceType: source.sourceType } : {},
23038
23150
  ...source.sourceId !== void 0 ? { sourceId: source.sourceId } : {},
23039
23151
  ...worktreeMeta ? { worktree: worktreeMeta } : {},
23040
- ...branchMeta ? { branch: branchMeta } : {}
23152
+ ...branchMeta ? { branch: branchMeta } : {},
23153
+ ...requestedSessionId !== void 0 ? { sessionId: requestedSessionId } : {}
23041
23154
  });
23155
+ if (requestedSessionId !== void 0 && session.sessionId !== requestedSessionId) {
23156
+ if (daemonLog) {
23157
+ daemonLog.warn("session id not honored by agent", {
23158
+ requested: requestedSessionId,
23159
+ actual: session.sessionId
23160
+ });
23161
+ }
23162
+ if (!session.attached) {
23163
+ await runWithWorkspaceRuntimeStorage(
23164
+ runtime,
23165
+ () => deleteDaemonSessionIfOrphan({
23166
+ sessionId: session.sessionId,
23167
+ service: createWorkspaceRuntimeSessionService(runtime),
23168
+ bridge: runtime.bridge,
23169
+ coordinator: archiveCoordinator
23170
+ })
23171
+ ).catch(() => false);
23172
+ }
23173
+ if (worktreeMeta) {
23174
+ await new GitWorktreeService(workspaceCwd).removeUserWorktree(worktreeMeta.slug, { deleteBranch: true }).catch(() => {
23175
+ });
23176
+ }
23177
+ if (branchMeta) {
23178
+ await rollbackBranchCreation(
23179
+ workspaceCwd,
23180
+ branchMeta,
23181
+ branchBaseCommit,
23182
+ daemonLog
23183
+ );
23184
+ }
23185
+ res.status(500).json({
23186
+ error: "Agent did not honor the requested session id",
23187
+ code: "session_id_not_honored"
23188
+ });
23189
+ return;
23190
+ }
23042
23191
  try {
23043
23192
  runtime.generationGuard?.assertOpen();
23044
23193
  } catch (error2) {
@@ -23210,6 +23359,10 @@ function registerSessionRoutes(app, deps) {
23210
23359
  );
23211
23360
  }
23212
23361
  sendBridgeError2(res, err, { route: "POST /session" });
23362
+ } finally {
23363
+ if (requestedSessionId !== void 0) {
23364
+ inFlightSessionIds.delete(requestedSessionId);
23365
+ }
23213
23366
  }
23214
23367
  });
23215
23368
  const restoreSessionHandler = /* @__PURE__ */ __name((action) => async (req, res) => {
@@ -25346,6 +25499,28 @@ function registerSessionRoutes(app, deps) {
25346
25499
  }
25347
25500
  )
25348
25501
  );
25502
+ app.delete(
25503
+ "/session/:id/mid-turn-messages/:messageId",
25504
+ mutate(),
25505
+ withOwnerMutableSession(
25506
+ "DELETE /session/:id/mid-turn-messages/:messageId",
25507
+ (req, res, sessionId, runtime) => {
25508
+ const clientId = parseClientIdHeader(req, res);
25509
+ if (clientId === null) return;
25510
+ const messageId = req.params["messageId"];
25511
+ if (!messageId) {
25512
+ res.status(400).json({ error: "`messageId` route parameter is required" });
25513
+ return;
25514
+ }
25515
+ const result = runtime.bridge.removeMidTurnMessage(
25516
+ sessionId,
25517
+ messageId,
25518
+ clientId !== void 0 ? { clientId } : void 0
25519
+ );
25520
+ res.status(200).json(result);
25521
+ }
25522
+ )
25523
+ );
25349
25524
  app.get("/session/:id/pending-prompts", (req, res) => {
25350
25525
  const sessionId = requireSessionId(req, res);
25351
25526
  if (sessionId === null) return;
@@ -27423,7 +27598,7 @@ init_esbuild_shims();
27423
27598
 
27424
27599
  // packages/cli/src/serve/server/serve-features.ts
27425
27600
  init_esbuild_shims();
27426
- var DEFAULT_MAX_SESSIONS = 20;
27601
+ var DEFAULT_MAX_SESSIONS = 32;
27427
27602
  var DEFAULT_MAX_PENDING_PROMPTS_PER_SESSION = 5;
27428
27603
  var SERVE_LANGUAGE_CODES = [
27429
27604
  ...SUPPORTED_LANGUAGES.map((language) => language.code),
@@ -27843,6 +28018,8 @@ var TUI_ONLY_SETTINGS = /* @__PURE__ */ new Set([
27843
28018
  "ui.showLineNumbers",
27844
28019
  "ui.renderMode",
27845
28020
  "ui.useTerminalBuffer",
28021
+ "ui.mouseTracking",
28022
+ "ui.showScrollbar",
27846
28023
  "ui.hideBanner",
27847
28024
  "ui.accessibility.enableLoadingPhrases",
27848
28025
  "ui.enableWelcomeBack"
@@ -30596,9 +30773,18 @@ function registerWorkspaceManagementRoutes(app, deps) {
30596
30773
  }
30597
30774
  }
30598
30775
  );
30776
+ const protectExistingWorkspaceRegistration = mutate({ strict: true });
30599
30777
  app.post(
30600
30778
  "/workspaces",
30601
- mutate({ strict: true }),
30779
+ mutate(),
30780
+ (req, res, next) => {
30781
+ const body = safeBody2(req);
30782
+ if (body["kind"] === "scratch") {
30783
+ next();
30784
+ return;
30785
+ }
30786
+ protectExistingWorkspaceRegistration(req, res, next);
30787
+ },
30602
30788
  async (req, res) => {
30603
30789
  const body = safeBody2(req);
30604
30790
  if ("kind" in body) {
@@ -35387,6 +35573,49 @@ function createServeApp(opts, getPort = () => opts.port, deps = {}) {
35387
35573
  isWorkspaceTrusted: isPrimaryWorkspaceTrusted,
35388
35574
  captureGenerationAssertion: capturePrimaryGenerationAssertion
35389
35575
  });
35576
+ mountWorkspaceQualifiedMemoryRememberRoutes(app, {
35577
+ mutate,
35578
+ resolveRouteDeps: /* @__PURE__ */ __name((req, res, { creating, kind }) => {
35579
+ const runtime = resolveWorkspaceRuntimeFromParam(
35580
+ workspaceRegistry,
35581
+ req,
35582
+ res
35583
+ );
35584
+ if (!runtime || !requireTrustedWorkspaceRuntime(runtime, res))
35585
+ return null;
35586
+ const handle = acpHandleRef.current;
35587
+ const lane = runtime.primary ? workspaceRememberLane : creating ? handle?.ensureWorkspaceRememberLane(runtime.workspaceId) : handle?.getWorkspaceRememberLane(runtime.workspaceId);
35588
+ if (!lane) {
35589
+ if (!handle) {
35590
+ res.status(501).json({
35591
+ error: "Workspace-qualified memory is not enabled on this daemon.",
35592
+ code: "workspace_memory_unavailable",
35593
+ workspaceCwd: runtime.workspaceCwd,
35594
+ workspaceId: runtime.workspaceId
35595
+ });
35596
+ } else if (!creating) {
35597
+ res.status(404).json({
35598
+ error: `Workspace memory ${kind} task not found`,
35599
+ code: `${kind}_task_not_found`
35600
+ });
35601
+ } else {
35602
+ sendWorkspaceRuntimeUnavailable(res, runtime);
35603
+ }
35604
+ return null;
35605
+ }
35606
+ return {
35607
+ bridge: runtime.bridge,
35608
+ lane,
35609
+ parseClientId: parseClientIdHeader,
35610
+ safeBody,
35611
+ isWorkspaceTrusted: /* @__PURE__ */ __name(() => runtime.trusted, "isWorkspaceTrusted"),
35612
+ captureGenerationAssertion: /* @__PURE__ */ __name(() => {
35613
+ const guard = runtime.generationGuard;
35614
+ return guard ? () => guard.assertOpen() : void 0;
35615
+ }, "captureGenerationAssertion")
35616
+ };
35617
+ }, "resolveRouteDeps")
35618
+ });
35390
35619
  mountWorkspaceAgentsRoutes(app, {
35391
35620
  bridge: primaryBridge,
35392
35621
  boundWorkspace: primaryBoundWorkspace,