@qwen-code/qwen-code 0.19.2 → 0.19.3-nightly.20260630.e00fe6a27

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 (286) hide show
  1. package/bundled/extension-creator/SKILL.md +357 -0
  2. package/bundled/loop/SKILL.md +21 -7
  3. package/bundled/loop/SKILL.test.ts +41 -0
  4. package/bundled/loop/loop-task-file.test.ts +1064 -0
  5. package/bundled/loop/loop-task-file.ts +404 -0
  6. package/bundled/loop/loop-tick-resolver.test.ts +665 -0
  7. package/bundled/loop/loop-tick-resolver.ts +347 -0
  8. package/bundled/qc-helper/SKILL.md +26 -19
  9. package/bundled/qc-helper/docs/configuration/auth.md +11 -11
  10. package/bundled/qc-helper/docs/configuration/model-providers.md +13 -13
  11. package/bundled/qc-helper/docs/configuration/settings.md +76 -75
  12. package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
  13. package/bundled/qc-helper/docs/features/commands.md +108 -77
  14. package/bundled/qc-helper/docs/features/hooks.md +6 -1
  15. package/bundled/qc-helper/docs/features/memory.md +52 -0
  16. package/bundled/qc-helper/docs/qwen-serve.md +24 -2
  17. package/bundled/qc-helper/docs/support/tos-privacy.md +16 -3
  18. package/bundled/qc-helper/docs/support/troubleshooting.md +6 -0
  19. package/chunks/{MaxSizedBox-7RERNLFK.js → MaxSizedBox-T5X5MN5Q.js} +29 -27
  20. package/chunks/{StandaloneSessionPicker-S22XBSN6.js → StandaloneSessionPicker-P3E3WTOQ.js} +42 -37
  21. package/chunks/{acpAgent-4MCETHF2.js → acpAgent-QEP6DXFW.js} +864 -175
  22. package/chunks/{agent-K3ENVYSB.js → agent-UDANDUF7.js} +24 -23
  23. package/chunks/{agent-headless-HO3V3A3A.js → agent-headless-KYVSZHSO.js} +24 -23
  24. package/chunks/{anthropicContentGenerator-E3TQ5XJJ.js → anthropicContentGenerator-KWSJAQ7B.js} +33 -12
  25. package/chunks/{artifact-tool-QA4KRO3B.js → artifact-tool-D2X7G3C3.js} +2 -2
  26. package/chunks/{askUserQuestion-HMWXW6VN.js → askUserQuestion-UGETICJQ.js} +2 -2
  27. package/chunks/{bridge-4LV2HBH2.js → bridge-X42LXPTA.js} +31 -30
  28. package/chunks/{ca-7WC7ELX6.js → ca-IUFWESZL.js} +1 -0
  29. package/chunks/{chunk-JXQ23SNT.js → chunk-2JKEQWDZ.js} +623 -78
  30. package/chunks/{chunk-2TJ3YN6Q.js → chunk-2RJA6J57.js} +416 -401
  31. package/chunks/{chunk-3UALQ56H.js → chunk-3227DZO4.js} +1 -1
  32. package/chunks/{chunk-BGUDAULQ.js → chunk-3CPCDXFR.js} +5 -5
  33. package/chunks/{chunk-5RVSM6NW.js → chunk-3HUHAQF3.js} +1 -1
  34. package/chunks/{chunk-D5E5TMYH.js → chunk-3M4W4U5G.js} +16 -2
  35. package/chunks/{chunk-DBZUXSSV.js → chunk-4X7NIEQJ.js} +3 -3
  36. package/chunks/chunk-5GOVVXEV.js +73 -0
  37. package/chunks/{chunk-2BAQ3ACS.js → chunk-5SM4VT6V.js} +405 -5
  38. package/chunks/{chunk-NYOHZYHM.js → chunk-5XQ4A26L.js} +45 -3
  39. package/chunks/{chunk-CI5O6SQL.js → chunk-6FKEVYCD.js} +4 -4
  40. package/chunks/{chunk-ZD3NW5KL.js → chunk-7LM4XHPE.js} +63 -9
  41. package/chunks/chunk-7UNP2XM7.js +840 -0
  42. package/chunks/{chunk-OQHQHJRK.js → chunk-ARYCHZ4B.js} +151 -4775
  43. package/chunks/chunk-BC3C4F3Q.js +40 -0
  44. package/chunks/{chunk-CGEGHF2C.js → chunk-BKXBARJZ.js} +1 -1
  45. package/chunks/chunk-BMFMJINR.js +45 -0
  46. package/chunks/chunk-BOJWHRMX.js +11273 -0
  47. package/chunks/{chunk-CGOMICBE.js → chunk-BSZEQNUA.js} +34 -1
  48. package/chunks/{chunk-OIC6S73E.js → chunk-BUUQ5HPX.js} +1 -1
  49. package/chunks/{chunk-2BIF2NVV.js → chunk-BVSVIN45.js} +2 -2
  50. package/chunks/{chunk-TOEGRAVX.js → chunk-BX5YO7UW.js} +17 -5
  51. package/chunks/{chunk-4W4T77MO.js → chunk-BXVWV4GI.js} +109 -6
  52. package/chunks/{chunk-VQRYPFCV.js → chunk-CYHVPQYT.js} +10 -460
  53. package/chunks/{chunk-PRYMDRBV.js → chunk-DDMOU62Q.js} +1 -1
  54. package/chunks/{chunk-S566HKUS.js → chunk-DHXWNSJA.js} +15 -1
  55. package/chunks/{chunk-F6XNTYNE.js → chunk-E6XQPQXW.js} +30 -307
  56. package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
  57. package/chunks/{chunk-EL5IHQON.js → chunk-EWYQFWYF.js} +6 -27
  58. package/chunks/{chunk-HG6YKEBI.js → chunk-F2DOT6UZ.js} +161 -30
  59. package/chunks/{chunk-JTYRZODB.js → chunk-FOOIZCWL.js} +16 -7
  60. package/chunks/{chunk-EX4W6ZYG.js → chunk-G5G4TFZ7.js} +1 -1
  61. package/chunks/{chunk-EW6C27XX.js → chunk-GEHVIWAT.js} +9 -3
  62. package/chunks/chunk-HEVBZSXG.js +4923 -0
  63. package/chunks/chunk-HFQ2XSE7.js +690 -0
  64. package/chunks/{chunk-PF523XJX.js → chunk-HPGTGMP3.js} +1 -1
  65. package/chunks/{chunk-OTBK43JR.js → chunk-HYCC3XM3.js} +1 -1
  66. package/chunks/{chunk-TMBPDHXD.js → chunk-I4H7PRWQ.js} +1 -1
  67. package/chunks/{chunk-EEEZIVFJ.js → chunk-JOLIREYR.js} +1 -1
  68. package/chunks/{chunk-TZM5JIAX.js → chunk-JYPQTRA3.js} +10 -7
  69. package/chunks/chunk-K5XU6E4T.js +167 -0
  70. package/chunks/{chunk-BS64PXY3.js → chunk-KFVU7ODN.js} +1 -1
  71. package/chunks/{chunk-3RJ3ZPPR.js → chunk-KKQWC6WS.js} +7 -7
  72. package/chunks/{chunk-3QFE4OTE.js → chunk-LBW7NW7X.js} +4 -4
  73. package/chunks/{chunk-Z7XXFPGP.js → chunk-LDWTYE33.js} +1 -1
  74. package/chunks/{chunk-EXMX5YHG.js → chunk-LP5E4YIH.js} +1 -1
  75. package/chunks/{chunk-ZUAXI2OA.js → chunk-M2U5NM24.js} +188 -11366
  76. package/chunks/{chunk-I5T6PIBQ.js → chunk-MBV2CTRL.js} +1010 -925
  77. package/chunks/{chunk-5JZLXFPD.js → chunk-MTHMXSNT.js} +11 -11
  78. package/chunks/{chunk-FPACXT7T.js → chunk-MTJVHQDP.js} +534 -164
  79. package/chunks/chunk-NDOC6M5S.js +481 -0
  80. package/chunks/{chunk-HGNSRCRB.js → chunk-NL4C3H6C.js} +1 -1
  81. package/chunks/{chunk-GZCJS5WH.js → chunk-O2VBQ3Y2.js} +2 -2
  82. package/chunks/{chunk-UN3C6GOR.js → chunk-PPFWEV7G.js} +10 -108
  83. package/chunks/{chunk-RS4HRC75.js → chunk-QI2CFVRF.js} +85 -8
  84. package/chunks/{chunk-XU5P23GN.js → chunk-QLDPRILK.js} +3 -3
  85. package/chunks/chunk-QYUE6W3T.js +123 -0
  86. package/chunks/{chunk-USGMPVOY.js → chunk-R3LHDWF2.js} +21 -12
  87. package/chunks/{chunk-BNXANYLH.js → chunk-RD6YJJJ6.js} +81 -1
  88. package/chunks/{chunk-PXFFKNCO.js → chunk-RIP623NO.js} +4877 -2469
  89. package/chunks/{chunk-XKBP7M7A.js → chunk-RYBSUGOR.js} +142 -30
  90. package/chunks/{chunk-BG4BIP7F.js → chunk-SBBN4BWR.js} +4 -2
  91. package/chunks/{chunk-T2VDEFUU.js → chunk-SKQZZVAV.js} +2 -2
  92. package/chunks/{chunk-5R4SBCX6.js → chunk-SL5MOGQH.js} +3 -3
  93. package/chunks/chunk-SMXULRAN.js +37 -0
  94. package/chunks/{chunk-WA5OJGFL.js → chunk-SS6WJMQK.js} +363 -76
  95. package/chunks/{chunk-UAARVVBI.js → chunk-TNWFHGN6.js} +1 -1
  96. package/chunks/{chunk-I2RFAW6Q.js → chunk-TT6Q3EN4.js} +7 -5
  97. package/chunks/chunk-UAKXW3DN.js +30 -0
  98. package/chunks/{chunk-C4K3FEQ2.js → chunk-UX4SGCGN.js} +32 -3
  99. package/chunks/{chunk-J6AW7O5D.js → chunk-WHDQZHRU.js} +2 -2
  100. package/chunks/{chunk-WGAEWQTF.js → chunk-WN6K47NR.js} +1 -2
  101. package/chunks/{chunk-UAARJR2G.js → chunk-WQT5SOI6.js} +2 -2
  102. package/chunks/{chunk-VYFMN7C6.js → chunk-WUMVIRTN.js} +225 -37
  103. package/chunks/{chunk-R36VMVEP.js → chunk-XJMKOTVV.js} +5 -5
  104. package/chunks/{chunk-TXVGVZYR.js → chunk-XJYUPHRC.js} +3 -3
  105. package/chunks/{chunk-2JD55C6G.js → chunk-Y6YMRS3U.js} +2 -2
  106. package/chunks/{chunk-LLFFKXZZ.js → chunk-YALKC62D.js} +56 -29
  107. package/chunks/{chunk-GYZQA2FO.js → chunk-YLZJCUH6.js} +1 -1
  108. package/chunks/chunk-YTFBURQD.js +313 -0
  109. package/chunks/{chunk-KBXLIVWQ.js → chunk-ZFPRYHWR.js} +2 -2
  110. package/chunks/{chunk-X6EDWN44.js → chunk-ZP6UKOPB.js} +1 -1
  111. package/chunks/{computer-use-6BBRNT6S.js → computer-use-LF2S6LUZ.js} +103 -49
  112. package/chunks/{contextCommand-UJAJ6N57.js → contextCommand-VPX5UG55.js} +26 -25
  113. package/chunks/{cron-create-4KQE6YLH.js → cron-create-SKEY55RG.js} +4 -4
  114. package/chunks/{cron-delete-THME66UP.js → cron-delete-I3NAT32Z.js} +6 -6
  115. package/chunks/{cron-list-7A54SJ5N.js → cron-list-6XRRL6TH.js} +5 -5
  116. package/chunks/{daemon-status-provider-CSL3BUOY.js → daemon-status-provider-5JAWZS4V.js} +34 -34
  117. package/chunks/{de-ACHALDED.js → de-EOW5PVHF.js} +1 -0
  118. package/chunks/{dist-BD27IA3L.js → dist-4FCNM6KJ.js} +2 -2
  119. package/chunks/{dist-OD2FY543.js → dist-O3H4PABL.js} +2 -2
  120. package/chunks/{dist-BOOH5JWN.js → dist-SCAAUWPS.js} +18 -4
  121. package/chunks/{dist-QHJRBCMP.js → dist-UKPWQJCL.js} +44 -2
  122. package/chunks/{dist-QFFZWACU.js → dist-VD7HXTML.js} +20 -9
  123. package/chunks/{earlyInputCapture-X6KMCSHD.js → earlyInputCapture-7FRQMU4P.js} +25 -24
  124. package/chunks/{edit-7J6WXARF.js → edit-REKJDIRL.js} +68 -27
  125. package/chunks/{en-NCUBOJOY.js → en-HPWEJBTR.js} +8 -0
  126. package/chunks/{enter-worktree-KULCKJPJ.js → enter-worktree-GBKUDCD3.js} +24 -23
  127. package/chunks/{enterPlanMode-H2CIOLMH.js → enterPlanMode-WB3Y4FGT.js} +24 -23
  128. package/chunks/{errors-6G2JYR54.js → errors-2XJDYO3M.js} +26 -25
  129. package/chunks/{exit-worktree-ECBWBVC5.js → exit-worktree-KKC7O2ZV.js} +24 -23
  130. package/chunks/{exitPlanMode-DQV56GTW.js → exitPlanMode-7HMS3TF7.js} +24 -23
  131. package/chunks/{fast-path-35JJFS3C.js → fast-path-XVNIYWGG.js} +4 -4
  132. package/chunks/{fast-path-settings-TSVI53EB.js → fast-path-settings-UQLRFDQP.js} +3 -2
  133. package/chunks/{fr-GVKZ27MF.js → fr-BN5NKSAC.js} +1 -0
  134. package/chunks/{gemini-NDTG7WAX.js → gemini-U5TPU3IQ.js} +210 -104
  135. package/chunks/{geminiContentGenerator-XTG6SFLA.js → geminiContentGenerator-ZVWRHXOO.js} +4 -4
  136. package/chunks/{glob-SJ2JBZK4.js → glob-FEJWIH2W.js} +24 -23
  137. package/chunks/{grep-BRMWFEWR.js → grep-KMP25IIA.js} +24 -23
  138. package/chunks/{headlessSafetyWarnings-LJ6FJX77.js → headlessSafetyWarnings-5DEDET4M.js} +24 -23
  139. package/chunks/{initializer-P5AXF7PV.js → initializer-FJTACLOH.js} +31 -28
  140. package/chunks/{ja-FKZ2WZ4D.js → ja-7DEUB2TS.js} +1 -0
  141. package/chunks/{keychain-token-storage-CSYMNRPP.js → keychain-token-storage-YLMDLKXT.js} +2 -2
  142. package/chunks/{list-6COK34BP.js → list-SCQXYJUW.js} +32 -29
  143. package/chunks/{loadedSettingsAdapter-XIUTN245.js → loadedSettingsAdapter-P6KPNAG7.js} +30 -27
  144. package/chunks/{loop-wakeup-33GPXJLA.js → loop-wakeup-FYEQEJUA.js} +7 -7
  145. package/chunks/{ls-BYQY7RVV.js → ls-R5WP4BGZ.js} +4 -4
  146. package/chunks/{lsp-X54RO4IV.js → lsp-GSICJMMW.js} +2 -2
  147. package/chunks/{monitor-DH7KFSJV.js → monitor-JU3HHHVY.js} +24 -23
  148. package/chunks/nonInteractiveCli-IZEKUHU3.js +100 -0
  149. package/chunks/{notebook-edit-D4R4ZLMA.js → notebook-edit-YHY3Z2QQ.js} +52 -23
  150. package/chunks/{openaiContentGenerator-F74IPQ6E.js → openaiContentGenerator-4WUVA3Q2.js} +13 -12
  151. package/chunks/{pt-SY5NCFGR.js → pt-TNZRNLQB.js} +1 -0
  152. package/chunks/{qwenContentGenerator-ATTK5P4D.js → qwenContentGenerator-MVYYR44B.js} +26 -25
  153. package/chunks/{qwenOAuth2-K4AASPCV.js → qwenOAuth2-6HNGHALT.js} +5 -4
  154. package/chunks/{read-file-767G23OY.js → read-file-NABEO2X4.js} +8 -8
  155. package/chunks/{read-mcp-resource-I5HCZJ6X.js → read-mcp-resource-DQQW7H7T.js} +2 -2
  156. package/chunks/{ripGrep-4OMMGSWX.js → ripGrep-YXLK6UTX.js} +24 -23
  157. package/chunks/{ru-FWNXJG4F.js → ru-NIAUBKCN.js} +1 -0
  158. package/chunks/{run-qwen-serve-REKSTYRA.js → run-qwen-serve-4B5QBMLQ.js} +144 -41
  159. package/chunks/{scheduler-UNTFDQLG.js → scheduler-XAKIYBDL.js} +24 -23
  160. package/chunks/{send-message-2DAFXEYP.js → send-message-EE4TWKVU.js} +2 -2
  161. package/chunks/{serve-KZ56QB5S.js → serve-4RXVLUKD.js} +30 -28
  162. package/chunks/{server-BV5TZUMU.js → server-7PA5QGIA.js} +11037 -8747
  163. package/chunks/{session-OIBXFSGD.js → session-WNVWRYAH.js} +194 -57
  164. package/chunks/{settings-WJTCBIRA.js → settings-YJH32TFF.js} +30 -27
  165. package/chunks/{shell-WC52IBHW.js → shell-YFLABOS5.js} +24 -23
  166. package/chunks/{skill-U7F7JR4M.js → skill-N3J7FUAY.js} +38 -11
  167. package/chunks/{spawnChannel-EI2E5BCW.js → spawnChannel-D6WVMFZJ.js} +26 -25
  168. package/chunks/{src-4F6FBZFI.js → src-IU5GDBEH.js} +88 -28
  169. package/chunks/{startInteractiveUI-SFRVB3CE.js → startInteractiveUI-QIPQTRT4.js} +2784 -2474
  170. package/chunks/{syntheticOutput-PPS3HDVA.js → syntheticOutput-T5YHQ6S2.js} +3 -3
  171. package/chunks/{task-create-OUYCA553.js → task-create-BLY7RHXX.js} +6 -6
  172. package/chunks/{task-list-WAX7I2IA.js → task-list-3QUYNVYR.js} +5 -5
  173. package/chunks/{task-stop-CAIL6FNH.js → task-stop-U4RATK2V.js} +2 -2
  174. package/chunks/{task-update-AHEO5OUT.js → task-update-U54O7KJX.js} +6 -6
  175. package/chunks/{team-create-3WC7CIIW.js → team-create-TP4CLLM3.js} +24 -23
  176. package/chunks/{team-delete-HGHFG23B.js → team-delete-LKBYPASD.js} +5 -5
  177. package/chunks/{theme-manager-DICFCT3P.js → theme-manager-N2TBIBZT.js} +25 -24
  178. package/chunks/{todoWrite-IFBMN3FH.js → todoWrite-OYXKTVYN.js} +4 -4
  179. package/chunks/{tool-search-L5K7HLER.js → tool-search-GBBSICYB.js} +101 -16
  180. package/chunks/trustedFolders-F7TBU5CD.js +76 -0
  181. package/chunks/types-QX5C3CHJ.js +12 -0
  182. package/chunks/{validateNonInterActiveAuth-GCH4Z6KI.js → validateNonInterActiveAuth-EQDQPSMI.js} +55 -50
  183. package/chunks/{web-fetch-B5IIQ5TT.js → web-fetch-PCVCML2X.js} +29 -15
  184. package/chunks/{workflow-OB3AND7I.js → workflow-ANJ4FYBK.js} +32 -30
  185. package/chunks/{workspace-providers-status-ZIR5EPOO.js → workspace-providers-status-462QQKQM.js} +32 -29
  186. package/chunks/workspace-service-VTG4G6CW.js +75 -0
  187. package/chunks/{write-file-SEXBNDZM.js → write-file-3P3WMQQW.js} +63 -27
  188. package/chunks/{zh-RBEGQVQT.js → zh-5EUYXASN.js} +8 -0
  189. package/chunks/{zh-TW-QGAVRXT3.js → zh-TW-TR3XYGE5.js} +8 -0
  190. package/cli-entry.js +20 -9
  191. package/cli.js +6 -6
  192. package/locales/ca.js +2 -0
  193. package/locales/de.js +2 -0
  194. package/locales/en.js +14 -0
  195. package/locales/fr.js +2 -0
  196. package/locales/ja.js +1 -0
  197. package/locales/pt.js +2 -0
  198. package/locales/ru.js +2 -0
  199. package/locales/zh-TW.js +12 -0
  200. package/locales/zh.js +12 -0
  201. package/node_modules/@qwen-code/audio-capture/dist/index.d.ts +35 -0
  202. package/node_modules/@qwen-code/audio-capture/dist/index.js +48 -0
  203. package/node_modules/@qwen-code/audio-capture/dist/index.js.map +1 -0
  204. package/node_modules/@qwen-code/audio-capture/dist/platform.d.ts +7 -0
  205. package/node_modules/@qwen-code/audio-capture/dist/platform.js +18 -0
  206. package/node_modules/@qwen-code/audio-capture/dist/platform.js.map +1 -0
  207. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/LICENSE +21 -0
  208. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/README.md +58 -0
  209. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/SECURITY.md +5 -0
  210. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/bin.js +84 -0
  211. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/build-test.js +19 -0
  212. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/index.js +6 -0
  213. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/node-gyp-build.js +207 -0
  214. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/optional.js +7 -0
  215. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/package.json +43 -0
  216. package/node_modules/@qwen-code/audio-capture/package.json +30 -0
  217. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  218. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  219. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-arm64/@qwen-code+audio-capture.node +0 -0
  220. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-x64/@qwen-code+audio-capture.node +0 -0
  221. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  222. package/package.json +18 -6
  223. package/patches/chrome-devtools-mcp+1.4.0.patch +31 -0
  224. package/postinstall.js +50 -0
  225. package/web-shell/assets/{arc-D_ae_Y9k.js → arc-DIemsO_F.js} +1 -1
  226. package/web-shell/assets/{architectureDiagram-3BPJPVTR-BMLRjppa.js → architectureDiagram-3BPJPVTR-CTlUvIQv.js} +1 -1
  227. package/web-shell/assets/{blockDiagram-GPEHLZMM-qVDQC8KL.js → blockDiagram-GPEHLZMM-DG0jmIZK.js} +1 -1
  228. package/web-shell/assets/{c4Diagram-AAUBKEIU-CxWS6MBd.js → c4Diagram-AAUBKEIU-WljDBi55.js} +1 -1
  229. package/web-shell/assets/channel-CbzRbdpA.js +1 -0
  230. package/web-shell/assets/{chunk-2J33WTMH-BtNuY5Yp.js → chunk-2J33WTMH-8nc6onr2.js} +1 -1
  231. package/web-shell/assets/{chunk-4BX2VUAB-BU-x368d.js → chunk-4BX2VUAB-EopXix8Z.js} +1 -1
  232. package/web-shell/assets/{chunk-55IACEB6-DRgTLvBu.js → chunk-55IACEB6-BE4Jz3N3.js} +1 -1
  233. package/web-shell/assets/{chunk-727SXJPM-D2aElv7q.js → chunk-727SXJPM-C_eErgDN.js} +1 -1
  234. package/web-shell/assets/{chunk-AQP2D5EJ-BwHCMRQ0.js → chunk-AQP2D5EJ-DFtVW-Is.js} +1 -1
  235. package/web-shell/assets/{chunk-FMBD7UC4-BMyPH-ku.js → chunk-FMBD7UC4-CJPyxIg9.js} +1 -1
  236. package/web-shell/assets/{chunk-ND2GUHAM-BNKTstUf.js → chunk-ND2GUHAM-Bk-xgj6M.js} +1 -1
  237. package/web-shell/assets/{chunk-QZHKN3VN-gD3vsFId.js → chunk-QZHKN3VN-p3Y4yaFB.js} +1 -1
  238. package/web-shell/assets/classDiagram-4FO5ZUOK-BFdyQ52h.js +1 -0
  239. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BFdyQ52h.js +1 -0
  240. package/web-shell/assets/{cose-bilkent-S5V4N54A-BG9FAsXE.js → cose-bilkent-S5V4N54A-BCMO6Js3.js} +1 -1
  241. package/web-shell/assets/{dagre-BM42HDAG-Cy1sR7om.js → dagre-BM42HDAG-DUMrwASf.js} +1 -1
  242. package/web-shell/assets/default-aEtf0G7-.svg +1 -0
  243. package/web-shell/assets/{diagram-2AECGRRQ-Bxi1I_Vu.js → diagram-2AECGRRQ-C5d7qJbL.js} +1 -1
  244. package/web-shell/assets/{diagram-5GNKFQAL-BGCJjO6y.js → diagram-5GNKFQAL-CjLzMhbT.js} +1 -1
  245. package/web-shell/assets/{diagram-KO2AKTUF-CMTeLXp7.js → diagram-KO2AKTUF-RCoNWeAm.js} +1 -1
  246. package/web-shell/assets/{diagram-LMA3HP47-BN1wyAGh.js → diagram-LMA3HP47-KThXjaNV.js} +1 -1
  247. package/web-shell/assets/{diagram-OG6HWLK6-UYSG_zcp.js → diagram-OG6HWLK6-DKsC2BWz.js} +1 -1
  248. package/web-shell/assets/{erDiagram-TEJ5UH35-DqXL08lw.js → erDiagram-TEJ5UH35-DJ2ukmq0.js} +1 -1
  249. package/web-shell/assets/{flowDiagram-I6XJVG4X-BPJ9SFji.js → flowDiagram-I6XJVG4X-zzqaARRX.js} +1 -1
  250. package/web-shell/assets/{ganttDiagram-6RSMTGT7-BEd9Pnms.js → ganttDiagram-6RSMTGT7-kFUg-gqT.js} +1 -1
  251. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DrNRH3oi.js → gitGraphDiagram-PVQCEYII-C6JnMVzD.js} +1 -1
  252. package/web-shell/assets/index-B3XUm7dw.js +713 -0
  253. package/web-shell/assets/index-CHmzAWys.css +5 -0
  254. package/web-shell/assets/{infoDiagram-5YYISTIA-CFYBrkVI.js → infoDiagram-5YYISTIA-XqPVhp89.js} +1 -1
  255. package/web-shell/assets/insert-DmRbh9Rv.svg +1 -0
  256. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Dxsddth7.js → ishikawaDiagram-YF4QCWOH-D2k8sGpf.js} +1 -1
  257. package/web-shell/assets/{journeyDiagram-JHISSGLW-DxaDK80t.js → journeyDiagram-JHISSGLW-CQEST1GE.js} +1 -1
  258. package/web-shell/assets/{kanban-definition-UN3LZRKU-Q0jQCOct.js → kanban-definition-UN3LZRKU-DZ7kqVBC.js} +1 -1
  259. package/web-shell/assets/{linear-DGGM2kcP.js → linear-B6C_6q_E.js} +1 -1
  260. package/web-shell/assets/{mermaid.core-ByoxnWut.js → mermaid.core-CsyNP1qt.js} +5 -5
  261. package/web-shell/assets/{mindmap-definition-RKZ34NQL-C0ZseHsi.js → mindmap-definition-RKZ34NQL-B1VDIzJq.js} +1 -1
  262. package/web-shell/assets/{pieDiagram-4H26LBE5-MQXNhl5A.js → pieDiagram-4H26LBE5-DN0E7Jwu.js} +1 -1
  263. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DIR4ee2A.js → quadrantDiagram-W4KKPZXB-UKTQdHKm.js} +1 -1
  264. package/web-shell/assets/queue-DWpnpFgW.svg +1 -0
  265. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BTR0UdYQ.js → requirementDiagram-4Y6WPE33-BRGceQvN.js} +1 -1
  266. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-sfnhMELN.js → sankeyDiagram-5OEKKPKP-2DDyu41v.js} +1 -1
  267. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DXczHOHH.js → sequenceDiagram-3UESZ5HK-CT5iE8ZU.js} +1 -1
  268. package/web-shell/assets/{stateDiagram-AJRCARHV-DdE_KQFH.js → stateDiagram-AJRCARHV-CqMQ_s4G.js} +1 -1
  269. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CamhV5pM.js +1 -0
  270. package/web-shell/assets/{timeline-definition-PNZ67QCA-DIc61uE8.js → timeline-definition-PNZ67QCA-Di37QSZU.js} +1 -1
  271. package/web-shell/assets/{vennDiagram-CIIHVFJN-BF7ODmxB.js → vennDiagram-CIIHVFJN-DCXvpz5S.js} +1 -1
  272. package/web-shell/assets/{wardley-L42UT6IY-3pc1MEaw.js → wardley-L42UT6IY-CpUCk6OX.js} +1 -1
  273. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-9jnPcZuP.js → wardleyDiagram-YWT4CUSO-D01pVEBg.js} +1 -1
  274. package/web-shell/assets/{xychartDiagram-2RQKCTM6-DcthaZK6.js → xychartDiagram-2RQKCTM6-DOu5JDoz.js} +1 -1
  275. package/web-shell/index.html +2 -2
  276. package/chunks/chunk-B6HQGTYR.js +0 -410
  277. package/chunks/chunk-R2BXK7SX.js +0 -13
  278. package/chunks/chunk-RKIZXJMB.js +0 -13
  279. package/chunks/nonInteractiveCli-7575LBXP.js +0 -91
  280. package/chunks/workspace-service-OM5D4OI2.js +0 -60
  281. package/web-shell/assets/channel-DYPNiTww.js +0 -1
  282. package/web-shell/assets/classDiagram-4FO5ZUOK-p_g25Tni.js +0 -1
  283. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-p_g25Tni.js +0 -1
  284. package/web-shell/assets/index-CpOXWDPh.js +0 -714
  285. package/web-shell/assets/index-oVK7qhre.css +0 -5
  286. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BHUSEndU.js +0 -1
