@qwen-code/qwen-code 0.21.5 → 0.21.6-preview.0

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 (224) hide show
  1. package/bundled/qc-helper/docs/configuration/model-providers.md +8 -8
  2. package/bundled/qc-helper/docs/configuration/settings.md +15 -15
  3. package/bundled/qc-helper/docs/features/code-review.md +2 -0
  4. package/bundled/qc-helper/docs/features/headless.md +31 -0
  5. package/bundled/qc-helper/docs/qwen-serve.md +75 -0
  6. package/bundled/review/SKILL.md +59 -52
  7. package/chunks/{MaxSizedBox-2MWU5JYB.js → MaxSizedBox-A3UYJS6B.js} +8 -7
  8. package/chunks/{StandaloneSessionPicker-B6MI5NTB.js → StandaloneSessionPicker-NGLY26I4.js} +21 -20
  9. package/chunks/{acpAgent-MRPYN6FH.js → acpAgent-V54T2EEL.js} +215 -63
  10. package/chunks/{agent-NAOXNW4I.js → agent-2P53VL2L.js} +8 -7
  11. package/chunks/{agent-headless-L4PPVFKW.js → agent-headless-6X4GCFRD.js} +8 -7
  12. package/chunks/{bridge-LHXGYNCO.js → bridge-TCFMLKHR.js} +12 -10
  13. package/chunks/{channel-settings-store-QB54TLYE.js → channel-settings-store-B4HNMNQV.js} +13 -12
  14. package/chunks/{channel-worker-group-NDG4WOOZ.js → channel-worker-group-SVGPDH2C.js} +3 -2
  15. package/chunks/{channel-worker-manager-ZCW6UW34.js → channel-worker-manager-72ZK2GTS.js} +3 -2
  16. package/chunks/{channel-worker-supervisor-ATGFTZRN.js → channel-worker-supervisor-NUEDVHX4.js} +2 -1
  17. package/chunks/{chunk-UWSXFI6E.js → chunk-2U7GPHA6.js} +6 -2
  18. package/chunks/{chunk-CIUUYB23.js → chunk-3DTM3RPU.js} +1 -1
  19. package/chunks/{chunk-7MFQLOHZ.js → chunk-3PRJYMXC.js} +1 -1
  20. package/chunks/{chunk-K6VEL5KP.js → chunk-3ZRS2XNY.js} +1 -1
  21. package/chunks/{chunk-GBY3ODW7.js → chunk-4E5PO6R7.js} +3 -3
  22. package/chunks/{chunk-KH2BIJ4H.js → chunk-4T6QMNX2.js} +89 -6
  23. package/chunks/{chunk-K64OI7S7.js → chunk-546CDN6D.js} +1 -1
  24. package/chunks/{chunk-J7I2BZHS.js → chunk-5CDI4UOY.js} +23 -6
  25. package/chunks/{chunk-7W5KOBYU.js → chunk-6D6V55ZQ.js} +1 -1
  26. package/chunks/{chunk-WU5NBSLD.js → chunk-6KEN3RIC.js} +3 -3
  27. package/chunks/{chunk-FEUXV3DC.js → chunk-6KZP75GT.js} +1 -1
  28. package/chunks/{chunk-B3EBIZUY.js → chunk-72DZPDH4.js} +1 -1
  29. package/chunks/{chunk-TCOJPG2P.js → chunk-7FUVSN4D.js} +1 -1
  30. package/chunks/{chunk-EXHQZBVJ.js → chunk-AFZTZLFB.js} +2 -2
  31. package/chunks/{chunk-AEWOKOJY.js → chunk-AU3XNTMV.js} +1 -1
  32. package/chunks/{chunk-C6ARWPCG.js → chunk-AVDEBBMI.js} +2 -2
  33. package/chunks/chunk-BKHCW2BI.js +41 -0
  34. package/chunks/{chunk-ZLGPHA34.js → chunk-BU4BRCPX.js} +4 -4
  35. package/chunks/{chunk-3GOCVBYR.js → chunk-C4GRKMUL.js} +4 -4
  36. package/chunks/{chunk-VOA2UPZM.js → chunk-CDHNGCJI.js} +3 -3
  37. package/chunks/{chunk-3H5RFLTS.js → chunk-CJBRIJ7W.js} +1 -1
  38. package/chunks/{chunk-D7QAZ5DF.js → chunk-CXYBX4AL.js} +1 -1
  39. package/chunks/{chunk-GEP54CHX.js → chunk-DBIEZC7T.js} +3 -3
  40. package/chunks/{chunk-BWLUCN35.js → chunk-DG563ZCS.js} +2 -2
  41. package/chunks/{chunk-YLL3SC5S.js → chunk-DOA7MCDY.js} +167 -99
  42. package/chunks/{chunk-OIGB253L.js → chunk-DOICUTPO.js} +7 -7
  43. package/chunks/{chunk-VJPF6GF2.js → chunk-EHMN6SEG.js} +2 -2
  44. package/chunks/{chunk-YO4JI7B4.js → chunk-EKWNNQQD.js} +4 -4
  45. package/chunks/{chunk-B2RBYP7Z.js → chunk-FDV3CXTD.js} +2 -2
  46. package/chunks/{chunk-LMNM37OE.js → chunk-HKNSU4WX.js} +1 -1
  47. package/chunks/{chunk-4LLUH3A7.js → chunk-HU5TUALO.js} +95 -8
  48. package/chunks/{chunk-G2UXFO2B.js → chunk-IISDPZ5X.js} +1 -1
  49. package/chunks/{chunk-LYPXNRBX.js → chunk-IKXE3AAC.js} +1 -1
  50. package/chunks/{chunk-TJ56V3AR.js → chunk-MFBUJMQ3.js} +3 -3
  51. package/chunks/{chunk-SQTA6PAY.js → chunk-MVLM6PJK.js} +1 -1
  52. package/chunks/{chunk-4NEBUDWS.js → chunk-N47ZM2KI.js} +9 -9
  53. package/chunks/{chunk-5HWAJ4BK.js → chunk-NAYPZ72V.js} +1 -1
  54. package/chunks/{chunk-IZ2CMEYO.js → chunk-NKST54XA.js} +1 -1
  55. package/chunks/{chunk-IK3RYLAD.js → chunk-NYZAL2W2.js} +3 -3
  56. package/chunks/{chunk-ZPGMDT4S.js → chunk-O656RSMC.js} +19 -92
  57. package/chunks/{chunk-XD2PNH3K.js → chunk-P7LKADIT.js} +5 -5
  58. package/chunks/{chunk-JDNWIXHJ.js → chunk-PQTK2FVO.js} +3 -3
  59. package/chunks/{chunk-LSYVASZS.js → chunk-QG2ACINA.js} +1 -1
  60. package/chunks/{chunk-IWYXZAGT.js → chunk-QWUYFMAR.js} +24 -24
  61. package/chunks/{chunk-YMUZQ3MQ.js → chunk-RTWF7FF7.js} +3 -3
  62. package/chunks/{chunk-5XNO4AW7.js → chunk-SPUDIAHX.js} +11 -11
  63. package/chunks/{chunk-7M2RLFNX.js → chunk-SQ3ZJOYL.js} +11 -11
  64. package/chunks/{chunk-SJMCYCUQ.js → chunk-T4XY5CT4.js} +4 -4
  65. package/chunks/{chunk-2JBETW4S.js → chunk-TVFC3XF5.js} +5 -5
  66. package/chunks/{chunk-NLQIEY6W.js → chunk-VDLXPEI5.js} +3 -3
  67. package/chunks/{chunk-Q2V4AOQL.js → chunk-WAOLM6SQ.js} +1 -1
  68. package/chunks/{chunk-N3RERU5N.js → chunk-WIPQR44Y.js} +3 -3
  69. package/chunks/{chunk-PDDYAXL2.js → chunk-WIRAPZ62.js} +7 -0
  70. package/chunks/chunk-WOJZWRAZ.js +123 -0
  71. package/chunks/{chunk-SVIEVA3L.js → chunk-WPKIU4PA.js} +28 -3
  72. package/chunks/{chunk-K2ETEWG6.js → chunk-WVRJKSIG.js} +1 -1
  73. package/chunks/{chunk-WTM5QONI.js → chunk-WXS647W5.js} +2 -2
  74. package/chunks/{chunk-4O6HLCOF.js → chunk-X6DV3WKN.js} +1 -1
  75. package/chunks/{chunk-OGAARVN7.js → chunk-XKTCA6BW.js} +3 -3
  76. package/chunks/{chunk-FHPKHXHT.js → chunk-XNZBXQCG.js} +4 -0
  77. package/chunks/{chunk-GP4IMBX5.js → chunk-XOZ2R6XI.js} +529 -259
  78. package/chunks/{chunk-IWGMDSC3.js → chunk-XSGQKR37.js} +4 -4
  79. package/chunks/{chunk-ZLJQIGCH.js → chunk-XZCMQUOF.js} +8 -0
  80. package/chunks/{chunk-P3SLTSNY.js → chunk-Y5HIDFKZ.js} +4 -4
  81. package/chunks/{chunk-RM3F46UT.js → chunk-YUVTZ4UH.js} +6 -6
  82. package/chunks/{chunk-3P4GP4S2.js → chunk-Z5S6KH2B.js} +1 -1
  83. package/chunks/{chunk-4NNR24EP.js → chunk-ZH7G3A4U.js} +3 -3
  84. package/chunks/{chunk-CAX76R46.js → chunk-ZQL73PPE.js} +1 -1
  85. package/chunks/{computer-use-XDOGP2KA.js → computer-use-GTOP2CVH.js} +8 -7
  86. package/chunks/{config-utils-E3ZQTHGM.js → config-utils-LIRO7NSU.js} +2 -2
  87. package/chunks/{contextCommand-N3LQDCYJ.js → contextCommand-K6T6RRF3.js} +10 -9
  88. package/chunks/{core-runtime-STAFP45W.js → core-runtime-D2626QQU.js} +8 -7
  89. package/chunks/{create-sub-session-2B3JENWD.js → create-sub-session-MWUWNBM6.js} +8 -7
  90. package/chunks/{daemon-status-provider-PPAH3ATF.js → daemon-status-provider-2EHRZZVF.js} +16 -14
  91. package/chunks/{daemon-trust-policy-X6XL3MB4.js → daemon-trust-policy-B3EPDJDR.js} +13 -12
  92. package/chunks/{daemon-trust-policy-monitor-M5LBL2HD.js → daemon-trust-policy-monitor-MFM5X26G.js} +13 -12
  93. package/chunks/{deferred-core-runtime-O54YPTBU.js → deferred-core-runtime-KXN7HLN7.js} +8 -7
  94. package/chunks/{earlyInputCapture-CBIT2RGT.js → earlyInputCapture-WUNYYFOS.js} +8 -7
  95. package/chunks/{edit-KW2TOC6A.js → edit-DMFCBP2D.js} +8 -7
  96. package/chunks/{enter-worktree-YL34NEU5.js → enter-worktree-5SVBCXFC.js} +8 -7
  97. package/chunks/{enterPlanMode-JFJTDASQ.js → enterPlanMode-QUIZFQ4M.js} +8 -7
  98. package/chunks/{environment-IATU5GXG.js → environment-U6QP23VJ.js} +10 -9
  99. package/chunks/{errors-SAVRDE7Q.js → errors-GZWFA6ON.js} +10 -9
  100. package/chunks/{exit-worktree-5M43QPBB.js → exit-worktree-FUB44KAF.js} +8 -7
  101. package/chunks/{exitPlanMode-W4EICZ4N.js → exitPlanMode-XSHHYR73.js} +8 -7
  102. package/chunks/external-tool-guard-provider-5HTGOPGU.js +273 -0
  103. package/chunks/{fast-path-YQJPIKMP.js → fast-path-JHQJSIMZ.js} +5 -5
  104. package/chunks/{gemini-FUF5SSPR.js → gemini-O44ETOKT.js} +61 -46
  105. package/chunks/{geminiContentGenerator-LLLZBOUG.js → geminiContentGenerator-TTM4TZJM.js} +1 -1
  106. package/chunks/{glob-LJFFMN4D.js → glob-YECOWTRW.js} +8 -7
  107. package/chunks/{grep-Q64EAM73.js → grep-BZO4LOTA.js} +8 -7
  108. package/chunks/{handleAutoUpdate-QBMPRTSQ.js → handleAutoUpdate-TOO52D6H.js} +12 -11
  109. package/chunks/{i18n-LDUW5DMN.js → i18n-ARJYXZQ5.js} +9 -8
  110. package/chunks/{image-gen-G7RLG3KR.js → image-gen-J6Q2YBEU.js} +1 -1
  111. package/chunks/{initializer-74A7DMMD.js → initializer-CEZ4RPQV.js} +13 -12
  112. package/chunks/{installationInfo-OFDYLDFD.js → installationInfo-AEGIIQAT.js} +9 -8
  113. package/chunks/{list-JA2EWRHJ.js → list-7XLPV5GC.js} +16 -15
  114. package/chunks/{loadedSettingsAdapter-2GNJOQ3L.js → loadedSettingsAdapter-YK5SBHOT.js} +13 -12
  115. package/chunks/{loggingContentGenerator-B6B5EGB3.js → loggingContentGenerator-I7QDXS43.js} +4 -3
  116. package/chunks/{managed-npm-update-4YZHLUER.js → managed-npm-update-YSL7PA7G.js} +9 -8
  117. package/chunks/{mcp-LLK5YJVH.js → mcp-RKFQZXP6.js} +13 -12
  118. package/chunks/{monitor-NYJPAWVP.js → monitor-QHHJIKGL.js} +8 -7
  119. package/chunks/{nonInteractiveCli-HZBBBDJD.js → nonInteractiveCli-XEBIE7MG.js} +41 -39
  120. package/chunks/{notebook-edit-LLM6UXFX.js → notebook-edit-SG7X2EQA.js} +8 -7
  121. package/chunks/{openaiContentGenerator-2AEXDN55.js → openaiContentGenerator-63CVR33K.js} +5 -4
  122. package/chunks/{pidfile-3JUWX7G2.js → pidfile-I3CXJGQD.js} +8 -7
  123. package/chunks/{processUtils-JLLRVZHT.js → processUtils-LJ3DSANX.js} +2 -2
  124. package/chunks/{qwenContentGenerator-2FESCF27.js → qwenContentGenerator-JINBVCH6.js} +9 -8
  125. package/chunks/{qwenOAuth2-2KKPYA5J.js → qwenOAuth2-SY2O3NRR.js} +1 -1
  126. package/chunks/{read-file-5GVXLY74.js → read-file-PGTXF25I.js} +3 -2
  127. package/chunks/{record-artifact-L3BAHQFN.js → record-artifact-E6AWQU2Z.js} +1 -1
  128. package/chunks/{resumeHistoryUtils-Z4OFBXPM.js → resumeHistoryUtils-FB2NFVZ2.js} +11 -10
  129. package/chunks/{ripGrep-TKOJTIAB.js → ripGrep-IY3KGPM6.js} +8 -7
  130. package/chunks/{run-qwen-serve-K5W6MM6M.js → run-qwen-serve-UYEMGPKA.js} +72 -36
  131. package/chunks/{runtime-IADXMRCY.js → runtime-CG3BKRFE.js} +16 -15
  132. package/chunks/{scheduler-T7AV37LD.js → scheduler-VFUVGDE5.js} +8 -7
  133. package/chunks/{serve-ROEGMS3I.js → serve-ZCCQ2G2L.js} +14 -12
  134. package/chunks/{server-NGXMRODI.js → server-WS7LWXPP.js} +161 -54
  135. package/chunks/{session-RCDLDJA4.js → session-IQLCT32T.js} +42 -40
  136. package/chunks/{settings-E6H3AURD.js → settings-NX4EUIE6.js} +12 -11
  137. package/chunks/{shell-RHGGJ6BE.js → shell-THDYM4CS.js} +8 -7
  138. package/chunks/{skill-GQ7PBS25.js → skill-OXXZBNQB.js} +3 -2
  139. package/chunks/{skill-settings-E2F7OCBL.js → skill-settings-T3JZ33T2.js} +12 -11
  140. package/chunks/{spawnChannel-Q2IQBHME.js → spawnChannel-COLJMSA7.js} +11 -9
  141. package/chunks/{standalone-update-NYYZEHLD.js → standalone-update-ICW7H5IF.js} +10 -9
  142. package/chunks/{startInteractiveUI-IX6I3Y2Z.js → startInteractiveUI-6BDRXSMF.js} +60 -58
  143. package/chunks/{team-create-UTRVUEDA.js → team-create-BCSMDK4Z.js} +8 -7
  144. package/chunks/{team-plan-approval-YZNB4U5U.js → team-plan-approval-B5YRLJFV.js} +8 -7
  145. package/chunks/{terminal-image-renderer-QRSCS2BE.js → terminal-image-renderer-PW6Z6VFY.js} +8 -7
  146. package/chunks/{theme-manager-EKZBY34I.js → theme-manager-CMVKD2JH.js} +8 -7
  147. package/chunks/{tool-search-N2R7LVMC.js → tool-search-SQTUSG6P.js} +3 -2
  148. package/chunks/{total-session-admission-HBIYARPO.js → total-session-admission-XAXOSE46.js} +12 -10
  149. package/chunks/{trustedFolders-ZQLYRCSY.js → trustedFolders-Z2UAEG2V.js} +9 -8
  150. package/chunks/{update-relaunch-PJWXMPCR.js → update-relaunch-JBLI6LJF.js} +5 -5
  151. package/chunks/{updateCheck-ZXRCGY66.js → updateCheck-FDAVGOFT.js} +11 -10
  152. package/chunks/{useAutoAcceptIndicator-ZYQW5SGJ.js → useAutoAcceptIndicator-PDZFIYRM.js} +14 -13
  153. package/chunks/{validateNonInterActiveAuth-M7J7OTRH.js → validateNonInterActiveAuth-Q4763ONQ.js} +38 -36
  154. package/chunks/{version-2AOHMPK3.js → version-C7MPCGWD.js} +1 -1
  155. package/chunks/{web-fetch-DS34CJ3R.js → web-fetch-L7RAPOJB.js} +3 -2
  156. package/chunks/{web-search-ITFPD7V4.js → web-search-IDOYUOWX.js} +4 -3
  157. package/chunks/{workflow-LZQ4PGNS.js → workflow-HXURUJB5.js} +9 -8
  158. package/chunks/{workspace-providers-status-ZPTLKOBM.js → workspace-providers-status-JZ3GPWNU.js} +16 -15
  159. package/chunks/{workspace-registration-store-OTFKSGG7.js → workspace-registration-store-SM2PWB6L.js} +1 -1
  160. package/chunks/{workspace-registry-YZ3OXPHP.js → workspace-registry-6W4ES7BJ.js} +12 -10
  161. package/chunks/{workspace-service-OCZXOOSQ.js → workspace-service-V47ZFJRX.js} +17 -16
  162. package/chunks/{workspace-skills-status-K2ALGUCD.js → workspace-skills-status-6ZQ45XKA.js} +14 -13
  163. package/chunks/{workspace-trust-reconciler-KMRZISJP.js → workspace-trust-reconciler-6V25LMCN.js} +17 -15
  164. package/chunks/{write-file-AWBI4GJS.js → write-file-H2QOF25K.js} +8 -7
  165. package/chunks/{zoom-image-NHKN6F77.js → zoom-image-JTUSS43N.js} +3 -2
  166. package/cli-entry.js +14 -0
  167. package/cli.js +16 -12
  168. package/package.json +3 -3
  169. package/web-shell/assets/{arc-Dpg66jw7.js → arc-DtI1rZcQ.js} +1 -1
  170. package/web-shell/assets/{architectureDiagram-3BPJPVTR-BJ4FIBxN.js → architectureDiagram-3BPJPVTR-BPZwSVct.js} +1 -1
  171. package/web-shell/assets/{blockDiagram-GPEHLZMM-VXmYdtYT.js → blockDiagram-GPEHLZMM-BIQ03j4C.js} +1 -1
  172. package/web-shell/assets/{c4Diagram-AAUBKEIU-BNLDb8FE.js → c4Diagram-AAUBKEIU-CB0RyFGm.js} +1 -1
  173. package/web-shell/assets/channel-vfbVFuM1.js +1 -0
  174. package/web-shell/assets/{chunk-2J33WTMH-DR5yHxr0.js → chunk-2J33WTMH-B3WoS-4H.js} +1 -1
  175. package/web-shell/assets/{chunk-4BX2VUAB-Czkq8UZU.js → chunk-4BX2VUAB-C98xYZ1X.js} +1 -1
  176. package/web-shell/assets/{chunk-55IACEB6-DugUgM6s.js → chunk-55IACEB6-CbTIWRwQ.js} +1 -1
  177. package/web-shell/assets/{chunk-727SXJPM-Dw6quA1K.js → chunk-727SXJPM-DWGnKTPu.js} +1 -1
  178. package/web-shell/assets/{chunk-AQP2D5EJ-BoVYOTTz.js → chunk-AQP2D5EJ-4__QyCEX.js} +1 -1
  179. package/web-shell/assets/{chunk-FMBD7UC4--Amcse-j.js → chunk-FMBD7UC4-DFtG1YCW.js} +1 -1
  180. package/web-shell/assets/{chunk-ND2GUHAM-ajaEYAC8.js → chunk-ND2GUHAM-rvAhW51N.js} +1 -1
  181. package/web-shell/assets/{chunk-QZHKN3VN-CUNDZ7im.js → chunk-QZHKN3VN-DfiU9pwZ.js} +1 -1
  182. package/web-shell/assets/classDiagram-4FO5ZUOK-Cvr8atq3.js +1 -0
  183. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-Cvr8atq3.js +1 -0
  184. package/web-shell/assets/{cose-bilkent-S5V4N54A-BnfkD-m1.js → cose-bilkent-S5V4N54A-Cc4EIdxu.js} +1 -1
  185. package/web-shell/assets/{dagre-BM42HDAG-BuUdFk7Z.js → dagre-BM42HDAG-CZNj4dGW.js} +1 -1
  186. package/web-shell/assets/{diagram-2AECGRRQ-B2ZXxoab.js → diagram-2AECGRRQ-D5tiqQCr.js} +1 -1
  187. package/web-shell/assets/{diagram-5GNKFQAL-BsgOICzM.js → diagram-5GNKFQAL-pwzw0jVO.js} +1 -1
  188. package/web-shell/assets/{diagram-KO2AKTUF-DTTjG6U-.js → diagram-KO2AKTUF-4CWiM00x.js} +1 -1
  189. package/web-shell/assets/{diagram-LMA3HP47-temLf1x7.js → diagram-LMA3HP47-Dd7rc7Qf.js} +1 -1
  190. package/web-shell/assets/{diagram-OG6HWLK6-CRFjScs2.js → diagram-OG6HWLK6-_vzV52ml.js} +1 -1
  191. package/web-shell/assets/{erDiagram-TEJ5UH35-D4oaY-rQ.js → erDiagram-TEJ5UH35-CqbE2bx_.js} +1 -1
  192. package/web-shell/assets/{flowDiagram-I6XJVG4X-BqG8B49b.js → flowDiagram-I6XJVG4X-CaxNr7w4.js} +1 -1
  193. package/web-shell/assets/{ganttDiagram-6RSMTGT7-DffQBdd5.js → ganttDiagram-6RSMTGT7-AGjrtfUA.js} +1 -1
  194. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CMDPfseF.js → gitGraphDiagram-PVQCEYII-ADG2zSkc.js} +1 -1
  195. package/web-shell/assets/{index-qTQR_smP.js → index-BOryKCqt.js} +1 -1
  196. package/web-shell/assets/{index-CaucmEO_.css → index-Cb1LjsCv.css} +1 -1
  197. package/web-shell/assets/{index-2F4RsNzd.js → index-CvJDaIy8.js} +311 -311
  198. package/web-shell/assets/{infoDiagram-5YYISTIA-Cn3T83MA.js → infoDiagram-5YYISTIA-CE3B_IoZ.js} +1 -1
  199. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-ijFs7e25.js → ishikawaDiagram-YF4QCWOH-CN-Frhoi.js} +1 -1
  200. package/web-shell/assets/{journeyDiagram-JHISSGLW-CINTv8VB.js → journeyDiagram-JHISSGLW-CGgezS93.js} +1 -1
  201. package/web-shell/assets/{kanban-definition-UN3LZRKU-CMGRZCxx.js → kanban-definition-UN3LZRKU-BqWijky5.js} +1 -1
  202. package/web-shell/assets/{linear-Co-2_37d.js → linear-D8sfpZf6.js} +1 -1
  203. package/web-shell/assets/{mermaid.core-DijbyaN5.js → mermaid.core-3PA4QrzM.js} +5 -5
  204. package/web-shell/assets/{mindmap-definition-RKZ34NQL-k_sDYDPZ.js → mindmap-definition-RKZ34NQL-D9QxwiCY.js} +1 -1
  205. package/web-shell/assets/{pieDiagram-4H26LBE5-CG-oz8V3.js → pieDiagram-4H26LBE5-Bioaf6uE.js} +1 -1
  206. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-Baq7HIG2.js → quadrantDiagram-W4KKPZXB-DBb2AS73.js} +1 -1
  207. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CDM3ZvBt.js → requirementDiagram-4Y6WPE33-DXOvZ3KB.js} +1 -1
  208. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C2dJbWKN.js → sankeyDiagram-5OEKKPKP-D9qg09Dm.js} +1 -1
  209. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Cf1_h59p.js → sequenceDiagram-3UESZ5HK-DSAUIfpw.js} +1 -1
  210. package/web-shell/assets/{stateDiagram-AJRCARHV-CI5clUEc.js → stateDiagram-AJRCARHV-BPZkzfQ3.js} +1 -1
  211. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DInOqnhZ.js +1 -0
  212. package/web-shell/assets/{timeline-definition-PNZ67QCA-B2O8cAZX.js → timeline-definition-PNZ67QCA-UDaQp9sP.js} +1 -1
  213. package/web-shell/assets/{vennDiagram-CIIHVFJN-BLsJ_h9s.js → vennDiagram-CIIHVFJN-2ouhAnHO.js} +1 -1
  214. package/web-shell/assets/{wardley-L42UT6IY-BlPU4FTA.js → wardley-L42UT6IY-Cq_WEvTK.js} +1 -1
  215. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-D_U-RdU4.js → wardleyDiagram-YWT4CUSO-Dt24aXOM.js} +1 -1
  216. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BynXGSTl.js → xychartDiagram-2RQKCTM6-A5Xk2WCH.js} +1 -1
  217. package/web-shell/index.html +2 -2
  218. package/bundled/review/DESIGN.md +0 -724
  219. package/web-shell/assets/channel-Bd9wOnaA.js +0 -1
  220. package/web-shell/assets/classDiagram-4FO5ZUOK-XhCT8FE3.js +0 -1
  221. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-XhCT8FE3.js +0 -1
  222. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BDc8asKD.js +0 -1
  223. package/chunks/{channel-management-service-UHX56NBO.js → channel-management-service-5XPPTWUQ.js} +3 -3
  224. package/chunks/{chunk-LEZFUYPM.js → chunk-7GYP5COR.js} +3 -3
