@qwen-code/qwen-code 0.21.7 → 0.21.8

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 (314) hide show
  1. package/README.md +2 -0
  2. package/bundled/qc-helper/docs/configuration/settings.md +43 -30
  3. package/bundled/qc-helper/docs/features/channels/dingtalk.md +40 -2
  4. package/bundled/qc-helper/docs/features/channels/feishu.md +13 -2
  5. package/bundled/qc-helper/docs/features/channels/github.md +13 -11
  6. package/bundled/qc-helper/docs/features/channels/gitlab.md +13 -11
  7. package/bundled/qc-helper/docs/features/channels/overview.md +49 -31
  8. package/bundled/qc-helper/docs/features/channels/plugins.md +2 -2
  9. package/bundled/qc-helper/docs/features/channels/qqbot.md +4 -2
  10. package/bundled/qc-helper/docs/features/channels/telegram.md +4 -2
  11. package/bundled/qc-helper/docs/features/channels/wecom.md +1 -1
  12. package/bundled/qc-helper/docs/features/code-review.md +4 -0
  13. package/bundled/qc-helper/docs/features/commands.md +1 -1
  14. package/bundled/qc-helper/docs/features/hooks.md +52 -0
  15. package/bundled/qc-helper/docs/integration-jetbrains.md +1 -0
  16. package/bundled/qc-helper/docs/qwen-serve.md +4 -1
  17. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +50 -36
  18. package/bundled/review/SKILL.md +28 -5
  19. package/chunks/{MaxSizedBox-ANWZBPTS.js → MaxSizedBox-7PM6BGJ5.js} +26 -22
  20. package/chunks/{StandaloneSessionPicker-XKS3VU3A.js → StandaloneSessionPicker-3UQHM7GV.js} +44 -40
  21. package/chunks/{acp-startup-profiler-ORIQ2CCQ.js → acp-startup-profiler-B5BYAMYQ.js} +2 -2
  22. package/chunks/{acpAgent-KUAZ3GCZ.js → acpAgent-5UWLFV6V.js} +534 -262
  23. package/chunks/{agent-T6PTGX5R.js → agent-624T2BLO.js} +26 -22
  24. package/chunks/{agent-headless-PR7YCB7S.js → agent-headless-2EE5J2KX.js} +26 -22
  25. package/chunks/{artifact-tool-U4VOZIK5.js → artifact-tool-N652YE4L.js} +1 -1
  26. package/chunks/{askUserQuestion-XOBQLPFA.js → askUserQuestion-ONW74PKJ.js} +1 -1
  27. package/chunks/{bridge-NU6YEEHK.js → bridge-JENKGFFP.js} +29 -25
  28. package/chunks/{ca-NYKNH222.js → ca-ZLKAB4K3.js} +6 -0
  29. package/chunks/{channel-management-service-FSQ7SHYI.js → channel-management-service-DDWUPHMU.js} +19 -10
  30. package/chunks/{channel-settings-store-35VQVUVV.js → channel-settings-store-SA6JZSPH.js} +34 -30
  31. package/chunks/{channel-worker-group-JWQK224X.js → channel-worker-group-E67EN3RV.js} +5 -5
  32. package/chunks/{channel-worker-manager-77E3OXRQ.js → channel-worker-manager-SW4C45CF.js} +5 -5
  33. package/chunks/{channel-worker-supervisor-62YWUGP2.js → channel-worker-supervisor-5SRD24FG.js} +3 -3
  34. package/chunks/{chunk-CJXIIILK.js → chunk-2FRY5CRX.js} +1 -1
  35. package/chunks/{chunk-ZJ3VGYHK.js → chunk-2ILAOM2I.js} +34 -17
  36. package/chunks/{chunk-6XJMFJ4D.js → chunk-2M4K4KYS.js} +177 -120
  37. package/chunks/{chunk-CNIID3TV.js → chunk-2UUMVNYT.js} +1 -1
  38. package/chunks/{chunk-22NBYCPD.js → chunk-3P2LV43B.js} +1 -1
  39. package/chunks/{chunk-2U3WZGZG.js → chunk-3PY4LPJF.js} +19 -131
  40. package/chunks/{chunk-SPMY6CX6.js → chunk-3SE7J4DR.js} +3 -3
  41. package/chunks/{chunk-6UWFTUQL.js → chunk-3WNQOYHQ.js} +66 -22
  42. package/chunks/{chunk-KXSDEOFU.js → chunk-4ALIARFY.js} +1 -1
  43. package/chunks/{chunk-D3UEZIQH.js → chunk-4DU3NCHG.js} +48 -55
  44. package/chunks/{chunk-BGG4MBYD.js → chunk-4PYCZH2V.js} +4 -187
  45. package/chunks/{chunk-H2UQ2M5Z.js → chunk-4WU6NY7F.js} +96 -22
  46. package/chunks/{chunk-TLV2IMHR.js → chunk-5ZGR6RKJ.js} +3 -3
  47. package/chunks/{chunk-3K7FH2KQ.js → chunk-67N6HB5H.js} +1310 -171
  48. package/chunks/{chunk-EORNAQDT.js → chunk-6TR7CFXH.js} +1 -1
  49. package/chunks/{chunk-NG2R4N5O.js → chunk-6ZRFAKXK.js} +1 -1
  50. package/chunks/{chunk-P2AJ7FTI.js → chunk-757GB46F.js} +1 -1
  51. package/chunks/{chunk-72LNFGUY.js → chunk-77QVBFCU.js} +3 -3
  52. package/chunks/{chunk-OH2VKQXH.js → chunk-7DVT4LVV.js} +37 -30
  53. package/chunks/{chunk-KKJJB5X6.js → chunk-7VUERJHS.js} +1503 -815
  54. package/chunks/{chunk-VOARQPTA.js → chunk-B52AWKBB.js} +65 -21
  55. package/chunks/{chunk-Y4EWSQF7.js → chunk-BF224XHL.js} +2 -2
  56. package/chunks/{chunk-PJOBIWUG.js → chunk-BF52U4XJ.js} +1 -1
  57. package/chunks/{chunk-55LYDVPU.js → chunk-C5VWPTGT.js} +1 -1
  58. package/chunks/{chunk-W7U4ESW2.js → chunk-CG3WBKJK.js} +1 -1
  59. package/chunks/chunk-COBO5EBO.js +135 -0
  60. package/chunks/chunk-CPG6P4GG.js +82 -0
  61. package/chunks/{chunk-DIEFUBV6.js → chunk-DIWZNWZT.js} +205 -35
  62. package/chunks/{chunk-AE77C5ZU.js → chunk-DQSDACD2.js} +1 -1
  63. package/chunks/{chunk-P3LEG54R.js → chunk-DX5W5AON.js} +2 -2
  64. package/chunks/{chunk-EUQTXRKZ.js → chunk-E4ZBKMSF.js} +5 -5
  65. package/chunks/{chunk-FPM27XN4.js → chunk-EIVICVHM.js} +4 -4
  66. package/chunks/{chunk-YHEEE624.js → chunk-EN2TKTFH.js} +1 -1
  67. package/chunks/chunk-F6WFNA7U.js +22 -0
  68. package/chunks/{chunk-FZBZSYKU.js → chunk-FN6YXJOP.js} +1 -1
  69. package/chunks/{chunk-KR4ZSC7K.js → chunk-FWBXMANW.js} +3 -3
  70. package/chunks/{chunk-LA7YLSR6.js → chunk-FYAXKJK7.js} +327 -67
  71. package/chunks/{chunk-CSZEXZBE.js → chunk-GBDINRIL.js} +3 -3
  72. package/chunks/{chunk-SCI7K3GM.js → chunk-GOEVOFQI.js} +19 -10
  73. package/chunks/{chunk-LEMXGVEP.js → chunk-GQCEQPYQ.js} +3 -3
  74. package/chunks/{chunk-Y7E5LNLO.js → chunk-GXSNGY5M.js} +1027 -876
  75. package/chunks/{chunk-6XU3PH66.js → chunk-HA3SAB64.js} +22 -69
  76. package/chunks/{chunk-Y4NGLFGJ.js → chunk-HUWENAHO.js} +1 -1
  77. package/chunks/{chunk-3ULCB3NE.js → chunk-HV76SFIA.js} +1 -1
  78. package/chunks/{chunk-CB2464BK.js → chunk-HWX5HPUG.js} +14 -4
  79. package/chunks/{chunk-LZC3B5N2.js → chunk-IA7TGCN2.js} +2 -2
  80. package/chunks/{chunk-RERATVSK.js → chunk-IBYULW65.js} +6 -6
  81. package/chunks/{chunk-HYRDKNUY.js → chunk-IUQ52YJK.js} +1 -1
  82. package/chunks/{chunk-TDXGKHDN.js → chunk-IYES5WOT.js} +2 -2
  83. package/chunks/{chunk-RGSBTHSU.js → chunk-KAQCJO6Y.js} +131 -4
  84. package/chunks/{chunk-VWOVHOTT.js → chunk-KJZ26VBX.js} +1 -1
  85. package/chunks/{chunk-6GONZVLS.js → chunk-KKDVZLGL.js} +1 -1
  86. package/chunks/{chunk-MKVZE4ZJ.js → chunk-KTJFU7RT.js} +3 -2
  87. package/chunks/{chunk-R574ATRM.js → chunk-M2PNLYGY.js} +41 -0
  88. package/chunks/{chunk-6EOI4HOK.js → chunk-M3STHEMM.js} +12 -17
  89. package/chunks/chunk-NGYI5EF5.js +244 -0
  90. package/chunks/{chunk-ALGGS7UH.js → chunk-NPQ5ZKRP.js} +82 -1
  91. package/chunks/{chunk-HQB2KUAN.js → chunk-NPUXXRJI.js} +1 -1
  92. package/chunks/{chunk-QETYKPMG.js → chunk-NVRDQFCX.js} +1 -1
  93. package/chunks/{chunk-PQBHU2IA.js → chunk-OHKJVAKG.js} +10 -10
  94. package/chunks/{chunk-CYR3HI5X.js → chunk-OQTXYMKW.js} +2 -2
  95. package/chunks/{chunk-DBOFL3LQ.js → chunk-PG62DFWD.js} +10 -10
  96. package/chunks/{chunk-2VSTGY6M.js → chunk-PJRW65JO.js} +1 -1
  97. package/chunks/{chunk-33ACCIIY.js → chunk-PLFATELK.js} +1 -1
  98. package/chunks/{chunk-IC4Z6LX6.js → chunk-PYQADEFD.js} +5 -0
  99. package/chunks/{chunk-MAJS7AT4.js → chunk-QGHSP65Z.js} +2 -2
  100. package/chunks/{chunk-OHJLEW5J.js → chunk-QQWD7LZV.js} +4 -4
  101. package/chunks/{chunk-ZXU5UHMI.js → chunk-QXVSWG66.js} +2 -2
  102. package/chunks/{chunk-E33LOKRA.js → chunk-RPWVIXDB.js} +18 -1
  103. package/chunks/{chunk-TYKC75AX.js → chunk-S3Y3GBFD.js} +1 -1
  104. package/chunks/{chunk-7UFKAV7Y.js → chunk-S6HYI3MF.js} +2 -2
  105. package/chunks/chunk-SAH4BD2J.js +92 -0
  106. package/chunks/{chunk-OMKQH5C5.js → chunk-SNRT2TJJ.js} +6 -23
  107. package/chunks/chunk-SR7RZ4MS.js +202 -0
  108. package/chunks/{chunk-CXE7E23H.js → chunk-TE3ZAJE7.js} +45 -17
  109. package/chunks/{chunk-S7CV4KO6.js → chunk-TKSZJ5BV.js} +3 -3
  110. package/chunks/{chunk-3NB7TSE2.js → chunk-U5SLIG7E.js} +1 -1
  111. package/chunks/chunk-UA5H3DS2.js +203 -0
  112. package/chunks/{chunk-24ER7UV4.js → chunk-UFALT4LK.js} +1 -1
  113. package/chunks/{chunk-YJQCUTT2.js → chunk-VWMUDKLC.js} +3 -3
  114. package/chunks/{chunk-RMH5OWLD.js → chunk-VXZ5HAOV.js} +1 -1
  115. package/chunks/{chunk-BVWVWGLE.js → chunk-WAUGQKUU.js} +4 -64
  116. package/chunks/{chunk-SHZYHGQH.js → chunk-WG6542MA.js} +1 -1
  117. package/chunks/{chunk-5KH532V7.js → chunk-WV5J6Q6N.js} +1 -1
  118. package/chunks/{chunk-RNVQB725.js → chunk-XHD7CRP2.js} +2 -2
  119. package/chunks/{chunk-W4B7UBUS.js → chunk-XZKQT2B2.js} +5 -5
  120. package/chunks/{chunk-6HVUFDS2.js → chunk-Y4TETC74.js} +22 -13
  121. package/chunks/{chunk-RZHU3ILK.js → chunk-YEF7XEO2.js} +4 -4
  122. package/chunks/{chunk-RUL4S3K3.js → chunk-YHJFF7KH.js} +146 -45
  123. package/chunks/{chunk-23RZCH76.js → chunk-YOM7DEGB.js} +3 -3
  124. package/chunks/{chunk-OFI7IGST.js → chunk-ZCLLJARV.js} +9 -9
  125. package/chunks/{chunk-GSS34377.js → chunk-ZHA242R4.js} +2 -2
  126. package/chunks/{chunk-TRLYP7OF.js → chunk-ZPLALRXZ.js} +17 -9
  127. package/chunks/{chunk-WUC6ZFXO.js → chunk-ZWBUH5UP.js} +1 -1
  128. package/chunks/{computer-use-KEAPATUY.js → computer-use-ESQYJ3JY.js} +26 -22
  129. package/chunks/{config-utils-K7SCOWHD.js → config-utils-XQHBJP7G.js} +4 -4
  130. package/chunks/{contextCommand-ZJA6A5K5.js → contextCommand-CX3YF4ZE.js} +28 -24
  131. package/chunks/{core-runtime-QMJPWHCI.js → core-runtime-DIAU7JMG.js} +30 -26
  132. package/chunks/{create-sub-session-DJE6XICH.js → create-sub-session-HDPD6HOA.js} +26 -22
  133. package/chunks/{create-sub-session-E4PBYXV5.js → create-sub-session-QIDZUOPU.js} +1 -1
  134. package/chunks/{cron-create-GRBWYMIJ.js → cron-create-VONA5JYY.js} +1 -1
  135. package/chunks/{cron-delete-4CMKBR2M.js → cron-delete-5JXSP2MI.js} +1 -1
  136. package/chunks/{cron-list-W7K4ASOA.js → cron-list-KE4F2CIR.js} +1 -1
  137. package/chunks/{daemon-SCTQMM7Z.js → daemon-VZBGJUNL.js} +30 -0
  138. package/chunks/{daemon-status-provider-FSWDPE2G.js → daemon-status-provider-H6O4UQ4F.js} +33 -29
  139. package/chunks/{daemon-trust-policy-P5L5VFAY.js → daemon-trust-policy-BNUXG6MT.js} +33 -29
  140. package/chunks/{daemon-trust-policy-monitor-73JYN6ET.js → daemon-trust-policy-monitor-E4EQ7GF4.js} +33 -29
  141. package/chunks/{de-VL76CPLV.js → de-LIW4XVLN.js} +5 -0
  142. package/chunks/{deferred-core-runtime-BWRCCFTE.js → deferred-core-runtime-CBMSHPAU.js} +26 -22
  143. package/chunks/{display-image-O2XFPQTC.js → display-image-NQRSIBXM.js} +2 -2
  144. package/chunks/{dist-DPPHJAVL.js → dist-EEEQGCZA.js} +918 -142
  145. package/chunks/{dist-K4WWQBHS.js → dist-HIACTZEK.js} +55 -15
  146. package/chunks/{dist-3BMEUGTG.js → dist-IRL7WA5Z.js} +1 -1
  147. package/chunks/{dist-HVBMEYWK.js → dist-KVISB2O2.js} +1 -1
  148. package/chunks/{dist-KS4O2NKE.js → dist-MBF3I5MX.js} +14 -8
  149. package/chunks/{dist-SFQ34F4M.js → dist-MKX5OSFF.js} +5 -4
  150. package/chunks/{dist-7JGAAQSC.js → dist-RCH3I7SS.js} +2 -2
  151. package/chunks/{dist-C5U4LJKW.js → dist-TUSWNE2I.js} +5 -4
  152. package/chunks/{earlyInputCapture-L5ST23A6.js → earlyInputCapture-UIOP7OIN.js} +26 -22
  153. package/chunks/{edit-LHHRFNFK.js → edit-ITMZYFKA.js} +26 -22
  154. package/chunks/{en-IRJ2WN5T.js → en-SY5GTIGX.js} +6 -0
  155. package/chunks/{enter-worktree-6NXCRZPF.js → enter-worktree-S4PL5UV6.js} +26 -22
  156. package/chunks/{enterPlanMode-ZVQT4U7D.js → enterPlanMode-YV52NNJT.js} +26 -22
  157. package/chunks/{environment-GJ2HWJOS.js → environment-NGOWPRZV.js} +30 -26
  158. package/chunks/{errors-6RLH3XXC.js → errors-BU26DTDX.js} +28 -24
  159. package/chunks/{exit-worktree-I2YLUHHY.js → exit-worktree-XRM6LH5F.js} +26 -22
  160. package/chunks/{exitPlanMode-7CCWKO7I.js → exitPlanMode-ZLI5F7KR.js} +26 -22
  161. package/chunks/{fast-path-DVFD4HQD.js → fast-path-UJWORIED.js} +23 -3
  162. package/chunks/{fast-path-settings-WQJU2LAT.js → fast-path-settings-37WQD5B2.js} +6 -3
  163. package/chunks/{fr-GK3HQYVB.js → fr-RQFO7U4P.js} +5 -0
  164. package/chunks/{gemini-7FWGOYD4.js → gemini-ZSKNDUMU.js} +77 -65
  165. package/chunks/{geminiContentGenerator-V2WVLIXU.js → geminiContentGenerator-YGEXOEKD.js} +1 -1
  166. package/chunks/{glob-3N6GGI75.js → glob-7KZG44BR.js} +26 -22
  167. package/chunks/{goal-tools-APOW6UXL.js → goal-tools-PXWN5VK3.js} +4 -2
  168. package/chunks/{grep-V43ILZVX.js → grep-6ZFC7RJ5.js} +26 -22
  169. package/chunks/{handleAutoUpdate-A5WFVWIA.js → handleAutoUpdate-KSEL3TQS.js} +30 -26
  170. package/chunks/{i18n-PLVQ4FBZ.js → i18n-ZIUXBW5V.js} +27 -23
  171. package/chunks/{image-gen-7C6IK6DC.js → image-gen-AUIZJJNK.js} +7 -5
  172. package/chunks/{initializer-CVAIKZYL.js → initializer-7AHY3N6Q.js} +33 -29
  173. package/chunks/{installationInfo-J6QDHNTK.js → installationInfo-VGBXMYLY.js} +27 -23
  174. package/chunks/{ja-3FA46IKD.js → ja-KOZKHJHZ.js} +5 -0
  175. package/chunks/{list-ZZ4OUUWV.js → list-PSFKQHLB.js} +36 -32
  176. package/chunks/{list-agents-KFFIIS2G.js → list-agents-Z4WABFDZ.js} +1 -1
  177. package/chunks/{loadedSettingsAdapter-QRYRJSWL.js → loadedSettingsAdapter-FTMRCTOF.js} +33 -29
  178. package/chunks/{loggingContentGenerator-OJCO75HM.js → loggingContentGenerator-MZAN52UV.js} +7 -5
  179. package/chunks/{loop-wakeup-TLMJPMMP.js → loop-wakeup-UZ5RL5Y2.js} +2 -2
  180. package/chunks/{ls-UVVE2XGE.js → ls-TVHDGIES.js} +1 -1
  181. package/chunks/{lsp-QMEA2VLB.js → lsp-CVN6OQPI.js} +1 -1
  182. package/chunks/{managed-npm-update-PCOSCP2N.js → managed-npm-update-O4NHK45X.js} +27 -23
  183. package/chunks/{mcp-M3WKKWKY.js → mcp-6CFP2AYQ.js} +33 -29
  184. package/chunks/{monitor-GN24FH6C.js → monitor-DAKD6OU4.js} +26 -22
  185. package/chunks/{nonInteractiveCli-KPTU3VSQ.js → nonInteractiveCli-RC7VIUZL.js} +66 -60
  186. package/chunks/{notebook-edit-4YM65BBO.js → notebook-edit-474DPMRL.js} +34 -22
  187. package/chunks/{openaiContentGenerator-EDQT6GTV.js → openaiContentGenerator-2NFY2MWO.js} +19 -9
  188. package/chunks/{pidfile-JOIIRN2C.js → pidfile-KBFVDNQP.js} +26 -22
  189. package/chunks/{process-registry-2CHQBXH5.js → process-registry-PMJOA5CO.js} +15 -0
  190. package/chunks/{processUtils-5SV4MX3Q.js → processUtils-6GRYH4Y3.js} +2 -2
  191. package/chunks/{pt-3AOBKPIJ.js → pt-U6AOCTMF.js} +5 -0
  192. package/chunks/{qwenContentGenerator-ODRJSUGR.js → qwenContentGenerator-KAHU6IZY.js} +33 -28
  193. package/chunks/{qwenOAuth2-NESCMZ47.js → qwenOAuth2-RRQTCP4W.js} +7 -5
  194. package/chunks/{read-file-HPSODLPK.js → read-file-3M6WXDXP.js} +6 -4
  195. package/chunks/{read-mcp-resource-2TNSJTC3.js → read-mcp-resource-PZ4ZF6YL.js} +1 -1
  196. package/chunks/{record-artifact-RAON52FC.js → record-artifact-P4HFMS7X.js} +2 -2
  197. package/chunks/{resumeHistoryUtils-TXCOFFMQ.js → resumeHistoryUtils-D6TAY3HX.js} +30 -26
  198. package/chunks/{ripGrep-ZKQGTQAO.js → ripGrep-PLPENT3E.js} +26 -22
  199. package/chunks/{ru-VJRAMC4W.js → ru-CMX4UMYP.js} +5 -0
  200. package/chunks/{run-qwen-serve-ZPKPKECF.js → run-qwen-serve-ZAFIJKJC.js} +168 -54
  201. package/chunks/{runtime-2FLNNM36.js → runtime-ZED7CYOZ.js} +38 -34
  202. package/chunks/{scheduler-365PJHNR.js → scheduler-MD3AL2W5.js} +26 -22
  203. package/chunks/{send-message-ZM7MRUGP.js → send-message-CAMSLG2L.js} +4 -3
  204. package/chunks/{serve-QD2RNLKJ.js → serve-E3VUDRZN.js} +33 -29
  205. package/chunks/{server-XLJVLTYM.js → server-OWMEMAKR.js} +450 -231
  206. package/chunks/{session-3VTUHH4Q.js → session-HZ57QK7K.js} +158 -97
  207. package/chunks/{settings-KULVPCQC.js → settings-V7BR3RKP.js} +32 -28
  208. package/chunks/{shell-3SWW22MH.js → shell-23OMNMW6.js} +26 -22
  209. package/chunks/{skill-KDHWYS7W.js → skill-6HBDYZRS.js} +7 -5
  210. package/chunks/{skill-settings-NMY4JEJC.js → skill-settings-HWJLTU7M.js} +32 -28
  211. package/chunks/{spawnChannel-ZKS4Q5OU.js → spawnChannel-N6KKUW5B.js} +27 -23
  212. package/chunks/{standalone-update-7CXPGAQ4.js → standalone-update-QGIKHATD.js} +28 -24
  213. package/chunks/{startInteractiveUI-2QQLEKM6.js → startInteractiveUI-GX2CRL42.js} +365 -155
  214. package/chunks/{syntheticOutput-ZLCUTKO2.js → syntheticOutput-PEBJQYJV.js} +2 -2
  215. package/chunks/{task-create-CQP5UEA3.js → task-create-5NWCQSJF.js} +5 -4
  216. package/chunks/{task-list-XLEZOJXP.js → task-list-53265TRZ.js} +1 -1
  217. package/chunks/{task-stop-7ZQM5CFF.js → task-stop-FPCOIRYX.js} +1 -1
  218. package/chunks/{task-update-JA75U2SN.js → task-update-5HN577LS.js} +5 -4
  219. package/chunks/{team-create-2WTNGAOX.js → team-create-CFFKU7KL.js} +26 -22
  220. package/chunks/{team-delete-MHY3UZGY.js → team-delete-MMQB4OSC.js} +1 -1
  221. package/chunks/{team-plan-approval-LZTYLEG4.js → team-plan-approval-6EFOKR6A.js} +26 -22
  222. package/chunks/{terminal-image-renderer-R5HHAFJN.js → terminal-image-renderer-TLDNACQY.js} +28 -24
  223. package/chunks/{theme-manager-PAUCSJFF.js → theme-manager-5LJ3H7VO.js} +26 -22
  224. package/chunks/{todoWrite-UPVOHYGD.js → todoWrite-JGV6VLOX.js} +1 -1
  225. package/chunks/{tool-search-2BFCGLI6.js → tool-search-UJV3A24H.js} +9 -6
  226. package/chunks/{total-session-admission-MK4SINFK.js → total-session-admission-D63QYXGO.js} +29 -25
  227. package/chunks/{trustedFolders-TJ5S26N7.js → trustedFolders-KZCOB53W.js} +30 -24
  228. package/chunks/{update-relaunch-N7AYLARF.js → update-relaunch-IFILM3SA.js} +5 -5
  229. package/chunks/{updateCheck-QRZ3DVT5.js → updateCheck-YZ2CRCFC.js} +29 -25
  230. package/chunks/{useAutoAcceptIndicator-DBJ7Y5AF.js → useAutoAcceptIndicator-AXEVNA3Q.js} +35 -31
  231. package/chunks/{validateNonInterActiveAuth-6ZQWUDS3.js → validateNonInterActiveAuth-3WTOJFWA.js} +61 -57
  232. package/chunks/{version-AJQGQWXC.js → version-GXK7OHZY.js} +1 -1
  233. package/chunks/{web-fetch-QWJYRXFL.js → web-fetch-ILB4GAVR.js} +12 -8
  234. package/chunks/{web-search-2AOXJGHU.js → web-search-HKRPGPZZ.js} +8 -6
  235. package/chunks/{workflow-ERH3SJG2.js → workflow-FXIPRQQA.js} +750 -147
  236. package/chunks/{workspace-providers-status-HZ474RA4.js → workspace-providers-status-NYHC7HSR.js} +35 -31
  237. package/chunks/{workspace-registration-store-6EUP4JXG.js → workspace-registration-store-AKEB7OMW.js} +1 -1
  238. package/chunks/{workspace-registry-R4APRRNC.js → workspace-registry-CDAS5TVZ.js} +29 -25
  239. package/chunks/{workspace-service-HFIFDMU7.js → workspace-service-PAMUKMAV.js} +36 -32
  240. package/chunks/{workspace-skills-status-HAHEIHGK.js → workspace-skills-status-YQSHCCMS.js} +33 -29
  241. package/chunks/{workspace-trust-reconciler-65GTAGDK.js → workspace-trust-reconciler-RPTXOIY2.js} +36 -32
  242. package/chunks/{write-file-B34CDELV.js → write-file-CGS57TS4.js} +26 -22
  243. package/chunks/{zh-ARWDLDLR.js → zh-AGL2FVBI.js} +6 -0
  244. package/chunks/{zh-TW-Y4RGI3P7.js → zh-TW-KI66MHQY.js} +6 -0
  245. package/chunks/{zoom-image-HPRBZHSS.js → zoom-image-E7D72GYV.js} +6 -4
  246. package/cli.js +13 -13
  247. package/locales/ca.js +10 -0
  248. package/locales/de.js +9 -0
  249. package/locales/en.js +10 -0
  250. package/locales/fr.js +9 -0
  251. package/locales/ja.js +9 -0
  252. package/locales/pt.js +9 -0
  253. package/locales/ru.js +9 -0
  254. package/locales/zh-TW.js +10 -0
  255. package/locales/zh.js +10 -0
  256. package/package.json +3 -3
  257. package/web-shell/assets/{arc-Ip-FFDJ0.js → arc-DybZaz32.js} +1 -1
  258. package/web-shell/assets/{architectureDiagram-3BPJPVTR-CChqgwIb.js → architectureDiagram-3BPJPVTR-jN3qBd19.js} +1 -1
  259. package/web-shell/assets/{blockDiagram-GPEHLZMM-BHN-Tfss.js → blockDiagram-GPEHLZMM-Ct5DZPrj.js} +1 -1
  260. package/web-shell/assets/{c4Diagram-AAUBKEIU-BhyjzDjN.js → c4Diagram-AAUBKEIU-CUAFMlUG.js} +1 -1
  261. package/web-shell/assets/channel-BMwLrwLW.js +1 -0
  262. package/web-shell/assets/{chunk-2J33WTMH-BB9eyHrx.js → chunk-2J33WTMH-CuV8n90B.js} +1 -1
  263. package/web-shell/assets/{chunk-4BX2VUAB-BeV7ce_J.js → chunk-4BX2VUAB-BUzl_kls.js} +1 -1
  264. package/web-shell/assets/{chunk-55IACEB6-DO7kXDiV.js → chunk-55IACEB6-BnDBLX6A.js} +1 -1
  265. package/web-shell/assets/{chunk-727SXJPM-B27MPznD.js → chunk-727SXJPM-B83uTOjm.js} +1 -1
  266. package/web-shell/assets/{chunk-AQP2D5EJ-DHIjqjD_.js → chunk-AQP2D5EJ-DM3HLgpT.js} +1 -1
  267. package/web-shell/assets/{chunk-FMBD7UC4-DabMqyN2.js → chunk-FMBD7UC4-CSQ5hgyb.js} +1 -1
  268. package/web-shell/assets/{chunk-ND2GUHAM-Dw7Nnnxc.js → chunk-ND2GUHAM-BWOF4SxX.js} +1 -1
  269. package/web-shell/assets/{chunk-QZHKN3VN-DdaZew1Q.js → chunk-QZHKN3VN-BsOH9LMi.js} +1 -1
  270. package/web-shell/assets/classDiagram-4FO5ZUOK-BGDv98jY.js +1 -0
  271. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BGDv98jY.js +1 -0
  272. package/web-shell/assets/{cose-bilkent-S5V4N54A-CgBpCYH5.js → cose-bilkent-S5V4N54A-IENqH2iJ.js} +1 -1
  273. package/web-shell/assets/{dagre-BM42HDAG-BB4IU8G0.js → dagre-BM42HDAG--dyzDTGo.js} +1 -1
  274. package/web-shell/assets/{diagram-2AECGRRQ-BcUTHU37.js → diagram-2AECGRRQ-BE7Dcqof.js} +1 -1
  275. package/web-shell/assets/{diagram-5GNKFQAL-B6Lyihyv.js → diagram-5GNKFQAL-Cr8-5OTj.js} +1 -1
  276. package/web-shell/assets/{diagram-KO2AKTUF-CRIJOjpG.js → diagram-KO2AKTUF-Bzey3uAY.js} +1 -1
  277. package/web-shell/assets/{diagram-LMA3HP47-DdNiwWWT.js → diagram-LMA3HP47-sErl28Xb.js} +1 -1
  278. package/web-shell/assets/{diagram-OG6HWLK6-Dz4b32Do.js → diagram-OG6HWLK6-Dq30ATIo.js} +1 -1
  279. package/web-shell/assets/{erDiagram-TEJ5UH35-D-8NGw77.js → erDiagram-TEJ5UH35-BkCoEfVW.js} +1 -1
  280. package/web-shell/assets/{flowDiagram-I6XJVG4X-Dun26LyM.js → flowDiagram-I6XJVG4X-DHwO0rrI.js} +1 -1
  281. package/web-shell/assets/{ganttDiagram-6RSMTGT7-F10Hu1Gc.js → ganttDiagram-6RSMTGT7-s7vAPxWq.js} +1 -1
  282. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-Bf8Ez6-D.js → gitGraphDiagram-PVQCEYII-CQxhwPOU.js} +1 -1
  283. package/web-shell/assets/index-Bckpjr-I.css +5 -0
  284. package/web-shell/assets/{index-BXqw-nGq.js → index-CF4wApWp.js} +1 -1
  285. package/web-shell/assets/index-DwEr9HEW.js +1768 -0
  286. package/web-shell/assets/{infoDiagram-5YYISTIA-DVgTMLvj.js → infoDiagram-5YYISTIA-BnFrD0bq.js} +1 -1
  287. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-uT-KepvK.js → ishikawaDiagram-YF4QCWOH-Bf9zK5NK.js} +1 -1
  288. package/web-shell/assets/{journeyDiagram-JHISSGLW-Vg_XadQf.js → journeyDiagram-JHISSGLW-CyGAhsxi.js} +1 -1
  289. package/web-shell/assets/{kanban-definition-UN3LZRKU-Dyv1ESBE.js → kanban-definition-UN3LZRKU-CbsK5akB.js} +1 -1
  290. package/web-shell/assets/{linear-BMIepYX3.js → linear-cQsF4P8D.js} +1 -1
  291. package/web-shell/assets/{mermaid.core-zA8pJ9ag.js → mermaid.core-Z4HVqrKY.js} +5 -5
  292. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BCW_BZ_5.js → mindmap-definition-RKZ34NQL-CYnrBo_f.js} +1 -1
  293. package/web-shell/assets/{pieDiagram-4H26LBE5-DseNEGp2.js → pieDiagram-4H26LBE5-CBzOfhrs.js} +1 -1
  294. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-6Z7wr1Fi.js → quadrantDiagram-W4KKPZXB-D4LK1Ebn.js} +1 -1
  295. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CVOlCRPf.js → requirementDiagram-4Y6WPE33-Bzti2Lcj.js} +1 -1
  296. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-CGhgrUJZ.js → sankeyDiagram-5OEKKPKP-yTBw5Z2s.js} +1 -1
  297. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-dlqmpLuQ.js → sequenceDiagram-3UESZ5HK-D07UVRiZ.js} +1 -1
  298. package/web-shell/assets/{stateDiagram-AJRCARHV-B9EW10Xb.js → stateDiagram-AJRCARHV-UE_lHsTn.js} +1 -1
  299. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DC6xgXjX.js +1 -0
  300. package/web-shell/assets/{timeline-definition-PNZ67QCA-BBRh0mgZ.js → timeline-definition-PNZ67QCA-DRvYdiTs.js} +1 -1
  301. package/web-shell/assets/{vennDiagram-CIIHVFJN-B8Gs-REP.js → vennDiagram-CIIHVFJN-CQLIXs0u.js} +1 -1
  302. package/web-shell/assets/{wardley-L42UT6IY-D_y80Ur7.js → wardley-L42UT6IY-JZz_Xqse.js} +1 -1
  303. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-D-CNfHJ-.js → wardleyDiagram-YWT4CUSO--i7BiJwB.js} +1 -1
  304. package/web-shell/assets/{xychartDiagram-2RQKCTM6-DQ5CvELo.js → xychartDiagram-2RQKCTM6-Bkc-bW0S.js} +1 -1
  305. package/web-shell/index.html +2 -2
  306. package/chunks/chunk-6PEXNQTX.js +0 -68
  307. package/chunks/chunk-IUFV6FYU.js +0 -81
  308. package/web-shell/assets/channel-Cu8qd6OB.js +0 -1
  309. package/web-shell/assets/classDiagram-4FO5ZUOK-BI3KrXhq.js +0 -1
  310. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BI3KrXhq.js +0 -1
  311. package/web-shell/assets/index-QQlUCJGg.css +0 -5
  312. package/web-shell/assets/index-hcgjV7vS.js +0 -1768
  313. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CJTZJJ5X.js +0 -1
  314. package/chunks/{anthropicContentGenerator-DTMVEL5M.js → anthropicContentGenerator-SSFE2753.js} +9 -9
