@qwen-code/qwen-code 0.19.2 → 0.19.3-nightly.20260701.a974594d7

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 (291) hide show
  1. package/bundled/extension-creator/SKILL.md +357 -0
  2. package/bundled/loop/SKILL.md +34 -10
  3. package/bundled/loop/SKILL.test.ts +52 -0
  4. package/bundled/loop/autonomous-loop.test.ts +59 -0
  5. package/bundled/loop/autonomous-loop.ts +102 -0
  6. package/bundled/loop/loop-task-file.test.ts +1064 -0
  7. package/bundled/loop/loop-task-file.ts +404 -0
  8. package/bundled/loop/loop-tick-resolver.test.ts +864 -0
  9. package/bundled/loop/loop-tick-resolver.ts +416 -0
  10. package/bundled/qc-helper/SKILL.md +26 -19
  11. package/bundled/qc-helper/docs/configuration/auth.md +11 -11
  12. package/bundled/qc-helper/docs/configuration/model-providers.md +13 -13
  13. package/bundled/qc-helper/docs/configuration/settings.md +77 -75
  14. package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
  15. package/bundled/qc-helper/docs/features/commands.md +108 -77
  16. package/bundled/qc-helper/docs/features/hooks.md +6 -1
  17. package/bundled/qc-helper/docs/features/memory.md +53 -1
  18. package/bundled/qc-helper/docs/features/status-line.md +3 -3
  19. package/bundled/qc-helper/docs/ide-integration/ide-integration.md +4 -4
  20. package/bundled/qc-helper/docs/qwen-serve.md +24 -2
  21. package/bundled/qc-helper/docs/support/tos-privacy.md +16 -3
  22. package/bundled/qc-helper/docs/support/troubleshooting.md +6 -0
  23. package/chunks/{MaxSizedBox-7RERNLFK.js → MaxSizedBox-UZHJ73JB.js} +29 -27
  24. package/chunks/{StandaloneSessionPicker-S22XBSN6.js → StandaloneSessionPicker-GGUIZWCE.js} +42 -37
  25. package/chunks/{acpAgent-4MCETHF2.js → acpAgent-QYZFICEZ.js} +1292 -332
  26. package/chunks/{agent-K3ENVYSB.js → agent-2EN7YNSW.js} +24 -23
  27. package/chunks/{agent-headless-HO3V3A3A.js → agent-headless-SLTEZ5LV.js} +24 -23
  28. package/chunks/{anthropicContentGenerator-E3TQ5XJJ.js → anthropicContentGenerator-CA3JTAMO.js} +33 -12
  29. package/chunks/{artifact-tool-QA4KRO3B.js → artifact-tool-RM7WINJO.js} +3 -3
  30. package/chunks/{askUserQuestion-HMWXW6VN.js → askUserQuestion-J3P6QAJ7.js} +2 -2
  31. package/chunks/{bridge-4LV2HBH2.js → bridge-HZVAUTMX.js} +29 -28
  32. package/chunks/{ca-7WC7ELX6.js → ca-RYOETBUW.js} +10 -9
  33. package/chunks/{chunk-JXQ23SNT.js → chunk-2JKEQWDZ.js} +623 -78
  34. package/chunks/chunk-32MCHZQC.js +73 -0
  35. package/chunks/{chunk-PXFFKNCO.js → chunk-35FH347N.js} +5308 -2500
  36. package/chunks/{chunk-5JZLXFPD.js → chunk-3O2BJMFW.js} +11 -11
  37. package/chunks/{chunk-2JD55C6G.js → chunk-3TK7FSCP.js} +2 -2
  38. package/chunks/{chunk-USGMPVOY.js → chunk-4722VFFU.js} +19 -10
  39. package/chunks/chunk-6FIWYVN4.js +4932 -0
  40. package/chunks/{chunk-I2RFAW6Q.js → chunk-7SP275SH.js} +7 -5
  41. package/chunks/{chunk-5R4SBCX6.js → chunk-AIBPG5MB.js} +3 -3
  42. package/chunks/{chunk-C4K3FEQ2.js → chunk-AVQDCKNF.js} +124 -21
  43. package/chunks/{chunk-OTBK43JR.js → chunk-B236XPGF.js} +1 -1
  44. package/chunks/{chunk-WA5OJGFL.js → chunk-B5MPZI4K.js} +458 -125
  45. package/chunks/{chunk-5DWXLGOM.js → chunk-BJBWRCSK.js} +1 -1
  46. package/chunks/{chunk-4W4T77MO.js → chunk-BLAE2TCO.js} +109 -6
  47. package/chunks/chunk-BMFMJINR.js +45 -0
  48. package/chunks/{chunk-T2VDEFUU.js → chunk-BZHLWC6T.js} +2 -2
  49. package/chunks/{chunk-XU5P23GN.js → chunk-CA4ML3VH.js} +3 -3
  50. package/chunks/{chunk-WGAEWQTF.js → chunk-DBR7PF4B.js} +1 -2
  51. package/chunks/{chunk-S566HKUS.js → chunk-DHXWNSJA.js} +15 -1
  52. package/chunks/{chunk-LLFFKXZZ.js → chunk-DJ25MIU2.js} +167 -43
  53. package/chunks/{chunk-KBXLIVWQ.js → chunk-DX3TKXNT.js} +2 -2
  54. package/chunks/{chunk-OIC6S73E.js → chunk-E5I6YSNO.js} +1 -1
  55. package/chunks/{chunk-TXVGVZYR.js → chunk-ESVSWG6Z.js} +3 -3
  56. package/chunks/{chunk-EX4W6ZYG.js → chunk-EUURTJY7.js} +1 -1
  57. package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
  58. package/chunks/{chunk-F6XNTYNE.js → chunk-FQDMX5IL.js} +30 -307
  59. package/chunks/{chunk-3QFE4OTE.js → chunk-FR3II765.js} +4 -4
  60. package/chunks/{chunk-VYFMN7C6.js → chunk-FV4SQ54H.js} +382 -55
  61. package/chunks/{chunk-ZD3NW5KL.js → chunk-FZY7NH37.js} +63 -9
  62. package/chunks/{chunk-CI5O6SQL.js → chunk-G525INVW.js} +4 -4
  63. package/chunks/{chunk-CGOMICBE.js → chunk-GDIG7TMG.js} +34 -1
  64. package/chunks/{chunk-R2BXK7SX.js → chunk-GHOTR7HL.js} +6 -1
  65. package/chunks/{chunk-TZM5JIAX.js → chunk-GZKQ36JS.js} +10 -7
  66. package/chunks/{chunk-BS64PXY3.js → chunk-HIYUAXBG.js} +1 -1
  67. package/chunks/{chunk-TMBPDHXD.js → chunk-HTWHAN44.js} +1 -1
  68. package/chunks/{chunk-EL5IHQON.js → chunk-HUGAEYZR.js} +6 -27
  69. package/chunks/{chunk-2BIF2NVV.js → chunk-HWG4XLD7.js} +2 -2
  70. package/chunks/{chunk-I5T6PIBQ.js → chunk-I4MXURND.js} +1076 -954
  71. package/chunks/{chunk-JTYRZODB.js → chunk-IBEM64M4.js} +39 -11
  72. package/chunks/{chunk-XKBP7M7A.js → chunk-IKO44NAT.js} +149 -31
  73. package/chunks/{chunk-2BAQ3ACS.js → chunk-JERW36RG.js} +404 -4
  74. package/chunks/{chunk-TOEGRAVX.js → chunk-JV7A66DR.js} +28 -16
  75. package/chunks/{chunk-3RJ3ZPPR.js → chunk-KKQWC6WS.js} +7 -7
  76. package/chunks/{chunk-EXMX5YHG.js → chunk-KXVVXAAC.js} +1 -1
  77. package/chunks/{chunk-Z7XXFPGP.js → chunk-LDWTYE33.js} +1 -1
  78. package/chunks/{chunk-X6EDWN44.js → chunk-LWGLBVWA.js} +1 -1
  79. package/chunks/{chunk-NYOHZYHM.js → chunk-LXEW6BHF.js} +45 -3
  80. package/chunks/{chunk-BGUDAULQ.js → chunk-LXGWLOCM.js} +5 -5
  81. package/chunks/{chunk-ZUAXI2OA.js → chunk-M2U5NM24.js} +188 -11366
  82. package/chunks/{chunk-BNXANYLH.js → chunk-MOUXUCXQ.js} +81 -1
  83. package/chunks/{chunk-FPACXT7T.js → chunk-MTJVHQDP.js} +534 -164
  84. package/chunks/{chunk-UAARJR2G.js → chunk-N4V4VBP6.js} +2 -2
  85. package/chunks/chunk-NIOPRZNN.js +27 -0
  86. package/chunks/{chunk-2TJ3YN6Q.js → chunk-NOYV2NXI.js} +517 -490
  87. package/chunks/{chunk-PRYMDRBV.js → chunk-NPQWQYU6.js} +1 -1
  88. package/chunks/{chunk-J6AW7O5D.js → chunk-NVTRORSK.js} +2 -2
  89. package/chunks/{chunk-PF523XJX.js → chunk-OE5J6UA7.js} +1 -1
  90. package/chunks/{chunk-RS4HRC75.js → chunk-OEY3YAL2.js} +99 -8
  91. package/chunks/{chunk-R36VMVEP.js → chunk-PLQTLKMR.js} +5 -5
  92. package/chunks/{chunk-UN3C6GOR.js → chunk-PPFWEV7G.js} +10 -108
  93. package/chunks/chunk-Q3JOGB4U.js +481 -0
  94. package/chunks/{chunk-HG6YKEBI.js → chunk-Q7TDHJ2G.js} +192 -30
  95. package/chunks/{chunk-EW6C27XX.js → chunk-QHHNFG22.js} +9 -3
  96. package/chunks/chunk-QYUE6W3T.js +123 -0
  97. package/chunks/{chunk-GZCJS5WH.js → chunk-SJBIFVD2.js} +2 -2
  98. package/chunks/{chunk-3UALQ56H.js → chunk-T42ACHFI.js} +1 -1
  99. package/chunks/chunk-T44AF4I6.js +690 -0
  100. package/chunks/{chunk-DBZUXSSV.js → chunk-TMILTLP3.js} +6 -6
  101. package/chunks/{chunk-EEEZIVFJ.js → chunk-TOAUDIS7.js} +1 -1
  102. package/chunks/chunk-UAKXW3DN.js +30 -0
  103. package/chunks/{chunk-VQRYPFCV.js → chunk-V5YJAUHW.js} +10 -460
  104. package/chunks/{chunk-D5E5TMYH.js → chunk-VHRREANT.js} +16 -2
  105. package/chunks/{chunk-5RVSM6NW.js → chunk-VN4CKYUW.js} +1 -1
  106. package/chunks/chunk-VXGPYF7U.js +37 -0
  107. package/chunks/{chunk-UAARVVBI.js → chunk-WGY3GIPP.js} +1 -1
  108. package/chunks/{chunk-GYZQA2FO.js → chunk-WJAY4WXR.js} +1 -1
  109. package/chunks/chunk-XKSCTXPK.js +167 -0
  110. package/chunks/chunk-YCEHOJZJ.js +840 -0
  111. package/chunks/{chunk-BG4BIP7F.js → chunk-YCRTJYSQ.js} +4 -2
  112. package/chunks/{chunk-CGEGHF2C.js → chunk-YPCPZSZB.js} +1 -1
  113. package/chunks/chunk-YTFBURQD.js +313 -0
  114. package/chunks/{chunk-HGNSRCRB.js → chunk-YXK4GPYO.js} +1 -1
  115. package/chunks/{chunk-OQHQHJRK.js → chunk-Z34RYLRO.js} +151 -4775
  116. package/chunks/chunk-ZGSV5ORL.js +11273 -0
  117. package/chunks/{computer-use-6BBRNT6S.js → computer-use-FCNWHVPW.js} +103 -49
  118. package/chunks/{contextCommand-UJAJ6N57.js → contextCommand-FVFMZZEU.js} +26 -25
  119. package/chunks/{cron-create-4KQE6YLH.js → cron-create-IY5NMIHQ.js} +4 -4
  120. package/chunks/{cron-delete-THME66UP.js → cron-delete-OLNEQWKO.js} +6 -6
  121. package/chunks/{cron-list-7A54SJ5N.js → cron-list-YAUAUV24.js} +5 -5
  122. package/chunks/{daemon-status-provider-CSL3BUOY.js → daemon-status-provider-42JEXENZ.js} +32 -32
  123. package/chunks/{de-ACHALDED.js → de-HB5NJXGB.js} +10 -9
  124. package/chunks/{dist-BD27IA3L.js → dist-4FCNM6KJ.js} +2 -2
  125. package/chunks/{dist-OD2FY543.js → dist-K4XZILIO.js} +1 -1
  126. package/chunks/{dist-BOOH5JWN.js → dist-SU6L7ZNJ.js} +114 -9
  127. package/chunks/{dist-QHJRBCMP.js → dist-UKPWQJCL.js} +44 -2
  128. package/chunks/{dist-QFFZWACU.js → dist-VD7HXTML.js} +20 -9
  129. package/chunks/{earlyInputCapture-X6KMCSHD.js → earlyInputCapture-FFFEC6P4.js} +25 -24
  130. package/chunks/{edit-7J6WXARF.js → edit-32ILSGZY.js} +72 -30
  131. package/chunks/{en-NCUBOJOY.js → en-U3LWGSFX.js} +19 -9
  132. package/chunks/{enter-worktree-KULCKJPJ.js → enter-worktree-XWZKIN6A.js} +24 -23
  133. package/chunks/{enterPlanMode-H2CIOLMH.js → enterPlanMode-LPFFY7BJ.js} +24 -23
  134. package/chunks/{errors-6G2JYR54.js → errors-UXBPYPI2.js} +26 -25
  135. package/chunks/{exit-worktree-ECBWBVC5.js → exit-worktree-IBS4UIU7.js} +24 -23
  136. package/chunks/{exitPlanMode-DQV56GTW.js → exitPlanMode-JA72YHII.js} +24 -23
  137. package/chunks/{fast-path-35JJFS3C.js → fast-path-7UU67Y2W.js} +30 -13
  138. package/chunks/{fast-path-settings-TSVI53EB.js → fast-path-settings-UQLRFDQP.js} +3 -2
  139. package/chunks/{fr-GVKZ27MF.js → fr-XY3NQFCM.js} +10 -9
  140. package/chunks/{gemini-NDTG7WAX.js → gemini-GMVKJNMX.js} +211 -105
  141. package/chunks/{geminiContentGenerator-XTG6SFLA.js → geminiContentGenerator-7NIFF2L4.js} +4 -4
  142. package/chunks/{glob-SJ2JBZK4.js → glob-4NJCW5HI.js} +24 -23
  143. package/chunks/{grep-BRMWFEWR.js → grep-PAIMLQEL.js} +24 -23
  144. package/chunks/{initializer-P5AXF7PV.js → initializer-R6KU4VYM.js} +31 -28
  145. package/chunks/{ja-FKZ2WZ4D.js → ja-J7YAG7SA.js} +10 -9
  146. package/chunks/{keychain-token-storage-CSYMNRPP.js → keychain-token-storage-GPAKRDKQ.js} +2 -2
  147. package/chunks/{list-6COK34BP.js → list-H7LXAO64.js} +32 -29
  148. package/chunks/{loadedSettingsAdapter-XIUTN245.js → loadedSettingsAdapter-H27JMTLU.js} +30 -27
  149. package/chunks/{loop-wakeup-33GPXJLA.js → loop-wakeup-Y3OIRQFM.js} +7 -7
  150. package/chunks/{ls-BYQY7RVV.js → ls-TVJEYS7O.js} +4 -4
  151. package/chunks/{lsp-X54RO4IV.js → lsp-JZSDVR3F.js} +2 -2
  152. package/chunks/{monitor-DH7KFSJV.js → monitor-JSIHDPXP.js} +24 -23
  153. package/chunks/nonInteractiveCli-Y4CHOETG.js +100 -0
  154. package/chunks/{notebook-edit-D4R4ZLMA.js → notebook-edit-SHRNL2UM.js} +52 -23
  155. package/chunks/{openaiContentGenerator-F74IPQ6E.js → openaiContentGenerator-ORZZ7VFO.js} +13 -12
  156. package/chunks/{pt-SY5NCFGR.js → pt-6RTAA6SS.js} +10 -9
  157. package/chunks/{qwenContentGenerator-ATTK5P4D.js → qwenContentGenerator-H643PL2G.js} +26 -25
  158. package/chunks/{qwenOAuth2-K4AASPCV.js → qwenOAuth2-OI2B7PES.js} +5 -4
  159. package/chunks/{read-file-767G23OY.js → read-file-5PRNPTTY.js} +8 -8
  160. package/chunks/{read-mcp-resource-I5HCZJ6X.js → read-mcp-resource-QTXGKTEV.js} +2 -2
  161. package/chunks/{ripGrep-4OMMGSWX.js → ripGrep-JIKZMABJ.js} +24 -23
  162. package/chunks/{ru-FWNXJG4F.js → ru-AUBGJ2C4.js} +10 -9
  163. package/chunks/{run-qwen-serve-REKSTYRA.js → run-qwen-serve-PQV7QOHZ.js} +284 -52
  164. package/chunks/{scheduler-UNTFDQLG.js → scheduler-OS3R5MGU.js} +24 -23
  165. package/chunks/{send-message-2DAFXEYP.js → send-message-DKGHWSTF.js} +2 -2
  166. package/chunks/{serve-KZ56QB5S.js → serve-LVYZDKCZ.js} +31 -29
  167. package/chunks/{server-BV5TZUMU.js → server-P4YIH35I.js} +11458 -8447
  168. package/chunks/{session-OIBXFSGD.js → session-DE4TZBKH.js} +195 -58
  169. package/chunks/{settings-WJTCBIRA.js → settings-DFTYMJYF.js} +30 -27
  170. package/chunks/{shell-WC52IBHW.js → shell-3GNQLNV7.js} +24 -23
  171. package/chunks/{skill-U7F7JR4M.js → skill-NCNG4KKZ.js} +38 -11
  172. package/chunks/{spawnChannel-EI2E5BCW.js → spawnChannel-DHRIMDVL.js} +26 -25
  173. package/chunks/{src-4F6FBZFI.js → src-PNZYGM3R.js} +104 -28
  174. package/chunks/{startInteractiveUI-SFRVB3CE.js → startInteractiveUI-P6GZBFQW.js} +2817 -2500
  175. package/chunks/{syntheticOutput-PPS3HDVA.js → syntheticOutput-X7L5HWLN.js} +3 -3
  176. package/chunks/{task-create-OUYCA553.js → task-create-AWEUI4GI.js} +6 -6
  177. package/chunks/{task-list-WAX7I2IA.js → task-list-KZ3VJLDU.js} +5 -5
  178. package/chunks/{task-stop-CAIL6FNH.js → task-stop-GUNOZKJ5.js} +2 -2
  179. package/chunks/{task-update-AHEO5OUT.js → task-update-Y56GP6DU.js} +6 -6
  180. package/chunks/{team-create-3WC7CIIW.js → team-create-6JMW3KQK.js} +24 -23
  181. package/chunks/{team-delete-HGHFG23B.js → team-delete-6AFRGDJY.js} +5 -5
  182. package/chunks/{theme-manager-DICFCT3P.js → theme-manager-FEHQO22G.js} +25 -24
  183. package/chunks/{todoWrite-IFBMN3FH.js → todoWrite-JRS6NOEU.js} +4 -4
  184. package/chunks/{tool-search-L5K7HLER.js → tool-search-IXAEKS7J.js} +101 -16
  185. package/chunks/trustedFolders-SJRXNHZE.js +76 -0
  186. package/chunks/types-QX5C3CHJ.js +12 -0
  187. package/chunks/{validateNonInterActiveAuth-GCH4Z6KI.js → validateNonInterActiveAuth-HCH7OBDH.js} +56 -51
  188. package/chunks/{web-fetch-B5IIQ5TT.js → web-fetch-RELNL37A.js} +29 -15
  189. package/chunks/{workflow-OB3AND7I.js → workflow-M2COBI7R.js} +38 -32
  190. package/chunks/{workspace-providers-status-ZIR5EPOO.js → workspace-providers-status-GOCWYDMK.js} +32 -29
  191. package/chunks/workspace-service-34C7SUBU.js +75 -0
  192. package/chunks/{write-file-SEXBNDZM.js → write-file-E52WRXZL.js} +67 -31
  193. package/chunks/{zh-RBEGQVQT.js → zh-F5T4WWZO.js} +19 -9
  194. package/chunks/{zh-TW-QGAVRXT3.js → zh-TW-LKLBTZHE.js} +19 -9
  195. package/cli-entry.js +20 -9
  196. package/cli.js +6 -6
  197. package/locales/ca.js +15 -13
  198. package/locales/de.js +15 -13
  199. package/locales/en.js +31 -13
  200. package/locales/fr.js +16 -14
  201. package/locales/ja.js +15 -14
  202. package/locales/pt.js +15 -13
  203. package/locales/ru.js +15 -13
  204. package/locales/zh-TW.js +28 -12
  205. package/locales/zh.js +28 -12
  206. package/node_modules/@qwen-code/audio-capture/dist/index.d.ts +35 -0
  207. package/node_modules/@qwen-code/audio-capture/dist/index.js +48 -0
  208. package/node_modules/@qwen-code/audio-capture/dist/index.js.map +1 -0
  209. package/node_modules/@qwen-code/audio-capture/dist/platform.d.ts +7 -0
  210. package/node_modules/@qwen-code/audio-capture/dist/platform.js +18 -0
  211. package/node_modules/@qwen-code/audio-capture/dist/platform.js.map +1 -0
  212. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/LICENSE +21 -0
  213. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/README.md +58 -0
  214. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/SECURITY.md +5 -0
  215. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/bin.js +84 -0
  216. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/build-test.js +19 -0
  217. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/index.js +6 -0
  218. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/node-gyp-build.js +207 -0
  219. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/optional.js +7 -0
  220. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/package.json +43 -0
  221. package/node_modules/@qwen-code/audio-capture/package.json +30 -0
  222. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  223. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  224. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-arm64/@qwen-code+audio-capture.node +0 -0
  225. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-x64/@qwen-code+audio-capture.node +0 -0
  226. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  227. package/package.json +18 -6
  228. package/patches/chrome-devtools-mcp+1.4.0.patch +31 -0
  229. package/postinstall.js +50 -0
  230. package/web-shell/assets/{arc-D_ae_Y9k.js → arc-C2DILvUl.js} +1 -1
  231. package/web-shell/assets/{architectureDiagram-3BPJPVTR-BMLRjppa.js → architectureDiagram-3BPJPVTR-b8gZ2cNw.js} +1 -1
  232. package/web-shell/assets/{blockDiagram-GPEHLZMM-qVDQC8KL.js → blockDiagram-GPEHLZMM-BuRpghMj.js} +1 -1
  233. package/web-shell/assets/{c4Diagram-AAUBKEIU-CxWS6MBd.js → c4Diagram-AAUBKEIU-2ItdhFmE.js} +1 -1
  234. package/web-shell/assets/channel-eRvn2UA3.js +1 -0
  235. package/web-shell/assets/{chunk-2J33WTMH-BtNuY5Yp.js → chunk-2J33WTMH-B1QXa0q3.js} +1 -1
  236. package/web-shell/assets/{chunk-4BX2VUAB-BU-x368d.js → chunk-4BX2VUAB-DXfhKlNq.js} +1 -1
  237. package/web-shell/assets/{chunk-55IACEB6-DRgTLvBu.js → chunk-55IACEB6-ClSNjxLo.js} +1 -1
  238. package/web-shell/assets/{chunk-727SXJPM-D2aElv7q.js → chunk-727SXJPM-Dsh2wisB.js} +1 -1
  239. package/web-shell/assets/{chunk-AQP2D5EJ-BwHCMRQ0.js → chunk-AQP2D5EJ-C1TkY5AR.js} +1 -1
  240. package/web-shell/assets/{chunk-FMBD7UC4-BMyPH-ku.js → chunk-FMBD7UC4-CGtN9XR6.js} +1 -1
  241. package/web-shell/assets/{chunk-ND2GUHAM-BNKTstUf.js → chunk-ND2GUHAM-BHiPi1SS.js} +1 -1
  242. package/web-shell/assets/{chunk-QZHKN3VN-gD3vsFId.js → chunk-QZHKN3VN-CzG3I5o1.js} +1 -1
  243. package/web-shell/assets/classDiagram-4FO5ZUOK-YZNwy1rx.js +1 -0
  244. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-YZNwy1rx.js +1 -0
  245. package/web-shell/assets/{cose-bilkent-S5V4N54A-BG9FAsXE.js → cose-bilkent-S5V4N54A-EgrIoH_K.js} +1 -1
  246. package/web-shell/assets/{dagre-BM42HDAG-Cy1sR7om.js → dagre-BM42HDAG-BUnpdX8S.js} +1 -1
  247. package/web-shell/assets/default-aEtf0G7-.svg +1 -0
  248. package/web-shell/assets/{diagram-2AECGRRQ-Bxi1I_Vu.js → diagram-2AECGRRQ-BlLUCVYu.js} +1 -1
  249. package/web-shell/assets/{diagram-5GNKFQAL-BGCJjO6y.js → diagram-5GNKFQAL-FG-enmjQ.js} +1 -1
  250. package/web-shell/assets/{diagram-KO2AKTUF-CMTeLXp7.js → diagram-KO2AKTUF-BlzmTONk.js} +1 -1
  251. package/web-shell/assets/{diagram-LMA3HP47-BN1wyAGh.js → diagram-LMA3HP47-CoBQ8mIx.js} +1 -1
  252. package/web-shell/assets/{diagram-OG6HWLK6-UYSG_zcp.js → diagram-OG6HWLK6-DvxV6sX8.js} +1 -1
  253. package/web-shell/assets/{erDiagram-TEJ5UH35-DqXL08lw.js → erDiagram-TEJ5UH35-Jq1tpAoj.js} +1 -1
  254. package/web-shell/assets/{flowDiagram-I6XJVG4X-BPJ9SFji.js → flowDiagram-I6XJVG4X-CbtYOry5.js} +1 -1
  255. package/web-shell/assets/{ganttDiagram-6RSMTGT7-BEd9Pnms.js → ganttDiagram-6RSMTGT7-ZEn2VEKR.js} +1 -1
  256. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DrNRH3oi.js → gitGraphDiagram-PVQCEYII-BZh-LkhJ.js} +1 -1
  257. package/web-shell/assets/index-5FhE0ORO.css +5 -0
  258. package/web-shell/assets/index-CDTGmqVm.js +720 -0
  259. package/web-shell/assets/{infoDiagram-5YYISTIA-CFYBrkVI.js → infoDiagram-5YYISTIA-B9HuZygK.js} +1 -1
  260. package/web-shell/assets/insert-DmRbh9Rv.svg +1 -0
  261. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Dxsddth7.js → ishikawaDiagram-YF4QCWOH-D76cNpYG.js} +1 -1
  262. package/web-shell/assets/{journeyDiagram-JHISSGLW-DxaDK80t.js → journeyDiagram-JHISSGLW-6bGo7P1t.js} +1 -1
  263. package/web-shell/assets/{kanban-definition-UN3LZRKU-Q0jQCOct.js → kanban-definition-UN3LZRKU-DuYyRBvB.js} +1 -1
  264. package/web-shell/assets/{linear-DGGM2kcP.js → linear-CpdSW1BC.js} +1 -1
  265. package/web-shell/assets/{mermaid.core-ByoxnWut.js → mermaid.core-s5xbZMMj.js} +5 -5
  266. package/web-shell/assets/{mindmap-definition-RKZ34NQL-C0ZseHsi.js → mindmap-definition-RKZ34NQL-go01fZ2y.js} +1 -1
  267. package/web-shell/assets/{pieDiagram-4H26LBE5-MQXNhl5A.js → pieDiagram-4H26LBE5-BfuZiEHO.js} +1 -1
  268. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DIR4ee2A.js → quadrantDiagram-W4KKPZXB-DsoINqV6.js} +1 -1
  269. package/web-shell/assets/queue-DWpnpFgW.svg +1 -0
  270. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BTR0UdYQ.js → requirementDiagram-4Y6WPE33-B7FU4LiU.js} +1 -1
  271. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-sfnhMELN.js → sankeyDiagram-5OEKKPKP-BEDjFnGB.js} +1 -1
  272. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DXczHOHH.js → sequenceDiagram-3UESZ5HK-gzmmL5tK.js} +1 -1
  273. package/web-shell/assets/{stateDiagram-AJRCARHV-DdE_KQFH.js → stateDiagram-AJRCARHV-BtHD4IN_.js} +1 -1
  274. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DFy6gLDd.js +1 -0
  275. package/web-shell/assets/{timeline-definition-PNZ67QCA-DIc61uE8.js → timeline-definition-PNZ67QCA-T_8gmMCf.js} +1 -1
  276. package/web-shell/assets/{vennDiagram-CIIHVFJN-BF7ODmxB.js → vennDiagram-CIIHVFJN-DdjuqnjO.js} +1 -1
  277. package/web-shell/assets/{wardley-L42UT6IY-3pc1MEaw.js → wardley-L42UT6IY-Cgtrvb37.js} +1 -1
  278. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-9jnPcZuP.js → wardleyDiagram-YWT4CUSO-BW3f3-yW.js} +1 -1
  279. package/web-shell/assets/{xychartDiagram-2RQKCTM6-DcthaZK6.js → xychartDiagram-2RQKCTM6-BUS9IKkc.js} +1 -1
  280. package/web-shell/index.html +2 -2
  281. package/chunks/chunk-B6HQGTYR.js +0 -410
  282. package/chunks/chunk-RKIZXJMB.js +0 -13
  283. package/chunks/headlessSafetyWarnings-LJ6FJX77.js +0 -57
  284. package/chunks/nonInteractiveCli-7575LBXP.js +0 -91
  285. package/chunks/workspace-service-OM5D4OI2.js +0 -60
  286. package/web-shell/assets/channel-DYPNiTww.js +0 -1
  287. package/web-shell/assets/classDiagram-4FO5ZUOK-p_g25Tni.js +0 -1
  288. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-p_g25Tni.js +0 -1
  289. package/web-shell/assets/index-CpOXWDPh.js +0 -714
  290. package/web-shell/assets/index-oVK7qhre.css +0 -5
  291. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BHUSEndU.js +0 -1
