@qwen-code/qwen-code 0.19.2 → 0.19.3

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 (282) hide show
  1. package/bundled/extension-creator/SKILL.md +357 -0
  2. package/bundled/loop/SKILL.md +12 -7
  3. package/bundled/loop/SKILL.test.ts +32 -0
  4. package/bundled/qc-helper/SKILL.md +14 -14
  5. package/bundled/qc-helper/docs/configuration/auth.md +11 -11
  6. package/bundled/qc-helper/docs/configuration/model-providers.md +13 -13
  7. package/bundled/qc-helper/docs/configuration/settings.md +60 -60
  8. package/bundled/qc-helper/docs/features/commands.md +108 -77
  9. package/bundled/qc-helper/docs/features/memory.md +52 -0
  10. package/bundled/qc-helper/docs/qwen-serve.md +24 -2
  11. package/bundled/qc-helper/docs/support/tos-privacy.md +16 -3
  12. package/chunks/{MaxSizedBox-7RERNLFK.js → MaxSizedBox-QNF3EIGU.js} +29 -30
  13. package/chunks/{StandaloneSessionPicker-S22XBSN6.js → StandaloneSessionPicker-Z52JTYST.js} +42 -40
  14. package/chunks/{acpAgent-4MCETHF2.js → acpAgent-7RZUOWOM.js} +406 -118
  15. package/chunks/{agent-K3ENVYSB.js → agent-4FG7WTHJ.js} +24 -26
  16. package/chunks/{agent-headless-HO3V3A3A.js → agent-headless-RQ5BTX3G.js} +24 -26
  17. package/chunks/{anthropicContentGenerator-E3TQ5XJJ.js → anthropicContentGenerator-PFITVL7Y.js} +31 -13
  18. package/chunks/{artifact-tool-QA4KRO3B.js → artifact-tool-D2X7G3C3.js} +2 -2
  19. package/chunks/{askUserQuestion-HMWXW6VN.js → askUserQuestion-UGETICJQ.js} +2 -2
  20. package/chunks/{bridge-4LV2HBH2.js → bridge-JL2PMCIW.js} +29 -32
  21. package/chunks/{ca-7WC7ELX6.js → ca-IUFWESZL.js} +1 -0
  22. package/chunks/{chunk-3UALQ56H.js → chunk-3227DZO4.js} +1 -1
  23. package/chunks/{chunk-JTYRZODB.js → chunk-3TV3HUWZ.js} +16 -7
  24. package/chunks/{chunk-NYOHZYHM.js → chunk-4LUZAKMK.js} +45 -3
  25. package/chunks/{chunk-EL5IHQON.js → chunk-4QK3O43S.js} +6 -27
  26. package/chunks/chunk-5GOVVXEV.js +73 -0
  27. package/chunks/{chunk-R36VMVEP.js → chunk-6V4NZFUS.js} +5 -5
  28. package/chunks/{chunk-XKBP7M7A.js → chunk-ADCIHOQZ.js} +138 -28
  29. package/chunks/chunk-BC3C4F3Q.js +40 -0
  30. package/chunks/{chunk-CGEGHF2C.js → chunk-BKXBARJZ.js} +1 -1
  31. package/chunks/chunk-BMFMJINR.js +45 -0
  32. package/chunks/chunk-BTLJ2MF5.js +690 -0
  33. package/chunks/{chunk-OIC6S73E.js → chunk-BUUQ5HPX.js} +1 -1
  34. package/chunks/{chunk-2BIF2NVV.js → chunk-BVSVIN45.js} +2 -2
  35. package/chunks/{chunk-JXQ23SNT.js → chunk-BW4KCQFD.js} +54 -2
  36. package/chunks/{chunk-TOEGRAVX.js → chunk-BX5YO7UW.js} +17 -5
  37. package/chunks/{chunk-5RVSM6NW.js → chunk-BXSHL2SF.js} +1 -1
  38. package/chunks/{chunk-UN3C6GOR.js → chunk-CF6BB3LT.js} +0 -107
  39. package/chunks/{chunk-Z7XXFPGP.js → chunk-CKQA6AWF.js} +1 -1
  40. package/chunks/{chunk-I2RFAW6Q.js → chunk-CNLEDYE3.js} +7 -5
  41. package/chunks/{chunk-PRYMDRBV.js → chunk-DDMOU62Q.js} +1 -1
  42. package/chunks/chunk-EDMZZFDU.js +11213 -0
  43. package/chunks/{chunk-IRJWHZWU.js → chunk-EJYJYJZ2.js} +70 -3
  44. package/chunks/{chunk-OQHQHJRK.js → chunk-F3ZYSEY6.js} +151 -4775
  45. package/chunks/chunk-FKAVULLM.js +4909 -0
  46. package/chunks/{chunk-TZM5JIAX.js → chunk-FNJ7BDPH.js} +6 -6
  47. package/chunks/{chunk-EXMX5YHG.js → chunk-FXKVLFFY.js} +1 -1
  48. package/chunks/{chunk-EX4W6ZYG.js → chunk-GGBIN5K7.js} +1 -1
  49. package/chunks/{chunk-BS64PXY3.js → chunk-GT2FGICD.js} +1 -1
  50. package/chunks/{chunk-HG6YKEBI.js → chunk-HPZTOP4I.js} +75 -23
  51. package/chunks/{chunk-OTBK43JR.js → chunk-HYCC3XM3.js} +1 -1
  52. package/chunks/{chunk-3QFE4OTE.js → chunk-HZT4UCFB.js} +4 -4
  53. package/chunks/{chunk-GYZQA2FO.js → chunk-I2LYBGNI.js} +1 -1
  54. package/chunks/{chunk-TMBPDHXD.js → chunk-I4H7PRWQ.js} +1 -1
  55. package/chunks/{chunk-2BAQ3ACS.js → chunk-J33ZR6OJ.js} +404 -4
  56. package/chunks/{chunk-4W4T77MO.js → chunk-J7FA27RO.js} +109 -6
  57. package/chunks/{chunk-S566HKUS.js → chunk-JE5FVRPC.js} +38 -7
  58. package/chunks/{chunk-CGOMICBE.js → chunk-JJXWTVSK.js} +1 -1
  59. package/chunks/{chunk-EEEZIVFJ.js → chunk-JOLIREYR.js} +1 -1
  60. package/chunks/{chunk-DBZUXSSV.js → chunk-JVHEVCAU.js} +5 -5
  61. package/chunks/chunk-K5XU6E4T.js +167 -0
  62. package/chunks/{chunk-EW6C27XX.js → chunk-KMGMKW5Q.js} +1 -1
  63. package/chunks/{chunk-D5E5TMYH.js → chunk-L7OKCI7T.js} +4 -2
  64. package/chunks/{chunk-ZUAXI2OA.js → chunk-M2U5NM24.js} +188 -11366
  65. package/chunks/{chunk-CI5O6SQL.js → chunk-MNF6S5PR.js} +4 -4
  66. package/chunks/{chunk-FPACXT7T.js → chunk-N4EJFBN5.js} +421 -163
  67. package/chunks/chunk-NDOC6M5S.js +481 -0
  68. package/chunks/{chunk-HGNSRCRB.js → chunk-NL4C3H6C.js} +1 -1
  69. package/chunks/{chunk-GZCJS5WH.js → chunk-O2VBQ3Y2.js} +2 -2
  70. package/chunks/{chunk-VQRYPFCV.js → chunk-O75BHFQW.js} +10 -460
  71. package/chunks/{chunk-WGAEWQTF.js → chunk-ODLIHNOY.js} +1 -2
  72. package/chunks/{chunk-J6AW7O5D.js → chunk-PDE7CSDS.js} +2 -2
  73. package/chunks/{chunk-5R4SBCX6.js → chunk-PR32FRT6.js} +3 -3
  74. package/chunks/{chunk-LLFFKXZZ.js → chunk-QE6KJYLT.js} +56 -29
  75. package/chunks/{chunk-3RJ3ZPPR.js → chunk-QI7GOGJR.js} +7 -7
  76. package/chunks/{chunk-XU5P23GN.js → chunk-QLDPRILK.js} +3 -3
  77. package/chunks/{chunk-WA5OJGFL.js → chunk-QNKBEJO2.js} +359 -76
  78. package/chunks/{chunk-UAARVVBI.js → chunk-QWFNTRH4.js} +1 -1
  79. package/chunks/chunk-QYUE6W3T.js +123 -0
  80. package/chunks/{chunk-5JZLXFPD.js → chunk-R5OP2ATH.js} +11 -11
  81. package/chunks/{chunk-BNXANYLH.js → chunk-RD6YJJJ6.js} +81 -1
  82. package/chunks/{chunk-2TJ3YN6Q.js → chunk-RRFZXMYP.js} +380 -400
  83. package/chunks/{chunk-ZN5T4BHI.js → chunk-RYLJU2DY.js} +1 -1
  84. package/chunks/{chunk-ZD3NW5KL.js → chunk-S7AKE7HL.js} +3 -3
  85. package/chunks/{chunk-BG4BIP7F.js → chunk-SBBN4BWR.js} +4 -2
  86. package/chunks/{chunk-T2VDEFUU.js → chunk-SKQZZVAV.js} +2 -2
  87. package/chunks/{chunk-USGMPVOY.js → chunk-SLNKLLEO.js} +14 -9
  88. package/chunks/chunk-SMXULRAN.js +37 -0
  89. package/chunks/{chunk-PF523XJX.js → chunk-SMYQZVZ3.js} +1 -1
  90. package/chunks/{chunk-I5T6PIBQ.js → chunk-STUWFKGD.js} +1001 -887
  91. package/chunks/{chunk-UAARJR2G.js → chunk-T4T2FNV4.js} +2 -2
  92. package/chunks/{chunk-F6XNTYNE.js → chunk-U3KSMM7G.js} +8 -4
  93. package/chunks/chunk-UFLGERMB.js +813 -0
  94. package/chunks/{chunk-BGUDAULQ.js → chunk-UO5GVXQE.js} +5 -5
  95. package/chunks/{chunk-C4K3FEQ2.js → chunk-UX4SGCGN.js} +32 -3
  96. package/chunks/{chunk-RS4HRC75.js → chunk-UYT3MWEB.js} +85 -8
  97. package/chunks/{chunk-VYFMN7C6.js → chunk-VBZ452JT.js} +113 -24
  98. package/chunks/{chunk-KBXLIVWQ.js → chunk-VVLOGDB6.js} +2 -2
  99. package/chunks/{chunk-TXVGVZYR.js → chunk-XJYUPHRC.js} +3 -3
  100. package/chunks/{chunk-2JD55C6G.js → chunk-Y6YMRS3U.js} +2 -2
  101. package/chunks/{chunk-PXFFKNCO.js → chunk-YAINVQ3Q.js} +2961 -1349
  102. package/chunks/{chunk-X6EDWN44.js → chunk-ZP6UKOPB.js} +1 -1
  103. package/chunks/{computer-use-6BBRNT6S.js → computer-use-JGB36FDW.js} +103 -52
  104. package/chunks/{contextCommand-UJAJ6N57.js → contextCommand-WYU6OQ2F.js} +26 -28
  105. package/chunks/{cron-create-4KQE6YLH.js → cron-create-SKEY55RG.js} +4 -4
  106. package/chunks/{cron-delete-THME66UP.js → cron-delete-I3NAT32Z.js} +6 -6
  107. package/chunks/{cron-list-7A54SJ5N.js → cron-list-6XRRL6TH.js} +5 -5
  108. package/chunks/daemon-status-provider-HH2EC5FI.js +65 -0
  109. package/chunks/{de-ACHALDED.js → de-EOW5PVHF.js} +1 -0
  110. package/chunks/{dist-BOOH5JWN.js → dist-663NZ6MI.js} +1 -1
  111. package/chunks/{dist-QHJRBCMP.js → dist-J37VXPLD.js} +46 -5
  112. package/chunks/{dist-OD2FY543.js → dist-LB6OGPVM.js} +1 -1
  113. package/chunks/{dist-BD27IA3L.js → dist-NHEYYB2B.js} +2 -2
  114. package/chunks/{dist-QFFZWACU.js → dist-PQPZ5Q4N.js} +1 -1
  115. package/chunks/{earlyInputCapture-X6KMCSHD.js → earlyInputCapture-44RISVVJ.js} +25 -27
  116. package/chunks/{edit-7J6WXARF.js → edit-NN6GM5DT.js} +68 -30
  117. package/chunks/{en-NCUBOJOY.js → en-HPWEJBTR.js} +8 -0
  118. package/chunks/{enter-worktree-KULCKJPJ.js → enter-worktree-PB3O2C7D.js} +24 -26
  119. package/chunks/{enterPlanMode-H2CIOLMH.js → enterPlanMode-YQFNNSUA.js} +24 -26
  120. package/chunks/{errors-6G2JYR54.js → errors-LS7XU5DZ.js} +26 -28
  121. package/chunks/{exit-worktree-ECBWBVC5.js → exit-worktree-E2FTNSBK.js} +24 -26
  122. package/chunks/{exitPlanMode-DQV56GTW.js → exitPlanMode-GLYK2BUB.js} +24 -26
  123. package/chunks/{fast-path-35JJFS3C.js → fast-path-WQ6M7LI7.js} +4 -4
  124. package/chunks/{fast-path-settings-TSVI53EB.js → fast-path-settings-OAGU3X5H.js} +3 -2
  125. package/chunks/{fr-GVKZ27MF.js → fr-BN5NKSAC.js} +1 -0
  126. package/chunks/{gemini-NDTG7WAX.js → gemini-2YFLVA2M.js} +204 -103
  127. package/chunks/{geminiContentGenerator-XTG6SFLA.js → geminiContentGenerator-XV6SV6CD.js} +4 -4
  128. package/chunks/{glob-SJ2JBZK4.js → glob-2H6CDDMK.js} +24 -26
  129. package/chunks/{grep-BRMWFEWR.js → grep-VXIUXM3C.js} +24 -26
  130. package/chunks/{headlessSafetyWarnings-LJ6FJX77.js → headlessSafetyWarnings-TBE35GJ4.js} +24 -26
  131. package/chunks/initializer-2Y7SLOKV.js +61 -0
  132. package/chunks/{ja-FKZ2WZ4D.js → ja-7DEUB2TS.js} +1 -0
  133. package/chunks/{keychain-token-storage-CSYMNRPP.js → keychain-token-storage-YLMDLKXT.js} +2 -2
  134. package/chunks/list-ZAFHZ7OS.js +65 -0
  135. package/chunks/loadedSettingsAdapter-6KJXD6M3.js +60 -0
  136. package/chunks/{loop-wakeup-33GPXJLA.js → loop-wakeup-CITGGQHA.js} +7 -7
  137. package/chunks/{ls-BYQY7RVV.js → ls-R5WP4BGZ.js} +4 -4
  138. package/chunks/{lsp-X54RO4IV.js → lsp-GSICJMMW.js} +2 -2
  139. package/chunks/{monitor-DH7KFSJV.js → monitor-HKLRS2HQ.js} +24 -26
  140. package/chunks/nonInteractiveCli-5W4GIZQM.js +96 -0
  141. package/chunks/{notebook-edit-D4R4ZLMA.js → notebook-edit-Y6SKSGTT.js} +52 -26
  142. package/chunks/{openaiContentGenerator-F74IPQ6E.js → openaiContentGenerator-J7G2FYJT.js} +13 -14
  143. package/chunks/{pt-SY5NCFGR.js → pt-TNZRNLQB.js} +1 -0
  144. package/chunks/{qwenContentGenerator-ATTK5P4D.js → qwenContentGenerator-5XIEM5GV.js} +26 -28
  145. package/chunks/{qwenOAuth2-K4AASPCV.js → qwenOAuth2-AG3PFFLZ.js} +4 -4
  146. package/chunks/{read-file-767G23OY.js → read-file-J7D552ZJ.js} +9 -10
  147. package/chunks/{read-mcp-resource-I5HCZJ6X.js → read-mcp-resource-DQQW7H7T.js} +2 -2
  148. package/chunks/{ripGrep-4OMMGSWX.js → ripGrep-IEIFIWP4.js} +24 -26
  149. package/chunks/{ru-FWNXJG4F.js → ru-NIAUBKCN.js} +1 -0
  150. package/chunks/{run-qwen-serve-REKSTYRA.js → run-qwen-serve-SGEEVMXD.js} +149 -41
  151. package/chunks/{scheduler-UNTFDQLG.js → scheduler-7CQI3S4Q.js} +24 -26
  152. package/chunks/{send-message-2DAFXEYP.js → send-message-EE4TWKVU.js} +2 -2
  153. package/chunks/{serve-KZ56QB5S.js → serve-V6GVZR6U.js} +31 -31
  154. package/chunks/{server-BV5TZUMU.js → server-4QMUWXPW.js} +6996 -5864
  155. package/chunks/{session-OIBXFSGD.js → session-NRO7UFOY.js} +62 -57
  156. package/chunks/{settings-WJTCBIRA.js → settings-SGWRDQSC.js} +30 -30
  157. package/chunks/{shell-WC52IBHW.js → shell-62ANGIHL.js} +24 -26
  158. package/chunks/{skill-U7F7JR4M.js → skill-VWAQAWW6.js} +39 -13
  159. package/chunks/{spawnChannel-EI2E5BCW.js → spawnChannel-3VHW5EPY.js} +26 -28
  160. package/chunks/{src-4F6FBZFI.js → src-KUV5J5Q2.js} +52 -28
  161. package/chunks/{startInteractiveUI-SFRVB3CE.js → startInteractiveUI-6EYJN3JV.js} +2588 -2371
  162. package/chunks/{syntheticOutput-PPS3HDVA.js → syntheticOutput-T5YHQ6S2.js} +3 -3
  163. package/chunks/{task-create-OUYCA553.js → task-create-BLY7RHXX.js} +6 -6
  164. package/chunks/{task-list-WAX7I2IA.js → task-list-3QUYNVYR.js} +5 -5
  165. package/chunks/{task-stop-CAIL6FNH.js → task-stop-U4RATK2V.js} +2 -2
  166. package/chunks/{task-update-AHEO5OUT.js → task-update-U54O7KJX.js} +6 -6
  167. package/chunks/{team-create-3WC7CIIW.js → team-create-LPOGCPM7.js} +24 -26
  168. package/chunks/{team-delete-HGHFG23B.js → team-delete-LKBYPASD.js} +5 -5
  169. package/chunks/{theme-manager-DICFCT3P.js → theme-manager-LYLGAERF.js} +25 -27
  170. package/chunks/{todoWrite-IFBMN3FH.js → todoWrite-OYXKTVYN.js} +4 -4
  171. package/chunks/{tool-search-L5K7HLER.js → tool-search-YPUFJ3ZQ.js} +102 -18
  172. package/chunks/trustedFolders-5B24TMEA.js +73 -0
  173. package/chunks/types-QX5C3CHJ.js +12 -0
  174. package/chunks/{validateNonInterActiveAuth-GCH4Z6KI.js → validateNonInterActiveAuth-BTDTYOVT.js} +57 -54
  175. package/chunks/{web-fetch-B5IIQ5TT.js → web-fetch-EEB5LZYU.js} +28 -15
  176. package/chunks/{workflow-OB3AND7I.js → workflow-LAWIW5LI.js} +32 -33
  177. package/chunks/workspace-providers-status-PIAFVYHA.js +62 -0
  178. package/chunks/workspace-service-YAIOD4HG.js +71 -0
  179. package/chunks/{write-file-SEXBNDZM.js → write-file-PCV226DJ.js} +63 -30
  180. package/chunks/{zh-RBEGQVQT.js → zh-5EUYXASN.js} +8 -0
  181. package/chunks/{zh-TW-QGAVRXT3.js → zh-TW-TR3XYGE5.js} +8 -0
  182. package/cli-entry.js +20 -9
  183. package/cli.js +6 -6
  184. package/locales/ca.js +2 -0
  185. package/locales/de.js +2 -0
  186. package/locales/en.js +14 -0
  187. package/locales/fr.js +2 -0
  188. package/locales/ja.js +1 -0
  189. package/locales/pt.js +2 -0
  190. package/locales/ru.js +2 -0
  191. package/locales/zh-TW.js +12 -0
  192. package/locales/zh.js +12 -0
  193. package/node_modules/@qwen-code/audio-capture/dist/index.d.ts +35 -0
  194. package/node_modules/@qwen-code/audio-capture/dist/index.js +48 -0
  195. package/node_modules/@qwen-code/audio-capture/dist/index.js.map +1 -0
  196. package/node_modules/@qwen-code/audio-capture/dist/platform.d.ts +7 -0
  197. package/node_modules/@qwen-code/audio-capture/dist/platform.js +18 -0
  198. package/node_modules/@qwen-code/audio-capture/dist/platform.js.map +1 -0
  199. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/LICENSE +21 -0
  200. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/README.md +58 -0
  201. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/SECURITY.md +5 -0
  202. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/bin.js +84 -0
  203. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/build-test.js +19 -0
  204. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/index.js +6 -0
  205. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/node-gyp-build.js +207 -0
  206. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/optional.js +7 -0
  207. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/package.json +43 -0
  208. package/node_modules/@qwen-code/audio-capture/package.json +30 -0
  209. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  210. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  211. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-arm64/@qwen-code+audio-capture.node +0 -0
  212. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-x64/@qwen-code+audio-capture.node +0 -0
  213. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  214. package/package.json +6 -3
  215. package/web-shell/assets/{arc-D_ae_Y9k.js → arc-DA7r8Ueo.js} +1 -1
  216. package/web-shell/assets/{architectureDiagram-3BPJPVTR-BMLRjppa.js → architectureDiagram-3BPJPVTR-ZDUxPtZ2.js} +1 -1
  217. package/web-shell/assets/{blockDiagram-GPEHLZMM-qVDQC8KL.js → blockDiagram-GPEHLZMM-vrtOf1kJ.js} +1 -1
  218. package/web-shell/assets/{c4Diagram-AAUBKEIU-CxWS6MBd.js → c4Diagram-AAUBKEIU-BHFjzIi4.js} +1 -1
  219. package/web-shell/assets/channel-iRo68q4Q.js +1 -0
  220. package/web-shell/assets/{chunk-2J33WTMH-BtNuY5Yp.js → chunk-2J33WTMH-mdeQVz59.js} +1 -1
  221. package/web-shell/assets/{chunk-4BX2VUAB-BU-x368d.js → chunk-4BX2VUAB-BkKMlwBX.js} +1 -1
  222. package/web-shell/assets/{chunk-55IACEB6-DRgTLvBu.js → chunk-55IACEB6-B7bnXNfu.js} +1 -1
  223. package/web-shell/assets/{chunk-727SXJPM-D2aElv7q.js → chunk-727SXJPM-DGz8Mm6i.js} +1 -1
  224. package/web-shell/assets/{chunk-AQP2D5EJ-BwHCMRQ0.js → chunk-AQP2D5EJ-BQAydUNk.js} +1 -1
  225. package/web-shell/assets/{chunk-FMBD7UC4-BMyPH-ku.js → chunk-FMBD7UC4-GHr2LN_p.js} +1 -1
  226. package/web-shell/assets/{chunk-ND2GUHAM-BNKTstUf.js → chunk-ND2GUHAM-7R91lnUx.js} +1 -1
  227. package/web-shell/assets/{chunk-QZHKN3VN-gD3vsFId.js → chunk-QZHKN3VN-aTJD3lSQ.js} +1 -1
  228. package/web-shell/assets/classDiagram-4FO5ZUOK-iHF24a8X.js +1 -0
  229. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-iHF24a8X.js +1 -0
  230. package/web-shell/assets/{cose-bilkent-S5V4N54A-BG9FAsXE.js → cose-bilkent-S5V4N54A-BTf8t1RL.js} +1 -1
  231. package/web-shell/assets/{dagre-BM42HDAG-Cy1sR7om.js → dagre-BM42HDAG-_sgp3WuA.js} +1 -1
  232. package/web-shell/assets/default-aEtf0G7-.svg +1 -0
  233. package/web-shell/assets/{diagram-2AECGRRQ-Bxi1I_Vu.js → diagram-2AECGRRQ-CROtRy1w.js} +1 -1
  234. package/web-shell/assets/{diagram-5GNKFQAL-BGCJjO6y.js → diagram-5GNKFQAL-BqGRzwSc.js} +1 -1
  235. package/web-shell/assets/{diagram-KO2AKTUF-CMTeLXp7.js → diagram-KO2AKTUF-CMrcEtA7.js} +1 -1
  236. package/web-shell/assets/{diagram-LMA3HP47-BN1wyAGh.js → diagram-LMA3HP47-BRydGNW5.js} +1 -1
  237. package/web-shell/assets/{diagram-OG6HWLK6-UYSG_zcp.js → diagram-OG6HWLK6-D0ilgNjV.js} +1 -1
  238. package/web-shell/assets/{erDiagram-TEJ5UH35-DqXL08lw.js → erDiagram-TEJ5UH35-2lnQeJUM.js} +1 -1
  239. package/web-shell/assets/{flowDiagram-I6XJVG4X-BPJ9SFji.js → flowDiagram-I6XJVG4X-C_ZMdQiC.js} +1 -1
  240. package/web-shell/assets/{ganttDiagram-6RSMTGT7-BEd9Pnms.js → ganttDiagram-6RSMTGT7-Dw9V_Ny0.js} +1 -1
  241. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DrNRH3oi.js → gitGraphDiagram-PVQCEYII-HDXI-F1B.js} +1 -1
  242. package/web-shell/assets/index-CHmzAWys.css +5 -0
  243. package/web-shell/assets/index-w6GTOHh1.js +713 -0
  244. package/web-shell/assets/{infoDiagram-5YYISTIA-CFYBrkVI.js → infoDiagram-5YYISTIA-CuB8Ebua.js} +1 -1
  245. package/web-shell/assets/insert-DmRbh9Rv.svg +1 -0
  246. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Dxsddth7.js → ishikawaDiagram-YF4QCWOH-D_tyhVwh.js} +1 -1
  247. package/web-shell/assets/{journeyDiagram-JHISSGLW-DxaDK80t.js → journeyDiagram-JHISSGLW-CgCwJQNU.js} +1 -1
  248. package/web-shell/assets/{kanban-definition-UN3LZRKU-Q0jQCOct.js → kanban-definition-UN3LZRKU-PZUtcbPx.js} +1 -1
  249. package/web-shell/assets/{linear-DGGM2kcP.js → linear-CZqRdJIU.js} +1 -1
  250. package/web-shell/assets/{mermaid.core-ByoxnWut.js → mermaid.core-CPW_4UEF.js} +5 -5
  251. package/web-shell/assets/{mindmap-definition-RKZ34NQL-C0ZseHsi.js → mindmap-definition-RKZ34NQL-D_Y75ID7.js} +1 -1
  252. package/web-shell/assets/{pieDiagram-4H26LBE5-MQXNhl5A.js → pieDiagram-4H26LBE5-Q4dTyLeF.js} +1 -1
  253. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DIR4ee2A.js → quadrantDiagram-W4KKPZXB-ckw329Ft.js} +1 -1
  254. package/web-shell/assets/queue-DWpnpFgW.svg +1 -0
  255. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BTR0UdYQ.js → requirementDiagram-4Y6WPE33-DbVDm4It.js} +1 -1
  256. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-sfnhMELN.js → sankeyDiagram-5OEKKPKP-CHuZ_ecH.js} +1 -1
  257. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DXczHOHH.js → sequenceDiagram-3UESZ5HK-DU2YSpq-.js} +1 -1
  258. package/web-shell/assets/{stateDiagram-AJRCARHV-DdE_KQFH.js → stateDiagram-AJRCARHV-CA9PEBUo.js} +1 -1
  259. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-t1LRI0oY.js +1 -0
  260. package/web-shell/assets/{timeline-definition-PNZ67QCA-DIc61uE8.js → timeline-definition-PNZ67QCA-Bhlo4WVc.js} +1 -1
  261. package/web-shell/assets/{vennDiagram-CIIHVFJN-BF7ODmxB.js → vennDiagram-CIIHVFJN-6xtPLsyl.js} +1 -1
  262. package/web-shell/assets/{wardley-L42UT6IY-3pc1MEaw.js → wardley-L42UT6IY-3eozmXPf.js} +1 -1
  263. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-9jnPcZuP.js → wardleyDiagram-YWT4CUSO-BOn6hKss.js} +1 -1
  264. package/web-shell/assets/{xychartDiagram-2RQKCTM6-DcthaZK6.js → xychartDiagram-2RQKCTM6-BsP4-I_y.js} +1 -1
  265. package/web-shell/index.html +2 -2
  266. package/chunks/chunk-5P5XGNYH.js +0 -93
  267. package/chunks/chunk-B6HQGTYR.js +0 -410
  268. package/chunks/chunk-SEZC2725.js +0 -36
  269. package/chunks/chunk-SYCJMSIJ.js +0 -82
  270. package/chunks/daemon-status-provider-CSL3BUOY.js +0 -68
  271. package/chunks/initializer-P5AXF7PV.js +0 -61
  272. package/chunks/list-6COK34BP.js +0 -65
  273. package/chunks/loadedSettingsAdapter-XIUTN245.js +0 -60
  274. package/chunks/nonInteractiveCli-7575LBXP.js +0 -91
  275. package/chunks/workspace-providers-status-ZIR5EPOO.js +0 -62
  276. package/chunks/workspace-service-OM5D4OI2.js +0 -60
  277. package/web-shell/assets/channel-DYPNiTww.js +0 -1
  278. package/web-shell/assets/classDiagram-4FO5ZUOK-p_g25Tni.js +0 -1
  279. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-p_g25Tni.js +0 -1
  280. package/web-shell/assets/index-CpOXWDPh.js +0 -714
  281. package/web-shell/assets/index-oVK7qhre.css +0 -5
  282. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BHUSEndU.js +0 -1
