@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
@@ -71,13 +71,13 @@ import {
71
71
  RUNTIME_SNAPSHOT_PREFIX,
72
72
  buildModelIdContext,
73
73
  resolveModelId
74
- } from "./chunk-7W5KOBYU.js";
74
+ } from "./chunk-6D6V55ZQ.js";
75
75
  import {
76
76
  ARTIFACT_TITLE_MAX_LENGTH,
77
77
  ARTIFACT_WORKSPACE_PATH_MAX_LENGTH,
78
78
  hasControlCharacter,
79
79
  hasUnsafeDisplayPayload
80
- } from "./chunk-7MFQLOHZ.js";
80
+ } from "./chunk-3PRJYMXC.js";
81
81
  import {
82
82
  promptIdContext,
83
83
  todoWorkChainContext
@@ -223,7 +223,7 @@ import {
223
223
  } from "./chunk-432XCUHF.js";
224
224
  import {
225
225
  DashScopeOpenAICompatibleProvider
226
- } from "./chunk-4LLUH3A7.js";
226
+ } from "./chunk-HU5TUALO.js";
227
227
  import {
228
228
  openBrowserSecurely,
229
229
  shouldAttemptBrowserLaunch
@@ -302,7 +302,6 @@ import {
302
302
  _recoverObjectsFromLine,
303
303
  addMCPStatusChangeListener,
304
304
  collectText,
305
- defaultModalities,
306
305
  detectFileType,
307
306
  exists,
308
307
  fileExists,
@@ -383,7 +382,10 @@ import {
383
382
  updateMCPServerStatus,
384
383
  writeLine,
385
384
  writeLineSync
386
- } from "./chunk-ZPGMDT4S.js";
385
+ } from "./chunk-O656RSMC.js";
386
+ import {
387
+ defaultModalities
388
+ } from "./chunk-WOJZWRAZ.js";
387
389
  import {
388
390
  E_TIMEOUT,
389
391
  Mutex,
@@ -443,7 +445,7 @@ import {
443
445
  createContentGenerator,
444
446
  resetPreloadedContentGenerator,
445
447
  resolveContentGeneratorConfigWithSources
446
- } from "./chunk-XD2PNH3K.js";
448
+ } from "./chunk-P7LKADIT.js";
447
449
  import {
448
450
  normalizeMcpToolName,
449
451
  sanitizeToolNameForProvider
@@ -20585,6 +20587,9 @@ function buildKeptFilePaths(history, refs, keepRefs, callIdToFilePath) {
20585
20587
  if (!keepRefs.has(refKey(ref))) continue;
20586
20588
  const part = getPart(history, ref);
20587
20589
  if (!part || isErrorResponse(part) || isAlreadyCleared(part)) continue;
20590
+ if (part.functionResponse?.name !== ToolNames.WRITE_FILE) {
20591
+ continue;
20592
+ }
20588
20593
  const paths = getFilePathsForResponse(part, callIdToFilePath);
20589
20594
  if (paths?.length === 1) {
20590
20595
  kept.add(paths[0]);
@@ -20598,6 +20603,7 @@ function planSizeBasedClearing(history, settings, keepRecent, pendingContent, pr
20598
20603
  if (!Number.isFinite(threshold) || threshold < 0) {
20599
20604
  return null;
20600
20605
  }
20606
+ const lowWatermark = Math.floor(threshold / 2);
20601
20607
  const pending = normalizePendingContent(pendingContent);
20602
20608
  const virtualHistory = pending.length > 0 ? [...history, ...pending] : history;
20603
20609
  const { tool } = collectCompactablePartRefs(virtualHistory);
@@ -20620,11 +20626,16 @@ function planSizeBasedClearing(history, settings, keepRecent, pendingContent, pr
20620
20626
  const compactableToolRefs = tool.filter(
20621
20627
  (ref) => !preservedToolRefs.has(refKey(ref))
20622
20628
  );
20623
- const keepToolRefs = buildKeepRefs(compactableToolRefs, keepRecent);
20629
+ const keepToolRefs = buildKeepRefs(
20630
+ compactableToolRefs.filter(
20631
+ (ref) => ref.contentIndex < history.length && charsByRef.has(refKey(ref))
20632
+ ),
20633
+ keepRecent
20634
+ );
20624
20635
  const clearRefs = [];
20625
20636
  let remainingChars = totalChars;
20626
20637
  for (const ref of compactableToolRefs) {
20627
- if (remainingChars <= threshold) break;
20638
+ if (remainingChars <= lowWatermark) break;
20628
20639
  const key = refKey(ref);
20629
20640
  const chars = charsByRef.get(key) ?? 0;
20630
20641
  if (chars <= 0 || ref.contentIndex >= history.length || keepToolRefs.has(key)) {
@@ -20640,7 +20651,8 @@ function planSizeBasedClearing(history, settings, keepRecent, pendingContent, pr
20640
20651
  toolResultCharsBefore: totalChars,
20641
20652
  toolResultCharsAfter: remainingChars - pendingChars,
20642
20653
  pendingToolResultChars: pendingChars,
20643
- toolResultsTotalCharsThreshold: threshold
20654
+ toolResultsTotalCharsThreshold: threshold,
20655
+ toolResultsLowWatermark: lowWatermark
20644
20656
  };
20645
20657
  }
20646
20658
  __name(planSizeBasedClearing, "planSizeBasedClearing");
@@ -20660,6 +20672,7 @@ function microcompactHistory(history, lastApiCompletionTimestamp, settings, opts
20660
20672
  let toolResultCharsAfter;
20661
20673
  let pendingToolResultChars;
20662
20674
  let toolResultsTotalCharsThreshold;
20675
+ let toolResultsLowWatermark;
20663
20676
  let keptPathHistory = history;
20664
20677
  let keptPathRefs = [];
20665
20678
  if (opts?.force) {
@@ -20679,13 +20692,28 @@ function microcompactHistory(history, lastApiCompletionTimestamp, settings, opts
20679
20692
  history,
20680
20693
  opts?.preserveReadFileResult
20681
20694
  ));
20695
+ const keepToolRefs = buildKeepRefs(
20696
+ tool.filter((ref) => {
20697
+ const part = getPart(history, ref);
20698
+ return getToolOutputChars(part) > 0 || !!part && hasNestedMedia(part);
20699
+ }),
20700
+ keepRecent
20701
+ );
20682
20702
  keepRefs = /* @__PURE__ */ new Set([
20683
- ...tool.slice(-keepRecent).map(refKey),
20703
+ ...keepToolRefs,
20684
20704
  ...media.slice(-keepRecent).map(refKey),
20685
20705
  ...nestedMedia.slice(-keepRecent).map(refKey)
20686
20706
  ]);
20687
20707
  const allRefs = [...tool, ...media, ...nestedMedia];
20688
- clearRefs = allRefs.filter((r) => !keepRefs.has(refKey(r)));
20708
+ const toolKeys = new Set(tool.map(refKey));
20709
+ clearRefs = allRefs.filter((r) => {
20710
+ if (keepRefs.has(refKey(r))) return false;
20711
+ const part = getPart(history, r);
20712
+ if (toolKeys.has(refKey(r)) && getToolOutputChars(part) === 0 && !(part && hasNestedMedia(part))) {
20713
+ return false;
20714
+ }
20715
+ return true;
20716
+ });
20689
20717
  keptPathRefs = tool;
20690
20718
  } else {
20691
20719
  const pending = normalizePendingContent(opts?.pendingContent);
@@ -20709,6 +20737,7 @@ function microcompactHistory(history, lastApiCompletionTimestamp, settings, opts
20709
20737
  toolResultCharsAfter = sizePlan.toolResultCharsAfter;
20710
20738
  pendingToolResultChars = sizePlan.pendingToolResultChars;
20711
20739
  toolResultsTotalCharsThreshold = sizePlan.toolResultsTotalCharsThreshold;
20740
+ toolResultsLowWatermark = sizePlan.toolResultsLowWatermark;
20712
20741
  }
20713
20742
  if (clearRefs.length === 0 && triggerReason !== "size") {
20714
20743
  return { history };
@@ -20798,6 +20827,7 @@ function microcompactHistory(history, lastApiCompletionTimestamp, settings, opts
20798
20827
  toolResultCharsAfter,
20799
20828
  pendingToolResultChars,
20800
20829
  toolResultsTotalCharsThreshold,
20830
+ toolResultsLowWatermark,
20801
20831
  toolsCleared,
20802
20832
  mediaCleared,
20803
20833
  toolsKept,
@@ -35737,6 +35767,7 @@ __name(composePostCompactHistory, "composePostCompactHistory");
35737
35767
  // packages/core/src/services/chatCompressionService.ts
35738
35768
  var debugLogger20 = createDebugLogger("COMPRESSION");
35739
35769
  var COMPACT_MAX_OUTPUT_TOKENS = 2e4;
35770
+ var COMPRESSION_REQUEST_DIRECTIVE = "First, reason in your <analysis> block. Then, produce the <state_snapshot> XML.";
35740
35771
  var DEFAULT_PCT = 0.85;
35741
35772
  var SUMMARY_RESERVE = COMPACT_MAX_OUTPUT_TOKENS;
35742
35773
  var AUTOCOMPACT_BUFFER = 13e3;
@@ -35844,6 +35875,8 @@ var ChatCompressionService = class {
35844
35875
  const chatCompressionSettings = config.getChatCompression();
35845
35876
  const slimmingConfig = resolveSlimmingConfig(chatCompressionSettings);
35846
35877
  const tuning = resolveCompactionTuning(chatCompressionSettings);
35878
+ const contentGeneratorConfig = config.getContentGeneratorConfig();
35879
+ const contextLimit = contentGeneratorConfig.contextWindowSize ?? DEFAULT_TOKEN_LIMIT;
35847
35880
  if (consecutiveFailures >= MAX_CONSECUTIVE_FAILURES && !force) {
35848
35881
  return {
35849
35882
  newHistory: null,
@@ -35855,7 +35888,6 @@ var ChatCompressionService = class {
35855
35888
  };
35856
35889
  }
35857
35890
  if (!force) {
35858
- const contextLimit = config.getContentGeneratorConfig()?.contextWindowSize ?? DEFAULT_TOKEN_LIMIT;
35859
35891
  const { auto } = computeThresholds(
35860
35892
  contextLimit,
35861
35893
  config.getAutoCompactThreshold()
@@ -35936,12 +35968,11 @@ var ChatCompressionService = class {
35936
35968
  [opts.pendingUserMessage],
35937
35969
  slimmingConfig.imageTokenEstimate
35938
35970
  ) : 0;
35939
- const slim = slimCompactionInput(sideQueryHistory);
35940
- if (slim.stats.imagesStripped > 0 || slim.stats.documentsStripped > 0) {
35941
- config.getDebugLogger().debug(
35942
- `[chat-compression] slimmed ${slim.stats.imagesStripped} image(s) and ${slim.stats.documentsStripped} document(s) from side-query payload`
35943
- );
35944
- }
35971
+ let coldInput;
35972
+ const getColdInput = /* @__PURE__ */ __name(() => {
35973
+ coldInput ??= slimCompactionInput(sideQueryHistory);
35974
+ return coldInput;
35975
+ }, "getColdInput");
35945
35976
  const systemInstruction = buildCompressionSystemPrompt(
35946
35977
  opts.customInstructions,
35947
35978
  hookExtraInstructions
@@ -35955,7 +35986,7 @@ var ChatCompressionService = class {
35955
35986
  const entry = models.find((m2) => m2.id === resolved.modelId);
35956
35987
  const window2 = entry?.contextWindowSize;
35957
35988
  const slimmedTokenEstimate = estimateContentTokens(
35958
- slim.slimmedHistory,
35989
+ getColdInput().slimmedHistory,
35959
35990
  slimmingConfig.imageTokenEstimate
35960
35991
  ) + Math.ceil(systemInstruction.length / CHARS_PER_TOKEN) + COMPACT_MAX_OUTPUT_TOKENS;
35961
35992
  if (window2 && window2 > 0 && slimmedTokenEstimate > window2) {
@@ -35967,49 +35998,72 @@ var ChatCompressionService = class {
35967
35998
  }
35968
35999
  const abortSignal = signal ?? new AbortController().signal;
35969
36000
  abortSignal.throwIfAborted();
35970
- const runColdCompression = /* @__PURE__ */ __name(() => runSideQuery(config, {
35971
- purpose: "chat-compression",
35972
- skipOutputLanguagePreference: true,
35973
- model: effectiveCompactionModel,
35974
- // Compression uses the compaction model (config.getCompactionModel?.()) to reduce cost.
35975
- // Falls back to the main model if not set or if the payload exceeds the
35976
- // compaction model's context window.
35977
- // See https://github.com/QwenLM/qwen-code/issues/5956
35978
- // Stream so a slow compression inference keeps the HTTP connection alive.
35979
- // Non-streaming returns no bytes until the whole summary is generated, so
35980
- // behind a BFF gateway with a short `proxy_read_timeout` a long inference
35981
- // is killed with a 504 (surfaced as a 422) mid-compression, breaking the
35982
- // session. See https://github.com/QwenLM/qwen-code/issues/5861.
35983
- stream: true,
35984
- // Best-effort: failures fall back to NOOP and the next turn re-triggers
35985
- // compression anyway, so don't burn 7 retries blocking the user mid-turn.
35986
- maxAttempts: 1,
35987
- systemInstruction,
35988
- contents: [
35989
- ...slim.slimmedHistory,
35990
- {
35991
- role: "user",
35992
- parts: [
35993
- {
35994
- text: "First, reason in your <analysis> block. Then, produce the <state_snapshot> XML."
35995
- }
35996
- ]
35997
- }
35998
- ],
35999
- // Compression output is bounded by maxOutputTokens to guarantee a predictable
36000
- // reserve across providers (see docs/design/auto-compaction-threshold-redesign.md).
36001
- // Thinking is disabled because per-provider thinking-budget semantics are
36002
- // inconsistent (Anthropic/OpenAI count it separately, Gemini varies by model).
36003
- config: {
36004
- thinkingConfig: { includeThoughts: false },
36005
- maxOutputTokens: COMPACT_MAX_OUTPUT_TOKENS
36006
- },
36007
- abortSignal,
36008
- promptId
36009
- }), "runColdCompression");
36001
+ const runColdCompression = /* @__PURE__ */ __name(() => {
36002
+ const slim = getColdInput();
36003
+ if (slim.stats.imagesStripped > 0 || slim.stats.documentsStripped > 0) {
36004
+ config.getDebugLogger().debug(
36005
+ `[chat-compression] slimmed ${slim.stats.imagesStripped} image(s) and ${slim.stats.documentsStripped} document(s) from side-query payload`
36006
+ );
36007
+ }
36008
+ return runSideQuery(config, {
36009
+ purpose: "chat-compression",
36010
+ skipOutputLanguagePreference: true,
36011
+ model: effectiveCompactionModel,
36012
+ // Compression uses the compaction model (config.getCompactionModel?.()) to reduce cost.
36013
+ // Falls back to the main model if not set or if the payload exceeds the
36014
+ // compaction model's context window.
36015
+ // See https://github.com/QwenLM/qwen-code/issues/5956
36016
+ // Stream so a slow compression inference keeps the HTTP connection alive.
36017
+ // Non-streaming returns no bytes until the whole summary is generated, so
36018
+ // behind a BFF gateway with a short `proxy_read_timeout` a long inference
36019
+ // is killed with a 504 (surfaced as a 422) mid-compression, breaking the
36020
+ // session. See https://github.com/QwenLM/qwen-code/issues/5861.
36021
+ stream: true,
36022
+ // Best-effort: failures fall back to NOOP and the next turn re-triggers
36023
+ // compression anyway, so don't burn 7 retries blocking the user mid-turn.
36024
+ maxAttempts: 1,
36025
+ systemInstruction,
36026
+ contents: [
36027
+ ...slim.slimmedHistory,
36028
+ {
36029
+ role: "user",
36030
+ parts: [
36031
+ {
36032
+ text: COMPRESSION_REQUEST_DIRECTIVE
36033
+ }
36034
+ ]
36035
+ }
36036
+ ],
36037
+ // Compression output is bounded by maxOutputTokens to guarantee a predictable
36038
+ // reserve across providers (see docs/design/auto-compaction-threshold-redesign.md).
36039
+ // Thinking is disabled because per-provider thinking-budget semantics are
36040
+ // inconsistent (Anthropic/OpenAI count it separately, Gemini varies by model).
36041
+ config: {
36042
+ thinkingConfig: { includeThoughts: false },
36043
+ maxOutputTokens: COMPACT_MAX_OUTPUT_TOKENS
36044
+ },
36045
+ abortSignal,
36046
+ promptId
36047
+ });
36048
+ }, "runColdCompression");
36010
36049
  let summaryResult;
36011
36050
  let usedCacheSharing = false;
36012
- const canShareCache = effectiveCompactionModel === config.getModel() && slim.stats.imagesStripped === 0 && slim.stats.documentsStripped === 0 && supportsCompressionCacheSharing(config);
36051
+ const sharedRequestText = `${systemInstruction}
36052
+
36053
+ Do not call tools; tool execution is disabled for this request. ` + COMPRESSION_REQUEST_DIRECTIVE;
36054
+ const sharedPromptTokenCount = opts.precomputedEffectiveTokens ?? originalTokenCount + (chat.getLastOutputTokenCount?.() ?? 0);
36055
+ const sharedDirectiveTokenCount = Math.ceil(
36056
+ sharedRequestText.length / CHARS_PER_TOKEN
36057
+ );
36058
+ const usesMainModel = effectiveCompactionModel === config.getModel();
36059
+ const providerSupportsCacheSharing = supportsCompressionCacheSharing(config);
36060
+ const hasProviderTokenCount = (chat.getLastPromptTokenCount?.() ?? 0) > 0;
36061
+ const sharedRequestFits = sharedPromptTokenCount + sharedDirectiveTokenCount + COMPACT_MAX_OUTPUT_TOKENS <= contextLimit;
36062
+ const canShareCache = usesMainModel && providerSupportsCacheSharing && hasProviderTokenCount && sharedRequestFits;
36063
+ if (!canShareCache) {
36064
+ const reason = !usesMainModel ? "distinct compaction model" : !providerSupportsCacheSharing ? "provider does not support cache sharing" : !hasProviderTokenCount ? "no provider token-count anchor" : `shared request exceeds context window: prompt=${sharedPromptTokenCount}, directive=${sharedDirectiveTokenCount}, reserve=${COMPACT_MAX_OUTPUT_TOKENS}, window=${contextLimit}`;
36065
+ debugLogger20.debug(`[compaction] skipping cache sharing: ${reason}`);
36066
+ }
36013
36067
  if (canShareCache) {
36014
36068
  try {
36015
36069
  const generationConfig = {
@@ -36026,9 +36080,7 @@ var ChatCompressionService = class {
36026
36080
  role: "user",
36027
36081
  parts: [
36028
36082
  {
36029
- text: `${systemInstruction}
36030
-
36031
- Do not call tools; tool execution is disabled for this request. First, reason in your <analysis> block. Then, produce the <state_snapshot> XML.`
36083
+ text: sharedRequestText
36032
36084
  }
36033
36085
  ]
36034
36086
  }
@@ -36037,7 +36089,7 @@ Do not call tools; tool execution is disabled for this request. First, reason in
36037
36089
  systemInstruction: mainSystemInstruction,
36038
36090
  config: {
36039
36091
  ...generationConfig,
36040
- ...config.getContentGeneratorConfig().authType === "anthropic" /* USE_ANTHROPIC */ ? {
36092
+ ...contentGeneratorConfig.authType === "anthropic" /* USE_ANTHROPIC */ ? {
36041
36093
  thinkingConfig: {
36042
36094
  ...generationConfig.thinkingConfig,
36043
36095
  // Manual Anthropic thinking requires budget_tokens to be
@@ -37758,6 +37810,10 @@ var GeminiChat = class {
37758
37810
  getLastPromptTokenCount() {
37759
37811
  return this.lastPromptTokenCount;
37760
37812
  }
37813
+ /** Previous model-response tokens used by the next prompt estimate. */
37814
+ getLastOutputTokenCount() {
37815
+ return this.lastOutputTokenCount;
37816
+ }
37761
37817
  /**
37762
37818
  * Builds request contents for the content generator without deep-cloning the
37763
37819
  * whole chat history. This is an internal hot path: long sessions can make a
@@ -38469,6 +38525,7 @@ var GeminiChat = class {
38469
38525
  params.config?.abortSignal,
38470
38526
  {
38471
38527
  originalTokenCountOverride: reactiveOriginalTokenCount,
38528
+ precomputedEffectiveTokens: reactiveOriginalTokenCount,
38472
38529
  requestGenerationConfig: params.config,
38473
38530
  trigger: "auto"
38474
38531
  }
@@ -52275,7 +52332,12 @@ async function evaluateToolInvocationGuard(guard, context2) {
52275
52332
  });
52276
52333
  const decision = await guard({
52277
52334
  ...context2,
52278
- args: structuredClone(context2.args)
52335
+ args: structuredClone(context2.args),
52336
+ ...context2.invocationContext ? {
52337
+ invocationContext: Object.freeze({
52338
+ ...context2.invocationContext
52339
+ })
52340
+ } : {}
52279
52341
  });
52280
52342
  if (context2.signal.aborted) {
52281
52343
  return { allowed: false, reason: FAILED_MESSAGE };
@@ -114624,13 +114686,15 @@ async function runSpeculativeLoop(config, state, cacheSafe, modelOverride) {
114624
114686
  const invocation = tool.build(args);
114625
114687
  const toolInvocationGuard = config.getToolInvocationGuard?.();
114626
114688
  if (toolInvocationGuard) {
114689
+ const invocationContext = getInvocationContext();
114627
114690
  const guardDecision = await evaluateToolInvocationGuard(
114628
114691
  toolInvocationGuard,
114629
114692
  {
114630
114693
  callId: persistenceCallId,
114631
114694
  toolName: canonicalToolName2(name),
114632
114695
  args: invocation.params,
114633
- signal: state.abortController.signal
114696
+ signal: state.abortController.signal,
114697
+ ...invocationContext ? { invocationContext } : {}
114634
114698
  }
114635
114699
  );
114636
114700
  if (state.abortController.signal.aborted) {
@@ -133429,13 +133493,15 @@ var CoreToolScheduler = class {
133429
133493
  }
133430
133494
  const toolInvocationGuard = this.config.getToolInvocationGuard?.();
133431
133495
  if (toolInvocationGuard) {
133496
+ const invocationContext = getInvocationContext();
133432
133497
  const guardDecision = await evaluateToolInvocationGuard(
133433
133498
  toolInvocationGuard,
133434
133499
  {
133435
133500
  callId,
133436
133501
  toolName: canonicalName,
133437
133502
  args: invocation.params,
133438
- signal
133503
+ signal,
133504
+ ...invocationContext ? { invocationContext } : {}
133439
133505
  }
133440
133506
  );
133441
133507
  if (signal.aborted) {
@@ -143162,8 +143228,10 @@ var GeminiClient = class _GeminiClient {
143162
143228
  }
143163
143229
  if (m2.triggerReason === "size") {
143164
143230
  const pendingNote = m2.pendingToolResultChars && m2.pendingToolResultChars > 0 ? ` (+${m2.pendingToolResultChars} pending)` : "";
143231
+ const virtualAfter = (m2.toolResultCharsAfter ?? 0) + (m2.pendingToolResultChars ?? 0);
143232
+ const targetNote = m2.toolResultsLowWatermark !== void 0 ? `, target ${m2.toolResultsLowWatermark}` + (virtualAfter > m2.toolResultsLowWatermark ? " (soft-exceeded)" : "") : "";
143165
143233
  debugLogger132.info(
143166
- `[TOOL-RESULT MC] tool result chars ${m2.toolResultCharsBefore} > ${m2.toolResultsTotalCharsThreshold}, cleared ${m2.toolsCleared} tool result(s) (~${m2.tokensSaved} tokens), history now ${m2.toolResultCharsAfter}${pendingNote}, kept ${m2.toolsKept} tool result(s)`
143234
+ `[TOOL-RESULT MC] tool result chars ${m2.toolResultCharsBefore} > ${m2.toolResultsTotalCharsThreshold}, cleared ${m2.toolsCleared} tool result(s) (~${m2.tokensSaved} tokens), history now ${m2.toolResultCharsAfter}${pendingNote}${targetNote}, kept ${m2.toolsKept} tool result(s)`
143167
143235
  );
143168
143236
  } else {
143169
143237
  debugLogger132.info(
@@ -150763,7 +150831,7 @@ var Config = class _Config {
150763
150831
  }
150764
150832
  if (!enabled) return;
150765
150833
  registry.registerFactory(ToolNames.IMAGE_GEN, async () => {
150766
- const { ImageGenTool } = await import("./image-gen-G7RLG3KR.js");
150834
+ const { ImageGenTool } = await import("./image-gen-J6Q2YBEU.js");
150767
150835
  return new ImageGenTool(this);
150768
150836
  });
150769
150837
  }
@@ -150810,19 +150878,19 @@ var Config = class _Config {
150810
150878
  }, "registerGoalWorkerTools");
150811
150879
  if (this.getBareMode()) {
150812
150880
  await registerLazy(ToolNames.READ_FILE, async () => {
150813
- const { ReadFileTool } = await import("./read-file-5GVXLY74.js");
150881
+ const { ReadFileTool } = await import("./read-file-PGTXF25I.js");
150814
150882
  return new ReadFileTool(this);
150815
150883
  });
150816
150884
  await registerLazy(ToolNames.EDIT, async () => {
150817
- const { EditTool } = await import("./edit-KW2TOC6A.js");
150885
+ const { EditTool } = await import("./edit-DMFCBP2D.js");
150818
150886
  return new EditTool(this);
150819
150887
  });
150820
150888
  await registerLazy(ToolNames.NOTEBOOK_EDIT, async () => {
150821
- const { NotebookEditTool } = await import("./notebook-edit-LLM6UXFX.js");
150889
+ const { NotebookEditTool } = await import("./notebook-edit-SG7X2EQA.js");
150822
150890
  return new NotebookEditTool(this);
150823
150891
  });
150824
150892
  await registerLazy(ToolNames.SHELL, async () => {
150825
- const { ShellTool: ShellTool2 } = await import("./shell-RHGGJ6BE.js");
150893
+ const { ShellTool: ShellTool2 } = await import("./shell-THDYM4CS.js");
150826
150894
  return new ShellTool2(this);
150827
150895
  });
150828
150896
  await registerGoalWorkerTools();
@@ -150834,7 +150902,7 @@ var Config = class _Config {
150834
150902
  }
150835
150903
  await registerGoalWorkerTools();
150836
150904
  await registerLazy(ToolNames.TOOL_SEARCH, async () => {
150837
- const { ToolSearchTool } = await import("./tool-search-N2R7LVMC.js");
150905
+ const { ToolSearchTool } = await import("./tool-search-SQTUSG6P.js");
150838
150906
  return new ToolSearchTool(this);
150839
150907
  });
150840
150908
  await registerLazy(ToolNames.READ_MCP_RESOURCE, async () => {
@@ -150842,7 +150910,7 @@ var Config = class _Config {
150842
150910
  return new ReadMcpResourceTool(this);
150843
150911
  });
150844
150912
  await registerLazy(ToolNames.AGENT, async () => {
150845
- const { AgentTool: AgentTool2 } = await import("./agent-NAOXNW4I.js");
150913
+ const { AgentTool: AgentTool2 } = await import("./agent-2P53VL2L.js");
150846
150914
  return new AgentTool2(this);
150847
150915
  });
150848
150916
  await registerLazy(ToolNames.LIST_AGENTS, async () => {
@@ -150858,7 +150926,7 @@ var Config = class _Config {
150858
150926
  return new SendMessageTool(this);
150859
150927
  });
150860
150928
  await registerLazy(ToolNames.SKILL, async () => {
150861
- const { SkillTool } = await import("./skill-GQ7PBS25.js");
150929
+ const { SkillTool } = await import("./skill-OXXZBNQB.js");
150862
150930
  return new SkillTool(this);
150863
150931
  });
150864
150932
  await registerLazy(ToolNames.LS, async () => {
@@ -150866,11 +150934,11 @@ var Config = class _Config {
150866
150934
  return new LSTool(this);
150867
150935
  });
150868
150936
  await registerLazy(ToolNames.READ_FILE, async () => {
150869
- const { ReadFileTool } = await import("./read-file-5GVXLY74.js");
150937
+ const { ReadFileTool } = await import("./read-file-PGTXF25I.js");
150870
150938
  return new ReadFileTool(this);
150871
150939
  });
150872
150940
  await registerLazy(ToolNames.ZOOM_IMAGE, async () => {
150873
- const { ZoomImageTool } = await import("./zoom-image-NHKN6F77.js");
150941
+ const { ZoomImageTool } = await import("./zoom-image-JTUSS43N.js");
150874
150942
  return new ZoomImageTool(this);
150875
150943
  });
150876
150944
  if (this.getUseRipgrep()) {
@@ -150885,7 +150953,7 @@ var Config = class _Config {
150885
150953
  recordStartupEvent("config_initialize_ripgrep_probe_end");
150886
150954
  if (useRipgrep) {
150887
150955
  await registerLazy(ToolNames.GREP, async () => {
150888
- const { RipGrepTool: RipGrepTool2 } = await import("./ripGrep-TKOJTIAB.js");
150956
+ const { RipGrepTool: RipGrepTool2 } = await import("./ripGrep-IY3KGPM6.js");
150889
150957
  return new RipGrepTool2(this);
150890
150958
  });
150891
150959
  } else {
@@ -150898,7 +150966,7 @@ var Config = class _Config {
150898
150966
  )
150899
150967
  );
150900
150968
  await registerLazy(ToolNames.GREP, async () => {
150901
- const { GrepTool } = await import("./grep-Q64EAM73.js");
150969
+ const { GrepTool } = await import("./grep-BZO4LOTA.js");
150902
150970
  return new GrepTool(this);
150903
150971
  });
150904
150972
  }
@@ -150906,28 +150974,28 @@ var Config = class _Config {
150906
150974
  recordStartupEvent("config_initialize_ripgrep_probe_start");
150907
150975
  recordStartupEvent("config_initialize_ripgrep_probe_end");
150908
150976
  await registerLazy(ToolNames.GREP, async () => {
150909
- const { GrepTool } = await import("./grep-Q64EAM73.js");
150977
+ const { GrepTool } = await import("./grep-BZO4LOTA.js");
150910
150978
  return new GrepTool(this);
150911
150979
  });
150912
150980
  }
150913
150981
  await registerLazy(ToolNames.GLOB, async () => {
150914
- const { GlobTool } = await import("./glob-LJFFMN4D.js");
150982
+ const { GlobTool } = await import("./glob-YECOWTRW.js");
150915
150983
  return new GlobTool(this);
150916
150984
  });
150917
150985
  await registerLazy(ToolNames.EDIT, async () => {
150918
- const { EditTool } = await import("./edit-KW2TOC6A.js");
150986
+ const { EditTool } = await import("./edit-DMFCBP2D.js");
150919
150987
  return new EditTool(this);
150920
150988
  });
150921
150989
  await registerLazy(ToolNames.NOTEBOOK_EDIT, async () => {
150922
- const { NotebookEditTool } = await import("./notebook-edit-LLM6UXFX.js");
150990
+ const { NotebookEditTool } = await import("./notebook-edit-SG7X2EQA.js");
150923
150991
  return new NotebookEditTool(this);
150924
150992
  });
150925
150993
  await registerLazy(ToolNames.WRITE_FILE, async () => {
150926
- const { WriteFileTool: WriteFileTool2 } = await import("./write-file-AWBI4GJS.js");
150994
+ const { WriteFileTool: WriteFileTool2 } = await import("./write-file-H2QOF25K.js");
150927
150995
  return new WriteFileTool2(this);
150928
150996
  });
150929
150997
  await registerLazy(ToolNames.SHELL, async () => {
150930
- const { ShellTool: ShellTool2 } = await import("./shell-RHGGJ6BE.js");
150998
+ const { ShellTool: ShellTool2 } = await import("./shell-THDYM4CS.js");
150931
150999
  return new ShellTool2(this);
150932
151000
  });
150933
151001
  await registerLazy(ToolNames.TODO_WRITE, async () => {
@@ -150943,26 +151011,26 @@ var Config = class _Config {
150943
151011
  }
150944
151012
  if (!this.sdkMode && (supportsUserInteraction || options2?.forSubAgent)) {
150945
151013
  await registerLazy(ToolNames.EXIT_PLAN_MODE, async () => {
150946
- const { ExitPlanModeTool: ExitPlanModeTool2 } = await import("./exitPlanMode-W4EICZ4N.js");
151014
+ const { ExitPlanModeTool: ExitPlanModeTool2 } = await import("./exitPlanMode-XSHHYR73.js");
150947
151015
  return new ExitPlanModeTool2(this);
150948
151016
  });
150949
151017
  }
150950
151018
  if (!this.sdkMode && supportsUserInteraction) {
150951
151019
  await registerLazy(ToolNames.ENTER_PLAN_MODE, async () => {
150952
- const { EnterPlanModeTool } = await import("./enterPlanMode-JFJTDASQ.js");
151020
+ const { EnterPlanModeTool } = await import("./enterPlanMode-QUIZFQ4M.js");
150953
151021
  return new EnterPlanModeTool(this);
150954
151022
  });
150955
151023
  }
150956
151024
  await registerLazy(ToolNames.ENTER_WORKTREE, async () => {
150957
- const { EnterWorktreeTool } = await import("./enter-worktree-YL34NEU5.js");
151025
+ const { EnterWorktreeTool } = await import("./enter-worktree-5SVBCXFC.js");
150958
151026
  return new EnterWorktreeTool(this);
150959
151027
  });
150960
151028
  await registerLazy(ToolNames.EXIT_WORKTREE, async () => {
150961
- const { ExitWorktreeTool } = await import("./exit-worktree-5M43QPBB.js");
151029
+ const { ExitWorktreeTool } = await import("./exit-worktree-FUB44KAF.js");
150962
151030
  return new ExitWorktreeTool(this);
150963
151031
  });
150964
151032
  await registerLazy(ToolNames.WEB_FETCH, async () => {
150965
- const { WebFetchTool } = await import("./web-fetch-DS34CJ3R.js");
151033
+ const { WebFetchTool } = await import("./web-fetch-L7RAPOJB.js");
150966
151034
  return new WebFetchTool(this);
150967
151035
  });
150968
151036
  if (resolveInteractionMode(this) === "interactive" && !this.sdkMode && !this.getScreenReader() && !options2?.forSubAgent) {
@@ -150972,11 +151040,11 @@ var Config = class _Config {
150972
151040
  });
150973
151041
  }
150974
151042
  if (this.webSearchSettings?.enabled) {
150975
- const { evaluateWebSearchGate } = await import("./web-search-ITFPD7V4.js");
151043
+ const { evaluateWebSearchGate } = await import("./web-search-IDOYUOWX.js");
150976
151044
  const gate = evaluateWebSearchGate(this);
150977
151045
  if (gate.ok) {
150978
151046
  await registerLazy(ToolNames.WEB_SEARCH, async () => {
150979
- const { WebSearchTool } = await import("./web-search-ITFPD7V4.js");
151047
+ const { WebSearchTool } = await import("./web-search-IDOYUOWX.js");
150980
151048
  return new WebSearchTool(this);
150981
151049
  });
150982
151050
  } else if (!this.webSearchNoticeEmitted && !options2?.forSubAgent) {
@@ -150993,7 +151061,7 @@ var Config = class _Config {
150993
151061
  }
150994
151062
  if (this.isRecordArtifactEnabled()) {
150995
151063
  await registerLazy(ToolNames.RECORD_ARTIFACT, async () => {
150996
- const { RecordArtifactTool } = await import("./record-artifact-L3BAHQFN.js");
151064
+ const { RecordArtifactTool } = await import("./record-artifact-E6AWQU2Z.js");
150997
151065
  return new RecordArtifactTool();
150998
151066
  });
150999
151067
  }
@@ -151028,7 +151096,7 @@ var Config = class _Config {
151028
151096
  });
151029
151097
  if (this.isAgentTeamEnabled()) {
151030
151098
  await registerLazy(ToolNames.TEAM_CREATE, async () => {
151031
- const { TeamCreateTool } = await import("./team-create-UTRVUEDA.js");
151099
+ const { TeamCreateTool } = await import("./team-create-BCSMDK4Z.js");
151032
151100
  return new TeamCreateTool(this);
151033
151101
  });
151034
151102
  await registerLazy(ToolNames.TEAM_DELETE, async () => {
@@ -151036,7 +151104,7 @@ var Config = class _Config {
151036
151104
  return new TeamDeleteTool(this);
151037
151105
  });
151038
151106
  await registerLazy(ToolNames.TEAM_PLAN_APPROVAL, async () => {
151039
- const { TeamPlanApprovalTool } = await import("./team-plan-approval-YZNB4U5U.js");
151107
+ const { TeamPlanApprovalTool } = await import("./team-plan-approval-B5YRLJFV.js");
151040
151108
  return new TeamPlanApprovalTool(this);
151041
151109
  });
151042
151110
  await registerLazy(ToolNames.TASK_CREATE, async () => {
@@ -151054,16 +151122,16 @@ var Config = class _Config {
151054
151122
  }
151055
151123
  if (this.isWorkflowsEnabled()) {
151056
151124
  await registerLazy(ToolNames.WORKFLOW, async () => {
151057
- const { WorkflowTool } = await import("./workflow-LZQ4PGNS.js");
151125
+ const { WorkflowTool } = await import("./workflow-HXURUJB5.js");
151058
151126
  return new WorkflowTool(this);
151059
151127
  });
151060
151128
  }
151061
151129
  if (this.isComputerUseEnabled()) {
151062
- const { registerComputerUseTools } = await import("./computer-use-XDOGP2KA.js");
151130
+ const { registerComputerUseTools } = await import("./computer-use-GTOP2CVH.js");
151063
151131
  await registerComputerUseTools(registerLazy, this);
151064
151132
  }
151065
151133
  await registerLazy(ToolNames.MONITOR, async () => {
151066
- const { MonitorTool } = await import("./monitor-NYJPAWVP.js");
151134
+ const { MonitorTool } = await import("./monitor-QHHJIKGL.js");
151067
151135
  return new MonitorTool(this);
151068
151136
  });
151069
151137
  if (this.pendingMcpBudgetCallback) {