@@ -3,48 +3,55 @@
3
3
  import {
4
4
  handleAtCommand,
5
5
  resolveAtCommandQuery
6
- } from "./chunk-B6HQGTYR.js";
6
+ } from "./chunk-YCEHOJZJ.js";
7
7
  import {
8
8
  isAtCommand,
9
9
  isBtwCommand,
10
10
  isSlashCommand,
11
11
  normalizePartList,
12
12
  recordGoalStatusItem
13
- } from "./chunk-2TJ3YN6Q.js";
13
+ } from "./chunk-NOYV2NXI.js";
14
14
  import {
15
15
  SHELL_COMMAND_NAME,
16
16
  useSessionStats
17
- } from "./chunk-4W4T77MO.js";
17
+ } from "./chunk-BLAE2TCO.js";
18
18
  import {
19
19
  require_react
20
20
  } from "./chunk-KYMBIKIW.js";
21
21
  import {
22
22
  themeManager
23
- } from "./chunk-TMBPDHXD.js";
23
+ } from "./chunk-HTWHAN44.js";
24
24
  import {
25
25
  formatMemoryUsage
26
26
  } from "./chunk-KHDZHZMH.js";
27
+ import {
28
+ isInlineModelOverrideAllowed
29
+ } from "./chunk-OEY3YAL2.js";
27
30
  import {
28
31
  t
29
- } from "./chunk-5JZLXFPD.js";
32
+ } from "./chunk-3O2BJMFW.js";
30
33
  import {
34
+ AutonomousLoopTickResolver,
31
35
  CoreToolScheduler,
32
36
  ShellExecutionService,
33
37
  activeGoalEquals,
34
38
  clearActiveGoal,
35
39
  compactToolResultDisplayForHistory,
36
40
  createDuplicateProviderToolCallResponse,
41
+ detectAutonomousSentinel,
42
+ findRepeatedDuplicateProviderToolCall,
37
43
  generateToolUseSummary,
38
44
  getActiveGoal,
39
45
  hasImageParts,
40
46
  isBinary,
47
+ markDuplicateProviderToolCallResponseSent,
41
48
  parseAndFormatApiError,
42
49
  promptIdContext,
43
50
  runVisionBridge,
44
51
  setActiveGoal,
45
52
  shouldRunVisionBridge,
46
53
  splitImageParts
47
- } from "./chunk-PXFFKNCO.js";
54
+ } from "./chunk-35FH347N.js";
48
55
  import {
49
56
  ApiCancelEvent,
50
57
  ConversationFinishedEvent,
@@ -54,17 +61,17 @@ import {
54
61
  logConversationFinishedEvent,
55
62
  logUserPrompt,
56
63
  logUserRetry
57
- } from "./chunk-WA5OJGFL.js";
64
+ } from "./chunk-B5MPZI4K.js";
58
65
  import {
59
66
  isAnyAutoMemPath
60
- } from "./chunk-BNXANYLH.js";
67
+ } from "./chunk-MOUXUCXQ.js";
61
68
  import {
62
69
  ToolNames
63
- } from "./chunk-TOEGRAVX.js";
70
+ } from "./chunk-JV7A66DR.js";
64
71
  import {
65
72
  getUnsupportedImageFormatWarning,
66
73
  isSupportedImageMimeType
67
- } from "./chunk-F6XNTYNE.js";
74
+ } from "./chunk-YTFBURQD.js";
68
75
  import {
69
76
  FinishReason
70
77
  } from "./chunk-55ZMG67I.js";