@@ -3,8 +3,8 @@
3
3
  import {
4
4
  classifyApiError,
5
5
  prefixMidTurnUserMessageParts
6
- } from "./chunk-LLFFKXZZ.js";
7
- import "./chunk-B6HQGTYR.js";
6
+ } from "./chunk-QE6KJYLT.js";
7
+ import "./chunk-UFLGERMB.js";
8
8
  import {
9
9
  HistoryReplayer,
10
10
  MessageEmitter,
@@ -14,88 +14,90 @@ import {
14
14
  handleSlashCommand,
15
15
  isSlashCommand,
16
16
  normalizePartList
17
- } from "./chunk-2TJ3YN6Q.js";
17
+ } from "./chunk-RRFZXMYP.js";
18
18
  import {
19
19
  appEvents,
20
20
  buildDisabledSkillNamesProvider,
21
21
  loadCliConfig,
22
22
  normalizeDisabledToolList
23
- } from "./chunk-ZUAXI2OA.js";
23
+ } from "./chunk-EDMZZFDU.js";
24
+ import {
25
+ collectContextData,
26
+ formatContextUsageText
27
+ } from "./chunk-FNJ7BDPH.js";
24
28
  import {
25
29
  getCommandSubcommandNames
26
- } from "./chunk-4W4T77MO.js";
30
+ } from "./chunk-J7FA27RO.js";
31
+ import "./chunk-5GOVVXEV.js";
27
32
  import {
28
33
  getEffectiveSupportedModes
29
- } from "./chunk-JTYRZODB.js";
30
- import "./chunk-MRO43B25.js";
31
- import "./chunk-UAARJR2G.js";
32
- import "./chunk-JZSY4WP3.js";
33
- import {
34
- collectContextData,
35
- formatContextUsageText
36
- } from "./chunk-TZM5JIAX.js";
34
+ } from "./chunk-3TV3HUWZ.js";
37
35
  import {
38
36
  isTerminalGoalStatusKind
39
37
  } from "./chunk-KSPVDFE4.js";
