@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
@@ -23,28 +23,28 @@ import {
23
23
  } from "./chunk-OMX7CUOE.js";
24
24
  import {
25
25
  isAnyAutoMemPath
26
- } from "./chunk-BNXANYLH.js";
26
+ } from "./chunk-RD6YJJJ6.js";
27
27
  import {
28
28
  InstallationManager
29
- } from "./chunk-T2VDEFUU.js";
29
+ } from "./chunk-SKQZZVAV.js";
30
30
  import {
31
31
  STRUCTURED_OUTPUT_REDACTED_ARGS
32
- } from "./chunk-OIC6S73E.js";
32
+ } from "./chunk-BUUQ5HPX.js";
33
33
  import {
34
34
  BaseDeclarativeTool,
35
35
  BaseToolInvocation,
36
36
  ToolDisplayNames,
37
37
  ToolNames
38
- } from "./chunk-TOEGRAVX.js";
38
+ } from "./chunk-BX5YO7UW.js";
39
39
  import {
40
40
  atomicWriteFile,
41
41
  atomicWriteFileSync
42
- } from "./chunk-3UALQ56H.js";
42
+ } from "./chunk-3227DZO4.js";
43
43
  import {
44
44
  convertSchema,
45
45
  runtimeDiagnostics,
46
46
  safeJsonParse
47
- } from "./chunk-CGEGHF2C.js";
47
+ } from "./chunk-BKXBARJZ.js";
48
48
  import {
49
49
  require_lib
50
50
  } from "./chunk-IRJWHZWU.js";
@@ -70,7 +70,7 @@ import {
70
70
  setShellTracePropagation,
71
71
  shortenPath,
72
72
  unescapePath
73
- } from "./chunk-C4K3FEQ2.js";
73
+ } from "./chunk-UX4SGCGN.js";
74
74
  import {
75
75
  require_dist
76
76
  } from "./chunk-ZERZSAZL.js";
@@ -59073,6 +59073,13 @@ var EVENT_SUBAGENT_EXECUTION = "qwen-code.subagent_execution";
59073
59073
  var EVENT_SKILL_LAUNCH = "qwen-code.skill_launch";
59074
59074
  var EVENT_AUTH = "qwen-code.auth";
59075
59075
  var EVENT_USER_FEEDBACK = "qwen-code.user_feedback";
59076
+ var EVENT_TOOL_OUTPUT_TRUNCATED = "qwen-code.tool_output_truncated";
59077
+ var DEFAULT_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH = 1024 * 1024;
59078
+ var SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH_LIMIT = 100 * 1024 * 1024;
59079
+ function isValidSensitiveSpanAttributeMaxLength(value) {
59080
+ return Number.isSafeInteger(value) && value >= 1 && value <= SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH_LIMIT;
59081
+ }
59082
+ __name(isValidSensitiveSpanAttributeMaxLength, "isValidSensitiveSpanAttributeMaxLength");
59076
59083
  var EVENT_PROMPT_SUGGESTION = "qwen-code.prompt_suggestion";
59077
59084
  var EVENT_SPECULATION = "qwen-code.speculation";
59078
59085
  var EVENT_WORKFLOW_KEYWORD = "qwen-code.workflow_keyword";