@@ -73,7 +80,7 @@ import {
73
80
  createDebugLogger,
74
81
  getErrorMessage,
75
82
  isNodeError
76
- } from "./chunk-C4K3FEQ2.js";
83
+ } from "./chunk-AVQDCKNF.js";
77
84
  import {
78
85
  init_esbuild_shims
79
86
  } from "./chunk-A4BMJM77.js";
@@ -742,34 +749,34 @@ import { promises as fs2 } from "node:fs";
742
749
  import path3 from "node:path";
743
750
  import process from "node:process";
744
751
  var debugLogger3 = createDebugLogger("GEMINI_STREAM");
752
+ function applyModelOverride(modelOverrideRef, inlineActiveRef, value, isInline) {
753
+ modelOverrideRef.current = value;
754
+ inlineActiveRef.current = isInline;
755
+ debugLogger3.debug(
756
+ `model override ${value === void 0 ? "cleared" : `set to ${value}`} (inline=${isInline})`
757
+ );
758
+ }
759
+ __name(applyModelOverride, "applyModelOverride");
760
+ function clearModelOverride(modelOverrideRef, inlineActiveRef) {
761
+ applyModelOverride(modelOverrideRef, inlineActiveRef, void 0, false);
762
+ }
763
+ __name(clearModelOverride, "clearModelOverride");
745
764
  var MID_TURN_AT_COMMAND_RESOLVE_TIMEOUT_MS = 1e4;