38
+ import "./chunk-MRO43B25.js";
39
+ import "./chunk-SMXULRAN.js";
40
+ import "./chunk-T4T2FNV4.js";
40
41
  import "./chunk-KYMBIKIW.js";
41
- import "./chunk-I2RFAW6Q.js";
42
+ import "./chunk-I4H7PRWQ.js";
43
+ import "./chunk-JZSY4WP3.js";
44
+ import "./chunk-JVHEVCAU.js";
45
+ import "./chunk-CNLEDYE3.js";
42
46
  import "./chunk-3GONHQOA.js";
43
- import "./chunk-5R4SBCX6.js";
44
- import "./chunk-Z7XXFPGP.js";
45
- import "./chunk-JXQ23SNT.js";
46
- import "./chunk-TMBPDHXD.js";
47
+ import "./chunk-PR32FRT6.js";
48
+ import "./chunk-CKQA6AWF.js";
49
+ import "./chunk-BW4KCQFD.js";
47
50
  import {
48
- PERMISSION_RULE_TYPES,
49
- PermissionRulesValidationError,
50
- buildPermissionSettings,
51
- normalizePermissionRules,
52
- readPermissionRuleSet
53
- } from "./chunk-WGAEWQTF.js";
54
- import "./chunk-NYOHZYHM.js";
55
- import "./chunk-CGOMICBE.js";
51
+ createLoadedSettingsAdapter
52
+ } from "./chunk-BXSHL2SF.js";
53
+ import "./chunk-NDOC6M5S.js";
54
+ import "./chunk-M2U5NM24.js";
55
+ import "./chunk-JJXWTVSK.js";
56
+ import "./chunk-R2BXK7SX.js";
56
57
  import "./chunk-RKIZXJMB.js";