@@ -2,26 +2,28 @@
2
2
  "use strict";
3
3
  import {
4
4
  handleAtCommand
5
- } from "./chunk-B6HQGTYR.js";
5
+ } from "./chunk-7UNP2XM7.js";
6
6
  import {
7
7
  JsonOutputAdapter
8
- } from "./chunk-EX4W6ZYG.js";
8
+ } from "./chunk-G5G4TFZ7.js";
9
9
  import {
10
10
  StreamJsonOutputAdapter
11
- } from "./chunk-J6AW7O5D.js";
11
+ } from "./chunk-WHDQZHRU.js";
12
12
  import {
13
+ buildInitialSystemReminders,
13
14
  buildSystemMessage,
14
15
  computeUsageFromMetrics,
15
16
  createAgentToolProgressHandler,
16
17
  createToolProgressHandler,
17
18
  extractPartsFromUserMessage,
18
19
  handleSlashCommand,
20
+ insertAfterFunctionResponses,
19
21
  isSlashCommand,
20
22
  normalizePartList
21
- } from "./chunk-2TJ3YN6Q.js";
23
+ } from "./chunk-2RJA6J57.js";
22
24
  import {
23
25
  RunBudgetEnforcer
24
- } from "./chunk-ZUAXI2OA.js";
26
+ } from "./chunk-BOJWHRMX.js";
25
27
  import {
26
28
  AlreadyReportedError,
27
29
  handleBudgetExceededError,
@@ -29,26 +31,33 @@ import {
29
31
  handleError,
30
32
  handleMaxTurnsExceededError,
31
33
  handleToolError
32
- } from "./chunk-5R4SBCX6.js";
34
+ } from "./chunk-SL5MOGQH.js";
33
35
  import {
36
+ ORPHAN_TOOL_USE_REPAIR_REASON,
37
+ buildSyntheticToolResponseParts,
34
38
  createDuplicateProviderToolCallResponse,
39
+ detectLoopSentinel,
40
+ detectTurnInterruption,
35
41
  executeToolCall,
42
+ findRepeatedDuplicateProviderToolCall,
43
+ isSystemReminderContent,
44
+ markDuplicateProviderToolCallResponseSent,
36
45
  parseAndFormatApiError,
37
46
  promptIdContext,
38
47
  restoreWorktreeContext
39
- } from "./chunk-PXFFKNCO.js";
48
+ } from "./chunk-RIP623NO.js";
40
49
  import {
41
50
  isTelemetrySdkInitialized,
42
51
  shutdownTelemetry,
43
52
  uiTelemetryService
44
- } from "./chunk-WA5OJGFL.js";
53
+ } from "./chunk-SS6WJMQK.js";
45
54
  import {
46
55
  ToolNames
47
- } from "./chunk-TOEGRAVX.js";
56
+ } from "./chunk-BX5YO7UW.js";
48
57
  import {
49
58
  FatalInputError,
50
59
  createDebugLogger
51
- } from "./chunk-C4K3FEQ2.js";
60
+ } from "./chunk-UX4SGCGN.js";
52
61
  import {
53
62
  init_esbuild_shims
54
63
  } from "./chunk-A4BMJM77.js";