746
765
  var MID_TURN_AT_COMMAND_RESOLVE_TIMEOUT_MESSAGE = "Mid-turn @ command resolution timed out";
747
- var VISION_BRIDGE_TRANSCRIPT_NOTICE_LIMIT = 2048;
748
- var TERMINAL_CONTROL_CHARS = /[\u0000-\u0008\u000B-\u001F\u007F-\u009F]/g;
749
- function truncateVisionBridgeTranscript(transcript) {
750
- const safe = transcript.replace(TERMINAL_CONTROL_CHARS, "");
751
- if (safe.length <= VISION_BRIDGE_TRANSCRIPT_NOTICE_LIMIT) {
752
- return safe;
753
- }
754
- return `${safe.slice(0, VISION_BRIDGE_TRANSCRIPT_NOTICE_LIMIT).trimEnd()}
755
- [Transcript truncated]`;
756
- }
757
- __name(truncateVisionBridgeTranscript, "truncateVisionBridgeTranscript");
758
766
  function formatVisionBridgeNotice(result) {
759
767
  const modelName = result.modelId ?? "vision model";
760
768
  const target = result.modelEndpoint ? `${modelName} (${result.modelEndpoint})` : modelName;
761
769
  const egressNote = result.egressOccurred ? ` Your image and prompt/context were sent to ${target}.` : "";
762
770
  if (result.status === "failed") {
763
771
  const reason = result.egressOccurred ? "the vision model request failed" : "the vision bridge could not run";
764
- return `\u26A0 Vision bridge (${modelName}) failed: ${reason}.${egressNote} The image was not interpreted.`;
772
+ return `Vision bridge (${modelName}) failed: ${reason}.${egressNote} The image was not interpreted.`;
765
773
  }
766
774
  if (result.status === "skipped") {
767
- return `\u{1F50E} Vision bridge cancelled.${egressNote}`;
775
+ return `Vision bridge cancelled.${egressNote}`;
768
776
  }
769
777
  const omitted = result.omittedCount > 0 ? ` (${result.omittedCount} image(s) omitted)` : "";
770
- const header = `\u{1F50E} Converted ${result.convertedCount} image(s)${omitted} to text via ${target}. Your image and prompt/context were sent to that model.`;
771
- return result.transcript ? `${header}
772
- ${truncateVisionBridgeTranscript(result.transcript)}` : header;
778
+ const header = `Converted ${result.convertedCount} image(s)${omitted} to text via ${target}. Your image and prompt/context were sent to that model.`;
779
+ return header;
773
780
  }