57
- import "./chunk-CI5O6SQL.js";
58
+ import "./chunk-MNF6S5PR.js";
58
59
  import "./chunk-KHDZHZMH.js";
59
- import {
60
- MID_TURN_QUEUE_DRAIN_METHOD
61
- } from "./chunk-QBZ22PQX.js";
62
60
  import {
63
61
  formatAcpModelId,
64
62
  parseAcpBaseModelId,
65
63
  parseAcpModelOption,
66
64
  sanitizeProviderBaseUrl
67
- } from "./chunk-RS4HRC75.js";
65
+ } from "./chunk-UYT3MWEB.js";
68
66
  import {
69
- NOT_CURRENTLY_GENERATING_CANCEL_MESSAGE
70
- } from "./chunk-S566HKUS.js";
71
- import "./chunk-BS64PXY3.js";
72
- import "./chunk-SEZC2725.js";
73
- import "./chunk-DBZUXSSV.js";
74
- import "./chunk-R2BXK7SX.js";
67
+ PERMISSION_RULE_TYPES,
68
+ PermissionRulesValidationError,
69
+ buildPermissionSettings,
70
+ normalizePermissionRules,
71
+ readPermissionRuleSet
72
+ } from "./chunk-ODLIHNOY.js";
73
+ import "./chunk-4LUZAKMK.js";
74
+ import "./chunk-BC3C4F3Q.js";
75
+ import "./chunk-GT2FGICD.js";
76
+ import {
77
+ MID_TURN_QUEUE_DRAIN_METHOD
78
+ } from "./chunk-QBZ22PQX.js";
75
79
  import "./chunk-ALX6BUYW.js";