@@ -61149,12 +61156,18 @@ var ApiCancelEvent = class {
61149
61156
  model;
61150
61157
  prompt_id;
61151
61158
  auth_type;
61152
- constructor(model, prompt_id, auth_type) {
61159
+ // Pending self-paced /loop wakeups dropped by this abort, when any. Lets a
61160
+ // user abort that ends a loop be told apart from an ordinary cancellation.
61161
+ // Named for wakeups (not "loops") to avoid colliding with loop_type, the
61162
+ // unrelated repetition-detection vocabulary in this file.
61163
+ loop_wakeups_cancelled;
61164
+ constructor(model, prompt_id, auth_type, loop_wakeups_cancelled) {
61153
61165
  this["event.name"] = "api_cancel";
61154
61166
  this["event.timestamp"] = (/* @__PURE__ */ new Date()).toISOString();
61155
61167
  this.model = model;
61156
61168
  this.prompt_id = prompt_id;
61157
61169
  this.auth_type = auth_type;
61170
+ this.loop_wakeups_cancelled = loop_wakeups_cancelled;
61158
61171
  }
61159
61172
  };
61160
61173
  var ApiResponseEvent = class {
@@ -61235,6 +61248,7 @@ var LoopType = /* @__PURE__ */ ((LoopType2) => {
61235
61248
  LoopType2["REPETITIVE_THOUGHTS"] = "repetitive_thoughts";
61236
61249
  LoopType2["READ_FILE_LOOP"] = "read_file_loop";
61237
61250
  LoopType2["ACTION_STAGNATION"] = "action_stagnation";
61251
+ LoopType2["SHELL_COMMAND_STAGNATION"] = "shell_command_stagnation";
61238
61252
  LoopType2["GLOBAL_TOOL_CALL_DUPLICATE"] = "global_tool_call_duplicate";
61239
61253
  LoopType2["ALTERNATING_TOOL_CALL_PATTERN"] = "alternating_tool_call_pattern";
61240
61254
  LoopType2["TURN_TOOL_CALL_CAP"] = "turn_tool_call_cap";
@@ -63103,6 +63117,12 @@ function mergeConsecutiveAssistantMessages(messages) {
63103
63117
  if (combinedToolCalls.length > 0) {
63104
63118
  lastMessage.tool_calls = combinedToolCalls;
63105
63119
  }
63120
+ const lastReasoning = lastMessage.reasoning_content;
63121
+ const currentReasoning = message.reasoning_content;
63122
+ const combinedReasoning = [lastReasoning, currentReasoning].filter(Boolean).join("");
63123
+ if (combinedReasoning) {
63124
+ lastMessage.reasoning_content = combinedReasoning;
63125
+ }
63106
63126
  continue;
63107
63127
  }
63108
63128
  }
@@ -63504,23 +63524,71 @@ import { AsyncLocalStorage as AsyncLocalStorage3 } from "node:async_hooks";
63504
63524
  // packages/core/src/telemetry/detailed-span-attributes.ts
63505
63525
  init_esbuild_shims();
63506
63526
  import { createHash as createHash2 } from "node:crypto";
63507
- var MAX_CONTENT_SIZE = 60 * 1024;
63508
63527
  var SYSTEM_PROMPT_PREVIEW_LENGTH = 500;
63528
+ var SHORT_TRUNCATION_SUFFIX = "...[TRUNCATED]";
63509
63529
  var seenHashes = /* @__PURE__ */ new Set();
63510
- function isEnabled(config) {
63530
+ function areSensitiveSpanAttributesEnabled(config) {
63511
63531
  return isTelemetrySdkInitialized() && config.getTelemetryIncludeSensitiveSpanAttributes();
63512
63532
  }
63513
- __name(isEnabled, "isEnabled");
63514
- function truncateContent(content, maxSize = MAX_CONTENT_SIZE) {
63515
- if (content.length <= maxSize) {
63533
+ __name(areSensitiveSpanAttributesEnabled, "areSensitiveSpanAttributesEnabled");
63534
+ function truncateContent(content, maxSize = DEFAULT_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH, originalLength = content.length) {
63535
+ if (!Number.isSafeInteger(maxSize) || maxSize < 1) {
63536
+ throw new TypeError(
63537
+ `maxSize must be a positive safe integer, got ${String(maxSize)}`
63538
+ );
63539
+ }
63540
+ if (!Number.isSafeInteger(originalLength) || originalLength < 0) {
63541
+ throw new TypeError(
63542
+ `originalLength must be a non-negative safe integer, got ${String(
63543
+ originalLength
63544
+ )}`
63545
+ );
63546
+ }
63547
+ if (originalLength < content.length) {
63548
+ throw new TypeError(
63549
+ `originalLength must be greater than or equal to content length, got ${originalLength} for content length ${content.length}`
63550
+ );
63551
+ }
63552
+ if (originalLength <= maxSize && content.length <= maxSize) {
63516
63553
  return { content, truncated: false };
63517
63554
  }
63555
+ if (originalLength > content.length && content.length <= maxSize) {
63556
+ return { content, truncated: true };
63557
+ }
63558
+ const suffix = `
63559
+
63560
+ [TRUNCATED - Content exceeds configured limit of ${maxSize} characters]`;
63561
+ if (suffix.length >= maxSize) {
63562
+ if (SHORT_TRUNCATION_SUFFIX.length >= maxSize) {
63563
+ return {
63564
+ content: SHORT_TRUNCATION_SUFFIX.slice(0, maxSize),
63565
+ truncated: true
63566
+ };
63567
+ }
63568
+ return {
63569
+ content: content.slice(0, maxSize - SHORT_TRUNCATION_SUFFIX.length) + SHORT_TRUNCATION_SUFFIX,
63570
+ truncated: true
63571
+ };
63572
+ }
63518
63573
  return {
63519
- content: content.slice(0, maxSize) + "\n\n[TRUNCATED - Content exceeds 60KB limit]",
63574
+ content: content.slice(0, maxSize - suffix.length) + suffix,
63520
63575
  truncated: true
63521
63576
  };
63522
63577
  }
63523
63578
  __name(truncateContent, "truncateContent");
63579
+ function getMaxContentSize(config) {
63580
+ return config.getTelemetrySensitiveSpanAttributeMaxLength();
63581
+ }
63582
+ __name(getMaxContentSize, "getMaxContentSize");
63583
+ function truncatePrefixedContent(prefix, content, maxSize) {
63584
+ const prefixedContent = `${prefix}${content}`;
63585
+ const result = truncateContent(prefixedContent, maxSize);
63586
+ return {
63587
+ ...result,
63588
+ originalLength: content.length
63589
+ };
63590
+ }
63591
+ __name(truncatePrefixedContent, "truncatePrefixedContent");
63524
63592
  function shortHash(content) {
63525
63593
  return createHash2("sha256").update(content).digest("hex").slice(0, 12);
63526
63594
  }
@@ -63531,20 +63599,24 @@ function stringifyContentUnion(value) {
63531
63599
  }
63532
63600
  __name(stringifyContentUnion, "stringifyContentUnion");
63533
63601
  function addUserPromptAttributes(config, span, promptText) {
63534
- if (!isEnabled(config) || !promptText) return;
63535
- const { content, truncated } = truncateContent(promptText);
63602
+ if (!areSensitiveSpanAttributesEnabled(config) || !promptText) return;
63603
+ const { content, truncated, originalLength } = truncatePrefixedContent(
63604
+ `[USER PROMPT]
63605
+ `,
63606
+ promptText,
63607
+ getMaxContentSize(config)
63608
+ );
63536
63609
  span.setAttributes({
63537
- new_context: `[USER PROMPT]
63538
- ${content}`,
63610
+ new_context: content,
63539
63611
  ...truncated && {
63540
63612
  new_context_truncated: true,
63541
- new_context_original_length: promptText.length
63613
+ new_context_original_length: originalLength
63542
63614
  }
63543
63615
  });
63544
63616
  }
63545
63617
  __name(addUserPromptAttributes, "addUserPromptAttributes");
63546
63618
  function addSystemPromptAttributes(config, span, systemInstruction) {
63547
- if (!isEnabled(config) || !systemInstruction) return;
63619
+ if (!areSensitiveSpanAttributesEnabled(config) || !systemInstruction) return;
63548
63620
  const text = stringifyContentUnion(systemInstruction);
63549
63621
  if (!text) return;
63550
63622
  const hash = `sp_${shortHash(text)}`;
@@ -63555,7 +63627,10 @@ function addSystemPromptAttributes(config, span, systemInstruction) {
63555
63627
  });
63556
63628
  if (!seenHashes.has(hash)) {
63557
63629
  seenHashes.add(hash);
63558
- const { content, truncated } = truncateContent(text);
63630
+ const { content, truncated } = truncateContent(
63631
+ text,
63632
+ getMaxContentSize(config)
63633
+ );
63559
63634
  span.setAttribute("system_prompt", content);
63560
63635
  if (truncated) {
63561
63636
  span.setAttribute("system_prompt_truncated", true);
@@ -63564,7 +63639,7 @@ function addSystemPromptAttributes(config, span, systemInstruction) {
63564
63639
  }
63565
63640
  __name(addSystemPromptAttributes, "addSystemPromptAttributes");
63566
63641
  function addToolSchemaAttributes(config, span, tools) {
63567
- if (!isEnabled(config) || !tools?.length) return;
63642
+ if (!areSensitiveSpanAttributesEnabled(config) || !tools?.length) return;
63568
63643
  const declarations = [];
63569
63644
  for (const tool of tools) {
63570
63645
  const inner = tool["functionDeclarations"];
@@ -63584,12 +63659,18 @@ function addToolSchemaAttributes(config, span, tools) {
63584
63659
  const hashKey = `tool_${hash}`;
63585
63660
  if (!seenHashes.has(hashKey)) {
63586
63661
  seenHashes.add(hashKey);
63587
- const { content, truncated } = truncateContent(declJson);
63662
+ const { content, truncated } = truncateContent(
63663
+ declJson,
63664
+ getMaxContentSize(config)
63665
+ );
63588
63666
  span.addEvent("tool_schema", {
63589
63667
  tool_name: name,
63590
63668
  tool_hash: hash,
63591
63669
  tool_definition: content,
63592
- ...truncated && { tool_definition_truncated: true }
63670
+ ...truncated && {
63671
+ tool_definition_truncated: true,
63672
+ tool_definition_original_length: declJson.length
63673
+ }
63593
63674
  });
63594
63675
  }
63595
63676
  }
@@ -63599,40 +63680,53 @@ function addToolSchemaAttributes(config, span, tools) {
63599
63680
  });
63600
63681
  }
63601
63682
  __name(addToolSchemaAttributes, "addToolSchemaAttributes");
63602
- function addModelOutputAttributes(config, span, responseText) {
63603
- if (!isEnabled(config) || !responseText) return;
63604
- const { content, truncated } = truncateContent(responseText);
63683
+ function addModelOutputAttributes(config, span, responseText, originalLength) {
63684
+ if (!areSensitiveSpanAttributesEnabled(config) || !responseText) return;
63685
+ const responseTextOriginalLength = originalLength ?? responseText.length;
63686
+ const { content, truncated } = truncateContent(
63687
+ responseText,
63688
+ getMaxContentSize(config),
63689
+ responseTextOriginalLength
63690
+ );
63605
63691
  span.setAttributes({
63606
63692
  "response.model_output": content,
63607
63693
  ...truncated && {
63608
63694
  "response.model_output_truncated": true,
63609
- "response.model_output_original_length": responseText.length
63695
+ "response.model_output_original_length": responseTextOriginalLength
63610
63696
  }
63611
63697
  });
63612
63698
  }
63613
63699
  __name(addModelOutputAttributes, "addModelOutputAttributes");
63614
63700
  function addToolInputAttributes(config, span, toolName, toolInput) {
63615
- if (!isEnabled(config)) return;
63616
- const { content, truncated } = truncateContent(toolInput);
63701
+ if (!areSensitiveSpanAttributesEnabled(config)) return;
63702
+ const { content, truncated, originalLength } = truncatePrefixedContent(
63703
+ `[TOOL INPUT: ${toolName}]
63704
+ `,
63705
+ toolInput,
63706
+ getMaxContentSize(config)
63707
+ );
63617
63708
  span.setAttributes({
63618
- tool_input: `[TOOL INPUT: ${toolName}]
63619
- ${content}`,
63709
+ tool_input: content,
63620
63710
  ...truncated && {
63621
63711
  tool_input_truncated: true,
63622
- tool_input_original_length: toolInput.length
63712
+ tool_input_original_length: originalLength
63623
63713
  }
63624
63714
  });
63625
63715
  }
63626
63716
  __name(addToolInputAttributes, "addToolInputAttributes");
63627
63717
  function addToolResultAttributes(config, span, toolName, toolResult) {
63628
- if (!isEnabled(config)) return;
63629
- const { content, truncated } = truncateContent(toolResult);
63718
+ if (!areSensitiveSpanAttributesEnabled(config)) return;
63719
+ const { content, truncated, originalLength } = truncatePrefixedContent(
63720
+ `[TOOL RESULT: ${toolName}]
63721
+ `,
63722
+ toolResult,
63723
+ getMaxContentSize(config)
63724
+ );
63630
63725
  span.setAttributes({
63631
- tool_result: `[TOOL RESULT: ${toolName}]
63632
- ${content}`,
63726
+ tool_result: content,
63633
63727
  ...truncated && {
63634
63728
  tool_result_truncated: true,
63635
- tool_result_original_length: toolResult.length
63729
+ tool_result_original_length: originalLength
63636
63730
  }
63637
63731
  });
63638
63732
  }
@@ -64017,6 +64111,34 @@ function endLLMRequestSpan(span, metadata) {
64017
64111
  }
64018
64112
  }
64019
64113
  spanCtx.span.setAttributes(endAttributes);
64114
+ try {
64115
+ if (metadata?.config && metadata.success) {
64116
+ const model = String(spanCtx.attributes["qwen-code.model"] ?? "");
64117
+ if (metadata.requestSetupMs !== void 0) {
64118
+ recordApiRequestBreakdown(metadata.config, metadata.requestSetupMs, {
64119
+ model,
64120
+ phase: "request_preparation" /* REQUEST_PREPARATION */
64121
+ });
64122
+ }
64123
+ if (metadata.ttftMs !== void 0) {
64124
+ recordApiRequestBreakdown(metadata.config, metadata.ttftMs, {
64125
+ model,
64126
+ phase: "network_latency" /* NETWORK_LATENCY */
64127
+ });
64128
+ }
64129
+ const breakdownSamplingMs = metadata.ttftMs !== void 0 ? Math.max(0, duration - metadata.ttftMs) : void 0;
64130
+ if (breakdownSamplingMs !== void 0 && breakdownSamplingMs > 0) {
64131
+ recordApiRequestBreakdown(metadata.config, breakdownSamplingMs, {
64132
+ model,
64133
+ phase: "response_processing" /* RESPONSE_PROCESSING */
64134
+ });
64135
+ }
64136
+ }
64137
+ } catch (error) {
64138
+ debugLogger8.warn(
64139
+ `Failed to record API request breakdown histogram: ${error instanceof Error ? error.message : String(error)}`
64140
+ );
64141
+ }
64020
64142
  if (metadata === void 0 || metadata.success) {
64021
64143
  spanCtx.span.setStatus({ code: SpanStatusCode.OK });
64022
64144
  } else {
@@ -65416,6 +65538,30 @@ function parseTelemetryTargetValue(value) {
65416
65538
  return void 0;
65417
65539
  }
65418
65540
  __name(parseTelemetryTargetValue, "parseTelemetryTargetValue");
65541
+ function parseSensitiveSpanAttributeMaxLengthEnvValue(envName, value) {
65542
+ if (value === void 0) return void 0;
65543
+ const trimmed = value.trim();
65544
+ const parsed = Number(trimmed);
65545
+ if (!/^\d+$/.test(trimmed) || !isValidSensitiveSpanAttributeMaxLength(parsed)) {
65546
+ throw new FatalConfigError(
65547
+ `Invalid ${envName}: must be a positive integer no greater than ${SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH_LIMIT}, got '${value}'`
65548
+ );
65549
+ }
65550
+ return parsed;
65551
+ }
65552
+ __name(parseSensitiveSpanAttributeMaxLengthEnvValue, "parseSensitiveSpanAttributeMaxLengthEnvValue");
65553
+ function parseSensitiveSpanAttributeMaxLengthSetting(settingName, value) {
65554
+ if (value === void 0) return void 0;
65555
+ if (typeof value !== "number" || !isValidSensitiveSpanAttributeMaxLength(value)) {
65556
+ throw new FatalConfigError(
65557
+ `Invalid ${settingName}: must be a positive integer no greater than ${SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH_LIMIT}, got ${String(
65558
+ value
65559
+ )}`
65560
+ );
65561
+ }
65562
+ return value;
65563
+ }
65564
+ __name(parseSensitiveSpanAttributeMaxLengthSetting, "parseSensitiveSpanAttributeMaxLengthSetting");
65419
65565
  async function resolveTelemetrySettings(options) {
65420
65566
  const argv = options.argv ?? {};
65421
65567
  const env = options.env ?? {};
@@ -65446,6 +65592,13 @@ async function resolveTelemetrySettings(options) {
65446
65592
  const includeSensitiveSpanAttributes = parseBooleanEnvFlag(
65447
65593
  env["QWEN_TELEMETRY_INCLUDE_SENSITIVE_SPAN_ATTRIBUTES"]
65448
65594
  ) ?? settings.includeSensitiveSpanAttributes ?? false;
65595
+ const sensitiveSpanAttributeMaxLength = parseSensitiveSpanAttributeMaxLengthEnvValue(
65596
+ "QWEN_TELEMETRY_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH",
65597
+ env["QWEN_TELEMETRY_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH"]
65598
+ ) ?? parseSensitiveSpanAttributeMaxLengthSetting(
65599
+ "telemetry.sensitiveSpanAttributeMaxLength",
65600
+ settings.sensitiveSpanAttributeMaxLength
65601
+ ) ?? DEFAULT_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH;
65449
65602
  const outfile = argv.telemetryOutfile ?? env["QWEN_TELEMETRY_OUTFILE"] ?? settings.outfile;
65450
65603
  const otlpTracesEndpoint = env["QWEN_TELEMETRY_OTLP_TRACES_ENDPOINT"] ?? env["OTEL_EXPORTER_OTLP_TRACES_ENDPOINT"] ?? settings.otlpTracesEndpoint;
65451
65604
  const otlpLogsEndpoint = env["QWEN_TELEMETRY_OTLP_LOGS_ENDPOINT"] ?? env["OTEL_EXPORTER_OTLP_LOGS_ENDPOINT"] ?? settings.otlpLogsEndpoint;
@@ -65487,6 +65640,7 @@ async function resolveTelemetrySettings(options) {
65487
65640
  otlpMetricsEndpoint,
65488
65641
  logPrompts,
65489
65642
  includeSensitiveSpanAttributes,
65643
+ sensitiveSpanAttributeMaxLength,
65490
65644
  outfile,
65491
65645
  resourceAttributes,
65492
65646
  metrics: { includeSessionId: metricsIncludeSessionId },
@@ -65520,6 +65674,12 @@ var createInitialModelMetrics = /* @__PURE__ */ __name(() => ({
65520
65674
  ...createInitialModelMetricsCore(),
65521
65675
  bySource: /* @__PURE__ */ Object.create(null)
65522
65676
  }), "createInitialModelMetrics");
65677
+ var createInitialSkillMetrics = /* @__PURE__ */ __name(() => ({
65678
+ totalCalls: 0,
65679
+ totalSuccess: 0,
65680
+ totalFail: 0,
65681
+ byName: {}
65682
+ }), "createInitialSkillMetrics");
65523
65683
  var createInitialMetrics = /* @__PURE__ */ __name(() => ({
65524
65684
  models: {},
65525
65685
  tools: {
@@ -65538,7 +65698,8 @@ var createInitialMetrics = /* @__PURE__ */ __name(() => ({
65538
65698
  files: {
65539
65699
  totalLinesAdded: 0,
65540
65700
  totalLinesRemoved: 0
65541
- }
65701
+ },
65702
+ skills: createInitialSkillMetrics()
65542
65703
  }), "createInitialMetrics");
65543
65704
  var UiTelemetryService = class _UiTelemetryService extends EventEmitter {
65544
65705
  static {
@@ -65570,6 +65731,23 @@ var UiTelemetryService = class _UiTelemetryService extends EventEmitter {
65570
65731
  getMetricsForSession(sessionId) {
65571
65732
  return this.#sessionMetrics.get(sessionId) ?? createInitialMetrics();
65572
65733
  }
65734
+ recordSkillInvocation(skillName, success, sessionId) {
65735
+ this.#accumulateSkillInvocation(this.#metrics, skillName, success);
65736
+ if (sessionId && !this.#closedSessions.has(sessionId)) {
65737
+ if (!this.#sessionMetrics.has(sessionId)) {
65738
+ this.#sessionMetrics.set(sessionId, createInitialMetrics());
65739
+ }
65740
+ this.#accumulateSkillInvocation(
65741
+ this.#sessionMetrics.get(sessionId),
65742
+ skillName,
65743
+ success
65744
+ );
65745
+ }
65746
+ this.emit("update", {
65747
+ metrics: this.#metrics,
65748
+ lastPromptTokenCount: this.#lastPromptTokenCount
65749
+ });
65750
+ }
65573
65751
  getLastPromptTokenCount() {
65574
65752
  return this.#lastPromptTokenCount;
65575
65753
  }
@@ -65703,6 +65881,38 @@ var UiTelemetryService = class _UiTelemetryService extends EventEmitter {
65703
65881
  }
65704
65882
  }
65705
65883
  }
65884
+ #accumulateSkillInvocation(metrics2, skillName, success) {
65885
+ const skills = metrics2.skills ?? createInitialSkillMetrics();
65886
+ metrics2.skills = skills;
65887
+ skills.totalCalls++;
65888
+ if (success) {
65889
+ skills.totalSuccess++;
65890
+ } else {
65891
+ skills.totalFail++;
65892
+ }
65893
+ if (!Object.prototype.hasOwnProperty.call(skills.byName, skillName)) {
65894
+ Object.defineProperty(skills.byName, skillName, {
65895
+ value: {
65896
+ count: 0,
65897
+ success: 0,
65898
+ fail: 0
65899
+ },
65900
+ enumerable: true,
65901
+ configurable: true,
65902
+ writable: true
65903
+ });
65904
+ }
65905
+ const skillStats = skills.byName[skillName];
65906
+ if (!skillStats) {
65907
+ return;
65908
+ }
65909
+ skillStats.count++;
65910
+ if (success) {
65911
+ skillStats.success++;
65912
+ } else {
65913
+ skillStats.fail++;
65914
+ }
65915
+ }
65706
65916
  #getOrCreateModelMetrics(metrics2, modelName) {
65707
65917
  if (!metrics2.models[modelName]) {
65708
65918
  metrics2.models[modelName] = createInitialModelMetrics();
@@ -66220,7 +66430,6 @@ __name(snapshotRetryMetadata, "snapshotRetryMetadata");
66220
66430
  var debugLogger10 = createDebugLogger("LOGGING_CONTENT_GENERATOR");
66221
66431
  var MAX_RESPONSE_TEXT_LENGTH = 4096;
66222
66432
  var RESPONSE_TEXT_TRUNCATION_SUFFIX = "...[truncated]";
66223
- var MAX_RESPONSE_TEXT_PREFIX_LENGTH = MAX_RESPONSE_TEXT_LENGTH - RESPONSE_TEXT_TRUNCATION_SUFFIX.length;
66224
66433
  var LoggingContentGenerator = class {
66225
66434
  constructor(wrapped, config, generatorConfig) {
66226
66435
  this.wrapped = wrapped;
@@ -66357,9 +66566,14 @@ var LoggingContentGenerator = class {
66357
66566
  () => this.wrapped.generateContent(req, userPromptId)
66358
66567
  );
66359
66568
  const durationMs = Date.now() - startTime;
66360
- const responseText = isInternal ? void 0 : this.extractResponseText(result);
66361
- if (!isInternal) {
66362
- addModelOutputAttributes(this.config, llmSpan, responseText);
66569
+ const shouldCollectSensitiveSpanAttributes = !isInternal && this.shouldCollectSensitiveSpanAttributes();
66570
+ const modelOutput = shouldCollectSensitiveSpanAttributes ? this.extractResponseTextForSensitiveSpan(
66571
+ result,
66572
+ this.config.getTelemetrySensitiveSpanAttributeMaxLength()
66573
+ ) : void 0;
66574
+ const responseText = isInternal ? void 0 : this.extractResponseText(result, MAX_RESPONSE_TEXT_LENGTH);
66575
+ if (shouldCollectSensitiveSpanAttributes) {
66576
+ this.safelyAddModelOutputAttributes(llmSpan, modelOutput);
66363
66577
  }
66364
66578
  this.safelyLogApiResponse(
66365
66579
  result.responseId ?? "",
@@ -66391,7 +66605,8 @@ var LoggingContentGenerator = class {
66391
66605
  finishReason: response.candidates?.[0]?.finishReason || void 0,
66392
66606
  thoughtsTokenCount: response.usageMetadata?.thoughtsTokenCount,
66393
66607
  subagentName: subagentNameContext.getStore() || void 0,
66394
- ...retrySnapshot
66608
+ ...retrySnapshot,
66609
+ config: this.config
66395
66610
  });
66396
66611
  return response;
66397
66612
  } catch (error) {
@@ -66404,7 +66619,8 @@ var LoggingContentGenerator = class {
66404
66619
  errorType: getErrorType(error),
66405
66620
  errorStatusCode: getErrorStatus(error),
66406
66621
  subagentName: subagentNameContext.getStore() || void 0,
66407
- ...retrySnapshot
66622
+ ...retrySnapshot,
66623
+ config: this.config
66408
66624
  });
66409
66625
  await context.with(spanContext, async () => {
66410
66626
  this.safelyLogApiError("", durationMs, error, req.model, userPromptId);
@@ -66477,7 +66693,8 @@ var LoggingContentGenerator = class {
66477
66693
  errorType: getErrorType(error),
66478
66694
  errorStatusCode: getErrorStatus(error),
66479
66695
  subagentName: subagentNameContext.getStore() || void 0,
66480
- ...retrySnapshot
66696
+ ...retrySnapshot,
66697
+ config: this.config
66481
66698
  });
66482
66699
  try {
66483
66700
  await this.safelyLogOpenAIInteraction(
@@ -66554,7 +66771,8 @@ var LoggingContentGenerator = class {
66554
66771
  error: "Stream span timed out (idle)",
66555
66772
  responseId: firstResponseId || void 0,
66556
66773
  subagentName: subagentName || void 0,
66557
- ...retrySnapshot
66774
+ ...retrySnapshot,
66775
+ config: this.config
66558
66776
  });
66559
66777
  spanEndedByTimeout = true;
66560
66778
  }, STREAM_IDLE_TIMEOUT_MS);
@@ -66591,7 +66809,15 @@ var LoggingContentGenerator = class {
66591
66809
  }
66592
66810
  const durationMs = Date.now() - startTime;
66593
66811
  const consolidatedResponse = shouldCollectResponses ? this.consolidateGeminiResponsesForLogging(responses) : void 0;
66594
- const streamResponseText = isInternal ? void 0 : this.extractResponseText(consolidatedResponse);
66812
+ const shouldCollectSensitiveSpanAttributes = !isInternal && span !== void 0 && this.shouldCollectSensitiveSpanAttributes();
66813
+ const streamModelOutput = shouldCollectSensitiveSpanAttributes ? this.extractResponseTextForSensitiveSpan(
66814
+ consolidatedResponse,
66815
+ this.config.getTelemetrySensitiveSpanAttributeMaxLength()
66816
+ ) : void 0;
66817
+ const streamResponseText = isInternal ? void 0 : this.extractResponseText(
66818
+ consolidatedResponse,
66819
+ MAX_RESPONSE_TEXT_LENGTH
66820
+ );
66595
66821
  if (!spanEndedByTimeout) {
66596
66822
  runInSpan(
66597
66823
  () => this.safelyLogApiResponse(
@@ -66603,8 +66829,8 @@ var LoggingContentGenerator = class {
66603
66829
  streamResponseText
66604
66830
  )
66605
66831
  );
66606
- if (!isInternal && span) {
66607
- addModelOutputAttributes(this.config, span, streamResponseText);
66832
+ if (shouldCollectSensitiveSpanAttributes && span) {
66833
+ this.safelyAddModelOutputAttributes(span, streamModelOutput);
66608
66834
  }
66609
66835
  await runInSpan(
66610
66836
  () => this.safelyLogOpenAIInteraction(
@@ -66659,7 +66885,8 @@ var LoggingContentGenerator = class {
66659
66885
  subagentName: subagentName || void 0,
66660
66886
  errorType: lastError ? getErrorType(lastError) : void 0,
66661
66887
  errorStatusCode: lastError ? getErrorStatus(lastError) : void 0,
66662
- ...retrySnapshot
66888
+ ...retrySnapshot,
66889
+ config: this.config
66663
66890
  });
66664
66891
  }
66665
66892
  }
@@ -66812,40 +67039,84 @@ var LoggingContentGenerator = class {
66812
67039
  ];
66813
67040
  return consolidated;
66814
67041
  }
66815
- extractResponseText(response) {
66816
- const parts = response?.candidates?.[0]?.content?.parts;
66817
- if (!parts?.length) {
66818
- return void 0;
66819
- }
67042
+ extractResponseText(response, maxLength) {
66820
67043
  let text = "";
66821
- let hasText = false;
66822
67044
  let truncated = false;
66823
- const appendText = /* @__PURE__ */ __name((partText) => {
66824
- hasText = true;
67045
+ const maxPrefixLength = Math.max(
67046
+ 0,
67047
+ maxLength - RESPONSE_TEXT_TRUNCATION_SUFFIX.length
67048
+ );
67049
+ const hasText = this.forEachVisibleResponseText(response, (partText) => {
66825
67050
  if (truncated) {
66826
67051
  return;
66827
67052
  }
66828
- const remaining = MAX_RESPONSE_TEXT_PREFIX_LENGTH - text.length;
67053
+ const remaining = maxPrefixLength - text.length;
66829
67054
  if (partText.length <= remaining) {
66830
67055
  text += partText;
66831
67056
  return;
66832
67057
  }
66833
67058
  text += partText.slice(0, Math.max(0, remaining));
66834
67059
  truncated = true;
66835
- }, "appendText");
67060
+ });
67061
+ if (!hasText) {
67062
+ return void 0;
67063
+ }
67064
+ return truncated ? `${text}${RESPONSE_TEXT_TRUNCATION_SUFFIX}` : text;
67065
+ }
67066
+ extractResponseTextForSensitiveSpan(response, maxLength) {
67067
+ let text = "";
67068
+ let originalLength = 0;
67069
+ const hasText = this.forEachVisibleResponseText(response, (partText) => {
67070
+ originalLength += partText.length;
67071
+ const remaining = maxLength - text.length;
67072
+ if (remaining > 0) {
67073
+ text += partText.slice(0, remaining);
67074
+ }
67075
+ });
67076
+ if (!hasText) {
67077
+ return void 0;
67078
+ }
67079
+ return { text, originalLength };
67080
+ }
67081
+ forEachVisibleResponseText(response, onText) {
67082
+ const parts = response?.candidates?.[0]?.content?.parts;
67083
+ if (!parts?.length) {
67084
+ return false;
67085
+ }
67086
+ let hasText = false;
66836
67087
  for (const part of parts) {
66837
- if (typeof part === "string") {
66838
- appendText(part);
67088
+ const text = this.getVisibleResponsePartText(part);
67089
+ if (text === void 0) {
66839
67090
  continue;
66840
67091
  }
66841
- if ("text" in part && typeof part.text === "string" && !("thought" in part && part.thought)) {
66842
- appendText(part.text);
66843
- }
67092
+ hasText = true;
67093
+ onText(text);
66844
67094
  }
66845
- if (!hasText) {
66846
- return void 0;
67095
+ return hasText;
67096
+ }
67097
+ getVisibleResponsePartText(part) {
67098
+ if (typeof part === "string") {
67099
+ return part;
66847
67100
  }
66848
- return truncated ? `${text}${RESPONSE_TEXT_TRUNCATION_SUFFIX}` : text;
67101
+ if ("text" in part && typeof part.text === "string" && !("thought" in part && part.thought)) {
67102
+ return part.text;
67103
+ }
67104
+ return void 0;
67105
+ }
67106
+ safelyAddModelOutputAttributes(span, modelOutput) {
67107
+ try {
67108
+ addModelOutputAttributes(
67109
+ this.config,
67110
+ span,
67111
+ modelOutput?.text,
67112
+ modelOutput?.originalLength
67113
+ );
67114
+ } catch (error) {
67115
+ debugLogger10.warn("Failed to add model output span attributes:", error);
67116
+ }
67117
+ }
67118
+ shouldCollectSensitiveSpanAttributes() {
67119
+ return areSensitiveSpanAttributesEnabled(this.config);
66849
67120
  }
66850
67121
  async countTokens(req) {
66851
67122
  return this.wrapped.countTokens(req);
@@ -67227,11 +67498,11 @@ async function createContentGenerator(generatorConfig, config, isInitialAuth) {
67227
67498
  let baseGenerator;
67228
67499
  try {
67229
67500
  if (authType === "openai" /* USE_OPENAI */) {
67230
- const { createOpenAIContentGenerator } = await import("./openaiContentGenerator-F74IPQ6E.js");
67501
+ const { createOpenAIContentGenerator } = await import("./openaiContentGenerator-4WUVA3Q2.js");
67231
67502
  baseGenerator = createOpenAIContentGenerator(generatorConfig, config);
67232
67503
  } else if (authType === "qwen-oauth" /* QWEN_OAUTH */) {
67233
- const { getQwenOAuthClient: getQwenOauthClient } = await import("./qwenOAuth2-K4AASPCV.js");
67234
- const { QwenContentGenerator } = await import("./qwenContentGenerator-ATTK5P4D.js");
67504
+ const { getQwenOAuthClient: getQwenOauthClient } = await import("./qwenOAuth2-6HNGHALT.js");
67505
+ const { QwenContentGenerator } = await import("./qwenContentGenerator-MVYYR44B.js");
67235
67506
  try {
67236
67507
  const qwenClient = await getQwenOauthClient(
67237
67508
  config,
@@ -67249,10 +67520,10 @@ async function createContentGenerator(generatorConfig, config, isInitialAuth) {
67249
67520
  throw new Error(error instanceof Error ? error.message : String(error));
67250
67521
  }
67251
67522
  } else if (authType === "anthropic" /* USE_ANTHROPIC */) {
67252
- const { createAnthropicContentGenerator } = await import("./anthropicContentGenerator-E3TQ5XJJ.js");
67523
+ const { createAnthropicContentGenerator } = await import("./anthropicContentGenerator-KWSJAQ7B.js");
67253
67524
  baseGenerator = createAnthropicContentGenerator(generatorConfig, config);
67254
67525
  } else if (authType === "gemini" /* USE_GEMINI */ || authType === "vertex-ai" /* USE_VERTEX_AI */) {
67255
- const { createGeminiContentGenerator } = await import("./geminiContentGenerator-XTG6SFLA.js");
67526
+ const { createGeminiContentGenerator } = await import("./geminiContentGenerator-ZVWRHXOO.js");
67256
67527
  baseGenerator = createGeminiContentGenerator(generatorConfig, config);
67257
67528
  } else {
67258
67529
  throw new Error(
@@ -67701,7 +67972,8 @@ var QwenLogger = class _QwenLogger {
67701
67972
  properties: {
67702
67973
  model: event.model,
67703
67974
  prompt_id: event.prompt_id,
67704
- auth_type: event.auth_type
67975
+ auth_type: event.auth_type,
67976
+ loop_wakeups_cancelled: event.loop_wakeups_cancelled
67705
67977
  }
67706
67978
  });
67707
67979
  this.enqueueLogEvent(rumEvent);
@@ -68847,7 +69119,9 @@ function logToolOutputTruncated(config, event) {
68847
69119
  const attributes = {
68848
69120
  ...getCommonAttributes(config),
68849
69121
  ...event,
68850
- "event.name": "tool_output_truncated",
69122
+ // event class's `eventName` (short, no prefix) leaks via spread — override with
69123
+ // full namespaced constant for OTel compliance. Same pattern as other event loggers.
69124
+ "event.name": EVENT_TOOL_OUTPUT_TRUNCATED,
68851
69125
  "event.timestamp": (/* @__PURE__ */ new Date()).toISOString()
68852
69126
  };
68853
69127
  const logger = import_api_logs2.logs.getLogger(SERVICE_NAME);
@@ -69411,6 +69685,14 @@ function logSkillLaunch(config, event) {
69411
69685
  logger.emit(logRecord);
69412
69686
  }
69413
69687
  __name(logSkillLaunch, "logSkillLaunch");
69688
+ function recordSkillInvocation(config, event) {
69689
+ uiTelemetryService.recordSkillInvocation(
69690
+ event.skillName,
69691
+ event.success,
69692
+ config.getSessionId()
69693
+ );
69694
+ }
69695
+ __name(recordSkillInvocation, "recordSkillInvocation");
69414
69696
  function logUserFeedback(config, event) {
69415
69697
  const uiEvent = {
69416
69698
  ...event,
@@ -69989,6 +70271,9 @@ export {
69989
70271
  EVENT_TOOL_CALL,
69990
70272
  EVENT_API_ERROR,
69991
70273
  EVENT_API_RESPONSE,
70274
+ DEFAULT_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH,
70275
+ SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH_LIMIT,
70276
+ isValidSensitiveSpanAttributeMaxLength,
69992
70277
  MAIN_SOURCE,
69993
70278
  subagentNameContext,
69994
70279
  UiTelemetryService,
@@ -70081,6 +70366,7 @@ export {
70081
70366
  SemanticAttributes,
70082
70367
  sanitizeHookName,
70083
70368
  QwenLogger,
70369
+ areSensitiveSpanAttributesEnabled,
70084
70370
  truncateContent,
70085
70371
  addUserPromptAttributes,
70086
70372
  addSystemPromptAttributes,
@@ -70165,6 +70451,7 @@ export {
70165
70451
  logExtensionDisable,
70166
70452
  logAuth,
70167
70453
  logSkillLaunch,
70454
+ recordSkillInvocation,
70168
70455
  logUserFeedback,
70169
70456
  logArenaSessionStarted,
70170
70457
  logArenaAgentCompleted,