@@ -72,6 +81,7 @@ var LOOP_TYPE_LABELS = {
72
81
  ["repetitive_thoughts" /* REPETITIVE_THOUGHTS */]: "the model repeated the same reasoning thought",
73
82
  ["read_file_loop" /* READ_FILE_LOOP */]: "the model spent too many consecutive calls reading files without making progress",
74
83
  ["action_stagnation" /* ACTION_STAGNATION */]: "the model kept calling the same tool without making progress",
84
+ ["shell_command_stagnation" /* SHELL_COMMAND_STAGNATION */]: "the model repeated similar shell inspection commands without making progress",
75
85
  ["global_tool_call_duplicate" /* GLOBAL_TOOL_CALL_DUPLICATE */]: "the model repeated the same tool call across the turn, even when not back-to-back",
76
86
  ["alternating_tool_call_pattern" /* ALTERNATING_TOOL_CALL_PATTERN */]: "the model alternated between the same two tool calls in a repeating pattern",
77
87
  ["turn_tool_call_cap" /* TURN_TOOL_CALL_CAP */]: "the model exceeded the maximum number of tool calls allowed in a single turn"
@@ -79,11 +89,26 @@ var LOOP_TYPE_LABELS = {
79
89
  function formatLoopDetectedMessage(loopType) {
80
90
  const reason = loopType ? LOOP_TYPE_LABELS[loopType] : void 0;
81
91
  const detail = reason ? ` (${loopType}: ${reason})` : "";
82
- const isAlwaysOn = loopType === "turn_tool_call_cap" /* TURN_TOOL_CALL_CAP */ || loopType === "consecutive_identical_tool_calls" /* CONSECUTIVE_IDENTICAL_TOOL_CALLS */;
92
+ const isAlwaysOn = loopType === "turn_tool_call_cap" /* TURN_TOOL_CALL_CAP */ || loopType === "consecutive_identical_tool_calls" /* CONSECUTIVE_IDENTICAL_TOOL_CALLS */ || loopType === "shell_command_stagnation" /* SHELL_COMMAND_STAGNATION */ || loopType === "global_tool_call_duplicate" /* GLOBAL_TOOL_CALL_DUPLICATE */;
83
93
  const hint = isAlwaysOn ? " This is an always-on guard and cannot be disabled via `model.skipLoopDetection`." : " Set the `model.skipLoopDetection` setting to true to disable.";
84
94
  return `Loop detection halted the run${detail}.${hint}`;
85
95
  }
86
96
  __name(formatLoopDetectedMessage, "formatLoopDetectedMessage");
97
+ function skipHeadlessLoopSentinel(scheduler, job) {
98
+ if (!detectLoopSentinel(job.prompt)) {
99
+ return false;
100
+ }
101
+ if (job.recurring && !job.durable) {
102
+ debugLogger.debug(
103
+ "skipHeadlessLoopSentinel: cleaning up recurring session loop.md cron in headless mode",
104
+ { jobId: job.id }
105
+ );
106
+ void scheduler.delete(job.id).catch(() => {
107
+ });
108
+ }
109
+ return true;
110
+ }
111
+ __name(skipHeadlessLoopSentinel, "skipHeadlessLoopSentinel");
87
112
  function emitLoopDetectedMessage(config, loopType) {
88
113
  const message = formatLoopDetectedMessage(loopType);
89
114
  if (config.getOutputFormat() !== "text" /* TEXT */) {
@@ -132,6 +157,10 @@ async function runNonInteractive(config, settings, input, prompt_id, options = {
132
157
  } else {
133
158
  adapter = new JsonOutputAdapter(config);
134
159
  }
160
+ const emitResult = /* @__PURE__ */ __name((result) => {
161
+ adapter.emitResult(result);
162
+ options.onResultEmitted?.();
163
+ }, "emitResult");
135
164
  const sessionId = config.getSessionId();
136
165
  const permissionMode = config.getApprovalMode();
137
166
  let turnCount = 0;
@@ -247,6 +276,7 @@ ${reason}
247
276
  manager.getEventEmitter().on("teammate_approval_request" /* TEAMMATE_APPROVAL_REQUEST */, approvalListener);
248
277
  }
249
278
  }, "onTeamManagerChangeHandler");
279
+ let continueSendType = null;
250
280
  try {
251
281
  process.stdout.on("error", stdoutErrorHandler);
252
282
  process.on("SIGINT", shutdownHandler);
@@ -265,6 +295,49 @@ ${reason}
265
295
  let initialPartList = extractPartsFromUserMessage(
266
296
  options.userMessage
267
297
  );
298
+ if (options.continueInterrupted) {
299
+ const detection = detectTurnInterruption(
300
+ geminiClient.getChat().getHistory()
301
+ );
302
+ debugLogger.info("[runNonInteractive] continueInterrupted detection", {
303
+ kind: detection.kind,
304
+ partsCount: detection.kind === "interrupted_prompt" ? detection.parts.length : 0,
305
+ danglingCallCount: detection.kind === "interrupted_turn" ? detection.danglingCalls.length : 0
306
+ });
307
+ if (detection.kind === "none") {
308
+ await emitNonInteractiveFinalMessage({
309
+ message: "No interrupted turn to continue.",
310
+ isError: false,
311
+ adapter,
312
+ config,
313
+ startTimeMs: startTime
314
+ });
315
+ return 0;
316
+ }
317
+ if (detection.kind === "interrupted_prompt") {
318
+ initialPartList = detection.parts;
319
+ continueSendType = "retry" /* Retry */;
320
+ } else {
321
+ initialPartList = buildSyntheticToolResponseParts(
322
+ detection.danglingCalls,
323
+ ORPHAN_TOOL_USE_REPAIR_REASON
324
+ );
325
+ continueSendType = "toolResult" /* ToolResult */;
326
+ }
327
+ const reminderParts = buildInitialSystemReminders(config);
328
+ if (reminderParts.length > 0 && initialPartList) {
329
+ const continuationParts = normalizePartList(initialPartList);
330
+ const hasSystemReminderPart = continuationParts.some(
331
+ (part) => isSystemReminderContent({ role: "user", parts: [part] })
332
+ );
333
+ if (!hasSystemReminderPart) {
334
+ initialPartList = insertAfterFunctionResponses(
335
+ continuationParts,
336
+ reminderParts
337
+ );
338
+ }
339
+ }
340
+ }
268
341
  if (!initialPartList) {
269
342
  let slashHandled = false;
270
343
  if (isSlashCommand(input)) {
@@ -343,13 +416,13 @@ ${text}
343
416
  };
344
417
  return Array.isArray(existing) ? [reminderPart, ...existing] : [reminderPart, existing];
345
418
  }, "withReminder");
346
- const startupNotice = config.consumePendingStartupWorktreeNotice();
419
+ const startupNotice = options.continueInterrupted ? null : config.consumePendingStartupWorktreeNotice();
347
420
  if (startupNotice) {
348
421
  initialPartList = withReminder(initialPartList, startupNotice);
349
422
  adapter.emitSystemMessage("worktree_started", {
350
423
  notice: startupNotice
351
424
  });
352
- } else if (config.getResumedSessionData()) {
425
+ } else if (!options.continueInterrupted && config.getResumedSessionData()) {
353
426
  try {
354
427
  const sessionPath = config.getSessionService().getWorktreeSessionPath(sessionId);
355
428
  const restored = await restoreWorktreeContext(sessionPath);
@@ -451,7 +524,7 @@ ${text}
451
524
  const metrics = uiTelemetryService.getMetrics();
452
525
  const usage = computeUsageFromMetrics(metrics);
453
526
  const stats = outputFormat === "json" /* JSON */ ? uiTelemetryService.getMetrics() : void 0;
454
- adapter.emitResult({
527
+ emitResult({
455
528
  isError: false,
456
529
  durationMs: Date.now() - startTime,
457
530
  apiDurationMs: totalApiDurationMs,
@@ -484,9 +557,11 @@ ${text}
484
557
  return 1;
485
558
  }, "emitLoopDetectedResult");
486
559
  const handledProviderToolCallIds = geminiClient.getHistoryFunctionResponseIds();
560
+ const duplicateProviderToolCallResponseIds = /* @__PURE__ */ new Set();
487
561
  const processToolCallBatch = /* @__PURE__ */ __name(async (batchRequests, setModelOverride) => {
488
562
  const toolResponseParts = [];
489
563
  const structuredOutputActive = config.getJsonSchema() && batchRequests.some((r) => r.name === ToolNames.STRUCTURED_OUTPUT);
564
+ const getProviderResponseId = /* @__PURE__ */ __name((request) => request.providerCallId ?? (structuredOutputActive ? void 0 : request.callId || void 0), "getProviderResponseId");
490
565
  const seenBatchCallIds = /* @__PURE__ */ new Set();
491
566
  const duplicateBatchRequests = [];
492
567
  const uniqueBatchRequests = batchRequests.filter((request) => {
@@ -505,22 +580,43 @@ ${text}
505
580
  }
506
581
  return true;
507
582
  });
583
+ const repeatedDuplicateRequest = findRepeatedDuplicateProviderToolCall(
584
+ [...uniqueBatchRequests, ...duplicateBatchRequests],
585
+ getProviderResponseId,
586
+ handledProviderToolCallIds,
587
+ duplicateProviderToolCallResponseIds
588
+ );
589
+ if (repeatedDuplicateRequest) {
590
+ const providerCallId = repeatedDuplicateRequest.providerCallId ?? repeatedDuplicateRequest.callId;
591
+ debugLogger.debug(
592
+ `[runNonInteractive] Dropping batch after repeated duplicate provider tool-call id: ${providerCallId} (tool: ${repeatedDuplicateRequest.name})`
593
+ );
594
+ return {
595
+ responseParts: [],
596
+ repeatedDuplicateProviderToolCall: true
597
+ };
598
+ }
508
599
  const respondedRequests = /* @__PURE__ */ new Set();
509
600
  const executableBatchRequests = [];
510
601
  const duplicatePendingResponses = [];
511
602
  for (const requestInfo of uniqueBatchRequests) {
512
- if (!requestInfo.providerCallId) {
603
+ const providerCallId = getProviderResponseId(requestInfo);
604
+ if (!providerCallId) {
513
605
  executableBatchRequests.push(requestInfo);
514
606
  continue;
515
607
  }
516
- if (!handledProviderToolCallIds.has(requestInfo.providerCallId)) {
517
- handledProviderToolCallIds.add(requestInfo.providerCallId);
608
+ if (!handledProviderToolCallIds.has(providerCallId)) {
609
+ handledProviderToolCallIds.add(providerCallId);
518
610
  executableBatchRequests.push(requestInfo);
519
611
  continue;
520
612
  }
613
+ markDuplicateProviderToolCallResponseSent(
614
+ providerCallId,
615
+ duplicateProviderToolCallResponseIds
616
+ );
521
617
  const toolResponse = createDuplicateProviderToolCallResponse(requestInfo);
522
618
  debugLogger.debug(
523
- `[runNonInteractive] Suppressing duplicate provider tool-call id: ${requestInfo.providerCallId} (tool: ${requestInfo.name})`
619
+ `[runNonInteractive] Suppressing duplicate provider tool-call id: ${providerCallId} (tool: ${requestInfo.name})`
524
620
  );
525
621
  respondedRequests.add(requestInfo);
526
622
  adapter.emitToolResult(requestInfo, toolResponse);
@@ -615,11 +711,20 @@ ${text}
615
711
  }
616
712
  }
617
713
  for (const requestInfo of duplicateBatchRequests) {
714
+ const providerCallId = getProviderResponseId(requestInfo);
715
+ if (!providerCallId) continue;
716
+ markDuplicateProviderToolCallResponseSent(
717
+ providerCallId,
718
+ duplicateProviderToolCallResponseIds
719
+ );
618
720
  const toolResponse = createDuplicateProviderToolCallResponse(requestInfo);
619
721
  adapter.emitToolResult(requestInfo, toolResponse);
620
722
  toolResponseParts.push(...toolResponse.responseParts);
621
723
  }
622
- return toolResponseParts;
724
+ return {
725
+ responseParts: toolResponseParts,
726
+ repeatedDuplicateProviderToolCall: false
727
+ };
623
728
  }, "processToolCallBatch");
624
729
  while (true) {
625
730
  let isTeammateTurn = false;
@@ -643,7 +748,7 @@ ${text}
643
748
  }
644
749
  let sendType;
645
750
  if (isFirstTurn) {
646
- sendType = options.sendMessageType ?? "userQuery" /* UserQuery */;
751
+ sendType = continueSendType ?? options.sendMessageType ?? "userQuery" /* UserQuery */;
647
752
  } else if (isTeammateTurn) {
648
753
  sendType = "teammate" /* Teammate */;
649
754
  } else {
@@ -703,15 +808,22 @@ ${text}
703
808
  return emitLoopDetectedResult();
704
809
  }
705
810
  if (toolCallRequests.length > 0) {
706
- const toolResponseParts = await processToolCallBatch(
707
- toolCallRequests,
708
- (override) => {
709
- modelOverride = override;
710
- }
711
- );
811
+ const {
812
+ responseParts: toolResponseParts,
813
+ repeatedDuplicateProviderToolCall
814
+ } = await processToolCallBatch(toolCallRequests, (override) => {
815
+ modelOverride = override;
816
+ });
712
817
  if (structuredSubmission !== void 0) {
713
818
  return emitStructuredSuccess();
714
819
  }
820
+ if (repeatedDuplicateProviderToolCall && toolResponseParts.length === 0) {
821
+ loopDetectedMessage = emitLoopDetectedMessage(
822
+ config,
823
+ "global_tool_call_duplicate" /* GLOBAL_TOOL_CALL_DUPLICATE */
824
+ );
825
+ return emitLoopDetectedResult();
826
+ }
715
827
  currentMessages = [{ role: "user", parts: toolResponseParts }];
716
828
  hasUnsentToolResponse = true;
717
829
  } else {
@@ -837,7 +949,10 @@ ${text}
837
949
  return;
838
950
  }
839
951
  if (itemToolCallRequests.length > 0) {
840
- const itemToolResponseParts = await processToolCallBatch(
952
+ const {
953
+ responseParts: itemToolResponseParts,
954
+ repeatedDuplicateProviderToolCall
955
+ } = await processToolCallBatch(
841
956
  itemToolCallRequests,
842
957
  (override) => {
843
958
  itemModelOverride = override;
@@ -846,6 +961,14 @@ ${text}
846
961
  if (structuredSubmission !== void 0) {
847
962
  return;
848
963
  }
964
+ if (repeatedDuplicateProviderToolCall && itemToolResponseParts.length === 0) {
965
+ loopDetectedMessage = emitLoopDetectedMessage(
966
+ config,
967
+ "global_tool_call_duplicate" /* GLOBAL_TOOL_CALL_DUPLICATE */
968
+ );
969
+ loopDetected = true;
970
+ return;
971
+ }
849
972
  itemMessages = [{ role: "user", parts: itemToolResponseParts }];
850
973
  } else {
851
974
  break;
@@ -870,6 +993,9 @@ ${text}
870
993
  }, "drainLocalQueue");
871
994
  const scheduler = !config.isCronEnabled() ? null : config.getCronScheduler();
872
995
  if (scheduler) {
996
+ scheduler.setSkipDurableFire(
997
+ (job) => detectLoopSentinel(job.prompt) !== null
998
+ );
873
999
  await scheduler.enableDurable(config.getSessionId()).catch((err) => {
874
1000
  debugLogger.warn(
875
1001
  `Durable cron init failed \u2014 persistent tasks will not fire in this run: ${err}`
@@ -912,6 +1038,10 @@ ${text}
912
1038
  reject(err);
913
1039
  }, "onDrainError");
914
1040
  scheduler.start((job) => {
1041
+ if (skipHeadlessLoopSentinel(scheduler, job)) {
1042
+ checkCronDone();
1043
+ return;
1044
+ }
915
1045
  const label = job.prompt.slice(0, 40);
916
1046
  localQueue.push({
917
1047
  displayText: `${job.cronExpr === "@wakeup" ? "Loop" : "Cron"}: ${label}`,
@@ -953,7 +1083,7 @@ ${text}
953
1083
  const previewSnippet = plainTextPreview.trim();
954
1084
  const previewSuffix = previewSnippet ? ` Output preview (${plainTextPreview.length}${plainTextPreview.length >= PLAIN_TEXT_PREVIEW_LIMIT ? "+" : ""} chars): ${JSON.stringify(previewSnippet)}.` : "";
955
1085
  const errorMessage = `Model produced plain text instead of calling the structured_output tool as required by --json-schema after ${turnCount} turn(s).` + previewSuffix;
956
- adapter.emitResult({
1086
+ emitResult({
957
1087
  isError: true,
958
1088
  durationMs: Date.now() - startTime,
959
1089
  apiDurationMs: totalApiDurationMs,
@@ -964,7 +1094,7 @@ ${text}
964
1094
  });
965
1095
  return 1;
966
1096
  }
967
- adapter.emitResult({
1097
+ emitResult({
968
1098
  isError: false,
969
1099
  durationMs: Date.now() - startTime,
970
1100
  apiDurationMs: totalApiDurationMs,
@@ -991,7 +1121,7 @@ ${text}
991
1121
  const skipAdapterEmit = outputFormat === "text" /* TEXT */ && isAlreadyReportedError;
992
1122
  if (!skipAdapterEmit) {
993
1123
  try {
994
- adapter.emitResult({
1124
+ emitResult({
995
1125
  isError: true,
996
1126
  durationMs: Date.now() - startTime,
997
1127
  apiDurationMs: totalApiDurationMs,
@@ -1043,6 +1173,7 @@ ${text}
1043
1173
  __name(runNonInteractive, "runNonInteractive");
1044
1174
 
1045
1175
  export {
1176
+ skipHeadlessLoopSentinel,
1046
1177
  runNonInteractive
1047
1178
  };
1048
1179
  /**
@@ -7,28 +7,28 @@ import {
7
7
  require_jsx_runtime,
8
8
  use_stdin_default,
9
9
  use_stdout_default
10
- } from "./chunk-UAARJR2G.js";
10
+ } from "./chunk-WQT5SOI6.js";
11
11
  import {
12
12
  require_react
13
13
  } from "./chunk-KYMBIKIW.js";
14
14
  import {
15
15
  sanitizeFilenameForDisplay
16
- } from "./chunk-CGOMICBE.js";
16
+ } from "./chunk-BSZEQNUA.js";
17
17
  import {
18
18
  t
19
- } from "./chunk-5JZLXFPD.js";
19
+ } from "./chunk-MTHMXSNT.js";
20
20
  import {
21
21
  fetchGitDiff,
22
22
  findProviderByCredentials,
23
23
  resolveMetadataKey
24
- } from "./chunk-PXFFKNCO.js";
24
+ } from "./chunk-RIP623NO.js";
25
25
  import {
26
26
  KittySequenceOverflowEvent,
27
27
  logKittySequenceOverflow
28
- } from "./chunk-WA5OJGFL.js";
28
+ } from "./chunk-SS6WJMQK.js";
29
29
  import {
30
30
  createDebugLogger
31
- } from "./chunk-C4K3FEQ2.js";
31
+ } from "./chunk-UX4SGCGN.js";
32
32
  import {
33
33
  init_esbuild_shims
34
34
  } from "./chunk-A4BMJM77.js";
@@ -759,6 +759,7 @@ var useFocus = /* @__PURE__ */ __name(() => {
759
759
  // packages/cli/src/ui/contexts/KeypressContext.tsx
760
760
  var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
761
761
  var ESC3 = "\x1B";
762
+ var OPTION_T_COMPOSED_GLYPH = "\u2020";
762
763
  var PASTE_MODE_PREFIX = `${ESC3}[200~`;
763
764
  var PASTE_MODE_SUFFIX = `${ESC3}[201~`;
764
765
  var KITTY_SEQUENCE_TIMEOUT_MS = 200;
@@ -1529,6 +1530,10 @@ function KeypressProvider({
1529
1530
  if (key.name === "return" && key.sequence === `${ESC3}\r`) {
1530
1531
  key.meta = true;
1531
1532
  }
1533
+ if (process.platform === "darwin" && !isPaste && key.sequence === OPTION_T_COMPOSED_GLYPH) {
1534
+ key.name = "t";
1535
+ key.meta = true;
1536
+ }
1532
1537
  broadcast({ ...key, paste: isPaste });
1533
1538
  }, "handleKeypress");
1534
1539
  const clearRawFlushTimeout = /* @__PURE__ */ __name(() => {
@@ -2036,7 +2041,11 @@ function convertToHistoryItems(conversation, config) {
2036
2041
  });
2037
2042
  currentToolGroup = [];
2038
2043
  }
2039
- items.push({ type: "gemini", text });
2044
+ items.push({
2045
+ type: "gemini",
2046
+ text,
2047
+ timestamp: new Date(record.timestamp).getTime()
2048
+ });
2040
2049
  }
2041
2050
  for (const fc of functionCalls) {
2042
2051
  const tool = getTool(config, fc.name);
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  BaseJsonOutputAdapter
5
- } from "./chunk-J6AW7O5D.js";
5
+ } from "./chunk-WHDQZHRU.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-A4BMJM77.js";
@@ -1,9 +1,12 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
+ import {
4
+ isTlsVerificationDisabled
5
+ } from "./chunk-E6XQPQXW.js";
3
6
  import {
4
7
  getErrorMessage,
5
8
  isNodeError
6
- } from "./chunk-C4K3FEQ2.js";
9
+ } from "./chunk-UX4SGCGN.js";
7
10
  import {
8
11
  init_esbuild_shims
9
12
  } from "./chunk-A4BMJM77.js";
@@ -146,8 +149,11 @@ function formatFetchErrorForUser(error, options = {}) {
146
149
  "Troubleshooting:",
147
150
  ...options.url ? [`- Confirm you can reach ${options.url} from this machine.`] : [],
148
151
  "- If you are behind a proxy, pass `--proxy <url>` (or set `proxy` in settings).",
149
- ...shouldShowTlsHint ? [
150
- "- If your network uses a corporate TLS inspection CA, set `NODE_EXTRA_CA_CERTS` to your CA bundle."
152
+ ...shouldShowTlsHint ? isTlsVerificationDisabled() ? [
153
+ "- TLS verification is already disabled (`--insecure` / `QWEN_TLS_INSECURE`), so this is likely a network or protocol issue rather than a certificate trust problem."
154
+ ] : [
155
+ "- If your network uses a corporate TLS inspection CA, set `NODE_EXTRA_CA_CERTS` to your CA bundle.",
156
+ "- For a trusted self-signed endpoint, pass `--insecure` (or set `QWEN_TLS_INSECURE=1`) to skip certificate verification."
151
157
  ] : []
152
158
  ];
153
159
  return `${fullErrorMessage}${hintLines.join("\n")}`;