@@ -1,16 +1,18 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
3
  import {
4
- require_strip_json_comments
5
- } from "./chunk-ALGGS7UH.js";
4
+ buildTrustPrecedenceRules,
5
+ require_strip_json_comments,
6
+ resolveTrustDecision,
7
+ resolveTrustRule
8
+ } from "./chunk-NPQ5ZKRP.js";
6
9
  import {
7
10
  arePathsEquivalent,
8
- getPathComparisonVariants,
9
- isWithinRoot
11
+ getPathComparisonVariants
10
12
  } from "./chunk-MR3PXB6E.js";
11
13
  import {
12
14
  ideContextStore
13
- } from "./chunk-Y7E5LNLO.js";
15
+ } from "./chunk-GXSNGY5M.js";
14
16
  import {
15
17
  require_proper_lockfile
16
18
  } from "./chunk-KRXPRVGL.js";
@@ -1893,45 +1895,10 @@ var LoadedTrustedFolders = class {
1893
1895
  * @returns
1894
1896
  */
1895
1897
  isPathTrusted(location) {
1896
- const trustedPaths = [];
1897
- const untrustedPaths = [];
1898
- for (const rule of this.rules) {
1899
- switch (rule.trustLevel) {
1900
- case "TRUST_FOLDER" /* TRUST_FOLDER */:
1901
- trustedPaths.push(rule.path);
1902
- break;
1903
- case "TRUST_PARENT" /* TRUST_PARENT */:
1904
- trustedPaths.push(path.dirname(rule.path));
1905
- break;
1906
- case "DO_NOT_TRUST" /* DO_NOT_TRUST */:
1907
- untrustedPaths.push(rule.path);
1908
- break;
1909
- default:
1910
- break;
1911
- }
1912
- }
1913
- const locationVariants = getPathComparisonVariants(location);
1914
- for (const trustedPath of trustedPaths) {
1915
- for (const locationVariant of locationVariants) {
1916
- for (const trustedVariant of getPathComparisonVariants(trustedPath)) {
1917
- if (isWithinRoot(locationVariant, trustedVariant)) {
1918
- return true;
1919
- }
1920
- }
1921
- }
1922
- }
1923
- for (const untrustedPath of untrustedPaths) {
1924
- for (const locationVariant of locationVariants) {
1925
- for (const untrustedVariant of getPathComparisonVariants(
1926
- untrustedPath
1927
- )) {
1928
- if (locationVariant === untrustedVariant) {
1929
- return false;
1930
- }
1931
- }
1932
- }
1933
- }
1934
- return void 0;
1898
+ return resolveTrustDecision(
1899
+ buildTrustPrecedenceRules(this.rules),
1900
+ getPathComparisonVariants(location)
1901
+ );
1935
1902
  }
1936
1903
  setValue(path2, trustLevel) {
1937
1904
  const committedConfig = writeTrustedFolders(
@@ -2060,32 +2027,17 @@ function isFolderTrustEnabled(settings) {
2060
2027
  return folderTrustSetting;
2061
2028
  }
2062
2029
  __name(isFolderTrustEnabled, "isFolderTrustEnabled");
2063
- function isWithinRootAcrossVariants(childPath, parentPath) {
2064
- for (const childVariant of getPathComparisonVariants(childPath)) {
2065
- for (const parentVariant of getPathComparisonVariants(parentPath)) {
2066
- if (isWithinRoot(childVariant, parentVariant)) {
2067
- return true;
2068
- }
2069
- }
2070
- }
2071
- return false;
2072
- }
2073
- __name(isWithinRootAcrossVariants, "isWithinRootAcrossVariants");
2074
2030
  function getExplicitTrustLevel(trustConfig, workspaceCwd) {
2075
- for (const [rulePath, trustLevel] of Object.entries(trustConfig)) {
2076
- if (trustLevel === "TRUST_FOLDER" /* TRUST_FOLDER */ && isWithinRootAcrossVariants(workspaceCwd, rulePath)) {
2077
- return trustLevel;
2078
- }
2079
- if (trustLevel === "TRUST_PARENT" /* TRUST_PARENT */ && isWithinRootAcrossVariants(workspaceCwd, path.dirname(rulePath))) {
2080
- return trustLevel;
2081
- }
2082
- }
2083
- for (const [rulePath, trustLevel] of Object.entries(trustConfig)) {
2084
- if (trustLevel === "DO_NOT_TRUST" /* DO_NOT_TRUST */ && arePathsEquivalent(workspaceCwd, rulePath)) {
2085
- return trustLevel;
2086
- }
2087
- }
2088
- return null;
2031
+ const winner = resolveTrustRule(
2032
+ buildTrustPrecedenceRules(
2033
+ Object.entries(trustConfig).map(([rulePath, trustLevel]) => ({
2034
+ path: rulePath,
2035
+ trustLevel
2036
+ }))
2037
+ ),
2038
+ getPathComparisonVariants(workspaceCwd)
2039
+ );
2040
+ return winner?.payload ?? null;
2089
2041
  }
2090
2042
  __name(getExplicitTrustLevel, "getExplicitTrustLevel");
2091
2043
  function loadTrustedFoldersWithOverrides(trustConfig) {
@@ -2191,6 +2143,7 @@ export {
2191
2143
  loadTrustedFolders,
2192
2144
  saveTrustedFolders,
2193
2145
  isFolderTrustEnabled,
2146
+ getExplicitTrustLevel,
2194
2147
  getWorkspaceTrustStatus,
2195
2148
  isWorkspaceTrusted
2196
2149
  };
@@ -5,7 +5,7 @@ import {
5
5
  BaseToolInvocation,
6
6
  ToolDisplayNames,
7
7
  ToolNames
8
- } from "./chunk-IC4Z6LX6.js";
8
+ } from "./chunk-PYQADEFD.js";
9
9
  import {
10
10
  init_esbuild_shims
11
11
  } from "./chunk-5O2XNYP6.js";
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  delay
5
- } from "./chunk-BGG4MBYD.js";
5
+ } from "./chunk-4PYCZH2V.js";
6
6
  import {
7
7
  isTlsVerificationDisabled
8
8
  } from "./chunk-KKBPOU75.js";
@@ -23,10 +23,10 @@ import {
23
23
  } from "./chunk-BKHCW2BI.js";
24
24
  import {
25
25
  loadSettings
26
- } from "./chunk-PQBHU2IA.js";
26
+ } from "./chunk-OHKJVAKG.js";
27
27
  import {
28
28
  MCP_BUDGET_WARN_FRACTION
29
- } from "./chunk-Y7E5LNLO.js";
29
+ } from "./chunk-GXSNGY5M.js";
30
30
  import {
31
31
  parsePositiveIntegerEnv
32
32
  } from "./chunk-6PVPNMXU.js";