@@ -583,14 +583,14 @@ The optional `reasoning` field under `generationConfig` controls how aggressivel
583
583
 
584
584
  ### Per-provider behavior
585
585
 
586
- | Protocol / provider | Wire shape | Notes |
587
- | ------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
588
- | **OpenAI / DashScope** (`qwen3.8-max`, `qwen3.8-max-preview`) | Flat `reasoning_effort: <effort>` body parameter | The five `/effort` tiers (`low`, `medium`, `high`, `xhigh`, `max`) are passed through verbatim; DashScope applies any model-specific mapping. Do not also configure `thinking_budget`, because DashScope rejects requests containing both fields. Other Qwen models continue to map a selected effort to `enable_thinking: true`. |
589
- | **OpenAI / DeepSeek** (`api.deepseek.com`) | Flat `reasoning_effort: <effort>` body parameter | When `reasoning.effort` is set in the nested config shape, it's rewritten to flat `reasoning_effort` and `'low'`/`'medium'` are normalized to `'high'`, `'xhigh'` to `'max'` — mirroring DeepSeek's [server-side back-compat](https://api-docs.deepseek.com/zh-cn/api/create-chat-completion). Top-level `samplingParams.reasoning_effort` or `extra_body.reasoning_effort` overrides skip this normalization and ship verbatim. |
590
- | **OpenAI** (other compatible servers) | `reasoning: { effort, ... }` passed through verbatim | Set via `samplingParams` (e.g. `samplingParams.reasoning_effort` for GPT-5/o-series) when the provider expects a different shape. |
591
- | **Anthropic** (real `api.anthropic.com`) | `output_config: { effort }` plus the `effort-2025-11-24` beta header | Real Anthropic accepts `'low'`/`'medium'`/`'high'` only. `'max'` is **clamped to `'high'`** with a `debugLogger.warn` line (once per generator); if you want max effort, switch the baseURL to a DeepSeek-compatible endpoint that supports it. |
592
- | **Anthropic** (`api.deepseek.com/anthropic`) | Same `output_config: { effort }` + beta header | `'max'` is passed through unchanged. |
593
- | **Gemini** (`@google/genai`) | `thinkingConfig: { includeThoughts: true, thinkingLevel }` | `'low'` → `LOW`, `'high'`/`'max'` → `HIGH`, others → `THINKING_LEVEL_UNSPECIFIED` (Gemini has no `MAX` tier). |
586
+ | Protocol / provider | Wire shape | Notes |
587
+ | --------------------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
588
+ | **OpenAI / DashScope** (`qwen3.8-max` family) | Flat `reasoning_effort: <effort>` body parameter | The five `/effort` tiers (`low`, `medium`, `high`, `xhigh`, `max`) are passed through verbatim for any model id starting with `qwen3.8-max` (including dated snapshots and `-latest` aliases); DashScope applies any model-specific mapping. For this family the tier ships alone: a conflicting `enable_thinking` or `thinking_budget` is dropped (warn-logged, once per generator) — DashScope rejects requests combining `reasoning_effort` with `thinking_budget`, and two thinking controls should not ship together. An explicit `enable_thinking: false` in `extra_body` is honoured rather than dropped: it overrides the configured tier as `reasoning_effort: 'none'`, one of the few places `extra_body` does not win verbatim. Other Qwen models continue to map a selected effort to `enable_thinking: true`; a `reasoning_effort` override passes through there unless it conflicts with a `thinking_budget` (a pair DashScope rejects), in which case the inert `reasoning_effort` is dropped and both `enable_thinking` and `thinking_budget` survive. |
589
+ | **OpenAI / DeepSeek** (`api.deepseek.com`) | Flat `reasoning_effort: <effort>` body parameter | When `reasoning.effort` is set in the nested config shape, it's rewritten to flat `reasoning_effort` and `'low'`/`'medium'` are normalized to `'high'`, `'xhigh'` to `'max'` — mirroring DeepSeek's [server-side back-compat](https://api-docs.deepseek.com/zh-cn/api/create-chat-completion). Top-level `samplingParams.reasoning_effort` or `extra_body.reasoning_effort` overrides skip this normalization and ship verbatim. |
590
+ | **OpenAI** (other compatible servers) | `reasoning: { effort, ... }` passed through verbatim | Set via `samplingParams` (e.g. `samplingParams.reasoning_effort` for GPT-5/o-series) when the provider expects a different shape. |
591
+ | **Anthropic** (real `api.anthropic.com`) | `output_config: { effort }` plus the `effort-2025-11-24` beta header | Real Anthropic accepts `'low'`/`'medium'`/`'high'` only. `'max'` is **clamped to `'high'`** with a `debugLogger.warn` line (once per generator); if you want max effort, switch the baseURL to a DeepSeek-compatible endpoint that supports it. |
592
+ | **Anthropic** (`api.deepseek.com/anthropic`) | Same `output_config: { effort }` + beta header | `'max'` is passed through unchanged. |
593
+ | **Gemini** (`@google/genai`) | `thinkingConfig: { includeThoughts: true, thinkingLevel }` | `'low'` → `LOW`, `'high'`/`'max'` → `HIGH`, others → `THINKING_LEVEL_UNSPECIFIED` (Gemini has no `MAX` tier). |
594
594
 
595
595
  ### `reasoning: false`
596
596
 
@@ -302,21 +302,21 @@ The `extra_body` field allows you to add custom parameters to the request body s
302
302
 
303
303
  #### context
304
304
 
305
- | Setting | Type | Description | Default |
306
- | ----------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------- |
307
- | `context.fileName` | string or array of strings | The name of the context file(s). | `undefined` |
308
- | `context.autoCompactThreshold` | number | Target fraction of the context window at which auto-compaction triggers. Must be greater than 0 and at most 1. Default is `0.85` (85%). Acts as a ceiling on the trigger: on large windows it is the effective trigger (~85%), while on smaller windows compaction may fire earlier to leave room to summarize. Replaces the old `model.chatCompression.contextPercentageThreshold`. | `undefined` (uses internal 0.85) |
309
- | `context.importFormat` | string | The format to use when importing memory. | `undefined` |
310
- | `context.includeDirectories` | array | Additional directories to include in the workspace context. Specifies an array of additional absolute or relative paths to include in the workspace context. Missing directories will be skipped with a warning by default. Paths can use `~` to refer to the user's home directory. This setting can be combined with the `--include-directories` command-line flag. | `[]` |
311
- | `context.loadFromIncludeDirectories` | boolean | Controls the behavior of the `/memory refresh` command. If set to `true`, `QWEN.md` files should be loaded from all directories that are added. If set to `false`, `QWEN.md` should only be loaded from the current directory. | `false` |
312
- | `context.fileFiltering.respectGitIgnore` | boolean | Respect .gitignore files when searching. | `true` |
313
- | `context.fileFiltering.respectQwenIgnore` | boolean | Respect .qwenignore and configured custom ignore files when searching. | `true` |
314
- | `context.fileFiltering.customIgnoreFiles` | array | Project-root-relative ignore files to use instead of the default compatibility files (`.agentignore`, `.aiignore`) when `respectQwenIgnore` is enabled. `.qwenignore` is always included. | `[".agentignore", ".aiignore"]` |
315
- | `context.fileFiltering.enableRecursiveFileSearch` | boolean | Whether to enable searching recursively for filenames under the current tree when completing `@` prefixes in the prompt. | `true` |
316
- | `context.fileFiltering.enableFuzzySearch` | boolean | When `true`, enables fuzzy search capabilities when searching for files. Set to `false` to improve performance on projects with a large number of files. | `true` |
317
- | `context.clearContextOnIdle.toolResultsThresholdMinutes` | number | Minutes of inactivity before clearing old tool result content. Use `-1` to disable the idle trigger. | `60` |
318
- | `context.clearContextOnIdle.toolResultsNumToKeep` | integer | Integer number of most-recent compactable tool results to preserve when clearing. Values below 1 are floored to 1. | `5` |
319
- | `context.clearContextOnIdle.toolResultsTotalCharsThreshold` | number | Total compactable tool result output characters allowed in history before clearing oldest results. Use `-1` to disable the size trigger. This is a soft threshold: protected recent tool results may keep the total above it. | `500000` |
305
+ | Setting | Type | Description | Default |
306
+ | ----------------------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
307
+ | `context.fileName` | string or array of strings | The name of the context file(s). | `undefined` |
308
+ | `context.autoCompactThreshold` | number | Target fraction of the context window at which auto-compaction triggers. Must be greater than 0 and at most 1. Default is `0.85` (85%). Acts as a ceiling on the trigger: on large windows it is the effective trigger (~85%), while on smaller windows compaction may fire earlier to leave room to summarize. Replaces the old `model.chatCompression.contextPercentageThreshold`. | `undefined` (uses internal 0.85) |
309
+ | `context.importFormat` | string | The format to use when importing memory. | `undefined` |
310
+ | `context.includeDirectories` | array | Additional directories to include in the workspace context. Specifies an array of additional absolute or relative paths to include in the workspace context. Missing directories will be skipped with a warning by default. Paths can use `~` to refer to the user's home directory. This setting can be combined with the `--include-directories` command-line flag. | `[]` |
311
+ | `context.loadFromIncludeDirectories` | boolean | Controls the behavior of the `/memory refresh` command. If set to `true`, `QWEN.md` files should be loaded from all directories that are added. If set to `false`, `QWEN.md` should only be loaded from the current directory. | `false` |
312
+ | `context.fileFiltering.respectGitIgnore` | boolean | Respect .gitignore files when searching. | `true` |
313
+ | `context.fileFiltering.respectQwenIgnore` | boolean | Respect .qwenignore and configured custom ignore files when searching. | `true` |
314
+ | `context.fileFiltering.customIgnoreFiles` | array | Project-root-relative ignore files to use instead of the default compatibility files (`.agentignore`, `.aiignore`) when `respectQwenIgnore` is enabled. `.qwenignore` is always included. | `[".agentignore", ".aiignore"]` |
315
+ | `context.fileFiltering.enableRecursiveFileSearch` | boolean | Whether to enable searching recursively for filenames under the current tree when completing `@` prefixes in the prompt. | `true` |
316
+ | `context.fileFiltering.enableFuzzySearch` | boolean | When `true`, enables fuzzy search capabilities when searching for files. Set to `false` to improve performance on projects with a large number of files. | `true` |
317
+ | `context.clearContextOnIdle.toolResultsThresholdMinutes` | number | Minutes of inactivity before clearing old tool result content. Use `-1` to disable the idle trigger. | `60` |
318
+ | `context.clearContextOnIdle.toolResultsNumToKeep` | integer | Integer number of most-recent compactable tool results to preserve when clearing. Values below 1 are floored to 1. | `5` |
319
+ | `context.clearContextOnIdle.toolResultsTotalCharsThreshold` | number | Total compactable tool result output characters allowed in history before clearing oldest results. When exceeded, oldest results are cleared down to half this threshold (best effort) so later turns keep reusing the provider prompt cache instead of rewriting history every turn. Use `-1` to disable the size trigger. This is a soft threshold: protected recent tool results may keep the total above it. | `500000` |
320
320
 
321
321
  #### Troubleshooting File Search Performance
322
322
 
@@ -352,6 +352,8 @@ The exit code is the contract a gate should read:
352
352
 
353
353
  `3` (not `2`) lets a gate distinguish "the review is blocking" from "the tool broke" — yargs already uses `1` for usage errors — without parsing any output. `--timeout-minutes` (default 120, floored at 1) terminates a hung review and exits `1`, and cancelling the command (Ctrl+C / SIGTERM) terminates the review's process group rather than orphaning it.
354
354
 
355
+ A time-budgeted run can also export a **soft** deadline so the review stops its open-ended reverse-audit loop while there is still time to verify, compose and post: `QWEN_REVIEW_DEADLINE_EPOCH` is the Unix-seconds moment the run will be killed, and `QWEN_REVIEW_DEADLINE_RESERVE_SECONDS` (default 3600; `0` keeps only the round estimate) is the tail that must remain for the last round's verification, `compose-review` and submission. When the remaining budget no longer fits another round plus that tail, the round builder refuses to build it, and the composed verdict discloses the truncated audit (an otherwise-Approve verdict is capped at Comment). A missing or malformed deadline leaves the review ungated — the outer timeout still bounds the run.
356
+
355
357
  ## Cross-file Impact Analysis
356
358
 
357
359
  A dedicated cross-file tracer (Agent 1c) owns this walk end-to-end. When code changes modify exported functions, classes, or interfaces, it searches for all callers and checks compatibility:
@@ -58,6 +58,37 @@ qwen --resume 123e4567-e89b-12d3-a456-426614174000 -p "Apply the follow-up refac
58
58
  > - Session data is project-scoped JSONL under `~/.qwen/projects/<sanitized-cwd>/chats`.
59
59
  > - Restores conversation history, tool outputs, and chat-compression checkpoints before sending the new prompt.
60
60
 
61
+ ## Run a Persistent Goal
62
+
63
+ Headless mode accepts `/goal` as the entire prompt. Goal state is stored with the session, so use `--continue` or `--resume <sessionId>` to inspect or control the same Goal from a later process. This requires `general.chatRecording` to remain enabled (the default).
64
+
65
+ ```bash
66
+ # Create a Goal and start its worker
67
+ qwen -p "/goal Finish the release checklist"
68
+
69
+ # Inspect its saved state in the same session
70
+ qwen --continue -p "/goal"
71
+ ```
72
+
73
+ Use the same `qwen --continue -p "<control>"` pattern for the other operations:
74
+
75
+ | Control | Behavior |
76
+ | ------------------------------------ | ---------------------------------------------------------------------------------------- |
77
+ | `/goal` | Report the stored state without calling the model. |
78
+ | `/goal <objective>` or `/goal set …` | Create or replace the Goal and start headless Goal work. |
79
+ | `/goal edit <objective>` | Revise a non-completed Goal; work starts immediately when the resulting state is active. |
80
+ | `/goal pause` | Pause an active Goal without calling the model. |
81
+ | `/goal resume` | Resume an eligible Goal and start headless Goal work. |
82
+ | `/goal clear` | Clear the Goal without confirmation or a model call. |
83
+
84
+ Runtime-scheduled Goal continuation segments do not count against `--max-session-turns`, but real user prompts still do. Explicit `--max-wall-time` and `--max-tool-calls` budgets continue to apply; exceeding either pauses active Goal work before the run exits with the budget-specific error.
85
+
86
+ With `--output-format stream-json`, each Goal status change emits a `stream_event` whose `event.type` is `goal_state`. This canonical state event is emitted even without `--include-partial-messages`. When partial messages are enabled, the older `active_goal` event follows as a compatibility projection; automation should treat `goal_state` as authoritative.
87
+
88
+ > [!note]
89
+ >
90
+ > This behavior applies to standard headless CLI runs. ACP still uses the legacy Goal command path.
91
+
61
92
  ## Customize the Main Session Prompt
62
93
 
63
94
  You can change the main session system prompt for a single CLI run without editing shared memory files.
@@ -402,6 +402,9 @@ Notes:
402
402
  | `--max-journal-bytes <n>` | `8388608` | Per-session byte cap on the in-flight live journal. When exceeded, the oldest journal entries are dropped (at least one entry is always kept). Must be a positive safe integer. Defaults to 8 MiB. |
403
403
  | `--mcp-client-budget <n>` | — | Positive integer cap on live MCP clients. When `mcp_workspace_pool` is advertised, the cap and transports are shared per workspace runtime; when the tag is absent, the legacy per-session manager enforces it. Combine with `--mcp-budget-mode`. When unset, no accounting-driven enforcement (but `GET /workspace/mcp` still reports `clientCount`). Distinct from claude-code's `MCP_SERVER_CONNECTION_BATCH_SIZE`, which gates startup concurrency rather than total live clients. Pre-flight `caps.features.mcp_guardrails` and `caps.features.mcp_workspace_pool`. |
404
404
  | `--mcp-budget-mode <m>` | `warn` / `off` | How `--mcp-client-budget` is enforced. `warn` (default when budget set): no refusal, snapshot's `budgets[0].status` flips to `warning` at ≥75% of budget. `enforce`: connects past the cap are refused, per-server cell shows `disabledReason: 'budget'`, deterministic by `mcpServers` declaration order. `off` (default when budget unset): pure observability. Boot rejects `enforce` without a budget. |
405
+ | `--external-tool-guard-mode <m>` | `off` | Managed ACP external pre-execution policy. `off` makes no provider calls and advertises no capability. `required` fails startup unless a compatible provider completes the v1 handshake, then fails every supported top-level tool invocation closed unless its single prepare request is allowed. |
406
+ | `--external-tool-guard-endpoint <url>` | — | Origin-only loopback HTTP(S) provider URL used in `required` mode, for example `http://127.0.0.1:8787`. Paths, URL credentials, redirects, non-loopback hosts, and proxy routing are not accepted. |
407
+ | `--external-tool-guard-timeout-ms <n>` | `3000` | Integer `100..30000`; applies independently to the startup handshake and each prepare request. |
405
408
  | `--http-bridge` | `true` | Stage 1 mode: production attempts to preheat one primary `qwen --acp` child for compatibility and retries on first use after failure, while each trusted secondary can start one child on demand. Sessions targeting a runtime multiplex onto its child via ACP `newSession()`; untrusted secondaries cannot start ACP. Stage 2 native in-process becomes available later. |
406
409
  | `--initialize-timeout-ms <n>` | `10000` | ACP child request timeout, including the `initialize` handshake (ms). Must be a positive integer up to `2147483647`. Values above the JS timer ceiling (`2^31-1`) are rejected at boot because Node silently compresses them to 1 ms. Cold-container deployments that need extra headroom for child startup can raise this; the same value governs `newSession`, workspace-status polls, and other ACP ext-method deadlines. |
407
410
  | `--allow-origin <pat>` | — | T2.4 ([#4514](https://github.com/QwenLM/qwen-code/issues/4514)). Cross-origin allowlist for browser webui clients. Repeatable. Each value is `*` (any origin — boot refuses if no bearer token is configured; `--require-auth` on loopback is recommended so `/health` and `/demo` are also bearer-gated, since both are pre-auth on loopback by default) or a canonical URL origin (`<scheme>://<host>[:<port>]`, no trailing slash / path / userinfo / query). **Subdomain wildcards (`https://*.example.com`) are intentionally unsupported** — list each subdomain explicitly, or use `*` with a configured token (and `--require-auth` for full hardening). Matched origins receive CORS response headers (`Access-Control-Allow-Origin`, `Vary: Origin`, methods, headers, max-age, and exposed `Retry-After`); unmatched origins still get a 403 with the same envelope as today's wall. `Origin: null` (sandboxed iframes, file:// docs) is always rejected, even under `*`. Pre-flight via `caps.features.allow_origin`. Loopback self-origin hits are unaffected. |
@@ -427,6 +430,78 @@ Notes:
427
430
  > matched case-sensitively by yargs `choices` (`--memory-project-scope
428
431
  Workspace` is rejected). Use lowercase values when copying between the two.
429
432
 
433
+ ### Required external Tool Guard
434
+
435
+ This opt-in is for managed ACP deployments that need an external allow/deny
436
+ decision at the final tool-executor boundary. It is fully dark unless
437
+ `--external-tool-guard-mode=required` is present:
438
+
439
+ ```sh
440
+ export QWEN_CODE_EXTERNAL_TOOL_GUARD_TOKEN='replace-with-local-secret'
441
+
442
+ qwen serve \
443
+ --external-tool-guard-mode=required \
444
+ --external-tool-guard-endpoint=http://127.0.0.1:8787 \
445
+ --external-tool-guard-timeout-ms=3000
446
+ ```
447
+
448
+ The provider must expose `POST /v1/handshake` and `POST /v1/prepare`, require
449
+ `Authorization: Bearer <token>`, return JSON, echo the supplied nonce or
450
+ request ID, and use protocol version `1`. The token must be non-blank, at most
451
+ 8192 UTF-16 code units, and contain no control characters. Requests are limited
452
+ to 1 MiB, responses to 64 KiB, and optional denial reasons to 500 UTF-16 code
453
+ units without control characters. A successful prepare response is:
454
+
455
+ ```json
456
+ { "protocolVersion": 1, "requestId": "<echo>", "allowed": true }
457
+ ```
458
+
459
+ A denial uses `allowed:false` and may add a short `reason`. For each supported
460
+ top-level tool invocation that passes existing permission and `PreToolUse`
461
+ gates and reaches the final execution boundary, Qwen Code sends one prepare
462
+ request and never retries it. An earlier permission/hook denial sends no
463
+ prepare request. Timeout, cancellation, transport failure, malformed or
464
+ mismatched responses, and explicit denial prevent the executor from running.
465
+ Each spawned ACP channel must also acknowledge that it installed the required
466
+ callback; a missing or incompatible acknowledgement rejects the channel before
467
+ Session creation.
468
+ The provider request carries `sessionId`, `promptId`, `toolCallId`, canonical
469
+ `toolName`, and final `arguments`; `toolCallId` is a correlation label, not an
470
+ authentication identity or standalone idempotency key.
471
+
472
+ Final arguments can contain sensitive application data. Treat them as such in
473
+ provider logs and audit storage.
474
+
475
+ `PreToolUse` hooks run before this final executor decision. Required Guard mode
476
+ does not authorize or sandbox hook behavior; deployments that need a boundary
477
+ around every possible side effect must disable hooks or govern their
478
+ implementations separately.
479
+
480
+ Slash-command actions also run before model/tool scheduling and are not Guard
481
+ invocations. Some built-ins can directly change files or settings. A managed
482
+ deployment that needs an all-effects boundary must reject slash-command input
483
+ or disable every non-approved command through `slashCommands.disabled` or
484
+ `--disabled-slash-commands`.
485
+
486
+ The v1 managed scope is top-level tools invoked by an active foreground
487
+ managed Prompt. Nested or delegating `agent`, `workflow`,
488
+ `create_sub_session`, `send_message`, direct `/fork`, and agent-backed
489
+ workspace memory remember/dream controls are rejected while required mode is
490
+ active. A top-level background shell or monitor start is still one guarded
491
+ invocation and its final arguments reach the provider, but this feature does
492
+ not continuously authorize the process or add a process-completion audit
493
+ protocol; a policy that requires foreground completion should deny those
494
+ shapes. Guarded MCP calls also disable automatic reconnect/replay after a
495
+ transport error. After a successful startup handshake, `/capabilities`
496
+ advertises `external_tool_guard`; its absence means clients must not assume
497
+ enforcement.
498
+
499
+ This feature does not authorize explicit daemon REST/ACP management calls;
500
+ those continue to use the daemon's existing authentication and route
501
+ contracts. It also does not make an allowed tool or shell command
502
+ deterministic or sandbox its internals; managed deployments must combine the
503
+ provider decision with their normal tool policy and isolation boundary.
504
+
430
505
  > **Sizing the load knobs.** `--max-sessions` is the per-workspace fresh-session cap. `--max-total-sessions`, when set, is the daemon-wide fresh-session cap.
431
506
  > Three other layers also limit load — when sizing for a high-concurrency
432
507
  > deployment, tune them together: