@qwen-code/qwen-code 0.22.2 → 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 (324) hide show
  1. package/bundled/computer-use/SKILL.md +3 -3
  2. package/bundled/qc-helper/docs/configuration/settings.md +37 -36
  3. package/bundled/qc-helper/docs/features/channels/dws.md +2 -0
  4. package/bundled/qc-helper/docs/features/channels/overview.md +34 -3
  5. package/bundled/qc-helper/docs/features/code-review.md +3 -3
  6. package/bundled/qc-helper/docs/features/computer-use.md +2 -2
  7. package/bundled/qc-helper/docs/features/tool-use-summaries.md +1 -1
  8. package/bundled/qc-helper/docs/qwen-serve.md +1 -1
  9. package/bundled/review/SKILL.md +81 -31
  10. package/bundled/review/references/persistence.md +7 -3
  11. package/bundled/review/references/posting.md +10 -4
  12. package/chunks/{MaxSizedBox-X5FZSNAJ.js → MaxSizedBox-X42SXBJH.js} +33 -35
  13. package/chunks/{StandaloneSessionPicker-AVLI6VJP.js → StandaloneSessionPicker-2FJAOLGG.js} +51 -53
  14. package/chunks/{acpAgent-MXEAN54C.js → acpAgent-2ZMIJAFV.js} +268 -186
  15. package/chunks/{agent-PJIPDWHB.js → agent-X5WX3L2I.js} +24 -26
  16. package/chunks/{agent-headless-B4JVD7UK.js → agent-headless-IZM25LJA.js} +24 -26
  17. package/chunks/{anthropicContentGenerator-HGMBACVE.js → anthropicContentGenerator-YVTB6QX7.js} +43 -47
  18. package/chunks/{artifact-tool-5YT4QF7Y.js → artifact-tool-XSMPHZBT.js} +9 -1
  19. package/chunks/{bridge-FKZTVIS3.js → bridge-ME6QXZNA.js} +37 -39
  20. package/chunks/{channel-management-service-X4AZ6IXX.js → channel-management-service-HQ6KDS7C.js} +6 -6
  21. package/chunks/{channel-settings-store-4UFCLBBG.js → channel-settings-store-PEOI7XCG.js} +47 -44
  22. package/chunks/{channel-worker-group-27HMGD5S.js → channel-worker-group-6NA6BBZV.js} +5 -5
  23. package/chunks/{channel-worker-manager-QEGX646Z.js → channel-worker-manager-NEZ2J6RK.js} +5 -5
  24. package/chunks/{channel-worker-supervisor-UEW2WWCC.js → channel-worker-supervisor-FKU7DIHJ.js} +4 -4
  25. package/chunks/{chunk-P5GGM4KS.js → chunk-2HYKTO7V.js} +3 -3
  26. package/chunks/{chunk-XDFHY4R3.js → chunk-2LNNVAUV.js} +2 -2
  27. package/chunks/{chunk-ZFKOCECU.js → chunk-2OBKDPZZ.js} +2 -2
  28. package/chunks/{chunk-3DXFGHAJ.js → chunk-2OUD5T67.js} +1 -1
  29. package/chunks/{chunk-EOGELB3H.js → chunk-2SXSLSQE.js} +1 -1
  30. package/chunks/{chunk-4JWNNLPT.js → chunk-2YOHKHYR.js} +2 -2
  31. package/chunks/{chunk-JU4EEXC7.js → chunk-36GSQ3MM.js} +2 -2
  32. package/chunks/chunk-36LGBEM6.js +130 -0
  33. package/chunks/{chunk-H2WDGQ6D.js → chunk-3JXM2CVW.js} +1 -1
  34. package/chunks/{chunk-G34IR3D6.js → chunk-3SZC4VP4.js} +26 -109
  35. package/chunks/{chunk-HVEYF6VT.js → chunk-3WK3QDNV.js} +1 -1
  36. package/chunks/{chunk-5XBFCMWD.js → chunk-3XKLXHGK.js} +17 -9
  37. package/chunks/{chunk-SFPGAQUL.js → chunk-42IDLQWS.js} +24 -18
  38. package/chunks/{chunk-43GGFFLY.js → chunk-4K7KNVWH.js} +1 -1
  39. package/chunks/{chunk-F6FV3C5K.js → chunk-4NDLQAY2.js} +24 -272
  40. package/chunks/{chunk-VVW4ZNFY.js → chunk-4QHPPXK2.js} +15 -7
  41. package/chunks/{chunk-IJKTMLBE.js → chunk-4TT3IVGA.js} +1 -1
  42. package/chunks/{chunk-C6K43ZDE.js → chunk-4VPCTGH6.js} +5 -5
  43. package/chunks/chunk-4VQBQLIZ.js +293 -0
  44. package/chunks/{chunk-OIVXBW3W.js → chunk-62GQFYID.js} +1 -1
  45. package/chunks/{chunk-BRVWYMKV.js → chunk-6MBXY6WM.js} +1 -1
  46. package/chunks/{chunk-AGR5UROZ.js → chunk-6X7EU5TI.js} +17 -29
  47. package/chunks/{chunk-PFCQ62V4.js → chunk-6ZPDLGHN.js} +6 -6
  48. package/chunks/{chunk-RIEFGNTP.js → chunk-734C6JGI.js} +207 -43
  49. package/chunks/{chunk-FBSSIAAQ.js → chunk-73RM4POK.js} +7 -7
  50. package/chunks/{chunk-KGJGEEVR.js → chunk-7FA2II6K.js} +10 -1
  51. package/chunks/chunk-7J6OTNGO.js +424 -0
  52. package/chunks/{chunk-O2UN57NX.js → chunk-7LOELM2I.js} +19 -2
  53. package/chunks/{chunk-DIMEPKCW.js → chunk-7S226YTK.js} +1 -1
  54. package/chunks/{chunk-CPGJJJLU.js → chunk-7T52W4SW.js} +1 -1
  55. package/chunks/{chunk-5O72BNDD.js → chunk-7VMIMAVB.js} +7 -7
  56. package/chunks/{chunk-XRSOI3DL.js → chunk-A3LWD5MK.js} +1 -1
  57. package/chunks/{chunk-F7TNAPZ4.js → chunk-AIAOIFY4.js} +5 -5
  58. package/chunks/{chunk-4CDSK5AZ.js → chunk-AYFA7MZV.js} +2 -2
  59. package/chunks/{chunk-3JGZSIDA.js → chunk-B466ZSHZ.js} +1 -1
  60. package/chunks/{chunk-L6BZRIUL.js → chunk-B5PHIJGI.js} +182 -4
  61. package/chunks/{chunk-3I6UTTDX.js → chunk-BKWNKLZB.js} +19 -19
  62. package/chunks/{chunk-3FDFA4MZ.js → chunk-BOWFGCEU.js} +1 -1
  63. package/chunks/{chunk-3AFMQUTI.js → chunk-C2X7KY45.js} +1 -1
  64. package/chunks/{chunk-FY76G3G5.js → chunk-C3PEFRKD.js} +4 -4
  65. package/chunks/{chunk-FDY5RMGH.js → chunk-CFJY4DGX.js} +1 -1
  66. package/chunks/{chunk-CCBZDVUA.js → chunk-CIZCL2MW.js} +33 -20
  67. package/chunks/{chunk-LDP5OD6N.js → chunk-CLWO3B77.js} +2 -2
  68. package/chunks/chunk-DJBQCO2E.js +842 -0
  69. package/chunks/{chunk-4J657AJR.js → chunk-DJECZIJX.js} +40 -40
  70. package/chunks/{chunk-F5SZP77N.js → chunk-DJEZ55D4.js} +71 -65
  71. package/chunks/{chunk-BAJKAAOY.js → chunk-DJPASAUV.js} +3840 -1055
  72. package/chunks/{chunk-RUGNCYNO.js → chunk-DMLVSW7L.js} +532 -22
  73. package/chunks/{chunk-4FTKQNWJ.js → chunk-DYXFD5RO.js} +181 -2
  74. package/chunks/{chunk-PDMJ3KGS.js → chunk-EB6QRGHM.js} +1 -1
  75. package/chunks/{chunk-DZWPESIF.js → chunk-EFWRMA2I.js} +3 -3
  76. package/chunks/{chunk-4MQEPP3Y.js → chunk-EQSBPBZ3.js} +5 -119
  77. package/chunks/{chunk-Z7TGYN5F.js → chunk-FROAFEFB.js} +2 -2
  78. package/chunks/{chunk-MZS7GEC7.js → chunk-FTF2YIZ5.js} +1 -1
  79. package/chunks/{chunk-Z7VOMGDC.js → chunk-FTJMWDND.js} +0 -24
  80. package/chunks/{chunk-43UYNAWX.js → chunk-G6FECKTJ.js} +2 -2
  81. package/chunks/{chunk-SJ3ZUWFK.js → chunk-GBJBJ4HX.js} +4 -4
  82. package/chunks/{chunk-IOPCFOTF.js → chunk-GPGU4S2N.js} +2 -2
  83. package/chunks/{chunk-6LFJEACX.js → chunk-GVIVASYK.js} +7 -7
  84. package/chunks/{chunk-Z4X5MTRT.js → chunk-HCOBAG2L.js} +2 -4
  85. package/chunks/{chunk-A7YP63XN.js → chunk-HP5LR5HL.js} +5 -5
  86. package/chunks/{chunk-7JPW6IYH.js → chunk-HVC3PNVC.js} +1 -1
  87. package/chunks/{chunk-TRZTNIQ6.js → chunk-I6LYRJPB.js} +2 -2
  88. package/chunks/{chunk-E55H6BZ7.js → chunk-ICURCKIU.js} +1335 -119
  89. package/chunks/{chunk-4HV6HH33.js → chunk-ISKH4QX3.js} +9 -9
  90. package/chunks/{chunk-WKK5BQNP.js → chunk-JHYH6PYQ.js} +43 -420
  91. package/chunks/{chunk-6IUNAPLR.js → chunk-K5KXUXWC.js} +1 -1
  92. package/chunks/{chunk-JHS74YAB.js → chunk-KID24ZFN.js} +1 -1
  93. package/chunks/{chunk-EFUM7RVY.js → chunk-KJO2LBUK.js} +942 -16
  94. package/chunks/{chunk-B7CDU2SL.js → chunk-KYWTPLBJ.js} +17 -20
  95. package/chunks/{chunk-JSHHYW6T.js → chunk-LHBUKJG2.js} +3 -3
  96. package/chunks/{chunk-P2SU6ZTI.js → chunk-LUEHOUHM.js} +1 -1
  97. package/chunks/{chunk-66KDY3LV.js → chunk-M3QRM3DE.js} +1 -1
  98. package/chunks/{chunk-V4QXXQJ2.js → chunk-MF7HCQWZ.js} +2 -2
  99. package/chunks/{chunk-W5MJJ2V7.js → chunk-MK2GIB46.js} +1 -1
  100. package/chunks/{chunk-Y6LSMB6J.js → chunk-MO3FC2WT.js} +1 -1
  101. package/chunks/{chunk-L6YT5H34.js → chunk-MPNBVAEU.js} +4 -4
  102. package/chunks/{chunk-CSMI4FP5.js → chunk-MSBO7X2W.js} +1 -1
  103. package/chunks/{chunk-5PA6UEYA.js → chunk-MZCJWS5Y.js} +1 -1
  104. package/chunks/{chunk-BGXZBI5B.js → chunk-N4X7G4J2.js} +2 -1
  105. package/chunks/{chunk-6LFTG244.js → chunk-NMOD2FXQ.js} +15 -5
  106. package/chunks/{chunk-KUX5D6DK.js → chunk-NV55WWD6.js} +11330 -10971
  107. package/chunks/{chunk-Q26AYA62.js → chunk-OU5APVWO.js} +2 -2
  108. package/chunks/{chunk-2K6ORIHJ.js → chunk-P2G476QN.js} +11 -11
  109. package/chunks/{chunk-OIP7C4FE.js → chunk-PADPMMYM.js} +4 -4
  110. package/chunks/{chunk-SAH4BD2J.js → chunk-PQEISIKS.js} +67 -0
  111. package/chunks/{chunk-TGWAQ5RB.js → chunk-PZ66FRIC.js} +2071 -2124
  112. package/chunks/{chunk-7UYV53BC.js → chunk-Q2MSPKIJ.js} +1 -1
  113. package/chunks/{chunk-L2M46FP5.js → chunk-QYMAKPY5.js} +5 -5
  114. package/chunks/{chunk-JVPFTDBK.js → chunk-RFIDDFAL.js} +1 -1
  115. package/chunks/chunk-SEONHUS3.js +275 -0
  116. package/chunks/{chunk-ZGXYO7DY.js → chunk-SS4MRMKE.js} +122 -13
  117. package/chunks/{chunk-T32W2JHI.js → chunk-SS5SDCD3.js} +2 -2
  118. package/chunks/{chunk-3SGB2UHX.js → chunk-ST5MDGH3.js} +23 -11
  119. package/chunks/{chunk-MIIVI25Q.js → chunk-ST5V3ZOC.js} +2 -2
  120. package/chunks/{chunk-4K7NQDCG.js → chunk-T4EFG2P5.js} +18 -9
  121. package/chunks/{chunk-TWSKM647.js → chunk-T7KMERIX.js} +1 -1
  122. package/chunks/{chunk-77RG5SFQ.js → chunk-TEBDFQBZ.js} +1 -1
  123. package/chunks/{chunk-6CGL7E7G.js → chunk-TVC6HQ2U.js} +2 -2
  124. package/chunks/{chunk-BBWV7ONL.js → chunk-TZBSGJ6C.js} +6 -6
  125. package/chunks/{chunk-T3WXYEZ4.js → chunk-U54AYGEC.js} +38 -5
  126. package/chunks/{chunk-JCQD3INC.js → chunk-URE3QBBB.js} +1 -1
  127. package/chunks/{chunk-Y3QL45LS.js → chunk-V4264FEG.js} +8 -8
  128. package/chunks/{chunk-KEKZFOL6.js → chunk-V7EESTJV.js} +1 -1
  129. package/chunks/{chunk-R4PMVSR5.js → chunk-VBCPNIQD.js} +18 -20
  130. package/chunks/{chunk-RJC5EIKY.js → chunk-VGIFXISB.js} +3 -3
  131. package/chunks/{chunk-Z7FLBQPR.js → chunk-W3JH33JE.js} +7 -7
  132. package/chunks/{chunk-K2NQPH5D.js → chunk-WGY3AVGM.js} +3 -3
  133. package/chunks/{chunk-PKAYJDB3.js → chunk-WNPDGUJO.js} +21 -2
  134. package/chunks/{chunk-IZIVM7LZ.js → chunk-WXEA74YB.js} +1 -1
  135. package/chunks/{chunk-YRLW2MSX.js → chunk-XBVNNDPK.js} +11 -4
  136. package/chunks/{chunk-IK5BW3CS.js → chunk-XHF7WQ6B.js} +2 -2
  137. package/chunks/{chunk-2NYCN6F2.js → chunk-XSG6G3G6.js} +43 -26
  138. package/chunks/{chunk-HVQ3B7FF.js → chunk-Y5S7LBOZ.js} +43 -6
  139. package/chunks/{chunk-LXIBMVRN.js → chunk-YLSQLSH7.js} +13 -7
  140. package/chunks/{chunk-JSC3H3TD.js → chunk-ZEYFMJQA.js} +14 -6
  141. package/chunks/chunk-ZWJDJ6RU.js +2597 -0
  142. package/chunks/{chunk-QP4C6WCE.js → chunk-ZYMLPEZQ.js} +2 -2
  143. package/chunks/{chunk-BNMF3K5X.js → chunk-ZZMSC3RG.js} +52 -36
  144. package/chunks/{chunk-XDLEZ5HX.js → chunk-ZZUKP7HV.js} +1 -1
  145. package/chunks/{config-utils-BBOCOGZW.js → config-utils-R6M3TA34.js} +39 -39
  146. package/chunks/{contextCommand-EET67MQ2.js → contextCommand-ZCAP23J6.js} +36 -38
  147. package/chunks/{core-runtime-677KFX6Q.js → core-runtime-AXB6SK5D.js} +41 -43
  148. package/chunks/{create-sub-session-JKZAYZX7.js → create-sub-session-4QNE64MR.js} +34 -36
  149. package/chunks/{daemon-MJQUO7RA.js → daemon-3GNHB3M2.js} +495 -7
  150. package/chunks/{daemon-git-worktree-guard-6MVAAZZZ.js → daemon-git-worktree-guard-IVAJJWYK.js} +33 -35
  151. package/chunks/{daemon-status-provider-RFKZOK3S.js → daemon-status-provider-K3SJ5C2U.js} +42 -44
  152. package/chunks/{daemon-trust-policy-DRZPFB4Q.js → daemon-trust-policy-DOR3YG62.js} +41 -43
  153. package/chunks/{daemon-trust-policy-monitor-B5U6TQX5.js → daemon-trust-policy-monitor-KGGROSIV.js} +41 -43
  154. package/chunks/{deferred-core-runtime-BBVIOP24.js → deferred-core-runtime-WOYLUQQ7.js} +33 -35
  155. package/chunks/{dist-DJBNNPLN.js → dist-4WXLCBDR.js} +1 -1
  156. package/chunks/{dist-TJUDJTCB.js → dist-5VXFRTWU.js} +280 -48
  157. package/chunks/{dist-QODVOVWI.js → dist-6BPYWHVD.js} +31 -30
  158. package/chunks/{dist-ZBVOXSKF.js → dist-GFN5DCBX.js} +74 -65
  159. package/chunks/{dist-SATKXKUR.js → dist-HZNT6GQS.js} +1 -1
  160. package/chunks/{dist-ILDBUWDB.js → dist-LVZCXVPF.js} +1 -1
  161. package/chunks/{dist-7CKN54NL.js → dist-N6W6E753.js} +71 -64
  162. package/chunks/{dist-4Q7NTUNB.js → dist-NSV4NBPK.js} +31 -14
  163. package/chunks/{dist-UQUFZDIY.js → dist-SWQMYP2Q.js} +18 -16
  164. package/chunks/{earlyInputCapture-2JOMMNQ4.js → earlyInputCapture-OHBEVO4K.js} +33 -35
  165. package/chunks/{edit-BSV6YRVW.js → edit-LEQLAGPZ.js} +24 -26
  166. package/chunks/{enter-worktree-MQXFFPKM.js → enter-worktree-35QCAAFP.js} +3 -3
  167. package/chunks/{enterPlanMode-PKNF35FE.js → enterPlanMode-ONQN3WHE.js} +27 -29
  168. package/chunks/{environment-MOZMPUHR.js → environment-UANTR7A4.js} +37 -39
  169. package/chunks/{errors-DMPQVYJL.js → errors-WAK6KFBC.js} +36 -38
  170. package/chunks/{exit-worktree-L344UY7K.js → exit-worktree-XQD6D543.js} +3 -3
  171. package/chunks/{exitPlanMode-UE4FGCY4.js → exitPlanMode-UEYBG6P5.js} +24 -26
  172. package/chunks/{fast-path-773PV7PU.js → fast-path-WUL7UZ6H.js} +4 -4
  173. package/chunks/{fast-path-settings-XMFBYFUH.js → fast-path-settings-XH426LUU.js} +3 -3
  174. package/chunks/{glob-CZHOWUEA.js → glob-Y54QUWDY.js} +24 -26
  175. package/chunks/{goal-tools-YZQJXTGH.js → goal-tools-PTD3MBA7.js} +2 -1
  176. package/chunks/{handleAutoUpdate-SGXKTQM6.js → handleAutoUpdate-FP3NWNSG.js} +37 -39
  177. package/chunks/{i18n-B42HKHKH.js → i18n-INIU5X7A.js} +35 -37
  178. package/chunks/{image-gen-HAYOEQ4O.js → image-gen-J6FDGUZP.js} +4 -6
  179. package/chunks/{initializer-FB66WYR3.js → initializer-TYODV6GE.js} +41 -43
  180. package/chunks/{installationInfo-Y7AULNMX.js → installationInfo-AAPKYDSZ.js} +33 -35
  181. package/chunks/{list-2HWGSVRA.js → list-TUODDN6J.js} +44 -46
  182. package/chunks/{gemini-IP4FJAP5.js → llm-NSAVK5V3.js} +84 -82
  183. package/chunks/{geminiContentGenerator-PUNEBWJW.js → llm-content-generator-AY2QKXHE.js} +25 -25
  184. package/chunks/{loadedSettingsAdapter-7Y7IEI6T.js → loadedSettingsAdapter-KJCLZ3C4.js} +41 -43
  185. package/chunks/{loggingContentGenerator-2GGZNGLG.js → loggingContentGenerator-DSFQHXIF.js} +305 -27
  186. package/chunks/{managed-npm-update-5TEV2E3J.js → managed-npm-update-TSWENTK5.js} +33 -35
  187. package/chunks/{mcp-QGG5NMJJ.js → mcp-MWSAPFOL.js} +41 -43
  188. package/chunks/{monitor-FI7PY36Z.js → monitor-RW4GWJHB.js} +24 -26
  189. package/chunks/{nonInteractiveCli-4LO2TL72.js → nonInteractiveCli-JXKL343Q.js} +77 -78
  190. package/chunks/{notebook-edit-TPGMGBST.js → notebook-edit-CQNYS5OR.js} +24 -26
  191. package/chunks/{open-with-auth-4UI3KHUR.js → open-with-auth-YN3QZHVM.js} +1 -1
  192. package/chunks/{openaiContentGenerator-SUCYANUZ.js → openaiContentGenerator-J6QIF7EX.js} +13 -15
  193. package/chunks/{pidfile-JMF2CLMY.js → pidfile-QOIQZFT2.js} +33 -35
  194. package/chunks/process-registry-OAEG6WGC.js +662 -0
  195. package/chunks/{processUtils-IQZBYWSB.js → processUtils-GPHNANKZ.js} +2 -2
  196. package/chunks/{prompt-terminal-ledger-DCZO6S7C.js → prompt-terminal-ledger-FOMFTYOM.js} +34 -36
  197. package/chunks/{qwenContentGenerator-J4TXFGJT.js → qwenContentGenerator-WWDXPYQI.js} +28 -30
  198. package/chunks/{qwenOAuth2-RF33DNZW.js → qwenOAuth2-OF5WRBQT.js} +4 -6
  199. package/chunks/{read-file-QE2B5FTX.js → read-file-FQUQHC6N.js} +5 -5
  200. package/chunks/{record-artifact-RZGZBENU.js → record-artifact-VW23GS4F.js} +2 -2
  201. package/chunks/{report-findings-Q3SYKKW5.js → report-findings-AO5VYFLR.js} +7 -3
  202. package/chunks/{resumeHistoryUtils-CZ4JRDVW.js → resumeHistoryUtils-NSGF3UCB.js} +37 -39
  203. package/chunks/{ripGrep-R6B6HWPX.js → ripGrep-4CAT6SKV.js} +7 -7
  204. package/chunks/{run-qwen-serve-TPHZMSXJ.js → run-qwen-serve-5X6IDZER.js} +271 -86
  205. package/chunks/{runtime-TTIGSBM4.js → runtime-HK27GMPF.js} +46 -48
  206. package/chunks/{scheduled-tasks-QB4ZVUQS.js → scheduled-tasks-MN2ZZ5P6.js} +39 -41
  207. package/chunks/{scheduler-YRUG22M7.js → scheduler-WD4MHMO5.js} +35 -37
  208. package/chunks/{sdk-exporters-http-KCJ4ZFG7.js → sdk-exporters-http-TTU2CHBU.js} +1 -1
  209. package/chunks/{sdk-impl-HLSEDAEP.js → sdk-impl-UUMVYMAL.js} +10 -4
  210. package/chunks/{send-message-Y5I6NYAM.js → send-message-AJ4OCUBV.js} +18 -2
  211. package/chunks/{serve-MXXCDAQN.js → serve-2XCHPPGG.js} +41 -43
  212. package/chunks/{server-DFUSSSHI.js → server-GO2N5DH7.js} +4148 -3348
  213. package/chunks/{session-3TEHNENZ.js → session-IFNHTUBT.js} +81 -82
  214. package/chunks/session-pr-refresh-I3UBWMVP.js +364 -0
  215. package/chunks/{settings-VOZYKLTT.js → settings-L6N54CU6.js} +40 -42
  216. package/chunks/{shell-6RTKZVMI.js → shell-4Y5LLW6N.js} +24 -26
  217. package/chunks/{skill-FEOKFX26.js → skill-YOWTRAKQ.js} +58 -14
  218. package/chunks/{skill-settings-VA4XVYVL.js → skill-settings-ZL4JY5UE.js} +41 -43
  219. package/chunks/{spawnChannel-F6WVP723.js → spawnChannel-ZST6XJVJ.js} +35 -37
  220. package/chunks/{standalone-update-RGILUQVK.js → standalone-update-THVU3OKY.js} +36 -38
  221. package/chunks/{startInteractiveUI-WHJPFOGH.js → startInteractiveUI-XDFSHBZD.js} +401 -334
  222. package/chunks/{stdioHelpers-7A2EE64Z.js → stdioHelpers-AY6XCDY2.js} +3 -1
  223. package/chunks/{task-create-TMSV7RD5.js → task-create-QN4LYRSE.js} +3 -3
  224. package/chunks/{task-list-W55RBFRX.js → task-list-JPLGK45U.js} +2 -2
  225. package/chunks/{task-update-N536I4GQ.js → task-update-IWEOJFV2.js} +3 -3
  226. package/chunks/{team-create-QYSWCYCL.js → team-create-OOPXCDBA.js} +24 -26
  227. package/chunks/{team-delete-FJRFX33M.js → team-delete-RZVVSGCY.js} +2 -2
  228. package/chunks/{team-plan-approval-P7DAD644.js → team-plan-approval-DSX5EWAT.js} +24 -26
  229. package/chunks/{terminal-image-renderer-SMQE46UJ.js → terminal-image-renderer-KS25G33E.js} +33 -35
  230. package/chunks/{theme-manager-RFO5WWFF.js → theme-manager-YMZNG45F.js} +33 -35
  231. package/chunks/{tool-search-F2EMIAPV.js → tool-search-J5Q6U7DN.js} +9 -9
  232. package/chunks/{total-session-admission-HTVTP4BS.js → total-session-admission-PVN64JVV.js} +37 -39
  233. package/chunks/{trustedFolders-7OCNMUQE.js → trustedFolders-FATSC4YI.js} +35 -37
  234. package/chunks/{types-WYCFCEHR.js → types-HKLPXZB3.js} +1 -3
  235. package/chunks/{update-relaunch-4GF3OXMB.js → update-relaunch-SIKHLHVR.js} +6 -6
  236. package/chunks/{updateCheck-7QBDXZRT.js → updateCheck-D3YG2WCD.js} +36 -38
  237. package/chunks/{useAutoAcceptIndicator-UI4SNL2O.js → useAutoAcceptIndicator-ILINOSAS.js} +43 -45
  238. package/chunks/{validateNonInterActiveAuth-BPPA563H.js → validateNonInterActiveAuth-JUDQP6V4.js} +74 -75
  239. package/chunks/{version-ANP4TS6O.js → version-C63GDDWN.js} +1 -1
  240. package/chunks/{web-fetch-QJADSAH3.js → web-fetch-FOQZMNSC.js} +8 -10
  241. package/chunks/{web-search-7TTQKEKM.js → web-search-PUJTBFUC.js} +5 -7
  242. package/chunks/{web-shell-static-A6QMUNNV.js → web-shell-static-HNB4FDOE.js} +2 -2
  243. package/chunks/{workflow-5XN6XSOT.js → workflow-Y5IPINVH.js} +47 -58
  244. package/chunks/{workspace-providers-status-PDFZWL5Q.js → workspace-providers-status-IJ4VHFMB.js} +45 -47
  245. package/chunks/{workspace-registration-store-XKVW2YVH.js → workspace-registration-store-SMJWI2AI.js} +1 -1
  246. package/chunks/{workspace-registry-23R7XRB5.js → workspace-registry-BTGZIMPK.js} +37 -39
  247. package/chunks/{workspace-service-MUYO2QIC.js → workspace-service-SIN67ITC.js} +46 -51
  248. package/chunks/{workspace-skills-status-IKECTOOQ.js → workspace-skills-status-F3RKCUIX.js} +44 -46
  249. package/chunks/{workspace-trust-reconciler-KLGOB53D.js → workspace-trust-reconciler-PLIDLJZX.js} +45 -47
  250. package/chunks/{write-file-GGRBB5TZ.js → write-file-PAIGB33C.js} +26 -28
  251. package/chunks/{zoom-image-6ASG6J4C.js → zoom-image-LYQD7BQA.js} +5 -5
  252. package/cli.js +14 -14
  253. package/package.json +3 -3
  254. package/web-shell/assets/{abnfDiagram-VCTEODGH-uS-vtfs3.js → abnfDiagram-VCTEODGH-TRCMSA_6.js} +1 -1
  255. package/web-shell/assets/{arc-BSTnk5pu.js → arc-D9Uls5b3.js} +1 -1
  256. package/web-shell/assets/{architectureDiagram-5GKGNRK7-DCMyiqzy.js → architectureDiagram-5GKGNRK7-Bwb8jPXg.js} +1 -1
  257. package/web-shell/assets/{blockDiagram-NRAW4CY4-C7_gt0r1.js → blockDiagram-NRAW4CY4-DHj71TSX.js} +1 -1
  258. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BeQg2L8B.js → c4Diagram-UCG6FXSJ-uKBBdbyr.js} +1 -1
  259. package/web-shell/assets/channel-CXjVLaBa.js +1 -0
  260. package/web-shell/assets/{chunk-2Q5K7J3B-DnV9bKBe.js → chunk-2Q5K7J3B-BZd0Phrl.js} +1 -1
  261. package/web-shell/assets/{chunk-5VM5RSS4-rT1GAcT7.js → chunk-5VM5RSS4-7KNeNBqN.js} +1 -1
  262. package/web-shell/assets/{chunk-F27PBJKO-BcgSxqGA.js → chunk-F27PBJKO-BeboS7Fi.js} +1 -1
  263. package/web-shell/assets/{chunk-G27WJ6UU-Bw1ZhyZq.js → chunk-G27WJ6UU-RV3JONoj.js} +1 -1
  264. package/web-shell/assets/{chunk-JWPE2WC7-D4iDw-96.js → chunk-JWPE2WC7-Yw9FCFsP.js} +1 -1
  265. package/web-shell/assets/{chunk-LCL6LL3I-D3MB3GTZ.js → chunk-LCL6LL3I-GIMnydDe.js} +1 -1
  266. package/web-shell/assets/{chunk-POPQ4Y6H-Cep2ndrS.js → chunk-POPQ4Y6H-Cfrux7bL.js} +1 -1
  267. package/web-shell/assets/{chunk-SVP7TREG-BuahMHJc.js → chunk-SVP7TREG-BlvIN0CO.js} +1 -1
  268. package/web-shell/assets/{chunk-XXDRQBXY-BdujIvJY.js → chunk-XXDRQBXY-DMs7Rr4t.js} +1 -1
  269. package/web-shell/assets/classDiagram-DTDB5LWJ-DANEijO3.js +1 -0
  270. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DANEijO3.js +1 -0
  271. package/web-shell/assets/{cose-bilkent-JH36ORCC-CGLLUbF8.js → cose-bilkent-JH36ORCC-DNGqTNwI.js} +1 -1
  272. package/web-shell/assets/{cynefin-OW5HDTMX-D6kDsRSh.js → cynefin-OW5HDTMX-CojMpaoH.js} +1 -1
  273. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-CCy78qZx.js → cynefinDiagram-5FMLGOSQ-DF07YXGo.js} +1 -1
  274. package/web-shell/assets/{dagre-3AP2YEHR-D5gJuJsf.js → dagre-3AP2YEHR-17-4WtCH.js} +1 -1
  275. package/web-shell/assets/{diagram-S7CK7UJ4-ZwEZ5W__.js → diagram-S7CK7UJ4-G3Wuyz9m.js} +1 -1
  276. package/web-shell/assets/{diagram-UQ7AKVKN-B036APjv.js → diagram-UQ7AKVKN-nyWIKZ8P.js} +1 -1
  277. package/web-shell/assets/{diagram-VSXAHHWV-BfDJ57Fq.js → diagram-VSXAHHWV-tKHhmYSC.js} +1 -1
  278. package/web-shell/assets/{diagram-VX7I27RA-Wha0p5rT.js → diagram-VX7I27RA-CpDf1hYk.js} +1 -1
  279. package/web-shell/assets/{diagram-Z3DM3KII-L20bz2K1.js → diagram-Z3DM3KII-Cah2IFXG.js} +1 -1
  280. package/web-shell/assets/{ebnfDiagram-PWID7BFC-D1ZM0Cp7.js → ebnfDiagram-PWID7BFC-DNaCkgxy.js} +1 -1
  281. package/web-shell/assets/{erDiagram-SSCWMZ5O-CMtA19v8.js → erDiagram-SSCWMZ5O-CAdRgcf1.js} +1 -1
  282. package/web-shell/assets/{flowDiagram-A5DVABFB-D96m326S.js → flowDiagram-A5DVABFB-CMUJAShL.js} +1 -1
  283. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BuHiYG2o.js → ganttDiagram-EL5Y4UJY-o-_MUNey.js} +1 -1
  284. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-Ck3NmkSw.js → gitGraphDiagram-WWUBYQGX-_aG-2Z7O.js} +1 -1
  285. package/web-shell/assets/{index-CBGz4Qjl.js → index-BK_NKxiJ.js} +1 -1
  286. package/web-shell/assets/index-Ci-z4zWY.js +1913 -0
  287. package/web-shell/assets/index-LDlXZRHA.css +36 -0
  288. package/web-shell/assets/{infoDiagram-RXCK75RN-B6DAOyXe.js → infoDiagram-RXCK75RN-qJPeZbGP.js} +1 -1
  289. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-Bpg-joFo.js → ishikawaDiagram-5VMMS53U-7Om4vNo1.js} +1 -1
  290. package/web-shell/assets/{journeyDiagram-EYS64GPL-BclrHzGa.js → journeyDiagram-EYS64GPL-BNtXqmBW.js} +1 -1
  291. package/web-shell/assets/{kanban-definition-3QL26DDD-5gJzNTYG.js → kanban-definition-3QL26DDD-COgFec8P.js} +1 -1
  292. package/web-shell/assets/{layout-CEz_1L8z.js → layout-B9n81PC9.js} +1 -1
  293. package/web-shell/assets/{linear-CBjTq9Hc.js → linear-Bb6nXZQq.js} +1 -1
  294. package/web-shell/assets/{mermaid.core-Dzhbxx_I.js → mermaid.core-Cgrm3JVT.js} +6 -6
  295. package/web-shell/assets/{mindmap-definition-FBJOCRG2-DQdVqlBF.js → mindmap-definition-FBJOCRG2-TKwLTjnG.js} +1 -1
  296. package/web-shell/assets/{pegDiagram-XKGWAZYB-D1JZlYXL.js → pegDiagram-XKGWAZYB-BJPuvlpi.js} +1 -1
  297. package/web-shell/assets/{pieDiagram-E7YTZNPT-BmkpYL0w.js → pieDiagram-E7YTZNPT-D01VkNsW.js} +1 -1
  298. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-DRvD6co5.js → quadrantDiagram-AXDQQJYC-C4hHsiv-.js} +1 -1
  299. package/web-shell/assets/{railroadDiagram-O6MQD6OU-CEdjDuoo.js → railroadDiagram-O6MQD6OU-CuEO4xK2.js} +1 -1
  300. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BCHG-ie8.js → requirementDiagram-EFPCY7ZU-D5J_vIo5.js} +1 -1
  301. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-C9cZMnye.js → sankeyDiagram-P5KCCOFB-DQKY223V.js} +1 -1
  302. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-DYHRV4zL.js → sequenceDiagram-WJ2MYXX4-D27YV_cm.js} +1 -1
  303. package/web-shell/assets/{sizeCapture-X5ZJPWSS-DlK21aye.js → sizeCapture-X5ZJPWSS-TJg8UcwV.js} +1 -1
  304. package/web-shell/assets/{stateDiagram-HBIQ2CUA-BrmZssvk.js → stateDiagram-HBIQ2CUA-CmnPzUIx.js} +1 -1
  305. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DNKPyrDc.js +1 -0
  306. package/web-shell/assets/{swimlanes-XN3QIQJK-D9xfcayR.js → swimlanes-XN3QIQJK-ByeP3_Nu.js} +1 -1
  307. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-ZL1HPC6w.js +8 -0
  308. package/web-shell/assets/{timeline-definition-24CTP7MA-D4gdDL_d.js → timeline-definition-24CTP7MA-BsFA5juR.js} +1 -1
  309. package/web-shell/assets/{vennDiagram-4TSXK5OY-DdhIExjI.js → vennDiagram-4TSXK5OY-DREP2ECo.js} +1 -1
  310. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-C9RS_Zof.js → wardleyDiagram-VM6X3IG4-iyd9lKi2.js} +1 -1
  311. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-orRgmxWk.js → xychartDiagram-S5SC5T6Z-CVr1_j9q.js} +1 -1
  312. package/web-shell/index.html +3 -3
  313. package/chunks/chunk-7DJCPZE3.js +0 -945
  314. package/chunks/chunk-J2OSJFP3.js +0 -202
  315. package/chunks/chunk-K2OJUPOE.js +0 -78
  316. package/chunks/chunk-P3QQPMQA.js +0 -19
  317. package/chunks/process-registry-PMJOA5CO.js +0 -172
  318. package/web-shell/assets/channel-CENAhErJ.js +0 -1
  319. package/web-shell/assets/classDiagram-DTDB5LWJ-CM6FArGH.js +0 -1
  320. package/web-shell/assets/classDiagram-v2-JRS7N3AN-CM6FArGH.js +0 -1
  321. package/web-shell/assets/index-8hXIpvo4.js +0 -1865
  322. package/web-shell/assets/index-DclEv91i.css +0 -5
  323. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-B2Q7XDaE.js +0 -1
  324. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-DpZPOSbX.js +0 -8
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-H72BQNM3.js";
8
8
  import {
9
9
  MissingCliEntryError
10
- } from "./chunk-JHS74YAB.js";
10
+ } from "./chunk-KID24ZFN.js";
11
11
  import {
12
12
  EXTERNAL_TOOL_GUARD_TOKEN_ENV
13
13
  } from "./chunk-3VUENPWF.js";