76
- import "./chunk-5DWXLGOM.js";
77
80
  import {
78
- createLoadedSettingsAdapter
79
- } from "./chunk-5RVSM6NW.js";
81
+ NOT_CURRENTLY_GENERATING_CANCEL_MESSAGE
82
+ } from "./chunk-JE5FVRPC.js";
80
83
  import {
81
84
  OUTPUT_LANGUAGE_AUTO,
82
85
  getOutputLanguageFilePath,
83
86
  getPersistScopeForModelSelection,
84
87
  isAutoLanguage,
85
- isWorkspaceTrusted,
86
88
  loadSettings,
87
89
  reloadEnvironment,
88
90
  resolveOutputLanguage,
89
91
  updateOutputLanguageFile,
90
92
  writeOutputLanguageAndRegisterPath
91
- } from "./chunk-OQHQHJRK.js";
93
+ } from "./chunk-FKAVULLM.js";
92
94
  import {
93
95
  SUPPORTED_LANGUAGES,
94
96
  getCurrentLanguage,
95
97
  setLanguageAsync
96
- } from "./chunk-5JZLXFPD.js";
98
+ } from "./chunk-R5OP2ATH.js";
97
99
  import "./chunk-TLRYABYP.js";
98
- import "./chunk-Y6Z2O3WR.js";
100
+ import "./chunk-5DWXLGOM.js";
99
101
  import {
100
102
  AgentSideConnection,
101
103
  PROTOCOL_VERSION,
@@ -109,8 +111,15 @@ import {
109
111
  SERVE_STATUS_EXT_METHODS,
110
112
  STATUS_SCHEMA_VERSION,
111
113
  mapDomainErrorToErrorKind
112
- } from "./chunk-D5E5TMYH.js";
113
- import "./chunk-UN3C6GOR.js";
114
+ } from "./chunk-L7OKCI7T.js";
115
+ import "./chunk-CF6BB3LT.js";
116
+ import {
117
+ isFolderTrustEnabled,
118
+ isWorkspaceTrusted,
119
+ loadTrustedFolders
120
+ } from "./chunk-F3ZYSEY6.js";
121
+ import "./chunk-Y6Z2O3WR.js";
122
+ import "./chunk-QYUE6W3T.js";
114
123
  import {
115
124
  ALL_PROVIDERS,
116
125
  APPROVAL_MODES,
@@ -149,6 +158,7 @@ import {
149
158
  evaluatePermissionFlow,
150
159
  findExistingProviderModels,
151
160
  findProviderById,
161
+ findRepeatedDuplicateProviderToolCall,
152
162
  fireNotificationHook,
153
163
  firePermissionRequestHook,
154
164
  firePostToolUseFailureHook,
@@ -174,6 +184,7 @@ import {
174
184
  isDenialFallbackReason,
175
185
  isPlanModeBlocked,
176
186
  isSystemReminderContent,
187
+ markDuplicateProviderToolCallResponseSent,
177
188
  needsConfirmation,
178
189
  parsePositiveIntegerEnv,
179
190
  persistPermissionOutcome,
@@ -193,32 +204,31 @@ import {
193
204
  subagentGenerator,
194
205
  unregisterGoalHook,
195
206
  updateSetting
196
- } from "./chunk-PXFFKNCO.js";
207
+ } from "./chunk-YAINVQ3Q.js";
197
208
  import {
198
209
  external_exports
199
210
  } from "./chunk-K5PGHDBN.js";
200
- import "./chunk-5P5XGNYH.js";
201
211
  import "./chunk-SKAZWEV5.js";
202
- import "./chunk-TXVGVZYR.js";
203
- import "./chunk-XU5P23GN.js";
204
- import "./chunk-2BIF2NVV.js";
212
+ import "./chunk-XJYUPHRC.js";
213
+ import "./chunk-QLDPRILK.js";
214
+ import "./chunk-BVSVIN45.js";
205
215
  import {
206
216
  runSideQuery
207
- } from "./chunk-BG4BIP7F.js";
208
- import "./chunk-ZD3NW5KL.js";
217
+ } from "./chunk-SBBN4BWR.js";
218
+ import "./chunk-S7AKE7HL.js";
209
219
  import "./chunk-2MPVVENX.js";
210
220
  import "./chunk-ZTQ26VBE.js";
211
- import "./chunk-GZCJS5WH.js";
221
+ import "./chunk-O2VBQ3Y2.js";
212
222
  import "./chunk-MLZQVCF3.js";
213
223
  import "./chunk-LQ7TMOCE.js";
214
224
  import "./chunk-LD2XBG6Z.js";
215
- import "./chunk-OTBK43JR.js";
225
+ import "./chunk-HYCC3XM3.js";
216
226
  import {
217
227
  HookEventName,
218
228
  createHookOutput
219
- } from "./chunk-HGNSRCRB.js";
220
- import "./chunk-EEEZIVFJ.js";
221
- import "./chunk-PRYMDRBV.js";
229
+ } from "./chunk-NL4C3H6C.js";
230
+ import "./chunk-JOLIREYR.js";
231
+ import "./chunk-DDMOU62Q.js";
222
232
  import {
223
233
  AuthType,
224
234
  ConversationFinishedEvent,
@@ -239,46 +249,45 @@ import {
239
249
  startToolSpan,
240
250
  uiTelemetryService,
241
251
  withInteractionSpan
242
- } from "./chunk-WA5OJGFL.js";
252
+ } from "./chunk-QNKBEJO2.js";
243
253
  import "./chunk-3PJXIDKI.js";
244
254
  import "./chunk-UWCTAVOD.js";
245
255
  import "./chunk-OFEVLU4C.js";
246
256
  import "./chunk-OMX7CUOE.js";
247
257
  import {
248
258
  getAutoMemoryRoot
249
- } from "./chunk-BNXANYLH.js";
250
- import "./chunk-T2VDEFUU.js";
251
- import "./chunk-OIC6S73E.js";
259
+ } from "./chunk-RD6YJJJ6.js";
260
+ import "./chunk-SKQZZVAV.js";
261
+ import "./chunk-BUUQ5HPX.js";
252
262
  import {
253
263
  ToolConfirmationOutcome,
254
264
  ToolNames
255
- } from "./chunk-TOEGRAVX.js";
265
+ } from "./chunk-BX5YO7UW.js";
256
266
  import {
257
267
  clearCachedCredentialFile,
258
268
  qwenOAuth2Events
259
- } from "./chunk-BGUDAULQ.js";
260
- import "./chunk-EW6C27XX.js";
269
+ } from "./chunk-UO5GVXQE.js";
270
+ import "./chunk-KMGMKW5Q.js";
261
271
  import "./chunk-22IFUCVR.js";
262
- import "./chunk-64WXLC72.js";
263
- import "./chunk-3UALQ56H.js";
272
+ import "./chunk-3227DZO4.js";
264
273
  import {
265
274
  tokenLimit
266
- } from "./chunk-F6XNTYNE.js";
267
- import "./chunk-CGEGHF2C.js";
268
- import "./chunk-IRJWHZWU.js";
269
- import "./chunk-SYCJMSIJ.js";
275
+ } from "./chunk-U3KSMM7G.js";
276
+ import "./chunk-BKXBARJZ.js";
277
+ import "./chunk-EJYJYJZ2.js";
270
278
  import "./chunk-55ZMG67I.js";
271
279
  import "./chunk-H6BD2ELD.js";
272
280
  import "./chunk-5IFG2VC4.js";
281
+ import "./chunk-64WXLC72.js";
273
282
  import {
274
283
  Storage,
275
284
  createDebugLogger,
276
285
  getErrorStatus
277
- } from "./chunk-C4K3FEQ2.js";
278
- import "./chunk-PF523XJX.js";
286
+ } from "./chunk-UX4SGCGN.js";
287
+ import "./chunk-SMYQZVZ3.js";
279
288
  import {
280
289
  runExitCleanup
281
- } from "./chunk-GYZQA2FO.js";
290
+ } from "./chunk-I2LYBGNI.js";
282
291
  import "./chunk-ZERZSAZL.js";
283
292
  import "./chunk-QN5NZ3UQ.js";
284
293
  import "./chunk-BR4QREVK.js";