774
781
  __name(formatVisionBridgeNotice, "formatVisionBridgeNotice");
775
782
  function extractLastAssistantText(history) {
@@ -955,7 +962,11 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
955
962
  const processedMemoryToolsRef = (0, import_react5.useRef)(/* @__PURE__ */ new Set());
956
963
  const submitPromptOnCompleteRef = (0, import_react5.useRef)(null);
957
964
  const modelOverrideRef = (0, import_react5.useRef)(void 0);
965
+ const inlineModelOverrideActiveRef = (0, import_react5.useRef)(false);
958
966
  const handledProviderToolCallIdsRef = (0, import_react5.useRef)(/* @__PURE__ */ new Set());
967
+ const duplicateProviderToolCallResponseIdsRef = (0, import_react5.useRef)(
968
+ /* @__PURE__ */ new Set()
969
+ );
959
970
  const pendingDuplicateToolResponsesRef = (0, import_react5.useRef)([]);
960
971
  const immediateDuplicateToolResponsesRef = (0, import_react5.useRef)(null);
961
972
  const streamingResponseLengthRef = (0, import_react5.useRef)(0);
@@ -1129,6 +1140,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
1129
1140
  turnCancelledRef.current = true;
1130
1141
  isSubmittingQueryRef.current = false;
1131
1142
  abortControllerRef.current?.abort();
1143
+ const loopWakeupsCancelled = config.getCronScheduler()?.cancelAllWakeups() ?? 0;
1132
1144
  for (const ac of auxiliaryAbortRefsRef.current) {
1133
1145
  ac.abort();
1134
1146
  }
@@ -1136,9 +1148,10 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
1136
1148
  config.getArenaAgentClient()?.reportCancelled();
1137
1149
  const prompt_id = config.getSessionId() + "########" + getPromptCount();
1138
1150
  const cancellationEvent = new ApiCancelEvent(
1139
- config.getModel(),
1151
+ modelOverrideRef.current ?? config.getModel(),
1140
1152
  prompt_id,
1141
- config.getContentGeneratorConfig()?.authType
1153
+ config.getContentGeneratorConfig()?.authType,
1154
+ loopWakeupsCancelled > 0 ? loopWakeupsCancelled : void 0
1142
1155
  );
1143
1156
  logApiCancel(config, cancellationEvent);
1144
1157
  if (pendingHistoryItemRef.current) {
@@ -1151,6 +1164,15 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
1151
1164
  },
1152
1165
  Date.now()
1153
1166
  );