@@ -181,7 +181,15 @@ var serveCommand = {
181
181
  description: "HTTP bridge mode: attempt to preheat one primary `qwen --acp` child; trusted secondaries start one on demand. Stage 2 native in-process mode is not yet implemented; this flag will become opt-in then."
182
182
  }).option("memory-budget-mb", {
183
183
  type: "number",
184
- description: "Total memory budget in MB for the daemon process tree. When unset, derived as 50% of cgroup-constrained or host memory, and capped at the resolved available memory either way. Currently observed and reported under `limits.memory` in daemon status; it does not yet size any child process. Must be an integer in [1024, 1048576]."
184
+ description: "Total memory budget in MB for the daemon process tree. When unset, derived as 50% of cgroup-constrained or host memory, and capped at the resolved available memory either way. Currently observed and reported under `limits.memory` in daemon status, and modeled into a per-child partition reported under `limits.memory.childHeap`. Nothing applies it: no child is sized from this budget. Must be an integer in [1024, 1048576]."
185
+ }).option("memory-pressure-mode", {
186
+ choices: ["off", "observe"],
187
+ default: "observe",
188
+ description: "Whether the daemon derives a memory-pressure level from its own RSS and V8 heap. `observe` (default) reports the level in daemon status and raises a status issue when it leaves normal. `off` still reports the underlying figures but raises no issue, so the overall status rollup is unchanged \u2014 use it while calibrating, or if you alert on the top-level status. Nothing remediates in either mode."
189
+ }).option("child-heap-mode", {
190
+ choices: ["off", "observe"],
191
+ default: "observe",
192
+ description: "Whether the daemon models a per-child heap partition of the memory budget. `observe` (default) reports the partition it would apply \u2014 `limits.memory.childHeap.perChildCeilingMb` and `maxConcurrentChildren` \u2014 and counts spawns that would have exceeded it. Nothing is applied: no child is sized from the budget and no spawn is refused. `off` models nothing. Note a refusal count of 0 does NOT mean the partition would be safe to apply; children still run on the much larger host-derived ceiling, so a workload needing more old space than the modeled ceiling looks healthy here."
185
193
  }).option("mcp-client-budget", {
186
194
  type: "number",
187
195
  description: "Cap on live MCP clients spawned inside the ACP child for the bound workspace. Positive integer. Combine with --mcp-budget-mode to control behavior at the cap. When unset, mode defaults to off (no accounting-driven enforcement, but GET /workspace/mcp still reports `clientCount`). Distinct from claude-code MCP_SERVER_CONNECTION_BATCH_SIZE which gates startup concurrency, not the total client count."
@@ -346,7 +354,7 @@ var serveCommand = {
346
354
  }
347
355
  const externalToolGuardToken = process.env[EXTERNAL_TOOL_GUARD_TOKEN_ENV] ?? "";
348
356
  delete process.env[EXTERNAL_TOOL_GUARD_TOKEN_ENV];
349
- const { runQwenServe } = await import("./run-qwen-serve-ZPKPKECF.js");
357
+ const { runQwenServe } = await import("./run-qwen-serve-ZAFIJKJC.js");
350
358
  try {
351
359
  const handle = await runQwenServe({
352
360
  port: argv.port,
@@ -372,6 +380,8 @@ var serveCommand = {
372
380
  mcpClientBudget,
373
381
  mcpBudgetMode: resolvedMcpMode,
374
382
  ...memoryBudgetMb !== void 0 ? { memoryBudgetMb } : {},
383
+ memoryPressureMode: argv["memory-pressure-mode"],
384
+ childHeapMode: argv["child-heap-mode"],
375
385
  ...argv["allow-origin"] && argv["allow-origin"].length > 0 ? { allowOrigins: argv["allow-origin"] } : {},
376
386
  ...argv["prompt-deadline-ms"] !== void 0 ? { promptDeadlineMs: argv["prompt-deadline-ms"] } : {},
377
387
  ...argv["writer-idle-timeout-ms"] !== void 0 ? { writerIdleTimeoutMs: argv["writer-idle-timeout-ms"] } : {},
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-EQL65XGA.js";
13
13
  import {
14
14
  ToolNames
15
- } from "./chunk-IC4Z6LX6.js";
15
+ } from "./chunk-PYQADEFD.js";
16
16
  import {
17
17
  createDebugLogger,
18
18
  getErrorMessage,
@@ -692,7 +692,7 @@ __name(resolveForkExecutionAllowedTools, "resolveForkExecutionAllowedTools");
692
692
  function registerForkDisplayImageForCache(config, advertisedToolNames) {
693
693
  if (!advertisedToolNames.includes(ToolNames.DISPLAY_IMAGE)) return;
694
694
  config.getToolRegistry().registerFactory(ToolNames.DISPLAY_IMAGE, async () => {
695
- const { DisplayImageTool } = await import("./display-image-O2XFPQTC.js");
695
+ const { DisplayImageTool } = await import("./display-image-NQRSIBXM.js");
696
696
  return new DisplayImageTool(config);
697
697
  });
698
698
  }
@@ -2,12 +2,12 @@
2
2
  "use strict";
3
3
  import {
4
4
  buildPermissionSettings
5
- } from "./chunk-6GONZVLS.js";
5
+ } from "./chunk-KKDVZLGL.js";
6
6
  import {
7
7
  resolveVoiceStreamConfig,
8
8
  resolveVoiceTranscriptionConfig,
9
9
  transcribeVoiceAudio
10
- } from "./chunk-AE77C5ZU.js";
10
+ } from "./chunk-DQSDACD2.js";
11
11
  import {
12
12
  getVoiceSettingsScope,
13
13
  isSelectableVoiceModel,
@@ -16,7 +16,7 @@ import {
16
16
  readVoiceMode,
17
17
  readVoiceModel,
18
18
  resolveVoiceTransport
19
- } from "./chunk-55LYDVPU.js";
19
+ } from "./chunk-C5VWPTGT.js";
20
20
  import {
21
21
  resolveSkillSettings
22
22
  } from "./chunk-Z4X5MTRT.js";
@@ -55,15 +55,15 @@ import {
55
55
  import {
56
56
  getPersistScopeForModelSelection,
57
57
  loadSettings
58
- } from "./chunk-PQBHU2IA.js";
58
+ } from "./chunk-OHKJVAKG.js";
59
59
  import {
60
60
  getWorkspaceTrustStatus
61
- } from "./chunk-6XU3PH66.js";
61
+ } from "./chunk-HA3SAB64.js";
62
62
  import {
63
63
  ModelsConfig,
64
64
  SkillManager,
65
65
  require_yauzl
66
- } from "./chunk-Y7E5LNLO.js";
66
+ } from "./chunk-GXSNGY5M.js";
67
67
  import {
68
68
  Storage,
69
69
  createDebugLogger
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  isGitRepository
5
- } from "./chunk-Y7E5LNLO.js";
5
+ } from "./chunk-GXSNGY5M.js";
6
6
  import {
7
7
  createDebugLogger
8
8
  } from "./chunk-OIVKILPI.js";
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  JsonFormatter,
5
5
  parseAndFormatApiError
6
- } from "./chunk-Y7E5LNLO.js";
6
+ } from "./chunk-GXSNGY5M.js";
7
7
  import {
8
8
  FatalBudgetExceededError,
9
9
  FatalCancellationError,
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-OIVKILPI.js";
13
13
  import {
14
14
  runExitCleanup
15
- } from "./chunk-EORNAQDT.js";
15
+ } from "./chunk-6TR7CFXH.js";
16
16
  import {
17
17
  writeStderrLine
18
18
  } from "./chunk-KGJGEEVR.js";
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-HGCQ5SE7.js";
11
11
  import {
12
12
  CLIENT_MCP_OVER_WS_CONFIG_FLAG
13
- } from "./chunk-R574ATRM.js";
13
+ } from "./chunk-M2PNLYGY.js";
14
14
  import {
15
15
  MAX_WORKSPACE_PATH_LENGTH,
16
16
  translateAndCheckAbsoluteWorkspacePath
@@ -2304,13 +2304,75 @@ __name(resolveAcpHttpEnabled, "resolveAcpHttpEnabled");
2304
2304
 
2305
2305
  // packages/cli/src/serve/daemon-status.ts
2306
2306
  init_esbuild_shims();
2307
+
2308
+ // packages/cli/src/serve/daemon-memory-pressure.ts
2309
+ init_esbuild_shims();
2310
+ import { getHeapStatistics } from "node:v8";
2311
+ var SOFT_PRESSURE_RATIO = 0.5;
2312
+ var HARD_PRESSURE_RATIO = 0.65;
2313
+ var CRITICAL_PRESSURE_RATIO = 0.8;
2314
+ function classify(ratio) {
2315
+ if (ratio >= CRITICAL_PRESSURE_RATIO) return "critical";
2316
+ if (ratio >= HARD_PRESSURE_RATIO) return "hard";
2317
+ if (ratio >= SOFT_PRESSURE_RATIO) return "soft";
2318
+ return "normal";
2319
+ }
2320
+ __name(classify, "classify");
2321
+ function computeDaemonMemoryPressure(input) {
2322
+ const heapLimitBytes = usableDenominator(
2323
+ input.heapLimitBytes ?? getHeapStatistics().heap_size_limit
2324
+ );
2325
+ const availableBytes = usableDenominator(input.availableBytes);
2326
+ const rss = usableNumerator(input.rssBytes);
2327
+ const heapUsed = usableNumerator(input.heapUsedBytes);
2328
+ const rssBytes = rss ?? 0;
2329
+ const heapUsedBytes = heapUsed ?? 0;
2330
+ const rssMeasured = availableBytes > 0 && rss !== null;
2331
+ const heapMeasured = heapLimitBytes > 0 && heapUsed !== null;
2332
+ const rssRatio = rssMeasured ? rssBytes / availableBytes : 0;
2333
+ const heapRatio = heapMeasured ? heapUsedBytes / heapLimitBytes : 0;
2334
+ let source;
2335
+ if (!rssMeasured && !heapMeasured) source = "unknown";
2336
+ else if (!heapMeasured) source = "rss";
2337
+ else if (!rssMeasured) source = "heap";
2338
+ else source = rssRatio >= heapRatio ? "rss" : "heap";
2339
+ const ratio = Math.max(rssRatio, heapRatio);
2340
+ return {
2341
+ level: classify(ratio),
2342
+ ratio,
2343
+ source,
2344
+ rssBytes,
2345
+ rssRatio,
2346
+ availableBytes,
2347
+ heapUsedBytes,
2348
+ heapRatio,
2349
+ heapLimitBytes
2350
+ };
2351
+ }
2352
+ __name(computeDaemonMemoryPressure, "computeDaemonMemoryPressure");
2353
+ function usableDenominator(value) {
2354
+ return Number.isFinite(value) && value > 0 ? value : 0;
2355
+ }
2356
+ __name(usableDenominator, "usableDenominator");
2357
+ function usableNumerator(value) {
2358
+ return Number.isFinite(value) && value >= 0 ? value : null;
2359
+ }
2360
+ __name(usableNumerator, "usableNumerator");
2361
+
2362
+ // packages/cli/src/serve/daemon-status.ts
2307
2363
  var DEFAULT_LISTENER_MAX_CONNECTIONS = 256;
2308
2364
  var SECTION_TIMEOUT_MS = 1e3;
2309
2365
  var CAPACITY_WARNING_RATIO = 0.8;
2310
- function toDaemonStatusMemoryLimits(budget) {
2366
+ function toDaemonStatusMemoryLimits(budget, childHeap) {
2311
2367
  if (!budget) return null;
2312
2368
  return {
2313
2369
  enforced: false,
2370
+ childHeap: childHeap ? {
2371
+ mode: childHeap.mode,
2372
+ maxConcurrentChildren: childHeap.maxConcurrentChildren,
2373
+ perChildCeilingMb: childHeap.perChildCeilingMb,
2374
+ refusals: childHeap.refusals
2375
+ } : null,
2314
2376
  configuredBudgetMb: budget.configuredBudgetMb,
2315
2377
  effectiveBudgetMb: budget.effectiveBudgetMb,
2316
2378
  budgetSource: budget.budgetSource,
@@ -2379,13 +2441,52 @@ async function buildDaemonStatusResponse(detail, input) {
2379
2441
  const managedRuntimes = input.workspaceRegistry?.listManaged();
2380
2442
  const activeAcpChildCount = managedRuntimes ? managedRuntimes.filter((runtime) => runtime.bridge.isChannelLive()).length : workspaceSnapshots.filter((item) => item.snapshot.channelLive).length;
2381
2443
  const registeredWorkspaceCount = input.workspaceRegistry ? input.workspaceRegistry.listEntries().length : workspaceSnapshots.length;
2444
+ let childRssBytesTotal = 0;
2445
+ let childRssSampled = 0;
2446
+ let oldestChildReadingAgeMs = null;
2447
+ for (const runtime of managedRuntimes ?? []) {
2448
+ if (!runtime.bridge.isChannelLive()) continue;
2449
+ const snapshot = runtime.bridge.getChildResourceSnapshot?.();
2450
+ if (!snapshot) continue;
2451
+ childRssBytesTotal += snapshot.rssBytes;
2452
+ childRssSampled += 1;
2453
+ if (snapshot.ageMs !== void 0) {
2454
+ oldestChildReadingAgeMs = Math.max(
2455
+ oldestChildReadingAgeMs ?? 0,
2456
+ snapshot.ageMs
2457
+ );
2458
+ }
2459
+ }
2460
+ const pressureMode = input.opts.memoryPressureMode ?? "observe";
2461
+ const pressureMemory = process.memoryUsage();
2382
2462
  runtimeMemory = {
2383
2463
  registeredWorkspaces: registeredWorkspaceCount,
2384
2464
  activeAcpChildren: activeAcpChildCount,
2385
- childRssCoverage: "primary_only",
2465
+ childRssCoverage: "active_children",
2466
+ children: {
2467
+ rssBytes: childRssBytesTotal,
2468
+ sampled: childRssSampled,
2469
+ oldestReadingAgeMs: oldestChildReadingAgeMs
2470
+ },
2386
2471
  modeled: {
2387
2472
  recommendedShareAtRegisteredMb: registeredWorkspaceCount > 0 ? recommendedChildShareMb(memoryBudget, registeredWorkspaceCount) : null,
2388
2473
  recommendedShareAtActiveMb: activeAcpChildCount > 0 ? recommendedChildShareMb(memoryBudget, activeAcpChildCount) : null
2474
+ },
2475
+ pressure: {
2476
+ ...computeDaemonMemoryPressure({
2477
+ rssBytes: pressureMemory.rss,
2478
+ heapUsedBytes: pressureMemory.heapUsed,
2479
+ // `availableMemoryMb`, not `effectiveBudgetMb`: pressure asks how
2480
+ // close this process is to being killed, and what kills it is the
2481
+ // cgroup limit or host memory. An operator's budget is a policy
2482
+ // number — exceeding it is not fatal, so classifying against it
2483
+ // would report `critical` for a daemon in no danger.
2484
+ // Note the unit change: the budget carries megabytes.
2485
+ availableBytes: memoryBudget.availableMemoryMb * 1024 * 1024
2486
+ }),
2487
+ // After the spread, so the flag stays authoritative if the computed
2488
+ // shape ever grows a field of this name.
2489
+ mode: pressureMode
2389
2490
  }
2390
2491
  };
2391
2492
  }
@@ -2436,6 +2537,29 @@ async function buildDaemonStatusResponse(detail, input) {
2436
2537
  totalAdmissionSnapshot,
2437
2538
  workspaceSnapshots
2438
2539
  );
2540
+ if (runtimeMemory && runtimeMemory.pressure.mode === "observe" && runtimeMemory.pressure.level !== "normal") {
2541
+ const { level, ratio, source } = runtimeMemory.pressure;
2542
+ issues.push({
2543
+ code: "daemon_memory_pressure",
2544
+ // `warning` at every level, including `critical`. An `error` severity
2545
+ // makes `rollupStatus` return `error` for the whole daemon, which is a
2546
+ // strong claim to stake on thresholds borrowed from an interactive-CLI
2547
+ // monitor and not yet calibrated here. The level itself is reported in
2548
+ // `runtime.memory.pressure`, so nothing is lost by keeping the rollup
2549
+ // at `warning` until the numbers have been checked against real
2550
+ // deployments — which is what this phase is for.
2551
+ severity: "warning",
2552
+ // Name the denominator, not the numerator: "% of the rss limit" would
2553
+ // call the measured value a limit. `section` is omitted because every
2554
+ // other use of it names a workspace status section, and this is a
2555
+ // daemon-level concern — the same reason `daemon_log_degraded` omits it.
2556
+ // One decimal, not zero: at 0 decimals a ratio of 0.795 rounds to "80%"
2557
+ // while `level` still reads `hard`, and 80% is critical's documented
2558
+ // threshold. An oncall engineer comparing the two sees a contradiction
2559
+ // in the one feature whose whole purpose is trustworthy triage.
2560
+ message: `Daemon memory pressure is ${level} at ${(ratio * 100).toFixed(1)}% of ${source === "heap" ? "the V8 heap limit" : "available memory"}.`
2561
+ });
2562
+ }
2439
2563
  if (daemonLogStatus?.health === "degraded") {
2440
2564
  issues.push({
2441
2565
  code: "daemon_log_degraded",
@@ -2499,7 +2623,10 @@ async function buildDaemonStatusResponse(detail, input) {
2499
2623
  channelIdleTimeoutMs: bridgeSnapshot.limits.channelIdleTimeoutMs,
2500
2624
  sessionIdleTimeoutMs: bridgeSnapshot.limits.sessionIdleTimeoutMs,
2501
2625
  acpConnectionCap: acpSnapshot?.connectionCap ?? null,
2502
- memory: toDaemonStatusMemoryLimits(memoryBudget)
2626
+ memory: toDaemonStatusMemoryLimits(
2627
+ memoryBudget,
2628
+ input.getChildHeapPolicySnapshot?.()
2629
+ )
2503
2630
  },
2504
2631
  ...workspaceRuntimes && workspaceRuntimes.length > 1 ? {
2505
2632
  workspaces: workspaceRuntimes.map((runtime) => ({
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  resolvePath
5
- } from "./chunk-DIEFUBV6.js";
5
+ } from "./chunk-DIWZNWZT.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  parseRule
5
- } from "./chunk-Y7E5LNLO.js";
5
+ } from "./chunk-GXSNGY5M.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";
@@ -35,7 +35,7 @@ import {
35
35
  createWorkerDiagnosticRedactor,
36
36
  normalizeWorkerDiagnostic,
37
37
  sanitizeWorkerDiagnostic
38
- } from "./chunk-24ER7UV4.js";
38
+ } from "./chunk-UFALT4LK.js";
39
39
  import {
40
40
  channelSelectionNames
41
41
  } from "./chunk-ALMR3E6Q.js";
@@ -49,7 +49,7 @@ import {
49
49
  } from "./chunk-5HBA2Z7V.js";
50
50
  import {
51
51
  sanitizeLogText
52
- } from "./chunk-DIEFUBV6.js";
52
+ } from "./chunk-DIWZNWZT.js";
53
53
  import {
54
54
  init_esbuild_shims
55
55
  } from "./chunk-5O2XNYP6.js";
@@ -180,6 +180,7 @@ __name(hasObservedExit, "hasObservedExit");
180
180
  function createWorkerEnv(opts) {
181
181
  const env = { ...opts.baseEnv ?? process.env };
182
182
  env["QWEN_CODE_NO_RELAUNCH"] = "true";
183
+ env["QWEN_CODE_SERVE"] = "1";
183
184
  env[CHANNEL_DAEMON_WORKER_SENTINEL] = randomUUID();
184
185
  env[QWEN_DAEMON_URL_ENV] = opts.daemonUrl;
185
186
  env[QWEN_DAEMON_WORKSPACE_ENV] = opts.workspace;
@@ -18,7 +18,36 @@ var LOAD_REPLAY_VERSION = 1;
18
18
  var REQUESTED_SESSION_ID_META_KEY = "qwen-code/sessionId";
19
19
  var CHANNEL_STARTUP_PROFILE_META_KEY = "qwen.daemon.channelStartupProfile";
20
20
  var CHANNEL_STARTUP_PROFILE_VERSION = 1;
21
+ var ACTIVE_WORK_HEARTBEAT_META_KEY = "qwen.daemon.activeWorkHeartbeat";
22
+ var ACTIVE_WORK_HEARTBEAT_VERSION = 1;
23
+ var ACTIVE_WORK_HEARTBEAT_INTERVAL_MS = 15e3;
24
+ var ACTIVE_WORK_HEARTBEAT_MIN_INTERVAL_MS = 5e3;
25
+ var ACTIVE_WORK_HEARTBEAT_MAX_INTERVAL_MS = 6e4;
26
+ var ACTIVE_WORK_STALE_INTERVALS = 3;
27
+ var ACTIVE_WORK_NOTIFICATION_METHOD = "qwen/notify/channel/active-work";
28
+ var ACTIVE_WORK_CLOSE_IF_UNHELD_PARAM = "onlyIfUnheld";
29
+ var ACTIVE_WORK_CLOSE_TIMEOUT_MS = 1e4;
30
+ var ACTIVE_WORK_MAX_SNAPSHOT_SESSIONS = 1024;
31
+ var ACTIVE_WORK_MAX_SESSION_HOLDS = 1024;
21
32
  var WORKTREE_MCP_DEFER_META_KEY = "qwen.session.deferMcpDiscovery";
33
+ var ACTIVE_WORK_HOLD_CATEGORIES = [
34
+ "agent",
35
+ "notification"
36
+ ];
37
+ function clampActiveWorkIntervalMs(raw) {
38
+ const value = typeof raw === "number" && Number.isFinite(raw) ? raw : NaN;
39
+ if (Number.isNaN(value)) return ACTIVE_WORK_HEARTBEAT_INTERVAL_MS;
40
+ return Math.min(
41
+ ACTIVE_WORK_HEARTBEAT_MAX_INTERVAL_MS,
42
+ Math.max(ACTIVE_WORK_HEARTBEAT_MIN_INTERVAL_MS, Math.round(value))
43
+ );
44
+ }
45
+ __name(clampActiveWorkIntervalMs, "clampActiveWorkIntervalMs");
46
+ function gradeActiveWorkCoverage(totals) {
47
+ if (totals.total === 0 || totals.covered === totals.total) return "full";
48
+ return totals.onNegotiatedChannel === 0 ? "none" : "partial";
49
+ }
50
+ __name(gradeActiveWorkCoverage, "gradeActiveWorkCoverage");
22
51
  var DAEMON_MODEL_PROMPT_META_KEY = "qwen.daemon.modelPrompt";
23
52
  var MAX_TRUSTED_MODEL_PROMPT_CHARS = 64 * 1024;
24
53
  function isValidTrustedModelPrompt(value) {
@@ -42,7 +71,19 @@ export {
42
71
  REQUESTED_SESSION_ID_META_KEY,
43
72
  CHANNEL_STARTUP_PROFILE_META_KEY,
44
73
  CHANNEL_STARTUP_PROFILE_VERSION,
74
+ ACTIVE_WORK_HEARTBEAT_META_KEY,
75
+ ACTIVE_WORK_HEARTBEAT_VERSION,
76
+ ACTIVE_WORK_HEARTBEAT_INTERVAL_MS,
77
+ ACTIVE_WORK_STALE_INTERVALS,
78
+ ACTIVE_WORK_NOTIFICATION_METHOD,
79
+ ACTIVE_WORK_CLOSE_IF_UNHELD_PARAM,
80
+ ACTIVE_WORK_CLOSE_TIMEOUT_MS,
81
+ ACTIVE_WORK_MAX_SNAPSHOT_SESSIONS,
82
+ ACTIVE_WORK_MAX_SESSION_HOLDS,
45
83
  WORKTREE_MCP_DEFER_META_KEY,
84
+ ACTIVE_WORK_HOLD_CATEGORIES,
85
+ clampActiveWorkIntervalMs,
86
+ gradeActiveWorkCoverage,
46
87
  DAEMON_MODEL_PROMPT_META_KEY,
47
88
  isValidTrustedModelPrompt,
48
89
  DAEMON_CHANNEL_DELIVERY_META_KEY,
@@ -1,5 +1,9 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
+ import {
4
+ DEFAULT_QWEN_MODEL,
5
+ MAINLINE_CODER_MODEL
6
+ } from "./chunk-F6WFNA7U.js";
3
7
  import {
4
8
  preloadRuntimeFetchModule
5
9
  } from "./chunk-KKBPOU75.js";
@@ -10,12 +14,6 @@ import {
10
14
  __name
11
15
  } from "./chunk-J2S4EL5Y.js";
12
16
 
13
- // packages/core/src/config/models.ts
14
- init_esbuild_shims();
15
- var DEFAULT_QWEN_MODEL = "coder-model";
16
- var DEFAULT_QWEN_EMBEDDING_MODEL = "text-embedding-v4";
17
- var MAINLINE_CODER_MODEL = "qwen3.7-max";
18
-
19
17
  // packages/core/src/core/contentGenerator.ts
20
18
  init_esbuild_shims();
21
19
 
@@ -407,18 +405,18 @@ async function createContentGenerator(generatorConfig, config, isInitialAuth) {
407
405
  try {
408
406
  if (authType === "openai" /* USE_OPENAI */) {
409
407
  loadBaseGenerator = /* @__PURE__ */ __name(async () => {
410
- const { createOpenAIContentGenerator } = await import("./openaiContentGenerator-EDQT6GTV.js");
408
+ const { createOpenAIContentGenerator } = await import("./openaiContentGenerator-2NFY2MWO.js");
411
409
  return createOpenAIContentGenerator(generatorConfig, config);
412
410
  }, "loadBaseGenerator");
413
411
  } else if (authType === "qwen-oauth" /* QWEN_OAUTH */) {
414
- const { getQwenOAuthClient: getQwenOauthClient } = await import("./qwenOAuth2-NESCMZ47.js");
412
+ const { getQwenOAuthClient: getQwenOauthClient } = await import("./qwenOAuth2-RRQTCP4W.js");
415
413
  try {
416
414
  const qwenClient = await getQwenOauthClient(
417
415
  config,
418
416
  isInitialAuth ? { requireCachedCredentials: true } : void 0
419
417
  );
420
418
  loadBaseGenerator = /* @__PURE__ */ __name(async () => {
421
- const { QwenContentGenerator } = await import("./qwenContentGenerator-ODRJSUGR.js");
419
+ const { QwenContentGenerator } = await import("./qwenContentGenerator-KAHU6IZY.js");
422
420
  return new QwenContentGenerator(qwenClient, generatorConfig, config);
423
421
  }, "loadBaseGenerator");
424
422
  } catch (error) {
@@ -429,12 +427,12 @@ async function createContentGenerator(generatorConfig, config, isInitialAuth) {
429
427
  }
430
428
  } else if (authType === "anthropic" /* USE_ANTHROPIC */) {
431
429
  loadBaseGenerator = /* @__PURE__ */ __name(async () => {
432
- const { createAnthropicContentGenerator } = await import("./anthropicContentGenerator-DTMVEL5M.js");
430
+ const { createAnthropicContentGenerator } = await import("./anthropicContentGenerator-SSFE2753.js");
433
431
  return createAnthropicContentGenerator(generatorConfig, config);
434
432
  }, "loadBaseGenerator");
435
433
  } else if (authType === "gemini" /* USE_GEMINI */ || authType === "vertex-ai" /* USE_VERTEX_AI */) {
436
434
  loadBaseGenerator = /* @__PURE__ */ __name(async () => {
437
- const { createGeminiContentGenerator } = await import("./geminiContentGenerator-V2WVLIXU.js");
435
+ const { createGeminiContentGenerator } = await import("./geminiContentGenerator-YGEXOEKD.js");
438
436
  return createGeminiContentGenerator(generatorConfig, config);
439
437
  }, "loadBaseGenerator");
440
438
  } else {
@@ -450,7 +448,7 @@ async function createContentGenerator(generatorConfig, config, isInitialAuth) {
450
448
  try {
451
449
  const [baseGenerator, { LoggingContentGenerator }] = await Promise.all([
452
450
  loadBaseGenerator(),
453
- import("./loggingContentGenerator-OJCO75HM.js")
451
+ import("./loggingContentGenerator-MZAN52UV.js")
454
452
  ]);
455
453
  return new LoggingContentGenerator(
456
454
  baseGenerator,
@@ -467,9 +465,6 @@ async function createContentGenerator(generatorConfig, config, isInitialAuth) {
467
465
  __name(createContentGenerator, "createContentGenerator");
468
466
 
469
467
  export {
470
- DEFAULT_QWEN_MODEL,
471
- DEFAULT_QWEN_EMBEDDING_MODEL,
472
- MAINLINE_CODER_MODEL,
473
468
  MODEL_GENERATION_CONFIG_FIELDS,
474
469
  PROVIDER_SOURCED_FIELDS,
475
470
  AUTH_ENV_MAPPINGS,
@@ -484,11 +479,11 @@ export {
484
479
  };
485
480
  /**
486
481
  * @license
487
- * Copyright 2025 Google LLC
482
+ * Copyright 2025 Qwen Team
488
483
  * SPDX-License-Identifier: Apache-2.0
489
484
  */
490
485
  /**
491
486
  * @license
492
- * Copyright 2025 Qwen Team
487
+ * Copyright 2025 Google LLC
493
488
  * SPDX-License-Identifier: Apache-2.0
494
489
  */