@@ -1448,6 +1457,10 @@ var Session = class {
1448
1457
  lastPromptTokenCountChat = null;
1449
1458
  midTurnDrainUnavailable = false;
1450
1459
  midTurnDrainTimeoutStrikes = 0;
1460
+ // ACP can continue one logical conversation through prompt, cron, and
1461
+ // background loops, so keep this with the session instead of a single
1462
+ // runToolCalls invocation.
1463
+ duplicateProviderToolCallResponseIds = /* @__PURE__ */ new Set();
1451
1464
  // Messages from a drain that the daemon answered but we timed out waiting for
1452
1465
  // (the daemon already spliced + SSE-published them). Re-injected on the next
1453
1466
  // batch so a transient stall can't silently lose them. See
@@ -1751,6 +1764,7 @@ var Session = class {
1751
1764
  if (pendingSend.signal.aborted) {
1752
1765
  return { stopReason: "cancelled" };
1753
1766
  }
1767
+ this.duplicateProviderToolCallResponseIds.clear();
1754
1768
  let resolveCompletion;
1755
1769
  this.pendingPromptCompletion = new Promise((resolve3) => {
1756
1770
  resolveCompletion = resolve3;
@@ -2075,15 +2089,10 @@ ${this.pendingWorktreeNotice}
2075
2089
  );
2076
2090
  return { stopReason: "end_turn" };
2077
2091
  }
2078
- nextMessage = {
2079
- role: "user",
2080
- parts: [
2081
- ...toolRun.parts,
2082
- ...await this.#drainMidTurnUserMessages(
2083
- pendingSend.signal
2084
- )
2085
- ]
2086
- };
2092
+ nextMessage = await this.#buildNextMessageAfterToolRun(
2093
+ toolRun,
2094
+ pendingSend.signal
2095
+ );
2087
2096
  }
2088
2097
  }
2089
2098
  if (this.messageRewriter) {
@@ -2270,13 +2279,10 @@ ${this.pendingWorktreeNotice}
2270
2279
  );
2271
2280
  return { stopReason: "end_turn" };
2272
2281
  }
2273
- nextMessage = {
2274
- role: "user",
2275
- parts: [
2276
- ...toolRun.parts,
2277
- ...await this.#drainMidTurnUserMessages(pendingSend.signal)
2278
- ]
2279
- };
2282
+ nextMessage = await this.#buildNextMessageAfterToolRun(
2283
+ toolRun,
2284
+ pendingSend.signal
2285
+ );
2280
2286
  }
2281
2287
  }
2282
2288
  continue;
@@ -2410,6 +2416,19 @@ ${this.pendingWorktreeNotice}
2410
2416
  );
2411
2417
  await this.messageRewriter?.waitForPendingRewrites();
2412
2418
  }
2419
+ async #buildNextMessageAfterToolRun(toolRun, abortSignal) {
2420
+ if (toolRun.repeatedDuplicateProviderToolCall) {
2421
+ debugLogger4.debug(
2422
+ "Stopping ACP turn after dropping repeated duplicate provider tool-call response."
2423
+ );
2424
+ return null;
2425
+ }
2426
+ const parts = [
2427
+ ...toolRun.parts,
2428
+ ...await this.#drainMidTurnUserMessages(abortSignal)
2429
+ ];
2430
+ return { role: "user", parts };
2431
+ }
2413
2432
  #recordCompressionTokenCount(info) {
2414
2433
  this.#syncPromptTokenCountWithCurrentChat();
2415
2434
  const tokenCount = this.#extractCompressionTokenCount(info);
@@ -2781,13 +2800,10 @@ ${this.pendingWorktreeNotice}
2781
2800
  );
2782
2801
  return;
2783
2802
  }
2784
- nextMessage = {
2785
- role: "user",
2786
- parts: [
2787
- ...toolRun.parts,
2788
- ...await this.#drainMidTurnUserMessages(ac.signal)
2789
- ]
2790
- };
2803
+ nextMessage = await this.#buildNextMessageAfterToolRun(
2804
+ toolRun,
2805
+ ac.signal
2806
+ );
2791
2807
  }
2792
2808
  }
2793
2809
  } catch (error) {
@@ -3020,13 +3036,10 @@ ${this.pendingWorktreeNotice}
3020
3036
  await this.#emitBackgroundNotificationEndTurn("end_turn");
3021
3037
  return;
3022
3038
  }
3023
- nextMessage = {
3024
- role: "user",
3025
- parts: [
3026
- ...toolRun.parts,
3027
- ...await this.#drainMidTurnUserMessages(ac.signal)
3028
- ]
3029
- };
3039
+ nextMessage = await this.#buildNextMessageAfterToolRun(
3040
+ toolRun,
3041
+ ac.signal
3042
+ );
3030
3043
  }
3031
3044
  }
3032
3045
  if (this.messageRewriter) {
@@ -3270,10 +3283,32 @@ ${this.pendingWorktreeNotice}
3270
3283
  const handledProviderToolCallIds = new Set(
3271
3284
  this.#getCurrentChat().getHistoryFunctionResponseIds()
3272
3285
  );
3286
+ const repeatedDuplicateCall = findRepeatedDuplicateProviderToolCall(
3287
+ dedupedFunctionCalls,
3288
+ (fc) => getProviderToolCallId(fc) ?? fc.id,
3289
+ handledProviderToolCallIds,
3290
+ this.duplicateProviderToolCallResponseIds
3291
+ );
3292
+ if (repeatedDuplicateCall) {
3293
+ const providerCallId = getProviderToolCallId(repeatedDuplicateCall) ?? repeatedDuplicateCall.id;
3294
+ debugLogger4.debug(
3295
+ `[Session.runToolCalls] Dropping batch after repeated duplicate provider tool-call id: ${providerCallId} (tool: ${repeatedDuplicateCall.name ?? "unknown_tool"})`
3296
+ );
3297
+ return {
3298
+ parts: [],
3299
+ stopAfterPermissionCancel: false,
3300
+ repeatedDuplicateProviderToolCall: true
3301
+ };
3302
+ }
3273
3303
  const pushDuplicateBatch = /* @__PURE__ */ __name((request) => {
3304
+ const providerCallId = request.providerCallId ?? request.callId;
3305
+ markDuplicateProviderToolCallResponseSent(
3306
+ providerCallId,
3307
+ this.duplicateProviderToolCallResponseIds
3308
+ );
3274
3309
  const response = createDuplicateProviderToolCallResponse(request);
3275
3310
  debugLogger4.debug(
3276
- `[Session.runToolCalls] Suppressing duplicate provider tool-call id: ${request.providerCallId} (tool: ${request.name})`
3311
+ `[Session.runToolCalls] Suppressing duplicate provider tool-call id: ${providerCallId} (tool: ${request.name})`
3277
3312
  );
3278
3313
  batches.push({ kind: "duplicate", request, response });
3279
3314
  }, "pushDuplicateBatch");
@@ -3459,7 +3494,11 @@ ${this.pendingWorktreeNotice}
3459
3494
  }
3460
3495
  if (shouldStop) {
3461
3496
  await appendSkippedAfter(parts, batch.calls[batch.calls.length - 1]);
3462
- return { parts, stopAfterPermissionCancel: true };
3497
+ return {
3498
+ parts,
3499
+ stopAfterPermissionCancel: true,
3500
+ repeatedDuplicateProviderToolCall: false
3501
+ };
3463
3502
  }
3464
3503
  } else {
3465
3504
  for (const fc of batch.calls) {
@@ -3467,12 +3506,20 @@ ${this.pendingWorktreeNotice}
3467
3506
  parts.push(...r.parts);
3468
3507
  if (r.stopAfterPermissionCancel) {
3469
3508
  await appendSkippedAfter(parts, fc);
3470
- return { parts, stopAfterPermissionCancel: true };
3509
+ return {
3510
+ parts,
3511
+ stopAfterPermissionCancel: true,
3512
+ repeatedDuplicateProviderToolCall: false
3513
+ };
3471
3514
  }
3472
3515
  }
3473
3516
  }
3474
3517
  }
3475
- return { parts, stopAfterPermissionCancel: false };
3518
+ return {
3519
+ parts,
3520
+ stopAfterPermissionCancel: false,
3521
+ repeatedDuplicateProviderToolCall: false
3522
+ };
3476
3523
  }