1167
+ if (loopWakeupsCancelled > 0) {
1168
+ addItem(
1169
+ {
1170
+ type: "info" /* INFO */,
1171
+ text: `Stopped the self-paced loop: cancelled ${loopWakeupsCancelled} pending wakeup${loopWakeupsCancelled === 1 ? "" : "s"}.`
1172
+ },
1173
+ Date.now()
1174
+ );
1175
+ }
1154
1176
  setPendingHistoryItem(null);
1155
1177
  clearRetryCountdown();
1156
1178
  try {
@@ -1188,7 +1210,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
1188
1210
  if (bridgeResult.status !== "skipped" || bridgeResult.egressOccurred) {
1189
1211
  addItem(
1190
1212
  {
1191
- type: bridgeResult.status === "failed" ? "error" /* ERROR */ : "info" /* INFO */,
1213
+ type: bridgeResult.status === "failed" ? "error" /* ERROR */ : "vision_notice" /* VISION_NOTICE */,
1192
1214
  text: formatVisionBridgeNotice(bridgeResult)
1193
1215
  },
1194
1216
  timestamp
@@ -1249,6 +1271,23 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
1249
1271
  case "submit_prompt": {
1250
1272
  localQueryToSendToGemini = slashCommandResult.content;
1251
1273
  submitPromptOnCompleteRef.current = slashCommandResult.onComplete ?? null;
1274
+ if (slashCommandResult.modelOverride) {
1275
+ if (isInlineModelOverrideAllowed(
1276
+ config,
1277
+ slashCommandResult.modelOverride
1278
+ )) {
1279
+ applyModelOverride(
1280
+ modelOverrideRef,
1281
+ inlineModelOverrideActiveRef,
1282
+ slashCommandResult.modelOverride,
1283
+ true
1284
+ );
1285
+ } else {
1286
+ debugLogger3.warn(
1287
+ `ignoring model override '${slashCommandResult.modelOverride}': not a model on the active provider`
1288
+ );
1289
+ }
1290
+ }
1252
1291
  return {
1253
1292
  queryToSend: localQueryToSendToGemini,
1254
1293
  shouldProceed: true
@@ -1427,6 +1466,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
1427
1466
  if (newThoughtBuffer.trim().length === 0) {
1428
1467
  return newThoughtBuffer;
1429
1468
  }
1469
+ streamingResponseLengthRef.current += thoughtText.length;
1430
1470
  const startingNewThought = currentThoughtBuffer.trim().length === 0;
1431
1471
  const description = startingNewThought ? stripLeadingBlankLines(newThoughtBuffer) : thoughtText;
1432
1472
  if (startingNewThought) {
@@ -1619,7 +1659,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
1619
1659
  addItem(
1620
1660
  {
1621
1661
  type: "info",
1622
- text: `\u26A0\uFE0F ${message}`
1662
+ text: `\u26A0 ${message}`
1623
1663
  },
1624
1664
  userMessageTimestamp
1625
1665
  );
@@ -1630,13 +1670,16 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
1630
1670
  },
1631
1671
  [addItem, clearRetryCountdown]
1632
1672
  );
1673
+ const autonomousLoopTickResolverRef = (0, import_react5.useRef)(null);
1633
1674
  const handleChatCompressionEvent = (0, import_react5.useCallback)(
1634
1675
  (eventValue, userMessageTimestamp) => {
1676
+ autonomousLoopTickResolverRef.current?.resetCache();
1635
1677
  if (pendingHistoryItemRef.current) {
1636
1678
  commitItem(pendingHistoryItemRef.current, userMessageTimestamp);
1637
1679
  setPendingHistoryItem(null);
1638
1680
  }
1639
- const reasonClause = eventValue?.triggerReason === "image_overflow" ? `accumulated enough tool screenshots to trigger compaction for ${config.getModel()}` : `approached the input token limit for ${config.getModel()}`;
1681
+ const activeModel = modelOverrideRef.current ?? config.getModel();
1682
+ const reasonClause = eventValue?.triggerReason === "image_overflow" ? `accumulated enough tool screenshots to trigger compaction for ${activeModel}` : `approached the input token limit for ${activeModel}`;
1640
1683
  return addItem(
1641
1684
  {
1642
1685
  type: "info",
@@ -1661,9 +1704,9 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
1661
1704
  (value) => addItem(
1662
1705
  {
1663
1706
  type: "error",
1664
- text: `\u{1F6AB} Session token limit exceeded: ${value.currentTokens.toLocaleString()} tokens > ${value.limit.toLocaleString()} limit.
1707
+ text: `\u2717 Session token limit exceeded: ${value.currentTokens.toLocaleString()} tokens > ${value.limit.toLocaleString()} limit.
1665
1708
 
1666
- \u{1F4A1} Solutions:
1709
+ \u2605 Solutions:
1667
1710
  \u2022 Start a new session: Use /clear command
1668
1711
  \u2022 Increase limit: Add "sessionTokenLimit": (e.g., 128000) to your settings.json
1669
1712
  \u2022 Compress history: Use /compress command to compress history`
@@ -1991,6 +2034,23 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
1991
2034
  const duplicateResponseParts = [];
1992
2035
  let duplicatePromptId;
1993
2036
  const historyCallIdsWithResponse = geminiClient ? geminiClient.getHistoryFunctionResponseIds() : /* @__PURE__ */ new Set();
2037
+ const handledProviderIds = /* @__PURE__ */ new Set([
2038
+ ...handledProviderToolCallIdsRef.current,
2039
+ ...historyCallIdsWithResponse
2040
+ ]);
2041
+ const repeatedDuplicateRequest = findRepeatedDuplicateProviderToolCall(
2042
+ toolCallRequests,
2043
+ (request) => request.providerCallId,
2044
+ handledProviderIds,
2045
+ duplicateProviderToolCallResponseIdsRef.current
2046
+ );
2047
+ if (repeatedDuplicateRequest?.providerCallId) {
2048
+ debugLogger3.debug(
2049
+ `[processGeminiStreamEvents] Dropping batch after repeated duplicate provider tool-call id: ${repeatedDuplicateRequest.providerCallId} (tool: ${repeatedDuplicateRequest.name})`
2050
+ );
2051
+ loopDetectedRef.current = true;
2052
+ return 0 /* Completed */;
2053
+ }
1994
2054
  for (const request of toolCallRequests) {
1995
2055
  const providerCallId = request.providerCallId;
1996
2056
  if (!providerCallId) {
@@ -1998,6 +2058,10 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
1998
2058
  continue;
1999
2059
  }
2000
2060
  if (handledProviderToolCallIdsRef.current.has(providerCallId) || historyCallIdsWithResponse.has(providerCallId)) {
2061
+ markDuplicateProviderToolCallResponseSent(
2062
+ providerCallId,
2063
+ duplicateProviderToolCallResponseIdsRef.current
2064
+ );
2001
2065
  const response = createDuplicateProviderToolCallResponse(request);
2002
2066
  debugLogger3.debug(
2003
2067
  `[processGeminiStreamEvents] Suppressing duplicate provider tool-call id: ${providerCallId} (tool: ${request.name})`
@@ -2063,24 +2127,38 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2063
2127
  async (query, submitType = "userQuery" /* UserQuery */, prompt_id, metadata) => {
2064
2128
  const allowConcurrentBtwDuringResponse = submitType === "userQuery" /* UserQuery */ && streamingState === "responding" /* Responding */ && typeof query === "string" && isBtwCommand(query);
2065
2129
  if (isSubmittingQueryRef.current && submitType !== "toolResult" /* ToolResult */ && !allowConcurrentBtwDuringResponse) {
2130
+ metadata?.onDeliveryFailed?.();
2066
2131
  return;
2067
2132
  }
2068
- if ((streamingState === "responding" /* Responding */ || streamingState === "waiting_for_confirmation" /* WaitingForConfirmation */) && submitType !== "toolResult" /* ToolResult */ && !allowConcurrentBtwDuringResponse)
2133
+ if ((streamingState === "responding" /* Responding */ || streamingState === "waiting_for_confirmation" /* WaitingForConfirmation */) && submitType !== "toolResult" /* ToolResult */ && !allowConcurrentBtwDuringResponse) {
2134
+ metadata?.onDeliveryFailed?.();
2069
2135
  return;
2136
+ }
2070
2137
  isSubmittingQueryRef.current = true;
2071
2138
  loopDetectedRef.current = false;
2072
2139
  if (submitType !== "toolResult" /* ToolResult */ && !allowConcurrentBtwDuringResponse) {
2073
2140
  lastTurnUserItemRef.current = null;
2074
2141
  turnSawContentEventRef.current = false;
2075
2142
  handledProviderToolCallIdsRef.current.clear();
2143
+ duplicateProviderToolCallResponseIdsRef.current.clear();
2076
2144
  pendingDuplicateToolResponsesRef.current = [];
2077
2145
  immediateDuplicateToolResponsesRef.current = null;
2078
2146
  }
2079
2147
  const userMessageTimestamp = Date.now();
2080
2148
  if (submitType !== "toolResult" /* ToolResult */ && !allowConcurrentBtwDuringResponse) {
2081
2149
  setModelSwitchedFromQuotaError(false);
2082
- if (submitType !== "retry" /* Retry */) {
2083
- modelOverrideRef.current = void 0;
2150
+ const droppingInlineOverrideOnRetry = submitType === "retry" /* Retry */ && inlineModelOverrideActiveRef.current;
2151
+ if (submitType !== "retry" /* Retry */ || inlineModelOverrideActiveRef.current) {
2152
+ if (droppingInlineOverrideOnRetry) {
2153
+ addItem(
2154
+ {
2155
+ type: "info",
2156
+ text: `Inline model override cleared on retry \u2014 retrying on the session model (${config.getModel()}).`
2157
+ },
2158
+ userMessageTimestamp
2159
+ );
2160
+ }
2161
+ clearModelOverride(modelOverrideRef, inlineModelOverrideActiveRef);
2084
2162
  }
2085
2163
  if (pendingRetryCountdownItemRef.current || pendingRetryErrorItemRef.current) {
2086
2164
  const pendingError = pendingRetryErrorItemRef.current;
@@ -2110,6 +2188,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2110
2188
  );
2111
2189
  if (!shouldProceed || queryToSend === null) {
2112
2190
  isSubmittingQueryRef.current = false;
2191
+ metadata?.onDeliveryFailed?.();
2113
2192
  return;
2114
2193
  }
2115
2194
  if (submitType === "userQuery" /* UserQuery */ || submitType === "cron" /* Cron */ || submitType === "teammate" /* Teammate */) {
@@ -2136,7 +2215,8 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2136
2215
  queryToSend.length,
2137
2216
  prompt_id,
2138
2217
  config.getContentGeneratorConfig()?.authType,
2139
- queryToSend
2218
+ queryToSend,
2219
+ modelOverrideRef.current ?? config.getModel()
2140
2220
  )
2141
2221
  );
2142
2222
  }
@@ -2179,6 +2259,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2179
2259
  if (processingStatus === 1 /* UserCancelled */) {
2180
2260
  submitPromptOnCompleteRef.current = null;
2181
2261
  isSubmittingQueryRef.current = false;
2262
+ metadata?.onDeliveryFailed?.();
2182
2263
  return;
2183
2264
  }
2184
2265
  if (pendingHistoryItemRef.current) {
@@ -2201,6 +2282,11 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2201
2282
  loopDetectedRef.current = false;
2202
2283
  handleLoopDetectedEvent();
2203
2284
  }
2285
+ if (lastPromptErroredRef.current) {
2286
+ metadata?.onDeliveryFailed?.();
2287
+ } else {
2288
+ metadata?.onDelivered?.();
2289
+ }
2204
2290
  const onComplete = submitPromptOnCompleteRef.current;
2205
2291
  if (onComplete) {
2206
2292
  submitPromptOnCompleteRef.current = null;
@@ -2226,6 +2312,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2226
2312
  }
2227
2313
  }
2228
2314
  } catch (error) {
2315
+ metadata?.onDeliveryFailed?.();
2229
2316
  if (error instanceof UnauthorizedError) {
2230
2317
  onAuthError("Session expired or is unauthorized.");
2231
2318
  } else if (!isNodeError(error) || error.name !== "AbortError") {
@@ -2449,7 +2536,20 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2449
2536
  const promptId = prompt_ids[0] ?? pendingDuplicatePromptId;
2450
2537
  for (const toolCall of geminiTools) {
2451
2538
  if ("modelOverride" in toolCall.response) {
2452
- modelOverrideRef.current = toolCall.response.modelOverride;
2539
+ if (inlineModelOverrideActiveRef.current) {
2540
+ debugLogger3.debug(
2541
+ `skill-tool model override (${String(
2542
+ toolCall.response.modelOverride
2543
+ )}) blocked: inline override active`
2544
+ );
2545
+ } else {
2546
+ applyModelOverride(
2547
+ modelOverrideRef,
2548
+ inlineModelOverrideActiveRef,
2549
+ toolCall.response.modelOverride,
2550
+ false
2551
+ );
2552
+ }
2453
2553
  }
2454
2554
  }
2455
2555
  if (dualOutput) {
@@ -2736,6 +2836,10 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2736
2836
  }, [toolCalls, config, onDebugMessage, history, geminiClient, storage]);
2737
2837
  const notificationQueueRef = (0, import_react5.useRef)([]);
2738
2838
  const [notificationTrigger, setNotificationTrigger] = (0, import_react5.useState)(0);
2839
+ const getAutonomousLoopTickResolver = (0, import_react5.useCallback)(() => {
2840
+ autonomousLoopTickResolverRef.current ??= new AutonomousLoopTickResolver();
2841
+ return autonomousLoopTickResolverRef.current;
2842
+ }, []);
2739
2843
  const notificationQueueSessionIdRef = (0, import_react5.useRef)(sessionStates.sessionId);
2740
2844
  (0, import_react5.useEffect)(() => {
2741
2845
  if (notificationQueueSessionIdRef.current === sessionStates.sessionId) {
@@ -2743,6 +2847,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2743
2847
  }
2744
2848
  notificationQueueSessionIdRef.current = sessionStates.sessionId;
2745
2849
  notificationQueueRef.current = [];
2850
+ autonomousLoopTickResolverRef.current?.resetCache();
2746
2851
  }, [sessionStates.sessionId]);
2747
2852
  const cronSessionIdRef = (0, import_react5.useRef)(sessionStates.sessionId);
2748
2853
  cronSessionIdRef.current = sessionStates.sessionId;
@@ -2762,11 +2867,28 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2762
2867
  if (stopped) return;
2763
2868
  scheduler.start(
2764
2869
  (job) => {
2765
- const label = job.prompt.slice(0, 40);
2766
2870
  const source = job.cronExpr === "@wakeup" ? "Loop" : "Cron";
2871
+ const autonomousMode = detectAutonomousSentinel(job.prompt);
2872
+ let label = job.prompt.slice(0, 40);
2873
+ let modelText = job.prompt;
2874
+ if (autonomousMode) {
2875
+ if (job.missed) return;
2876
+ const resolver = getAutonomousLoopTickResolver();
2877
+ const tick = resolver.resolveAutonomous(autonomousMode);
2878
+ label = "Autonomous loop tick";
2879
+ modelText = tick.modelText;
2880
+ notificationQueueRef.current.push({
2881
+ displayText: `${job.missed ? "Missed" : source}: ${label}`,
2882
+ modelText,
2883
+ sendMessageType: "cron" /* Cron */,
2884
+ onDelivered: /* @__PURE__ */ __name(() => resolver.markDelivered(), "onDelivered")
2885
+ });
2886
+ setNotificationTrigger((n) => n + 1);
2887
+ return;
2888
+ }
2767
2889
  notificationQueueRef.current.push({
2768
2890
  displayText: `${job.missed ? "Missed" : source}: ${label}`,
2769
- modelText: job.prompt,
2891
+ modelText,
2770
2892
  sendMessageType: "cron" /* Cron */
2771
2893
  });
2772
2894
  setNotificationTrigger((n) => n + 1);
@@ -2781,7 +2903,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2781
2903
  process.stderr.write(summary + "\n");
2782
2904
  }
2783
2905
  };
2784
- }, [config, isConfigInitialized]);
2906
+ }, [config, getAutonomousLoopTickResolver, isConfigInitialized]);
2785
2907
  (0, import_react5.useEffect)(() => {
2786
2908
  const registry = config.getBackgroundTaskRegistry();
2787
2909
  registry.setNotificationCallback((displayText, modelText) => {
@@ -2839,7 +2961,9 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
2839
2961
  Date.now()
2840
2962
  );
2841
2963
  submitQuery(item.modelText, item.sendMessageType, void 0, {
2842
- notificationDisplayText: item.displayText
2964
+ notificationDisplayText: item.displayText,
2965
+ onDelivered: item.onDelivered,
2966
+ onDeliveryFailed: item.onDeliveryFailed
2843
2967
  });
2844
2968
  return;
2845
2969
  }
@@ -3,10 +3,10 @@
3
3
  import {
4
4
  TextTokenizer,
5
5
  isSupportedImageMimeType
6
- } from "./chunk-F6XNTYNE.js";
6
+ } from "./chunk-YTFBURQD.js";
7
7
  import {
8
8
  createDebugLogger
9
- } from "./chunk-C4K3FEQ2.js";
9
+ } from "./chunk-AVQDCKNF.js";
10
10
  import {
11
11
  init_esbuild_shims
12
12
  } from "./chunk-A4BMJM77.js";
@@ -5,7 +5,7 @@ import {
5
5
  BaseToolInvocation,
6
6
  ToolDisplayNames,
7
7
  ToolNames
8
- } from "./chunk-TOEGRAVX.js";
8
+ } from "./chunk-JV7A66DR.js";
9
9
  import {
10
10
  init_esbuild_shims
11
11
  } from "./chunk-A4BMJM77.js";
@@ -3,17 +3,17 @@
3
3
  import {
4
4
  getInboxesDir,
5
5
  require_proper_lockfile
6
- } from "./chunk-2BIF2NVV.js";
6
+ } from "./chunk-HWG4XLD7.js";
7
7
  import {
8
8
  Mutex
9
9
  } from "./chunk-OMX7CUOE.js";
10
10
  import {
11
11
  atomicWriteJSON
12
- } from "./chunk-3UALQ56H.js";
12
+ } from "./chunk-T42ACHFI.js";
13
13
  import {
14
14
  createDebugLogger,
15
15
  isNodeError
16
- } from "./chunk-C4K3FEQ2.js";
16
+ } from "./chunk-AVQDCKNF.js";
17
17
  import {
18
18
  init_esbuild_shims
19
19
  } from "./chunk-A4BMJM77.js";
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  BaseJsonOutputAdapter
5
- } from "./chunk-J6AW7O5D.js";
5
+ } from "./chunk-NVTRORSK.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-A4BMJM77.js";
@@ -7,9 +7,11 @@ import {
7
7
  // packages/acp-bridge/src/bridgeTypes.ts
8
8
  init_esbuild_shims();
9
9
  var MID_TURN_QUEUE_DRAIN_METHOD = "craft/drainMidTurnQueue";
10
+ var CLIENT_MCP_OVER_WS_CONFIG_FLAG = "__clientMcpOverWs";
10
11
 
11
12
  export {
12
- MID_TURN_QUEUE_DRAIN_METHOD
13
+ MID_TURN_QUEUE_DRAIN_METHOD,
14
+ CLIENT_MCP_OVER_WS_CONFIG_FLAG
13
15
  };
14
16
  /**
15
17
  * @license