@@ -42,8 +42,26 @@ import { getHeapStatistics } from "node:v8";
42
42
 
43
43
  // packages/acp-bridge/src/process-registry.ts
44
44
  init_esbuild_shims();
45
+ import {
46
+ execFile,
47
+ spawnSync
48
+ } from "node:child_process";
45
49
  var TERM_GRACE_MS = 5e3;
46
50
  var EXIT_DEADLINE_MS = 1e4;
51
+ var PROCESS_QUERY_TIMEOUT_MS = 2e3;
52
+ var PROCESS_QUERY_MAX_BUFFER = 8 * 1024 * 1024;
53
+ var PROCESS_POLL_MS = 50;
54
+ var PROCESS_STATE_POLL_MS = 250;
55
+ var MAX_OWNED_PROCESSES = 256;
56
+ var MAX_OWNERSHIP_DEPTH = 8;
57
+ var POSIX_PS = "/bin/ps";
58
+ var WINDOWS_TASKKILL = `${process.env["SystemRoot"] || "C:\\Windows"}\\System32\\taskkill.exe`;
59
+ var STRING_EXEC_OPTIONS = {
60
+ encoding: "utf8",
61
+ maxBuffer: PROCESS_QUERY_MAX_BUFFER,
62
+ timeout: PROCESS_QUERY_TIMEOUT_MS,
63
+ windowsHide: true
64
+ };
47
65
  var ProcessRegistry = class {
48
66
  static {
49
67
  __name(this, "ProcessRegistry");
@@ -60,14 +78,18 @@ var ProcessRegistry = class {
60
78
  this.reservations.add(token);
61
79
  let settled = false;
62
80
  return {
63
- attach: /* @__PURE__ */ __name((child) => {
81
+ attach: /* @__PURE__ */ __name((child, options) => {
64
82
  if (settled || !this.reservations.delete(token)) {
65
83
  throw new Error("ACP process reservation is no longer active");
66
84
  }
67
85
  settled = true;
68
- const tracked = new TrackedChild(child, () => {
69
- this.children.delete(tracked);
70
- });
86
+ const tracked = new TrackedChild(
87
+ child,
88
+ options?.ownsProcessTree === true,
89
+ () => {
90
+ this.children.delete(tracked);
91
+ }
92
+ );
71
93
  this.children.add(tracked);
72
94
  if (this.draining) void tracked.terminate().catch(() => {
73
95
  });
@@ -97,7 +119,15 @@ var ProcessRegistry = class {
97
119
  }
98
120
  killAllSync() {
99
121
  this.draining = true;
100
- for (const child of this.children) child.killSync();
122
+ let processTable;
123
+ if (process.platform !== "win32" && [...this.children].some((child) => child.needsProcessTreeSnapshot)) {
124
+ try {
125
+ processTable = parseProcessTable(queryProcessTableSync());
126
+ } catch {
127
+ processTable = null;
128
+ }
129
+ }
130
+ for (const child of this.children) child.killSync(processTable);
101
131
  }
102
132
  get activeProcessCount() {
103
133
  return this.children.size;
@@ -110,30 +140,34 @@ var ProcessRegistry = class {
110
140
  * here, while neither is visible in `activeProcessCount` until its child is
111
141
  * attached.
112
142
  *
113
- * A child leaves this count when it *exits*, not when `terminate()` starts,
114
- * so a channel swap is counted twice while the old process is still winding
115
- * down. That is deliberate: its memory is still resident.
143
+ * A direct child leaves this count when its root exits. A tree-owned child
144
+ * under explicit teardown remains committed until its known tree is gone,
145
+ * so a channel swap includes memory still held by descendants.
116
146
  */
117
147
  get committedProcessCount() {
118
148
  return this.children.size + this.reservations.size;
119
149
  }
120
150
  };
121
151
  var TrackedChild = class {
122
- constructor(child, onExit) {
152
+ constructor(child, ownsProcessTree, onRelease) {
123
153
  this.child = child;
124
- this.onExit = onExit;
154
+ this.ownsProcessTree = ownsProcessTree;
155
+ this.onRelease = onRelease;
156
+ this.rememberRoot();
125
157
  this.exited = new Promise((resolve) => {
126
158
  const finish = /* @__PURE__ */ __name((info) => {
127
159
  if (this.exitedSettled) return;
128
160
  this.exitedSettled = true;
129
- this.onExit();
161
+ this.exitInfo = info;
130
162
  resolve(info);
163
+ this.handleRootExit();
131
164
  }, "finish");
132
165
  child.once("exit", (exitCode, signalCode) => {
133
166
  finish({ exitCode, signalCode });
134
167
  });
135
168
  child.once("spawn", () => {
136
169
  this.spawnConfirmed = true;
170
+ this.rememberRoot();
137
171
  });
138
172
  child.once("error", () => {
139
173
  if (!this.spawnConfirmed) finish(void 0);
@@ -144,21 +178,116 @@ var TrackedChild = class {
144
178
  __name(this, "TrackedChild");
145
179
  }
146
180
  exited;
181
+ knownGroups = /* @__PURE__ */ new Set();
182
+ cleanupProofError;
183
+ exitInfo;
147
184
  exitedSettled = false;
185
+ forceKillRequested = false;
186
+ released = false;
187
+ releasePollTimer;
188
+ releaseStateCheckInFlight = false;
148
189
  spawnConfirmed = false;
149
190
  terminatePromise;
191
+ terminating = false;
192
+ terminationSettled = false;
150
193
  terminate() {
151
- this.terminatePromise ??= this.terminateOnce();
194
+ if (this.terminatePromise) return this.terminatePromise;
195
+ this.terminating = true;
196
+ if (this.releasePollTimer) {
197
+ clearTimeout(this.releasePollTimer);
198
+ this.releasePollTimer = void 0;
199
+ }
200
+ const termination = this.ownsProcessTree ? this.terminateTree() : this.terminateDirectChild();
201
+ this.terminatePromise = termination.finally(() => {
202
+ this.terminationSettled = true;
203
+ if (this.ownsProcessTree && this.exitedSettled && !this.released) {
204
+ this.releaseWhenGroupsExit();
205
+ }
206
+ });
152
207
  return this.terminatePromise;
153
208
  }
154
- killSync() {
209
+ get needsProcessTreeSnapshot() {
210
+ return this.ownsProcessTree && !this.forceKillRequested && !this.rootHasExited && !this.released;
211
+ }
212
+ killSync(processTable) {
213
+ if (!this.ownsProcessTree) {
214
+ this.killDirectChildSync();
215
+ return;
216
+ }
217
+ if (this.released) return;
218
+ const firstForceKill = !this.forceKillRequested;
219
+ this.forceKillRequested = true;
220
+ const rootPid = this.rootPid;
221
+ if (!rootPid) {
222
+ this.killDirectChildSync();
223
+ return;
224
+ }
225
+ if (process.platform === "win32") {
226
+ if (!firstForceKill) return;
227
+ if (!taskkillSync(rootPid)) this.killDirectChildSync();
228
+ return;
229
+ }
230
+ if (firstForceKill && !this.rootHasExited) {
231
+ if (processTable === void 0) this.mergeSynchronousSnapshot();
232
+ else if (processTable !== null) {
233
+ this.mergeSnapshot(collectOwnership(processTable, rootPid));
234
+ }
235
+ }
236
+ const rootSignalled = this.signalKnownGroups("SIGKILL");
237
+ this.signalDirectRootIfNeeded("SIGKILL", rootSignalled);
238
+ if (this.exitedSettled && this.survivingGroups().length === 0) {
239
+ this.release();
240
+ }
241
+ }
242
+ get rootPid() {
243
+ const pid = this.child.pid;
244
+ return typeof pid === "number" && Number.isSafeInteger(pid) && pid > 0 ? pid : void 0;
245
+ }
246
+ get rootHasExited() {
247
+ return this.exitedSettled || this.child.exitCode !== null || this.child.signalCode !== null;
248
+ }
249
+ rememberRoot() {
250
+ if (!this.ownsProcessTree) return;
251
+ const rootPid = this.rootPid;
252
+ if (!rootPid) return;
253
+ if (process.platform !== "win32") this.knownGroups.add(rootPid);
254
+ }
255
+ handleRootExit() {
256
+ if (!this.ownsProcessTree) {
257
+ this.release();
258
+ return;
259
+ }
260
+ if (this.terminating && !this.terminationSettled) return;
261
+ if (process.platform !== "win32") {
262
+ this.forceKillRequested = true;
263
+ this.signalKnownGroups("SIGKILL");
264
+ this.releaseWhenGroupsExit();
265
+ return;
266
+ }
267
+ this.release();
268
+ }
269
+ release() {
270
+ if (this.released) return;
271
+ this.released = true;
272
+ if (this.releasePollTimer) clearTimeout(this.releasePollTimer);
273
+ this.onRelease();
274
+ }
275
+ killDirectChildSync() {
155
276
  if (this.exitedSettled) return;
156
277
  try {
157
278
  this.child.kill("SIGKILL");
158
279
  } catch {
159
280
  }
160
281
  }
161
- async terminateOnce() {
282
+ signalDirectRootIfNeeded(signal, rootGroupSignalled) {
283
+ const rootPid = this.rootPid;
284
+ if (!rootPid || this.exitedSettled || rootGroupSignalled) return;
285
+ try {
286
+ this.child.kill(signal);
287
+ } catch {
288
+ }
289
+ }
290
+ async terminateDirectChild() {
162
291
  if (this.exitedSettled) return;
163
292
  try {
164
293
  this.child.kill("SIGTERM");
@@ -168,7 +297,10 @@ var TrackedChild = class {
168
297
  let hardKillTimer;
169
298
  let deadlineTimer;
170
299
  const deadline = new Promise((_, reject) => {
171
- hardKillTimer = setTimeout(() => this.killSync(), TERM_GRACE_MS);
300
+ hardKillTimer = setTimeout(
301
+ () => this.killDirectChildSync(),
302
+ TERM_GRACE_MS
303
+ );
172
304
  hardKillTimer.unref();
173
305
  deadlineTimer = setTimeout(() => {
174
306
  reject(
@@ -181,17 +313,394 @@ var TrackedChild = class {
181
313
  });
182
314
  try {
183
315
  const exitInfo = await Promise.race([this.exited, deadline]);
184
- if (exitInfo && (exitInfo.exitCode !== 0 || exitInfo.signalCode !== null)) {
185
- throw new Error(
186
- `ACP child pid=${this.child.pid ?? "unknown"} exited uncleanly during shutdown (code=${exitInfo.exitCode ?? "none"}, signal=${exitInfo.signalCode ?? "none"})`
187
- );
188
- }
316
+ this.throwForUncleanExit(exitInfo);
189
317
  } finally {
190
318
  if (hardKillTimer) clearTimeout(hardKillTimer);
191
319
  if (deadlineTimer) clearTimeout(deadlineTimer);
192
320
  }
193
321
  }
322
+ async terminateTree() {
323
+ if (this.exitedSettled && (process.platform === "win32" || this.released)) {
324
+ return;
325
+ }
326
+ const rootPid = this.rootPid;
327
+ if (!rootPid) {
328
+ await this.terminateDirectChild();
329
+ return;
330
+ }
331
+ if (process.platform === "win32") {
332
+ await this.terminateWindowsTree(rootPid);
333
+ return;
334
+ }
335
+ await this.terminatePosixTree(rootPid);
336
+ }
337
+ async terminatePosixTree(rootPid) {
338
+ const startedAt = Date.now();
339
+ if (!this.rootHasExited) {
340
+ await this.mergeAsynchronousSnapshot(rootPid, true);
341
+ }
342
+ let escalated = this.forceKillRequested;
343
+ let rootSignalled = this.signalKnownGroups(
344
+ escalated ? "SIGKILL" : "SIGTERM"
345
+ );
346
+ this.signalDirectRootIfNeeded(
347
+ escalated ? "SIGKILL" : "SIGTERM",
348
+ rootSignalled
349
+ );
350
+ const graceDeadline = Math.min(
351
+ startedAt + EXIT_DEADLINE_MS,
352
+ Date.now() + TERM_GRACE_MS
353
+ );
354
+ const exitDeadline = startedAt + EXIT_DEADLINE_MS;
355
+ let nextStateCheckAt = 0;
356
+ while (true) {
357
+ let survivingGroups = this.survivingGroups();
358
+ let now = Date.now();
359
+ if (this.exitedSettled && escalated && survivingGroups.length > 0 && now < exitDeadline && now >= nextStateCheckAt) {
360
+ await this.pruneTerminalGroups(survivingGroups, exitDeadline - now);
361
+ nextStateCheckAt = Date.now() + PROCESS_STATE_POLL_MS;
362
+ survivingGroups = this.survivingGroups();
363
+ now = Date.now();
364
+ }
365
+ if (this.exitedSettled && survivingGroups.length === 0) {
366
+ this.release();
367
+ if (this.cleanupProofError) throw this.cleanupProofError;
368
+ this.throwForUncleanExit(this.exitInfo);
369
+ return;
370
+ }
371
+ if (!escalated && (this.forceKillRequested || now >= graceDeadline)) {
372
+ if (!this.rootHasExited && this.knownGroups.has(rootPid)) {
373
+ await this.mergeAsynchronousSnapshot(rootPid, false);
374
+ }
375
+ escalated = true;
376
+ rootSignalled = this.signalKnownGroups("SIGKILL");
377
+ this.signalDirectRootIfNeeded("SIGKILL", rootSignalled);
378
+ continue;
379
+ }
380
+ if (now >= exitDeadline) {
381
+ const groups = survivingGroups.join(",") || "none";
382
+ const proof = this.cleanupProofError ? `; ${this.cleanupProofError.message}` : "";
383
+ throw new Error(
384
+ `ACP child pid=${rootPid} did not exit with its owned process groups within ${EXIT_DEADLINE_MS}ms (surviving pgids=${groups})${proof}`
385
+ );
386
+ }
387
+ await delay(
388
+ Math.min(
389
+ PROCESS_POLL_MS,
390
+ (escalated ? exitDeadline : graceDeadline) - now
391
+ )
392
+ );
393
+ if (this.forceKillRequested) escalated = true;
394
+ }
395
+ }
396
+ async terminateWindowsTree(rootPid) {
397
+ const startedAt = Date.now();
398
+ let treeKillError;
399
+ try {
400
+ await taskkill(rootPid);
401
+ } catch (error) {
402
+ treeKillError = toError(error);
403
+ this.killDirectChildSync();
404
+ }
405
+ const remainingMs = Math.max(
406
+ 1,
407
+ EXIT_DEADLINE_MS - (Date.now() - startedAt)
408
+ );
409
+ const exitInfo = await waitForPromise(this.exited, remainingMs).catch(
410
+ () => {
411
+ throw new Error(
412
+ `ACP child pid=${rootPid} did not exit within ${EXIT_DEADLINE_MS}ms` + (treeKillError ? `; ${treeKillError.message}` : "")
413
+ );
414
+ }
415
+ );
416
+ this.release();
417
+ if (treeKillError) {
418
+ throw new Error(
419
+ `ACP child pid=${rootPid} process-tree cleanup failed: ${treeKillError.message}`
420
+ );
421
+ }
422
+ this.throwForUncleanExit(exitInfo);
423
+ }
424
+ async mergeAsynchronousSnapshot(rootPid, initial) {
425
+ try {
426
+ const table = parseProcessTable(await queryProcessTable());
427
+ if (this.rootHasExited) {
428
+ if (initial && !this.forceKillRequested) {
429
+ this.recordCleanupProofError(
430
+ `ACP child pid=${rootPid} exited before its initial process-tree snapshot completed`
431
+ );
432
+ }
433
+ return;
434
+ }
435
+ const snapshot = collectOwnership(table, rootPid);
436
+ this.mergeSnapshot(snapshot);
437
+ if (snapshot.truncated) {
438
+ this.recordCleanupProofError(
439
+ `ACP child pid=${rootPid} process-tree snapshot exceeded ${MAX_OWNED_PROCESSES} processes or depth ${MAX_OWNERSHIP_DEPTH}`
440
+ );
441
+ }
442
+ if (initial && !snapshot.rootSeen) {
443
+ this.recordCleanupProofError(
444
+ `ACP child pid=${rootPid} was absent from the initial process-tree snapshot`
445
+ );
446
+ } else if (initial && !snapshot.rootIsGroupLeader) {
447
+ this.recordCleanupProofError(
448
+ `ACP child pid=${rootPid} was not an isolated process-group leader`
449
+ );
450
+ }
451
+ } catch (error) {
452
+ this.recordCleanupProofError(
453
+ `ACP child pid=${rootPid} process-tree snapshot failed: ${toError(error).message}`
454
+ );
455
+ }
456
+ }
457
+ mergeSynchronousSnapshot() {
458
+ const rootPid = this.rootPid;
459
+ if (!rootPid || process.platform === "win32" || this.rootHasExited) return;
460
+ try {
461
+ const table = parseProcessTable(queryProcessTableSync());
462
+ this.mergeSnapshot(collectOwnership(table, rootPid));
463
+ } catch {
464
+ }
465
+ }
466
+ mergeSnapshot(snapshot) {
467
+ if (!snapshot.rootIsGroupLeader) {
468
+ const rootPid = this.rootPid;
469
+ if (snapshot.rootSeen && rootPid) this.knownGroups.delete(rootPid);
470
+ return;
471
+ }
472
+ for (const group of snapshot.groups) this.knownGroups.add(group);
473
+ }
474
+ signalKnownGroups(signal) {
475
+ const rootPid = this.rootPid;
476
+ let rootSignalled = false;
477
+ const groups = [...this.knownGroups].sort((left, right) => {
478
+ if (left === rootPid) return 1;
479
+ if (right === rootPid) return -1;
480
+ return right - left;
481
+ });
482
+ for (const group of groups) {
483
+ try {
484
+ process.kill(-group, signal);
485
+ if (group === rootPid) rootSignalled = true;
486
+ } catch (error) {
487
+ if (isErrno(error, "ESRCH")) {
488
+ this.knownGroups.delete(group);
489
+ continue;
490
+ }
491
+ this.recordCleanupProofError(
492
+ `ACP child pid=${rootPid ?? "unknown"} could not send ${signal} to pgid=${group}: ${toError(error).message}`
493
+ );
494
+ }
495
+ }
496
+ return rootSignalled;
497
+ }
498
+ survivingGroups() {
499
+ const surviving = [];
500
+ for (const group of this.knownGroups) {
501
+ try {
502
+ process.kill(-group, 0);
503
+ surviving.push(group);
504
+ } catch (error) {
505
+ if (isErrno(error, "ESRCH")) {
506
+ this.knownGroups.delete(group);
507
+ continue;
508
+ }
509
+ surviving.push(group);
510
+ if (!isErrno(error, "EPERM")) {
511
+ this.recordCleanupProofError(
512
+ `ACP child pid=${this.rootPid ?? "unknown"} could not inspect pgid=${group}: ${toError(error).message}`
513
+ );
514
+ }
515
+ }
516
+ }
517
+ return surviving;
518
+ }
519
+ recordCleanupProofError(message) {
520
+ this.cleanupProofError ??= new Error(message);
521
+ }
522
+ async pruneTerminalGroups(groups, timeoutMs = PROCESS_QUERY_TIMEOUT_MS) {
523
+ try {
524
+ const table = parseProcessTable(await queryProcessTable(timeoutMs));
525
+ const targets = new Set(groups);
526
+ const terminalGroups = /* @__PURE__ */ new Set();
527
+ const liveGroups = /* @__PURE__ */ new Set();
528
+ for (const row of table.rowsByPid.values()) {
529
+ if (!targets.has(row.pgid)) continue;
530
+ if (row.terminal) terminalGroups.add(row.pgid);
531
+ else liveGroups.add(row.pgid);
532
+ }
533
+ for (const group of terminalGroups) {
534
+ if (!liveGroups.has(group)) this.knownGroups.delete(group);
535
+ }
536
+ } catch {
537
+ }
538
+ }
539
+ releaseWhenGroupsExit() {
540
+ if (this.released || this.releasePollTimer || this.releaseStateCheckInFlight || this.terminating && !this.terminationSettled) {
541
+ return;
542
+ }
543
+ const survivingGroups = this.survivingGroups();
544
+ if (survivingGroups.length === 0) {
545
+ this.release();
546
+ return;
547
+ }
548
+ this.releaseStateCheckInFlight = true;
549
+ void this.pruneTerminalGroups(survivingGroups).finally(() => {
550
+ this.releaseStateCheckInFlight = false;
551
+ if (this.released) return;
552
+ if (this.terminating && !this.terminationSettled) return;
553
+ if (this.survivingGroups().length === 0) {
554
+ this.release();
555
+ return;
556
+ }
557
+ this.releasePollTimer = setTimeout(() => {
558
+ this.releasePollTimer = void 0;
559
+ this.releaseWhenGroupsExit();
560
+ }, PROCESS_STATE_POLL_MS);
561
+ this.releasePollTimer.unref();
562
+ });
563
+ }
564
+ throwForUncleanExit(exitInfo) {
565
+ if (exitInfo && (exitInfo.exitCode !== 0 || exitInfo.signalCode !== null)) {
566
+ throw new Error(
567
+ `ACP child pid=${this.child.pid ?? "unknown"} exited uncleanly during shutdown (code=${exitInfo.exitCode ?? "none"}, signal=${exitInfo.signalCode ?? "none"})`
568
+ );
569
+ }
570
+ }
194
571
  };
572
+ function parseProcessTable(stdout) {
573
+ const rowsByPid = /* @__PURE__ */ new Map();
574
+ const childrenByParent = /* @__PURE__ */ new Map();
575
+ for (const line of stdout.split("\n")) {
576
+ const match = line.trim().match(/^(\d+)\s+(\d+)\s+(\d+)(?:\s+(\S+)(?:\s+(\d+))?)?$/u);
577
+ if (!match) continue;
578
+ const pid = Number.parseInt(match[1], 10);
579
+ const ppid = Number.parseInt(match[2], 10);
580
+ const pgid = Number.parseInt(match[3], 10);
581
+ const state = match[4];
582
+ const threadCount = match[5] ? Number.parseInt(match[5], 10) : void 0;
583
+ if (!Number.isSafeInteger(pid) || !Number.isSafeInteger(ppid) || !Number.isSafeInteger(pgid) || pid <= 0 || ppid < 0 || pgid <= 0) {
584
+ continue;
585
+ }
586
+ const terminal = state?.startsWith("X") === true || state?.startsWith("Z") === true && (process.platform !== "linux" || threadCount === 1);
587
+ rowsByPid.set(pid, { pgid, terminal });
588
+ const children = childrenByParent.get(ppid);
589
+ if (children) children.push(pid);
590
+ else childrenByParent.set(ppid, [pid]);
591
+ }
592
+ if (rowsByPid.size === 0) {
593
+ throw new Error("process-table query returned no parseable rows");
594
+ }
595
+ return { childrenByParent, rowsByPid };
596
+ }
597
+ __name(parseProcessTable, "parseProcessTable");
598
+ function collectOwnership(table, rootPid) {
599
+ const groups = /* @__PURE__ */ new Set();
600
+ const visited = /* @__PURE__ */ new Set();
601
+ const queue = [{ depth: 0, pid: rootPid }];
602
+ let truncated = false;
603
+ while (queue.length > 0) {
604
+ const current = queue.shift();
605
+ if (visited.has(current.pid)) continue;
606
+ if (visited.size >= MAX_OWNED_PROCESSES) {
607
+ truncated = true;
608
+ break;
609
+ }
610
+ visited.add(current.pid);
611
+ const row = table.rowsByPid.get(current.pid);
612
+ if (row) groups.add(row.pgid);
613
+ const children = table.childrenByParent.get(current.pid) ?? [];
614
+ if (current.depth >= MAX_OWNERSHIP_DEPTH) {
615
+ if (children.length > 0) truncated = true;
616
+ continue;
617
+ }
618
+ for (const pid of children) {
619
+ queue.push({ depth: current.depth + 1, pid });
620
+ }
621
+ }
622
+ const root = table.rowsByPid.get(rootPid);
623
+ return {
624
+ groups,
625
+ rootIsGroupLeader: root?.pgid === rootPid,
626
+ rootSeen: root !== void 0,
627
+ truncated
628
+ };
629
+ }
630
+ __name(collectOwnership, "collectOwnership");
631
+ function queryProcessTable(timeoutMs = PROCESS_QUERY_TIMEOUT_MS) {
632
+ return runExecFile(POSIX_PS, posixPsArgs(), {
633
+ ...STRING_EXEC_OPTIONS,
634
+ timeout: Math.max(1, Math.min(PROCESS_QUERY_TIMEOUT_MS, timeoutMs))
635
+ });
636
+ }
637
+ __name(queryProcessTable, "queryProcessTable");
638
+ function queryProcessTableSync() {
639
+ const result = spawnSync(POSIX_PS, posixPsArgs(), STRING_EXEC_OPTIONS);
640
+ if (result.error) throw result.error;
641
+ if (result.status !== 0) {
642
+ throw new Error(`ps exited with status ${result.status ?? "unknown"}`);
643
+ }
644
+ return result.stdout;
645
+ }
646
+ __name(queryProcessTableSync, "queryProcessTableSync");
647
+ function posixPsArgs() {
648
+ const columns = process.platform === "linux" ? "pid=,ppid=,pgid=,state=,nlwp=" : "pid=,ppid=,pgid=,state=";
649
+ return ["-A", "-o", columns];
650
+ }
651
+ __name(posixPsArgs, "posixPsArgs");
652
+ function taskkill(rootPid) {
653
+ return runExecFile(
654
+ WINDOWS_TASKKILL,
655
+ ["/f", "/t", "/pid", String(rootPid)],
656
+ STRING_EXEC_OPTIONS
657
+ );
658
+ }
659
+ __name(taskkill, "taskkill");
660
+ function taskkillSync(rootPid) {
661
+ try {
662
+ const result = spawnSync(
663
+ WINDOWS_TASKKILL,
664
+ ["/f", "/t", "/pid", String(rootPid)],
665
+ STRING_EXEC_OPTIONS
666
+ );
667
+ return !result.error && result.status === 0;
668
+ } catch {
669
+ return false;
670
+ }
671
+ }
672
+ __name(taskkillSync, "taskkillSync");
673
+ function runExecFile(file, args, options) {
674
+ return new Promise((resolve, reject) => {
675
+ execFile(file, args, options, (error, stdout) => {
676
+ if (error) reject(error);
677
+ else resolve(stdout);
678
+ });
679
+ });
680
+ }
681
+ __name(runExecFile, "runExecFile");
682
+ function waitForPromise(promise, timeoutMs) {
683
+ let timer;
684
+ const timeout = new Promise((_, reject) => {
685
+ timer = setTimeout(() => reject(new Error("deadline exceeded")), timeoutMs);
686
+ });
687
+ return Promise.race([promise, timeout]).finally(() => {
688
+ if (timer) clearTimeout(timer);
689
+ });
690
+ }
691
+ __name(waitForPromise, "waitForPromise");
692
+ function delay(ms) {
693
+ return new Promise((resolve) => setTimeout(resolve, Math.max(1, ms)));
694
+ }
695
+ __name(delay, "delay");
696
+ function isErrno(error, code) {
697
+ return error !== null && typeof error === "object" && "code" in error && error.code === code;
698
+ }
699
+ __name(isErrno, "isErrno");
700
+ function toError(error) {
701
+ return error instanceof Error ? error : new Error(String(error));
702
+ }
703
+ __name(toError, "toError");
195
704
 
196
705
  // packages/acp-bridge/src/json-string-bytes.ts
197
706
  init_esbuild_shims();
@@ -553,6 +1062,7 @@ function createSpawnChannelFactory(options = {}) {
553
1062
  {
554
1063
  cwd: workspaceCwd,
555
1064
  stdio: ["pipe", "pipe", "pipe"],
1065
+ detached: process.platform !== "win32",
556
1066
  windowsHide: true,
557
1067
  env: childEnv
558
1068
  }
@@ -561,7 +1071,7 @@ function createSpawnChannelFactory(options = {}) {
561
1071
  reservation.cancel();
562
1072
  throw error;
563
1073
  }
564
- const trackedChild = reservation.attach(child);
1074
+ const trackedChild = reservation.attach(child, { ownsProcessTree: true });
565
1075
  if (child.stderr) {
566
1076
  const prefix = `[serve pid=${child.pid} cwd=${workspaceCwd}] `;
567
1077
  const forwarder = createStderrForwarder({