3477
3524
  /**
3478
3525
  * Assemble the per-turn system reminders the model needs to see at the
@@ -4527,6 +4574,9 @@ var QWEN_CORE_SETTING_DEFINITIONS = {
4527
4574
  "memory.enableManagedAutoMemory": { type: "boolean" },
4528
4575
  "memory.enableManagedAutoDream": { type: "boolean" },
4529
4576
  "memory.enableAutoSkill": { type: "boolean" },
4577
+ "memory.autoSkillConfirm": { type: "boolean" },
4578
+ "memory.enableTeamMemory": { type: "boolean" },
4579
+ "memory.enableTeamMemorySync": { type: "boolean" },
4530
4580
  disableAllHooks: { type: "boolean" }
4531
4581
  };
4532
4582
  var QWEN_CORE_SETTING_KEYS = Object.keys(
@@ -4536,12 +4586,18 @@ var QWEN_HOOK_EVENTS = Object.values(HookEventName);
4536
4586
  var DEFAULT_QWEN_MEMORY_SETTINGS = {
4537
4587
  enableManagedAutoMemory: true,
4538
4588
  enableManagedAutoDream: true,
4539
- enableAutoSkill: true
4589
+ enableAutoSkill: true,
4590
+ autoSkillConfirm: true,
4591
+ enableTeamMemory: false,
4592
+ enableTeamMemorySync: false
4540
4593
  };
4541
4594
  var QWEN_MEMORY_SETTING_KEYS = [
4542
4595
  "enableManagedAutoMemory",
4543
4596
  "enableManagedAutoDream",
4544
- "enableAutoSkill"
4597
+ "enableAutoSkill",
4598
+ "autoSkillConfirm",
4599
+ "enableTeamMemory",
4600
+ "enableTeamMemorySync"
4545
4601
  ];
4546
4602
  function normalizeQwenMemorySettings(value) {
4547
4603
  if (!value || typeof value !== "object" || Array.isArray(value)) {
@@ -4551,7 +4607,10 @@ function normalizeQwenMemorySettings(value) {
4551
4607
  return {
4552
4608
  enableManagedAutoMemory: typeof record["enableManagedAutoMemory"] === "boolean" ? record["enableManagedAutoMemory"] : DEFAULT_QWEN_MEMORY_SETTINGS.enableManagedAutoMemory,
4553
4609
  enableManagedAutoDream: typeof record["enableManagedAutoDream"] === "boolean" ? record["enableManagedAutoDream"] : DEFAULT_QWEN_MEMORY_SETTINGS.enableManagedAutoDream,
4554
- enableAutoSkill: typeof record["enableAutoSkill"] === "boolean" ? record["enableAutoSkill"] : DEFAULT_QWEN_MEMORY_SETTINGS.enableAutoSkill
4610
+ enableAutoSkill: typeof record["enableAutoSkill"] === "boolean" ? record["enableAutoSkill"] : DEFAULT_QWEN_MEMORY_SETTINGS.enableAutoSkill,
4611
+ autoSkillConfirm: typeof record["autoSkillConfirm"] === "boolean" ? record["autoSkillConfirm"] : DEFAULT_QWEN_MEMORY_SETTINGS.autoSkillConfirm,
4612
+ enableTeamMemory: typeof record["enableTeamMemory"] === "boolean" ? record["enableTeamMemory"] : DEFAULT_QWEN_MEMORY_SETTINGS.enableTeamMemory,
4613
+ enableTeamMemorySync: typeof record["enableTeamMemorySync"] === "boolean" ? record["enableTeamMemorySync"] : DEFAULT_QWEN_MEMORY_SETTINGS.enableTeamMemorySync
4555
4614
  };
4556
4615
  }
4557
4616
  __name(normalizeQwenMemorySettings, "normalizeQwenMemorySettings");
@@ -6179,7 +6238,7 @@ var QwenAgent = class {
6179
6238
  async initialize(args) {
6180
6239
  this.clientCapabilities = args.clientCapabilities;
6181
6240
  const authMethods = buildAuthMethods();
6182
- const version = "0.19.2";
6241
+ const version = "0.19.3";
6183
6242
  return {
6184
6243
  protocolVersion: PROTOCOL_VERSION,
6185
6244
  agentInfo: {
@@ -6774,6 +6833,16 @@ var QwenAgent = class {
6774
6833
  status: this.mcpStatus(e.status)
6775
6834
  }));
6776
6835
  }
6836
+ if (!disabled) {
6837
+ out.resourceCount = this.resolveServerMcpResources(
6838
+ config,
6839
+ name
6840
+ ).length;
6841
+ out.promptCount = this.resolveServerMcpPrompts(
6842
+ config,
6843
+ name
6844
+ ).length;
6845
+ }
6777
6846
  return out;
6778
6847
  })
6779
6848
  ),
@@ -6880,6 +6949,102 @@ var QwenAgent = class {
6880
6949
  };
6881
6950
  }
6882
6951
  }
6952
+ /**
6953
+ * Resolve the resources discovered for one server, with the same
6954
+ * pool-mode fallback `buildWorkspaceMcpToolsStatus` uses for tools: the
6955
+ * workspace `Config`'s `ResourceRegistry` is authoritative in
6956
+ * single-session mode, but in pool mode resources are registered into
6957
+ * per-session registries (`SessionMcpView.applyResources`), leaving the
6958
+ * workspace registry empty. Fall back to the first active session that
6959
+ * has this server's resources.
6960
+ */
6961
+ resolveServerMcpResources(config, serverName) {
6962
+ const resources = config.getResourceRegistry?.()?.getResourcesByServer(serverName) ?? [];
6963
+ if (resources.length > 0) {
6964
+ return resources;
6965
+ }
6966
+ for (const session of this.getActiveSessions()) {
6967
+ try {
6968
+ const sessionResources = session.getConfig().getResourceRegistry?.()?.getResourcesByServer(serverName) ?? [];
6969
+ if (sessionResources.length > 0) {
6970
+ return sessionResources;
6971
+ }
6972
+ } catch {
6973
+ }
6974
+ }
6975
+ return resources;
6976
+ }
6977
+ /**
6978
+ * Resolve the prompts discovered for one server, mirroring
6979
+ * {@link resolveServerMcpResources}. Used only for the per-server
6980
+ * `promptCount` on the base status — prompts have no drill-down
6981
+ * endpoint (they surface as slash commands).
6982
+ */
6983
+ resolveServerMcpPrompts(config, serverName) {
6984
+ const prompts = config.getPromptRegistry?.()?.getPromptsByServer(serverName) ?? [];
6985
+ if (prompts.length > 0) {
6986
+ return prompts;
6987
+ }
6988
+ for (const session of this.getActiveSessions()) {
6989
+ try {
6990
+ const sessionPrompts = session.getConfig().getPromptRegistry?.()?.getPromptsByServer(serverName) ?? [];
6991
+ if (sessionPrompts.length > 0) {
6992
+ return sessionPrompts;
6993
+ }
6994
+ } catch {
6995
+ }
6996
+ }
6997
+ return prompts;
6998
+ }
6999
+ buildWorkspaceMcpResourcesStatus(config, serverName) {
7000
+ const workspaceCwd = this.safeWorkspaceCwd(config);
7001
+ try {
7002
+ const servers = config.getMcpServers() ?? {};
7003
+ if (!Object.prototype.hasOwnProperty.call(servers, serverName)) {
7004
+ return {
7005
+ v: STATUS_SCHEMA_VERSION,
7006
+ workspaceCwd,
7007
+ serverName,
7008
+ initialized: true,
7009
+ acpChannelLive: true,
7010
+ resources: [],
7011
+ errors: [
7012
+ {
7013
+ kind: "mcp_resources",
7014
+ status: "error",
7015
+ error: `MCP server not configured: ${serverName}`
7016
+ }
7017
+ ]
7018
+ };
7019
+ }
7020
+ const resources = this.resolveServerMcpResources(config, serverName).map((resource) => ({
7021
+ uri: resource.uri,
7022
+ ...typeof resource.name === "string" ? { name: resource.name } : {},
7023
+ ...typeof resource.title === "string" ? { title: resource.title } : {},
7024
+ ...typeof resource.description === "string" ? { description: resource.description } : {},
7025
+ ...typeof resource.mimeType === "string" ? { mimeType: resource.mimeType } : {},
7026
+ ...typeof resource.size === "number" ? { size: resource.size } : {}
7027
+ }));
7028
+ return {
7029
+ v: STATUS_SCHEMA_VERSION,
7030
+ workspaceCwd,
7031
+ serverName,
7032
+ initialized: true,
7033
+ acpChannelLive: true,
7034
+ resources
7035
+ };
7036
+ } catch (error) {
7037
+ return {
7038
+ v: STATUS_SCHEMA_VERSION,
7039
+ workspaceCwd,
7040
+ serverName,
7041
+ initialized: true,
7042
+ acpChannelLive: true,
7043
+ resources: [],
7044
+ errors: [this.errorCell("mcp_resources", error)]
7045
+ };
7046
+ }
7047
+ }
6883
7048
  /**
6884
7049
  * Build the MCP budget status cells exposed on `GET /workspace/mcp`.
6885
7050
  *
@@ -7480,6 +7645,25 @@ var QwenAgent = class {
7480
7645
  }
7481
7646
  };
7482
7647
  }
7648
+ const skillMetrics = metrics.skills ?? {
7649
+ totalCalls: 0,
7650
+ totalSuccess: 0,
7651
+ totalFail: 0,
7652
+ byName: {}
7653
+ };
7654
+ const skillsByName = {};
7655
+ for (const [name, skill] of Object.entries(skillMetrics.byName)) {
7656
+ Object.defineProperty(skillsByName, name, {
7657
+ value: {
7658
+ count: skill.count,
7659
+ success: skill.success,
7660
+ fail: skill.fail
7661
+ },
7662
+ enumerable: true,
7663
+ configurable: true,
7664
+ writable: true
7665
+ });
7666
+ }
7483
7667
  return {
7484
7668
  v: STATUS_SCHEMA_VERSION,
7485
7669
  sessionId,
@@ -7498,6 +7682,12 @@ var QwenAgent = class {
7498
7682
  files: {
7499
7683
  totalLinesAdded: metrics.files.totalLinesAdded,
7500
7684
  totalLinesRemoved: metrics.files.totalLinesRemoved
7685
+ },
7686
+ skills: {
7687
+ totalCalls: skillMetrics.totalCalls,
7688
+ totalSuccess: skillMetrics.totalSuccess,
7689
+ totalFail: skillMetrics.totalFail,
7690
+ byName: skillsByName
7501
7691
  }
7502
7692
  };
7503
7693
  }
@@ -7948,19 +8138,25 @@ var QwenAgent = class {
7948
8138
  );
7949
8139
  const persistScope = readProviderConnectScope(params["scope"]);
7950
8140
  const plan = buildInstallPlan(providerConfig, inputs);
8141
+ const adapter = createLoadedSettingsAdapter(
8142
+ this.settings,
8143
+ persistScope
8144
+ );
7951
8145
  await applyProviderInstallPlan(plan, {
7952
- settings: createLoadedSettingsAdapter(this.settings, persistScope),
8146
+ settings: adapter,
7953
8147
  reloadModelProviders: /* @__PURE__ */ __name((modelProviders) => this.config.reloadModelProvidersConfig(modelProviders), "reloadModelProviders"),
7954
8148
  syncAuthState: /* @__PURE__ */ __name((authType, modelId, baseUrl) => this.config.getModelsConfig().syncAfterAuthRefresh(authType, modelId, baseUrl), "syncAuthState"),
7955
8149
  refreshAuth: /* @__PURE__ */ __name((authType) => this.config.refreshAuth(authType), "refreshAuth")
7956
8150
  });
8151
+ const effectiveModelId = adapter.getValue("model.name") ?? plan.modelSelection?.modelId;
8152
+ const effectiveBaseUrl = adapter.getValue("model.baseUrl") ?? plan.modelSelection?.baseUrl;
7957
8153
  return {
7958
8154
  success: true,
7959
8155
  providerId: providerConfig.id,
7960
8156
  providerLabel: providerConfig.label,
7961
8157
  authType: plan.authType,
7962
- modelId: plan.modelSelection?.modelId,
7963
- ...plan.modelSelection?.baseUrl ? { baseUrl: plan.modelSelection.baseUrl } : {}
8158
+ ...effectiveModelId ? { modelId: effectiveModelId } : {},
8159
+ ...effectiveBaseUrl ? { baseUrl: effectiveBaseUrl } : {}
7964
8160
  };
7965
8161
  }
7966
8162
  case "qwen/skills/install": {
@@ -8026,6 +8222,19 @@ var QwenAgent = class {
8026
8222
  serverName
8027
8223
  );
8028
8224
  }
8225
+ case SERVE_STATUS_EXT_METHODS.workspaceMcpResources: {
8226
+ const serverName = params["serverName"];
8227
+ if (typeof serverName !== "string" || serverName.length === 0) {
8228
+ throw RequestError.invalidParams(
8229
+ void 0,
8230
+ "Invalid or missing serverName"
8231
+ );
8232
+ }
8233
+ return this.buildWorkspaceMcpResourcesStatus(
8234
+ this.config,
8235
+ serverName
8236
+ );
8237
+ }
8029
8238
  case SERVE_STATUS_EXT_METHODS.workspaceSkills:
8030
8239
  return await this.buildWorkspaceSkillsStatus(
8031
8240
  this.config
@@ -8481,6 +8690,78 @@ var QwenAgent = class {
8481
8690
  await this.closeStoredSession(sessionId);
8482
8691
  return { sessionId, closed: true };
8483
8692
  }
8693
+ case SERVE_CONTROL_EXT_METHODS.sessionCd: {
8694
+ const sessionId = params["sessionId"];
8695
+ const targetPath = params["path"];
8696
+ if (typeof sessionId !== "string" || sessionId.length === 0) {
8697
+ throw RequestError.invalidParams(
8698
+ void 0,
8699
+ "Invalid or missing sessionId"
8700
+ );
8701
+ }
8702
+ if (typeof targetPath !== "string" || targetPath.length === 0 || !path.isAbsolute(targetPath) || targetPath.includes("\0")) {
8703
+ throw RequestError.invalidParams(
8704
+ void 0,
8705
+ "Invalid or missing path (must be an absolute path)"
8706
+ );
8707
+ }
8708
+ const session = this.sessionOrThrow(sessionId);
8709
+ const config = session.getConfig();
8710
+ if (config.isRestrictiveSandbox()) {
8711
+ throw new RequestError(-32003, "Restrictive sandbox mode active", {
8712
+ errorKind: "restrictive_sandbox"
8713
+ });
8714
+ }
8715
+ let stats;
8716
+ try {
8717
+ stats = await fs.stat(targetPath);
8718
+ } catch {
8719
+ throw new RequestError(-32002, `Directory not found: ${targetPath}`, {
8720
+ errorKind: "directory_not_found",
8721
+ path: targetPath
8722
+ });
8723
+ }
8724
+ if (!stats.isDirectory()) {
8725
+ throw new RequestError(-32002, `Not a directory: ${targetPath}`, {
8726
+ errorKind: "directory_not_found",
8727
+ path: targetPath
8728
+ });
8729
+ }
8730
+ const canonicalPath = await fs.realpath(targetPath);
8731
+ const previousCwd = config.getTargetDir();
8732
+ if (canonicalPath === previousCwd) {
8733
+ return { previousCwd, newCwd: canonicalPath, warnings: [] };
8734
+ }
8735
+ if (isFolderTrustEnabled(this.settings.merged)) {
8736
+ const trustedFolders = loadTrustedFolders();
8737
+ if (trustedFolders.isPathTrusted(canonicalPath) !== true) {
8738
+ throw new RequestError(
8739
+ -32001,
8740
+ `Directory not trusted: ${canonicalPath}`,
8741
+ { errorKind: "directory_not_trusted", path: canonicalPath }
8742
+ );
8743
+ }
8744
+ }
8745
+ const warnings = [];
8746
+ const relocation = await config.relocateWorkingDirectory(
8747
+ canonicalPath,
8748
+ canonicalPath,
8749
+ { skipProcessChdir: true, skipArtifactMigration: true }
8750
+ );
8751
+ if (relocation.memoryRefreshError) {
8752
+ warnings.push(
8753
+ `Memory refresh failed: ${relocation.memoryRefreshError instanceof Error ? relocation.memoryRefreshError.message : String(relocation.memoryRefreshError)}`
8754
+ );
8755
+ }
8756
+ try {
8757
+ await config.getGeminiClient()?.addWorkingDirectoryChangedContext(previousCwd, canonicalPath);
8758
+ } catch (error) {
8759
+ warnings.push(
8760
+ `Model context refresh failed: ${error instanceof Error ? error.message : String(error)}`
8761
+ );
8762
+ }
8763
+ return { previousCwd, newCwd: canonicalPath, warnings };
8764
+ }
8484
8765
  case SERVE_CONTROL_EXT_METHODS.sessionApprovalMode: {
8485
8766
  const sessionId = params["sessionId"];
8486
8767
  const mode = params["mode"];
@@ -9576,9 +9857,13 @@ ${outputText}
9576
9857
  }
9577
9858
  const config = session.getConfig();
9578
9859
  const authType = config.getAuthType();
9579
- if (changed.has("modelProviders")) {
9860
+ const providersChanged = changed.has("modelProviders") || changed.has("providerProtocol");
9861
+ if (providersChanged) {
9580
9862
  try {
9581
- config.reloadModelProvidersConfig(newMerged.modelProviders);
9863
+ config.reloadModelProvidersConfig(
9864
+ newMerged.modelProviders,
9865
+ newMerged.providerProtocol ?? {}
9866
+ );
9582
9867
  } catch (err) {
9583
9868
  debugLogger5.warn(
9584
9869
  `reload: reloadModelProvidersConfig failed for session ${id}: ${err}`
@@ -9594,7 +9879,7 @@ ${outputText}
9594
9879
  `reload: switchModel failed for session ${id}: ${err}`
9595
9880
  );
9596
9881
  }
9597
- } else if ((changed.has("modelProviders") || envChanged) && authType) {
9882
+ } else if ((providersChanged || envChanged) && authType) {
9598
9883
  try {
9599
9884
  await config.refreshAuth(authType);
9600
9885
  } catch (err) {
@@ -9822,6 +10107,9 @@ ${outputText}
9822
10107
  if (sessionData?.fileHistorySnapshots?.length) {
9823
10108
  config.getFileHistoryService().restoreFromSnapshots(sessionData.fileHistorySnapshots);
9824
10109
  }
10110
+ if (sessionData?.conversation.messages) {
10111
+ config.getChatRecordingService()?.rebuildTurnBoundaries(sessionData.conversation.messages);
10112
+ }
9825
10113
  if (options.replayHistory !== false && sessionData?.conversation.messages) {
9826
10114
  await session.replayHistory(sessionData.conversation.messages);
9827
10115
  }