@qwen-code/qwen-code 0.21.2 → 0.21.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 (351) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +41 -38
  2. package/bundled/qc-helper/docs/features/channels/github.md +7 -0
  3. package/bundled/qc-helper/docs/features/channels/gitlab.md +6 -0
  4. package/bundled/qc-helper/docs/features/code-review.md +78 -23
  5. package/bundled/qc-helper/docs/features/commands.md +2 -0
  6. package/bundled/qc-helper/docs/features/hooks.md +115 -18
  7. package/bundled/qc-helper/docs/features/memory.md +27 -0
  8. package/bundled/qc-helper/docs/features/skills.md +46 -1
  9. package/bundled/qc-helper/docs/features/sub-agents.md +42 -9
  10. package/bundled/qc-helper/docs/features/tool-use-summaries.md +7 -7
  11. package/bundled/qc-helper/docs/qwen-serve.md +21 -1
  12. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +13 -13
  13. package/bundled/qc-helper/docs/support/troubleshooting.md +6 -1
  14. package/bundled/review/DESIGN.md +167 -32
  15. package/bundled/review/SKILL.md +156 -32
  16. package/chunks/{MaxSizedBox-TQBQ247P.js → MaxSizedBox-OJR636GP.js} +40 -38
  17. package/chunks/{StandaloneSessionPicker-2HPTKCLX.js → StandaloneSessionPicker-AMMBF5UY.js} +62 -59
  18. package/chunks/{acp-startup-profiler-2C4A5ZTJ.js → acp-startup-profiler-3RICG2YW.js} +2 -2
  19. package/chunks/{acpAgent-PS6EDGH3.js → acpAgent-M57LVIQA.js} +662 -560
  20. package/chunks/{agent-VDOUB35F.js → agent-PE37ARLM.js} +36 -34
  21. package/chunks/{agent-headless-EO53EFS2.js → agent-headless-45ASME4R.js} +36 -34
  22. package/chunks/{anthropicContentGenerator-OFHSZJBF.js → anthropicContentGenerator-WCBYB6JG.js} +337 -27
  23. package/chunks/{artifact-tool-RDN2W7ND.js → artifact-tool-TBOYEKTY.js} +2 -2
  24. package/chunks/{askUserQuestion-OZERWH5R.js → askUserQuestion-23Y5WZFJ.js} +2 -2
  25. package/chunks/{bridge-W7AZSRZQ.js → bridge-K3ZRPO4D.js} +42 -40
  26. package/chunks/{ca-6W3SK7OQ.js → ca-4OJN75WT.js} +46 -5
  27. package/chunks/{channel-management-service-5S7YCWX5.js → channel-management-service-IXJ2MZTS.js} +7 -7
  28. package/chunks/{channel-settings-store-JFVRSNER.js → channel-settings-store-PEAR3IME.js} +43 -41
  29. package/chunks/{channel-worker-group-OVWGYMZS.js → channel-worker-group-NDG4WOOZ.js} +8 -8
  30. package/chunks/{channel-worker-manager-H55GKOQA.js → channel-worker-manager-ZCW6UW34.js} +8 -8
  31. package/chunks/{channel-worker-supervisor-CABBXYHK.js → channel-worker-supervisor-ATGFTZRN.js} +4 -4
  32. package/chunks/{chunk-W3UKBMSI.js → chunk-22YFMJBW.js} +84 -8
  33. package/chunks/{chunk-6MPDY6ZG.js → chunk-24ER7UV4.js} +1 -1
  34. package/chunks/{chunk-QDK4F2N5.js → chunk-2DNKEBXY.js} +1 -1
  35. package/chunks/{chunk-D6MDRSZ6.js → chunk-2LZCLQIS.js} +22 -11
  36. package/chunks/{chunk-JYBU6YUE.js → chunk-2M5N3DHY.js} +1 -1
  37. package/chunks/{chunk-KR32NIAN.js → chunk-2MI7ZTRT.js} +10 -10
  38. package/chunks/{chunk-LHKCY7DY.js → chunk-2UISUFHQ.js} +3 -3
  39. package/chunks/{chunk-JXVC2PL3.js → chunk-33FNCQSY.js} +2 -2
  40. package/chunks/{chunk-NBD76HUW.js → chunk-3LGZEYOF.js} +2 -2
  41. package/chunks/{chunk-CO2U743O.js → chunk-3MWNROHB.js} +4 -4
  42. package/chunks/{chunk-E2BHWIDT.js → chunk-3RXUYQJI.js} +6 -2
  43. package/chunks/{chunk-E5Z2AVNV.js → chunk-3SH53ANB.js} +0 -11
  44. package/chunks/{chunk-LYI2PZDK.js → chunk-3XF4WT3B.js} +2 -2
  45. package/chunks/{chunk-N4ACHWNH.js → chunk-432XCUHF.js} +1 -1
  46. package/chunks/{chunk-FNDXMN7I.js → chunk-4AGGSHCH.js} +774 -205
  47. package/chunks/{chunk-DUNI4EBW.js → chunk-4K3RV3OA.js} +80 -50
  48. package/chunks/{chunk-L2E5GFAG.js → chunk-4LKVQFHM.js} +2 -2
  49. package/chunks/{chunk-YDLJGZHL.js → chunk-4NFY2S7N.js} +0 -33
  50. package/chunks/{chunk-JLZ3RBQG.js → chunk-5JPVOYWA.js} +144 -11
  51. package/chunks/{chunk-6TAASXWL.js → chunk-5VYFXHY2.js} +3 -3
  52. package/chunks/{chunk-EU5TBFJI.js → chunk-6NE5NTHJ.js} +2 -2
  53. package/chunks/{chunk-XQK4XXTN.js → chunk-6O5DVH27.js} +1 -1
  54. package/chunks/{chunk-2RFKHEXL.js → chunk-6PLDPT2C.js} +1 -1
  55. package/chunks/{chunk-3APUUXRF.js → chunk-A5YZ3FA2.js} +2 -1
  56. package/chunks/{chunk-SHN4KHDK.js → chunk-A6SX5TAH.js} +3 -3
  57. package/chunks/{chunk-SZ3KHTDR.js → chunk-AKA24BGO.js} +1 -1
  58. package/chunks/{chunk-Q3T5KA2V.js → chunk-BFHXDAR7.js} +1 -1
  59. package/chunks/{chunk-L55JWS76.js → chunk-BGXZBI5B.js} +1 -1
  60. package/chunks/{chunk-P5VC5USY.js → chunk-BKGA75MU.js} +1 -1
  61. package/chunks/{chunk-2KKCCLPT.js → chunk-BKXTHMOZ.js} +1 -1
  62. package/chunks/{chunk-V4XNUDPE.js → chunk-BSKUTHLO.js} +15 -7
  63. package/chunks/{chunk-MM7TH7ZM.js → chunk-CFDR3GNL.js} +18 -3
  64. package/chunks/{chunk-E2FN6SM7.js → chunk-CIUUYB23.js} +5 -5
  65. package/chunks/{chunk-A7Y5H4TX.js → chunk-D2GPKXCQ.js} +7 -7
  66. package/chunks/{chunk-JCJ7LKNA.js → chunk-DIEFUBV6.js} +1644 -1570
  67. package/chunks/{chunk-GL4JOZXU.js → chunk-DSGJLHM3.js} +4 -4
  68. package/chunks/{chunk-675H6PLP.js → chunk-DYA25Y7U.js} +1 -1
  69. package/chunks/{chunk-3I6DUGQD.js → chunk-E4WHKETF.js} +32 -4
  70. package/chunks/{chunk-CU47KXB5.js → chunk-EGYJRIDF.js} +6 -6
  71. package/chunks/{chunk-6CQWRWUC.js → chunk-EIMKVOSF.js} +3 -3
  72. package/chunks/{chunk-QTERJVPZ.js → chunk-EKTCKZV5.js} +1 -0
  73. package/chunks/{chunk-NHFEMWAZ.js → chunk-FF75UUB2.js} +1 -1
  74. package/chunks/{chunk-L32VV3ZJ.js → chunk-FG63DZQA.js} +12 -12
  75. package/chunks/{chunk-FCYYAB4S.js → chunk-FHPKHXHT.js} +3 -3
  76. package/chunks/{chunk-GJ2GBPBD.js → chunk-FXVHVCNA.js} +5 -5
  77. package/chunks/{chunk-56Z7QEAQ.js → chunk-GMSBXEH4.js} +16 -16
  78. package/chunks/chunk-GOFAQQZA.js +132 -0
  79. package/chunks/{chunk-YUFIEIWC.js → chunk-GTM6IHBB.js} +2 -2
  80. package/chunks/{chunk-HIVKI6O6.js → chunk-H35Q5CEG.js} +9 -7
  81. package/chunks/{chunk-FJ5WUMUQ.js → chunk-H36SETQS.js} +1 -1
  82. package/chunks/{chunk-AUOULH6Q.js → chunk-H6FIBBXK.js} +1610 -2196
  83. package/chunks/{chunk-VEMNQMHA.js → chunk-H6ZYP74A.js} +5 -13
  84. package/chunks/{chunk-TTJZAIFP.js → chunk-HEBW74ZW.js} +3 -3
  85. package/chunks/{chunk-6FMJLI5M.js → chunk-HFVW54NL.js} +41 -6
  86. package/chunks/{chunk-44F4LBWZ.js → chunk-HIXVWF7I.js} +56 -18
  87. package/chunks/{chunk-EQNUDTL6.js → chunk-HUIQ4FYC.js} +2 -2
  88. package/chunks/{chunk-5NNHICSA.js → chunk-I7JDGNG6.js} +3 -3
  89. package/chunks/{chunk-PVNQRENX.js → chunk-IF6K42YJ.js} +1 -1
  90. package/chunks/{chunk-PJOHNFIY.js → chunk-IWGTGH4G.js} +5 -5
  91. package/chunks/{chunk-B4AJNNOL.js → chunk-J26HHFI5.js} +1 -1
  92. package/chunks/{chunk-CNTR4GR6.js → chunk-JELIWHXD.js} +1 -1
  93. package/chunks/{chunk-V25K5ID7.js → chunk-K2J5JZ6B.js} +1 -1
  94. package/chunks/{chunk-IGTHU3T4.js → chunk-KKN2IE7Q.js} +1 -1
  95. package/chunks/{chunk-TZTAV5RH.js → chunk-KVUBYJDM.js} +2 -2
  96. package/chunks/{chunk-3F2WDAV6.js → chunk-KXWERR6P.js} +14 -14
  97. package/chunks/{chunk-JJPKFJBT.js → chunk-L7FTDKCD.js} +3 -3
  98. package/chunks/chunk-LBOVL47Y.js +29 -0
  99. package/chunks/{chunk-FS674JW4.js → chunk-LBWNSLJK.js} +3 -3
  100. package/chunks/{chunk-I5BT7ADR.js → chunk-LGT3YMLN.js} +4 -4
  101. package/chunks/{chunk-UV6KF7T3.js → chunk-LZV2BZPL.js} +3 -3
  102. package/chunks/{chunk-P755N4CS.js → chunk-M5LIY7Y6.js} +6 -6
  103. package/chunks/{chunk-YGE3IXJP.js → chunk-M744OFVE.js} +1 -1
  104. package/chunks/{chunk-NTDH4IML.js → chunk-MCXMWLFT.js} +7 -7
  105. package/chunks/chunk-MISUEWB4.js +8749 -0
  106. package/chunks/{chunk-TEGJSJDF.js → chunk-MOHAWIAW.js} +2 -2
  107. package/chunks/{chunk-KXDONCPU.js → chunk-MTR4JWQJ.js} +4 -4
  108. package/chunks/{chunk-RSVPYAGK.js → chunk-MUEJ4R3E.js} +5 -5
  109. package/chunks/{chunk-PCK4B6LR.js → chunk-N42C2FU3.js} +1 -1
  110. package/chunks/{chunk-WWCMSZII.js → chunk-NW57GHNL.js} +71 -7
  111. package/chunks/{chunk-PQNHRFJC.js → chunk-NYX53SV4.js} +0 -2
  112. package/chunks/{chunk-QARJNL2V.js → chunk-O2ZYHG33.js} +5 -4
  113. package/chunks/{chunk-V7RNNPGC.js → chunk-P5Y23G2L.js} +18 -1
  114. package/chunks/{chunk-GURGAJTX.js → chunk-PDDYAXL2.js} +4 -1
  115. package/chunks/chunk-PWCQRLM5.js +1170 -0
  116. package/chunks/{chunk-VMX5RZQH.js → chunk-Q3G5L5KF.js} +18 -9
  117. package/chunks/{chunk-DQ2O5QOJ.js → chunk-QDWLUXKP.js} +1 -1
  118. package/chunks/chunk-QL4TN4HS.js +59 -0
  119. package/chunks/{chunk-E6CJ2SMM.js → chunk-QMBEW7EW.js} +2 -2
  120. package/chunks/{chunk-U4VTUMMK.js → chunk-QONSRAEV.js} +1 -1
  121. package/chunks/{chunk-DEEABGH2.js → chunk-QPSYIV2O.js} +3320 -536
  122. package/chunks/{chunk-Q5WZTTWE.js → chunk-QWDVZH24.js} +6 -8
  123. package/chunks/{chunk-2LEOZTBT.js → chunk-QWW6I2UO.js} +111 -26
  124. package/chunks/{chunk-LOY7RWQG.js → chunk-QYPT3QUD.js} +3 -3
  125. package/chunks/{chunk-6PQPKTXP.js → chunk-R7XNRHYD.js} +1 -1
  126. package/chunks/{chunk-7SJN2IWT.js → chunk-RCXCGZG6.js} +5 -5
  127. package/chunks/{chunk-HX6RLYUO.js → chunk-RL6J3BPE.js} +4 -4
  128. package/chunks/{chunk-Z3S5EMOW.js → chunk-RPYYTL7E.js} +60 -12
  129. package/chunks/{chunk-MB32MS4U.js → chunk-RR224BUP.js} +215 -174
  130. package/chunks/{chunk-H6I4PGRV.js → chunk-SKSF3LGQ.js} +4 -4
  131. package/chunks/{chunk-77V3VIKL.js → chunk-SQ3YD5MI.js} +9 -9
  132. package/chunks/{chunk-CBBP4BMC.js → chunk-SRY26X4H.js} +72 -206
  133. package/chunks/{chunk-RDJOB6S3.js → chunk-TXABHVZD.js} +1 -1
  134. package/chunks/{chunk-R2XWGR75.js → chunk-TYERNYH4.js} +2 -2
  135. package/chunks/chunk-TZTBZ25J.js +222 -0
  136. package/chunks/{chunk-45IOTAUS.js → chunk-U25CMJYY.js} +1 -1
  137. package/chunks/{chunk-7ULQIS27.js → chunk-UEJESCS7.js} +1 -1
  138. package/chunks/{chunk-HC45LTEN.js → chunk-UH7Z7Y45.js} +1 -1
  139. package/chunks/{chunk-CPZAH673.js → chunk-UKZEXS6K.js} +2 -0
  140. package/chunks/{chunk-54YCNSK5.js → chunk-UQDFEU47.js} +4113 -10152
  141. package/chunks/{chunk-XP4L6KS3.js → chunk-URN76TKR.js} +2 -2
  142. package/chunks/{chunk-XUGZYLDH.js → chunk-UWSXFI6E.js} +1 -1
  143. package/chunks/{chunk-AOHY3QJ3.js → chunk-VA5NLVPT.js} +3 -3
  144. package/chunks/{chunk-PZEXDV3H.js → chunk-VUNRNRN6.js} +71 -43
  145. package/chunks/{chunk-FANRZEAJ.js → chunk-VWOVHOTT.js} +1 -1
  146. package/chunks/{chunk-QTHQ6Z5X.js → chunk-WK4TJUEA.js} +1 -1
  147. package/chunks/{chunk-ZPZ7ZJEE.js → chunk-WUC6ZFXO.js} +1 -1
  148. package/chunks/{chunk-7KAXXBER.js → chunk-WY2ENRDN.js} +3 -3
  149. package/chunks/{chunk-TIRRPCFS.js → chunk-X6QNZOTC.js} +1 -1
  150. package/chunks/{chunk-KWHKHSIS.js → chunk-X6WUYMOV.js} +8 -8
  151. package/chunks/{chunk-IIUGIWWY.js → chunk-XC2VAFVZ.js} +1 -1
  152. package/chunks/{chunk-D4HTUMGX.js → chunk-XC656O42.js} +3 -3
  153. package/chunks/{chunk-RG64CDT2.js → chunk-XMJO6C44.js} +131 -48
  154. package/chunks/{chunk-ZMOJ7ISP.js → chunk-XUMAD5IT.js} +1 -1
  155. package/chunks/{chunk-THVU3RNH.js → chunk-YAVY33G4.js} +1 -1
  156. package/chunks/{chunk-YANIWTRZ.js → chunk-YPUHMQXV.js} +1 -1
  157. package/chunks/{chunk-QCXGC7QB.js → chunk-YU6TBRTA.js} +3 -3
  158. package/chunks/{chunk-OFZKFPYG.js → chunk-YWMDTMAU.js} +3 -3
  159. package/chunks/{chunk-DSFHVTWD.js → chunk-YXEVDA66.js} +2 -2
  160. package/chunks/{chunk-JE2CEOBO.js → chunk-ZGSUFIL5.js} +4 -4
  161. package/chunks/{chunk-BBIQAX4V.js → chunk-ZJES4C3I.js} +30 -18
  162. package/chunks/{computer-use-5QWCFNKD.js → computer-use-UJMK6JQU.js} +36 -34
  163. package/chunks/{config-utils-WADIDWGG.js → config-utils-7COTJMWK.js} +4 -4
  164. package/chunks/{contextCommand-4Z7T7TUM.js → contextCommand-4YABGF4S.js} +40 -38
  165. package/chunks/{core-runtime-6N4EFC2Q.js → core-runtime-7M4VM3DA.js} +36 -34
  166. package/chunks/{create-sub-session-AEREHZBQ.js → create-sub-session-HOFDW4N7.js} +39 -37
  167. package/chunks/{create-sub-session-62YZWVAY.js → create-sub-session-J32WC64U.js} +2 -2
  168. package/chunks/{cron-create-6E7GIQTG.js → cron-create-HMFSHIAR.js} +4 -4
  169. package/chunks/{cron-delete-JD26XY3W.js → cron-delete-ZJFHOX57.js} +4 -4
  170. package/chunks/{cron-list-CUWFB44G.js → cron-list-ZEX2NBMN.js} +4 -4
  171. package/chunks/{daemon-PCNCI5YU.js → daemon-CCIX4BMG.js} +47 -6
  172. package/chunks/{daemon-status-provider-DDF7C5M7.js → daemon-status-provider-W2U5Q3J5.js} +47 -45
  173. package/chunks/{daemon-trust-policy-Q4KSOJTR.js → daemon-trust-policy-IFICWPXP.js} +42 -40
  174. package/chunks/{daemon-trust-policy-monitor-V6FTE3IY.js → daemon-trust-policy-monitor-GX7EO6FW.js} +42 -40
  175. package/chunks/{de-SY6O76BF.js → de-A6TI4LBB.js} +46 -5
  176. package/chunks/{deferred-core-runtime-GHJ5GQHK.js → deferred-core-runtime-U36OOOKE.js} +36 -34
  177. package/chunks/display-image-VS3TXYQH.js +184 -0
  178. package/chunks/{dist-ZHXOBXDN.js → dist-3BMEUGTG.js} +1 -1
  179. package/chunks/{dist-26BIMQT6.js → dist-4KAX7CCL.js} +289 -27
  180. package/chunks/{dist-OAOC5OV4.js → dist-7JGAAQSC.js} +2 -2
  181. package/chunks/{dist-SL2LUMML.js → dist-A7H2KKUC.js} +1 -1
  182. package/chunks/{dist-2PERFI23.js → dist-DPPHJAVL.js} +3 -3
  183. package/chunks/{dist-PVEAFLHY.js → dist-HVBMEYWK.js} +1 -1
  184. package/chunks/{dist-ULIG4M5H.js → dist-NEBRI7WO.js} +67 -15
  185. package/chunks/{dist-WGMNT3JQ.js → dist-SFQ34F4M.js} +24 -6
  186. package/chunks/{earlyInputCapture-TQXLLISD.js → earlyInputCapture-5ZWDH3SB.js} +37 -35
  187. package/chunks/{edit-FJEUV6KZ.js → edit-J7SW6UP6.js} +36 -34
  188. package/chunks/{en-NBK3JKCE.js → en-L4UQDLWW.js} +57 -6
  189. package/chunks/{enter-worktree-7GE3TZ4P.js → enter-worktree-NRLOHRB6.js} +36 -34
  190. package/chunks/{enterPlanMode-KR5TMPCJ.js → enterPlanMode-GDSTEFSM.js} +36 -34
  191. package/chunks/{environment-SWL3CMB3.js → environment-KHYEKG5W.js} +39 -37
  192. package/chunks/{errors-XQE7BGZV.js → errors-VNLAJV3O.js} +39 -37
  193. package/chunks/{exit-worktree-CHKTYNCV.js → exit-worktree-ARVID7DF.js} +36 -34
  194. package/chunks/{exitPlanMode-QYAG6LWX.js → exitPlanMode-4ZFY7KUH.js} +36 -34
  195. package/chunks/{fast-path-Z2K7W6DC.js → fast-path-KA65VREJ.js} +9 -5
  196. package/chunks/{fr-4KG5V7UT.js → fr-QF7RI5ZE.js} +46 -5
  197. package/chunks/{gemini-YU4XKEDG.js → gemini-5PMCNPF7.js} +149 -90
  198. package/chunks/{geminiContentGenerator-ZZX6NBO4.js → geminiContentGenerator-NFSYJ4HA.js} +6 -6
  199. package/chunks/{glob-VYF5CXSX.js → glob-F3EAUDAX.js} +36 -34
  200. package/chunks/{goal-tools-HGO6VXPB.js → goal-tools-SPQ5M6D3.js} +3 -3
  201. package/chunks/{grep-5DP5ZUTW.js → grep-UJMPVZER.js} +36 -34
  202. package/chunks/{handleAutoUpdate-UVBJ56DL.js → handleAutoUpdate-MG4FRZPN.js} +42 -40
  203. package/chunks/{i18n-UQNYHEUD.js → i18n-EVHV4ZF3.js} +38 -36
  204. package/chunks/{image-gen-WHPIZNWF.js → image-gen-UC7XVHI7.js} +9 -9
  205. package/chunks/{initializer-GMIICF4W.js → initializer-O5B6HUBI.js} +43 -41
  206. package/chunks/{installationInfo-4MGG4WVI.js → installationInfo-2LIKCNVX.js} +37 -35
  207. package/chunks/{ja-F3GSQXMF.js → ja-URQESVGW.js} +46 -5
  208. package/chunks/{keychain-token-storage-IKO4G53C.js → keychain-token-storage-7BT4TQ2A.js} +2 -2
  209. package/chunks/{kittyProtocolDetector-MBRTDRBK.js → kittyProtocolDetector-BFLAKYXH.js} +1 -1
  210. package/chunks/{list-CPN2W334.js → list-BPKIE3Z4.js} +45 -43
  211. package/chunks/{list-agents-PXJ7ZUFB.js → list-agents-TWEGRJWO.js} +2 -2
  212. package/chunks/{loadedSettingsAdapter-ZQAV5NDO.js → loadedSettingsAdapter-NGLFF4V4.js} +42 -40
  213. package/chunks/{loggingContentGenerator-5E7W4IEP.js → loggingContentGenerator-7TFESRG5.js} +52 -37
  214. package/chunks/{loop-wakeup-Y26NQZ5I.js → loop-wakeup-6LLEOQYV.js} +5 -5
  215. package/chunks/{ls-ONQTTMQR.js → ls-H5WX22VK.js} +4 -4
  216. package/chunks/{lsp-YGHHRGMD.js → lsp-G6FXYEIS.js} +2 -2
  217. package/chunks/{managed-npm-update-MKKAXYXA.js → managed-npm-update-CLZGGV7F.js} +39 -37
  218. package/chunks/{mcp-V5NTJF6X.js → mcp-X5OZOOXX.js} +42 -40
  219. package/chunks/{monitor-CO3ASY6E.js → monitor-TGSVSAZZ.js} +36 -34
  220. package/chunks/nonInteractiveCli-GUMJ5JLG.js +150 -0
  221. package/chunks/{notebook-edit-Z7AEE6FM.js → notebook-edit-EZISE7IC.js} +36 -34
  222. package/chunks/{openaiContentGenerator-CA3MQOP3.js → openaiContentGenerator-ZAKS5A6P.js} +18 -18
  223. package/chunks/{pidfile-NL7MKDRU.js → pidfile-PCMBX4LR.js} +37 -35
  224. package/chunks/{processUtils-PB5K2DYH.js → processUtils-2CSVE5BW.js} +2 -2
  225. package/chunks/{pt-EQ33KWEN.js → pt-EEEQXRUI.js} +46 -5
  226. package/chunks/{qwenContentGenerator-JYFNDCOS.js → qwenContentGenerator-S3H6PIC4.js} +42 -40
  227. package/chunks/{qwenOAuth2-W2ALKQDD.js → qwenOAuth2-MNU425VE.js} +8 -8
  228. package/chunks/{read-file-IEOR5H5W.js → read-file-HXJXHBI6.js} +10 -10
  229. package/chunks/{read-mcp-resource-U2IJN5HM.js → read-mcp-resource-DRZSI3HE.js} +2 -2
  230. package/chunks/{record-artifact-MGPJ7EG4.js → record-artifact-IPIRWMFY.js} +3 -3
  231. package/chunks/{resumeHistoryUtils-BNBTP5AS.js → resumeHistoryUtils-4QAMC2S6.js} +44 -42
  232. package/chunks/{ripGrep-UMQODKEB.js → ripGrep-MCETPF2E.js} +36 -34
  233. package/chunks/{ru-7OZAUKGG.js → ru-WGZDYQAB.js} +46 -5
  234. package/chunks/{run-qwen-serve-RN2R6QQW.js → run-qwen-serve-3NMODTXV.js} +219 -55
  235. package/chunks/{runtime-QFJ2MJF5.js → runtime-AQOV7DVP.js} +49 -45
  236. package/chunks/{scheduler-AMYUFOZI.js → scheduler-DN7SZ6ZE.js} +36 -34
  237. package/chunks/{sdk-exporters-http-4BQANSJ6.js → sdk-exporters-http-IKNWQJNV.js} +2 -2
  238. package/chunks/{sdk-impl-Z4VXWVFX.js → sdk-impl-7CUUMQDB.js} +2 -2
  239. package/chunks/{send-message-PMP4ATVM.js → send-message-HGCVVDTZ.js} +5 -4
  240. package/chunks/{serve-EIIYJVX3.js → serve-WZB45HVT.js} +42 -40
  241. package/chunks/{server-EP2LLAPD.js → server-GOTZFEEZ.js} +616 -387
  242. package/chunks/{session-GMPZBLOW.js → session-23LOFLWN.js} +149 -87
  243. package/chunks/{settings-LN7RNKBS.js → settings-LI2ORVXC.js} +41 -39
  244. package/chunks/{shell-EM2OWU5X.js → shell-GLC6OP3C.js} +36 -34
  245. package/chunks/{skill-T5VPSK73.js → skill-C7W6M4GO.js} +27 -14
  246. package/chunks/{skill-settings-GMR3GMNY.js → skill-settings-W25NCK5I.js} +41 -39
  247. package/chunks/{spawnChannel-YPCU62DI.js → spawnChannel-OHJLEBLD.js} +38 -36
  248. package/chunks/{standalone-update-JAKIM2NF.js → standalone-update-E4V5V7WT.js} +39 -37
  249. package/chunks/{startInteractiveUI-YETQWGYF.js → startInteractiveUI-FKILLW7Q.js} +1815 -1034
  250. package/chunks/{syntheticOutput-D7E6ZFKR.js → syntheticOutput-EYL7DWO7.js} +3 -3
  251. package/chunks/{task-create-NFCYD43L.js → task-create-CSCEG4SM.js} +10 -9
  252. package/chunks/{task-list-TAVMGEVD.js → task-list-6CVQPORX.js} +6 -6
  253. package/chunks/{task-stop-ZDF2UJRM.js → task-stop-Y5ZTFVRX.js} +2 -2
  254. package/chunks/{task-update-6L7LHGEX.js → task-update-C52LNFU5.js} +10 -9
  255. package/chunks/{team-create-LFJ6HGNY.js → team-create-HBIJ7NHT.js} +36 -34
  256. package/chunks/{team-delete-DPGGRQBU.js → team-delete-CE7DC53R.js} +6 -6
  257. package/chunks/{team-plan-approval-C2KLSDGO.js → team-plan-approval-IBJOKS4J.js} +36 -34
  258. package/chunks/terminal-image-renderer-BOQJPVLB.js +89 -0
  259. package/chunks/{theme-manager-JQ3ZGBP5.js → theme-manager-NSS7VLUD.js} +37 -35
  260. package/chunks/{todoWrite-2UO5G6G6.js → todoWrite-YKAA57W2.js} +107 -36
  261. package/chunks/{tool-search-FAZBFRJZ.js → tool-search-DEAS54VG.js} +13 -12
  262. package/chunks/{total-session-admission-5CALIVYO.js → total-session-admission-4LWTX3WD.js} +43 -41
  263. package/chunks/{trustedFolders-KOPSP44S.js → trustedFolders-NF3J2TA7.js} +38 -36
  264. package/chunks/{update-relaunch-6QL2TICS.js → update-relaunch-WUHRH5V3.js} +5 -5
  265. package/chunks/{updateCheck-4Q6RIKFW.js → updateCheck-7EG4BLBH.js} +41 -39
  266. package/chunks/{useAutoAcceptIndicator-Q5BMKZV3.js → useAutoAcceptIndicator-ZRV56GVP.js} +46 -44
  267. package/chunks/{validateNonInterActiveAuth-GKOC5F6Z.js → validateNonInterActiveAuth-WC2FPE3I.js} +86 -84
  268. package/chunks/{version-VSATY2LD.js → version-6SS7KCUP.js} +1 -1
  269. package/chunks/{web-fetch-JCLKL6NL.js → web-fetch-Y5QQMPKA.js} +13 -13
  270. package/chunks/{web-search-DSQTFUBX.js → web-search-QKKEU723.js} +8 -8
  271. package/chunks/{workflow-M6QAVKVJ.js → workflow-PWIU6Q2M.js} +418 -304
  272. package/chunks/{workspace-providers-status-YKLTLMJA.js → workspace-providers-status-B2DM6FNK.js} +45 -43
  273. package/chunks/{workspace-registration-store-5DMGKU64.js → workspace-registration-store-7Y33TTHJ.js} +2 -2
  274. package/chunks/{workspace-registry-PTYUSYXX.js → workspace-registry-TSNJKLPC.js} +43 -41
  275. package/chunks/{workspace-service-25ML3T47.js → workspace-service-4I2QHDX4.js} +50 -48
  276. package/chunks/{workspace-skills-status-YKZWOYRX.js → workspace-skills-status-HVXNWVGR.js} +44 -42
  277. package/chunks/{workspace-trust-reconciler-5FI2S3OS.js → workspace-trust-reconciler-RDBBGMWP.js} +49 -47
  278. package/chunks/{write-file-AY7VLP5X.js → write-file-RQ4DG5RY.js} +36 -34
  279. package/chunks/{zh-H3YDK5QW.js → zh-72XPUG5P.js} +54 -6
  280. package/chunks/{zh-TW-JYCP7XUA.js → zh-TW-LTB4SRH3.js} +54 -6
  281. package/chunks/{zoom-image-S4LJZMD5.js → zoom-image-O5YCB7WN.js} +10 -10
  282. package/cli.js +32 -48
  283. package/locales/ca.js +60 -4
  284. package/locales/de.js +62 -4
  285. package/locales/en.js +76 -6
  286. package/locales/fr.js +64 -4
  287. package/locales/ja.js +61 -4
  288. package/locales/pt.js +60 -4
  289. package/locales/ru.js +63 -4
  290. package/locales/zh-TW.js +67 -6
  291. package/locales/zh.js +67 -6
  292. package/package.json +3 -3
  293. package/web-shell/assets/{arc-xjArKHU2.js → arc-Bd7d781i.js} +1 -1
  294. package/web-shell/assets/{architectureDiagram-3BPJPVTR-BgrQDNYG.js → architectureDiagram-3BPJPVTR-CpnOJqNE.js} +1 -1
  295. package/web-shell/assets/{blockDiagram-GPEHLZMM-CXxWC-1_.js → blockDiagram-GPEHLZMM-NxVTiWnk.js} +1 -1
  296. package/web-shell/assets/{c4Diagram-AAUBKEIU-Dx1tLm3v.js → c4Diagram-AAUBKEIU-BWT75l82.js} +1 -1
  297. package/web-shell/assets/channel-A434sWK5.js +1 -0
  298. package/web-shell/assets/{chunk-2J33WTMH-CBxjogVR.js → chunk-2J33WTMH-Dzz03hk6.js} +1 -1
  299. package/web-shell/assets/{chunk-4BX2VUAB-izb-rY5W.js → chunk-4BX2VUAB-DRF-egfm.js} +1 -1
  300. package/web-shell/assets/{chunk-55IACEB6-NzLyvSb8.js → chunk-55IACEB6-Co15vq5x.js} +1 -1
  301. package/web-shell/assets/{chunk-727SXJPM-DVyKb0dl.js → chunk-727SXJPM-DHSUk1J7.js} +1 -1
  302. package/web-shell/assets/{chunk-AQP2D5EJ-BtqL7NzB.js → chunk-AQP2D5EJ-Br8u_E2R.js} +1 -1
  303. package/web-shell/assets/{chunk-FMBD7UC4-iNpdKIO0.js → chunk-FMBD7UC4-DXbPTnqF.js} +1 -1
  304. package/web-shell/assets/{chunk-ND2GUHAM-DI7cbFmX.js → chunk-ND2GUHAM-BleQdi4d.js} +1 -1
  305. package/web-shell/assets/{chunk-QZHKN3VN-3Y_-xFYs.js → chunk-QZHKN3VN-CqgBf-95.js} +1 -1
  306. package/web-shell/assets/classDiagram-4FO5ZUOK-CwPuhldB.js +1 -0
  307. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CwPuhldB.js +1 -0
  308. package/web-shell/assets/{cose-bilkent-S5V4N54A--raRatZn.js → cose-bilkent-S5V4N54A-WS7b13Yg.js} +1 -1
  309. package/web-shell/assets/{dagre-BM42HDAG-B8SU70mO.js → dagre-BM42HDAG-v_55ki8o.js} +1 -1
  310. package/web-shell/assets/{diagram-2AECGRRQ-ewgoakXo.js → diagram-2AECGRRQ-DaYAjbdK.js} +1 -1
  311. package/web-shell/assets/{diagram-5GNKFQAL-Bm_JLTnS.js → diagram-5GNKFQAL-D_Hy-L64.js} +1 -1
  312. package/web-shell/assets/{diagram-KO2AKTUF-DEIUjUy9.js → diagram-KO2AKTUF-dB06cZyD.js} +1 -1
  313. package/web-shell/assets/{diagram-LMA3HP47-C2Wmrpj-.js → diagram-LMA3HP47-DzSluD4F.js} +1 -1
  314. package/web-shell/assets/{diagram-OG6HWLK6-CtYe6bFx.js → diagram-OG6HWLK6-Cvb6CeXQ.js} +1 -1
  315. package/web-shell/assets/{erDiagram-TEJ5UH35-DfpHcWLV.js → erDiagram-TEJ5UH35-7eB2Hmov.js} +1 -1
  316. package/web-shell/assets/{flowDiagram-I6XJVG4X-CAiUhio5.js → flowDiagram-I6XJVG4X-B08iGCw_.js} +1 -1
  317. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CYc7ezr4.js → ganttDiagram-6RSMTGT7-BgsrCHq-.js} +1 -1
  318. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-70lbkcRS.js → gitGraphDiagram-PVQCEYII-DQLurQ2i.js} +1 -1
  319. package/web-shell/assets/{index-Ww86nT9f.js → index-B_1Z0Mgr.js} +1 -1
  320. package/web-shell/assets/index-Bi1dP2mU.css +5 -0
  321. package/web-shell/assets/index-DJ-z1Oba.js +1756 -0
  322. package/web-shell/assets/{infoDiagram-5YYISTIA-C7e8DWPa.js → infoDiagram-5YYISTIA-DXZGO8qB.js} +1 -1
  323. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-BYLr2op-.js → ishikawaDiagram-YF4QCWOH-g7gbuH2w.js} +1 -1
  324. package/web-shell/assets/{journeyDiagram-JHISSGLW-hEibAHKX.js → journeyDiagram-JHISSGLW-euefICGn.js} +1 -1
  325. package/web-shell/assets/{kanban-definition-UN3LZRKU-F2rt8Uhp.js → kanban-definition-UN3LZRKU-Dws8-mjG.js} +1 -1
  326. package/web-shell/assets/{linear-DPhyNezd.js → linear-C63F0tyh.js} +1 -1
  327. package/web-shell/assets/{mermaid.core-ZUtnug0n.js → mermaid.core-fLrhp_4-.js} +5 -5
  328. package/web-shell/assets/{mindmap-definition-RKZ34NQL-DDWcMoi8.js → mindmap-definition-RKZ34NQL-qRkydfT-.js} +1 -1
  329. package/web-shell/assets/{pieDiagram-4H26LBE5-CTRKzw1_.js → pieDiagram-4H26LBE5-BZ0wQaKN.js} +1 -1
  330. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CAEwYG_z.js → quadrantDiagram-W4KKPZXB-Fjq6GbSZ.js} +1 -1
  331. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CRjnH9D9.js → requirementDiagram-4Y6WPE33-CqWvjLHU.js} +1 -1
  332. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-LPQT_sOd.js → sankeyDiagram-5OEKKPKP-VcXX6PVZ.js} +1 -1
  333. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Ht2Iqvb0.js → sequenceDiagram-3UESZ5HK-BJSRtxFr.js} +1 -1
  334. package/web-shell/assets/{stateDiagram-AJRCARHV-CIUdqOXu.js → stateDiagram-AJRCARHV-Dt9zUwmZ.js} +1 -1
  335. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CCxQt56w.js +1 -0
  336. package/web-shell/assets/{timeline-definition-PNZ67QCA-BcilneZF.js → timeline-definition-PNZ67QCA-DQwlNRws.js} +1 -1
  337. package/web-shell/assets/{vennDiagram-CIIHVFJN-BljwiiH1.js → vennDiagram-CIIHVFJN-DwxjUEtQ.js} +1 -1
  338. package/web-shell/assets/{wardley-L42UT6IY-DeKjkYjq.js → wardley-L42UT6IY-D3QdMSpJ.js} +1 -1
  339. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-L3U1H7KG.js → wardleyDiagram-YWT4CUSO-BddN8oK8.js} +1 -1
  340. package/web-shell/assets/{xychartDiagram-2RQKCTM6-IJnWsgMT.js → xychartDiagram-2RQKCTM6-BUNuBrRJ.js} +1 -1
  341. package/web-shell/index.html +2 -2
  342. package/chunks/chunk-4KP2F2TE.js +0 -82
  343. package/chunks/chunk-HGT6JR3U.js +0 -177
  344. package/chunks/nonInteractiveCli-ZJYEOO7U.js +0 -148
  345. package/web-shell/assets/channel-B1cyk94G.js +0 -1
  346. package/web-shell/assets/classDiagram-4FO5ZUOK-BpBYZoRE.js +0 -1
  347. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BpBYZoRE.js +0 -1
  348. package/web-shell/assets/index-C1k3PDuU.css +0 -5
  349. package/web-shell/assets/index-DZLIXILO.js +0 -1750
  350. package/web-shell/assets/insert-DmRbh9Rv.svg +0 -1
  351. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BmqqQZ6w.js +0 -1
@@ -1,8 +1,5 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import {
4
- contextCommand
5
- } from "./chunk-H6I4PGRV.js";
6
3
  import {
7
4
  ExtensionRefreshState,
8
5
  clearSkillArgs,
@@ -12,7 +9,13 @@ import {
12
9
  staleArgsWarning,
13
10
  validateAuthMethod,
14
11
  writeSkillArgs
15
- } from "./chunk-DEEABGH2.js";
12
+ } from "./chunk-QPSYIV2O.js";
13
+ import {
14
+ isKittyProtocolEnabled
15
+ } from "./chunk-NYX53SV4.js";
16
+ import {
17
+ contextCommand
18
+ } from "./chunk-SKSF3LGQ.js";
16
19
  import {
17
20
  calculateCost,
18
21
  computeSessionStats,
@@ -21,23 +24,20 @@ import {
21
24
  findInlineMathExpressions,
22
25
  getSystemInfoFields,
23
26
  levelLabel
24
- } from "./chunk-UV6KF7T3.js";
25
- import {
26
- isKittyProtocolEnabled
27
- } from "./chunk-PQNHRFJC.js";
27
+ } from "./chunk-LZV2BZPL.js";
28
28
  import {
29
29
  VSCODE_SHIFT_ENTER_SEQUENCE,
30
30
  writeOsc52
31
- } from "./chunk-NBD76HUW.js";
31
+ } from "./chunk-3LGZEYOF.js";
32
+ import {
33
+ rollbackStandaloneUpdate
34
+ } from "./chunk-YWMDTMAU.js";
32
35
  import {
33
36
  themeManager
34
- } from "./chunk-IGTHU3T4.js";
37
+ } from "./chunk-KKN2IE7Q.js";
35
38
  import {
36
39
  getErrorMessage as getErrorMessage2
37
- } from "./chunk-CU47KXB5.js";
38
- import {
39
- rollbackStandaloneUpdate
40
- } from "./chunk-OFZKFPYG.js";
40
+ } from "./chunk-EGYJRIDF.js";
41
41
  import {
42
42
  GITHUB_WORKFLOW_PATHS,
43
43
  INSIGHT_CSS,
@@ -51,11 +51,11 @@ import {
51
51
  toJson,
52
52
  toJsonl,
53
53
  toMarkdown
54
- } from "./chunk-PZEXDV3H.js";
54
+ } from "./chunk-VUNRNRN6.js";
55
55
  import {
56
56
  stripUnsafeCharacters,
57
57
  toCodePoints
58
- } from "./chunk-YDLJGZHL.js";
58
+ } from "./chunk-4NFY2S7N.js";
59
59
  import {
60
60
  formatUnsupportedVoiceModelMessage,
61
61
  getVoiceSettingsScope,
@@ -63,21 +63,20 @@ import {
63
63
  isVoiceEnabled,
64
64
  readVoiceMode,
65
65
  readVoiceModel
66
- } from "./chunk-P5VC5USY.js";
66
+ } from "./chunk-BKGA75MU.js";
67
67
  import {
68
68
  getExtendedSystemInfo,
69
69
  getGitVersion,
70
70
  getNpmVersion
71
- } from "./chunk-Q5WZTTWE.js";
71
+ } from "./chunk-QWDVZH24.js";
72
72
  import {
73
73
  formatDuration,
74
- formatMemoryUsage,
75
74
  formatTokenCount
76
- } from "./chunk-E5Z2AVNV.js";
75
+ } from "./chunk-3SH53ANB.js";
77
76
  import {
78
77
  isInlineModelOverrideAllowed,
79
78
  parseAcpModelOption
80
- } from "./chunk-6TAASXWL.js";
79
+ } from "./chunk-5VYFXHY2.js";
81
80
  import {
82
81
  OUTPUT_LANGUAGE_AUTO,
83
82
  getAllSettingKeys,
@@ -89,7 +88,7 @@ import {
89
88
  resolveOutputLanguageOrPreserveAuto,
90
89
  validateSettingValue,
91
90
  writeOutputLanguageAndRegisterPath
92
- } from "./chunk-W3UKBMSI.js";
91
+ } from "./chunk-22YFMJBW.js";
93
92
  import {
94
93
  SUPPORTED_LANGUAGES,
95
94
  getCurrentLanguage,
@@ -97,14 +96,14 @@ import {
97
96
  resolveSupportedLanguage,
98
97
  setLanguageAsync,
99
98
  t
100
- } from "./chunk-3F2WDAV6.js";
99
+ } from "./chunk-KXWERR6P.js";
101
100
  import {
102
101
  getInstallationInfo
103
- } from "./chunk-GJ2GBPBD.js";
102
+ } from "./chunk-FXVHVCNA.js";
104
103
  import {
105
104
  isFolderTrustEnabled,
106
105
  loadTrustedFolders
107
- } from "./chunk-P755N4CS.js";
106
+ } from "./chunk-M5LIY7Y6.js";
108
107
  import {
109
108
  require_strip_json_comments
110
109
  } from "./chunk-ALGGS7UH.js";
@@ -138,6 +137,7 @@ import {
138
137
  escapeShellArg,
139
138
  findProviderByCredentials,
140
139
  flatMapTextParts,
140
+ formatMemoryUsage,
141
141
  generateSessionRecap,
142
142
  getActiveGoal,
143
143
  getArenaSystemReminder,
@@ -162,7 +162,6 @@ import {
162
162
  normalizeClaudeMcpServer,
163
163
  normalizeContent,
164
164
  normalizeSkillPriority,
165
- parse,
166
165
  parseInstallSource,
167
166
  parseLearnVideoInput,
168
167
  parseVisionModelSetting,
@@ -175,22 +174,32 @@ import {
175
174
  runForkedAgent,
176
175
  tryGenerateSessionTitle,
177
176
  unregisterGoalHook
178
- } from "./chunk-54YCNSK5.js";
177
+ } from "./chunk-UQDFEU47.js";
179
178
  import {
180
179
  external_exports
181
180
  } from "./chunk-H6XPXXMH.js";
182
181
  import {
183
182
  resolveModelId
184
- } from "./chunk-ZMOJ7ISP.js";
183
+ } from "./chunk-XUMAD5IT.js";
184
+ import {
185
+ getAutoSkillCuratorStatus,
186
+ parse,
187
+ recordAutoSkillUsage,
188
+ restoreArchivedAutoSkill,
189
+ runAutoSkillCurator,
190
+ setAutoSkillPinned
191
+ } from "./chunk-MISUEWB4.js";
185
192
  import {
186
193
  HookEventName,
187
194
  sanitizeUserPromptExpansionAdditionalContext
188
- } from "./chunk-3APUUXRF.js";
195
+ } from "./chunk-A5YZ3FA2.js";
196
+ import {
197
+ APPROVAL_MODES
198
+ } from "./chunk-TZTBZ25J.js";
189
199
  import {
190
- APPROVAL_MODES,
191
200
  FORK_SUBAGENT_TYPE,
192
201
  stripStartupContext
193
- } from "./chunk-CBBP4BMC.js";
202
+ } from "./chunk-SRY26X4H.js";
194
203
  import {
195
204
  applySkillAllowedTools,
196
205
  buildSkillLlmContent
@@ -204,7 +213,7 @@ import {
204
213
  } from "./chunk-DGEIYUC3.js";
205
214
  import {
206
215
  resolveOpenAILogDir
207
- } from "./chunk-6CQWRWUC.js";
216
+ } from "./chunk-EIMKVOSF.js";
208
217
  import {
209
218
  IdeConnectionEvent,
210
219
  formatTokenUsageSummaryAsCsv,
@@ -218,14 +227,14 @@ import {
218
227
  recordSkillInvocation,
219
228
  runSideQuery,
220
229
  uiTelemetryService
221
- } from "./chunk-DUNI4EBW.js";
230
+ } from "./chunk-4K3RV3OA.js";
222
231
  import {
223
232
  getAutoMemoryRoot
224
- } from "./chunk-3I6DUGQD.js";
233
+ } from "./chunk-E4WHKETF.js";
225
234
  import {
226
235
  ToolNames,
227
236
  isShellProgressData
228
- } from "./chunk-MM7TH7ZM.js";
237
+ } from "./chunk-CFDR3GNL.js";
229
238
  import {
230
239
  Storage,
231
240
  createDebugLogger,
@@ -234,12 +243,12 @@ import {
234
243
  isSubpath,
235
244
  resolvePath,
236
245
  updateSymlink
237
- } from "./chunk-E2BHWIDT.js";
246
+ } from "./chunk-3RXUYQJI.js";
238
247
  import {
239
248
  isCpuProfileRecording,
240
249
  startCpuProfile,
241
250
  stopCpuProfile
242
- } from "./chunk-6PQPKTXP.js";
251
+ } from "./chunk-R7XNRHYD.js";
243
252
  import {
244
253
  init_esbuild_shims
245
254
  } from "./chunk-5O2XNYP6.js";
@@ -835,6 +844,7 @@ var aboutCommand = {
835
844
  },
836
845
  kind: "built-in" /* BUILT_IN */,
837
846
  supportedModes: ["interactive", "non_interactive", "acp"],
847
+ canRunDuringStreaming: true,
838
848
  action: /* @__PURE__ */ __name(async (context) => {
839
849
  const systemInfo = await getExtendedSystemInfo(context);
840
850
  if (context.executionMode !== "interactive") {
@@ -871,6 +881,7 @@ var aboutCommand = {
871
881
  },
872
882
  kind: "built-in" /* BUILT_IN */,
873
883
  supportedModes: ["interactive", "non_interactive", "acp"],
884
+ canRunDuringStreaming: true,
874
885
  action: /* @__PURE__ */ __name(async (context) => {
875
886
  const info = await collectSessionPathInfo(context);
876
887
  const content = formatSessionPathInfo(info);
@@ -1103,6 +1114,7 @@ function snapshotToTask(s) {
1103
1114
  tokensSpent: s.tokensSpent ?? 0,
1104
1115
  tokenBudgetTotal: s.tokenBudgetTotal ?? null,
1105
1116
  perPhaseTokens: new Map(s.perPhaseTokens ?? []),
1117
+ pendingApprovals: [],
1106
1118
  script: s.script ?? "",
1107
1119
  scriptPath: s.scriptPath,
1108
1120
  result: s.result,
@@ -1576,8 +1588,8 @@ function executeArenaCommand(config, ui, input) {
1576
1588
  debugLogger4.debug("Arena agents settled");
1577
1589
  },
1578
1590
  (error) => {
1579
- const message = error instanceof Error ? error.message : String(error);
1580
- addAndRecordArenaMessage("error" /* ERROR */, `${message}`);
1591
+ const message2 = error instanceof Error ? error.message : String(error);
1592
+ addAndRecordArenaMessage("error" /* ERROR */, `${message2}`);
1581
1593
  debugLogger4.error("Arena session failed:", error);
1582
1594
  config.setArenaManager(null);
1583
1595
  for (const detach of detachListeners) {
@@ -1933,7 +1945,7 @@ var approvalModeCommand = {
1933
1945
  };
1934
1946
  }
1935
1947
  }
1936
- const autoModeNotices = mode === "auto" /* AUTO */ && priorMode !== "auto" /* AUTO */ && config ? await import("./useAutoAcceptIndicator-Q5BMKZV3.js") : void 0;
1948
+ const autoModeNotices = mode === "auto" /* AUTO */ && priorMode !== "auto" /* AUTO */ && config ? await import("./useAutoAcceptIndicator-ZRV56GVP.js") : void 0;
1937
1949
  if (config) {
1938
1950
  try {
1939
1951
  config.setApprovalMode(mode);
@@ -3042,17 +3054,17 @@ var configCommand = {
3042
3054
  })
3043
3055
  };
3044
3056
  }
3045
- let message2 = t("Set {{key}} = {{value}}", {
3057
+ let message3 = t("Set {{key}} = {{value}}", {
3046
3058
  key,
3047
3059
  value: String(newValue)
3048
3060
  });
3049
3061
  if (def.requiresRestart) {
3050
- message2 += "\n" + t("(This setting requires a restart to take effect.)");
3062
+ message3 += "\n" + t("(This setting requires a restart to take effect.)");
3051
3063
  }
3052
3064
  return {
3053
3065
  type: "message",
3054
3066
  messageType: "info",
3055
- content: message2
3067
+ content: message3
3056
3068
  };
3057
3069
  }
3058
3070
  const result = coerceValue(def, rawValue);
@@ -3087,22 +3099,22 @@ var configCommand = {
3087
3099
  };
3088
3100
  }
3089
3101
  const displayValue = isSensitiveKey(key) ? maskValue(result.value) : formatValue(result.value);
3090
- let message = t("Set {{key}} = {{value}}", {
3102
+ let message2 = t("Set {{key}} = {{value}}", {
3091
3103
  key,
3092
3104
  value: displayValue
3093
3105
  });
3094
3106
  if (def.requiresRestart) {
3095
- message += "\n" + t("(This setting requires a restart to take effect.)");
3107
+ message2 += "\n" + t("(This setting requires a restart to take effect.)");
3096
3108
  }
3097
3109
  if (isSensitiveKey(key)) {
3098
- message += "\n" + t(
3110
+ message2 += "\n" + t(
3099
3111
  "(Security-sensitive setting \u2014 verify you are not exposing credentials.)"
3100
3112
  );
3101
3113
  }
3102
3114
  return {
3103
3115
  type: "message",
3104
3116
  messageType: "info",
3105
- content: message
3117
+ content: message2
3106
3118
  };
3107
3119
  }, "action"),
3108
3120
  completion: /* @__PURE__ */ __name(async (_context, partialArg) => {
@@ -3218,7 +3230,8 @@ var compressCommand = {
3218
3230
  }
3219
3231
  yield {
3220
3232
  messageType: "info",
3221
- content: `Context compressed (${compressed.originalTokenCount} -> ${compressed.newTokenCount}).`
3233
+ content: `Context compressed (${compressed.originalTokenCount} -> ${compressed.newTokenCount}).` + (compressed.warning ? `
3234
+ \u26A0\uFE0F ${compressed.warning}` : "")
3222
3235
  };
3223
3236
  } catch (e) {
3224
3237
  yield {
@@ -3275,12 +3288,19 @@ var compressCommand = {
3275
3288
  },
3276
3289
  Date.now()
3277
3290
  );
3291
+ if (compressed.warning) {
3292
+ ui.addItem(
3293
+ { type: "info" /* INFO */, text: `\u26A0\uFE0F ${compressed.warning}` },
3294
+ Date.now()
3295
+ );
3296
+ }
3278
3297
  return;
3279
3298
  }
3280
3299
  return {
3281
3300
  type: "message",
3282
3301
  messageType: "info",
3283
- content: `${truncationNotice ? `${truncationNotice} ` : ""}Context compressed (${compressed.originalTokenCount} -> ${compressed.newTokenCount}).`
3302
+ content: `${truncationNotice ? `${truncationNotice} ` : ""}Context compressed (${compressed.originalTokenCount} -> ${compressed.newTokenCount}).` + (compressed.warning ? `
3303
+ \u26A0\uFE0F ${compressed.warning}` : "")
3284
3304
  };
3285
3305
  } catch (e) {
3286
3306
  if (abortSignal?.aborted) {
@@ -3463,6 +3483,290 @@ var compressFastCommand = {
3463
3483
  }, "action")
3464
3484
  };
3465
3485
 
3486
+ // packages/cli/src/ui/commands/curator-command.ts
3487
+ init_esbuild_shims();
3488
+ function message(content, messageType = "info") {
3489
+ return { type: "message", messageType, content };
3490
+ }
3491
+ __name(message, "message");
3492
+ function mutationGuard(config) {
3493
+ if (config.isSafeMode()) {
3494
+ return message(
3495
+ t("Auto-skill curator changes are disabled in safe mode."),
3496
+ "error"
3497
+ );
3498
+ }
3499
+ if (!config.isTrustedFolder()) {
3500
+ return message(
3501
+ t(
3502
+ "Auto-skill curator changes are only available in trusted workspaces. Trust this folder via `/trust` and try again."
3503
+ ),
3504
+ "error"
3505
+ );
3506
+ }
3507
+ return void 0;
3508
+ }
3509
+ __name(mutationGuard, "mutationGuard");
3510
+ async function refreshSkillCache(config) {
3511
+ try {
3512
+ await config.getSkillManager()?.refreshCache();
3513
+ } catch {
3514
+ }
3515
+ }
3516
+ __name(refreshSkillCache, "refreshSkillCache");
3517
+ function displayName(entry) {
3518
+ return entry.skillName === entry.directoryName ? entry.directoryName : `${entry.skillName} (${entry.directoryName})`;
3519
+ }
3520
+ __name(displayName, "displayName");
3521
+ function formatStatus(status) {
3522
+ const lines = [
3523
+ t("Auto-skill curator"),
3524
+ t("Last run: {{time}}", { time: status.lastRunAt ?? t("never") }),
3525
+ t("Active: {{count}}", { count: String(status.active.length) }),
3526
+ t("Stale: {{count}}", { count: String(status.stale.length) }),
3527
+ t("Archived: {{count}}", { count: String(status.archived.length) })
3528
+ ];
3529
+ if (status.stale.length > 0) {
3530
+ lines.push("", t("Stale skills:"));
3531
+ lines.push(...status.stale.map((entry) => ` ${displayName(entry)}`));
3532
+ }
3533
+ const pinned = [...status.active, ...status.stale].filter(
3534
+ (entry) => entry.pinned
3535
+ );
3536
+ if (pinned.length > 0) {
3537
+ lines.push("", t("Pinned skills:"));
3538
+ lines.push(...pinned.map((entry) => ` ${displayName(entry)}`));
3539
+ }
3540
+ if (status.archived.length > 0) {
3541
+ lines.push("", t("Archived skills:"));
3542
+ lines.push(...status.archived.map((entry) => ` ${displayName(entry)}`));
3543
+ }
3544
+ return lines.join("\n");
3545
+ }
3546
+ __name(formatStatus, "formatStatus");
3547
+ function formatRun(result) {
3548
+ const prefix = result.dryRun ? t("Dry run complete.") : t("Curator run complete.");
3549
+ const lines = [
3550
+ prefix,
3551
+ t("Checked: {{count}}", { count: String(result.checked) }),
3552
+ t("First observed: {{count}}", { count: String(result.seeded.length) }),
3553
+ t("Marked stale: {{count}}", {
3554
+ count: String(result.markedStale.length)
3555
+ }),
3556
+ t("Reactivated: {{count}}", {
3557
+ count: String(result.reactivated.length)
3558
+ }),
3559
+ t("{{verb}}: {{count}}", {
3560
+ verb: result.dryRun ? t("Would archive") : t("Archived"),
3561
+ count: String(result.archived.length)
3562
+ }),
3563
+ t("Skipped archive collisions: {{count}}", {
3564
+ count: String(result.skippedCollisions.length)
3565
+ }),
3566
+ t("Skipped rename errors: {{count}}", {
3567
+ count: String(result.skippedErrors.length)
3568
+ })
3569
+ ];
3570
+ if (result.archived.length > 0) {
3571
+ lines.push(
3572
+ "",
3573
+ result.dryRun ? t("Archive candidates:") : t("Archived skills:")
3574
+ );
3575
+ lines.push(...result.archived.map((name) => ` ${name}`));
3576
+ }
3577
+ if (result.skippedCollisions.length > 0) {
3578
+ lines.push("", t("Skipped archive collisions:"));
3579
+ lines.push(
3580
+ ...result.skippedCollisions.map(
3581
+ (name) => ` ${name} \u2014 remove or rename .qwen/archived-skills/${name} to re-archive`
3582
+ )
3583
+ );
3584
+ }
3585
+ if (result.skippedErrors.length > 0) {
3586
+ lines.push("", t("Skipped rename errors:"));
3587
+ lines.push(...result.skippedErrors.map((name) => ` ${name}`));
3588
+ }
3589
+ return lines.join("\n");
3590
+ }
3591
+ __name(formatRun, "formatRun");
3592
+ async function statusAction(context) {
3593
+ const config = context.services.config;
3594
+ if (!config) return message(t("Config not loaded."), "error");
3595
+ try {
3596
+ return message(
3597
+ formatStatus(await getAutoSkillCuratorStatus(config.getProjectRoot()))
3598
+ );
3599
+ } catch (error) {
3600
+ return message(
3601
+ t("Failed to read auto-skill curator status: {{message}}", {
3602
+ message: error instanceof Error ? error.message : String(error)
3603
+ }),
3604
+ "error"
3605
+ );
3606
+ }
3607
+ }
3608
+ __name(statusAction, "statusAction");
3609
+ var statusCommand = {
3610
+ name: "status",
3611
+ get description() {
3612
+ return t("Show project auto-skill lifecycle status.");
3613
+ },
3614
+ kind: "built-in" /* BUILT_IN */,
3615
+ supportedModes: ["interactive", "non_interactive", "acp"],
3616
+ action: statusAction
3617
+ };
3618
+ var runCommand = {
3619
+ name: "run",
3620
+ get description() {
3621
+ return t("Run project auto-skill lifecycle maintenance.");
3622
+ },
3623
+ argumentHint: "[--dry-run]",
3624
+ kind: "built-in" /* BUILT_IN */,
3625
+ supportedModes: ["interactive", "non_interactive", "acp"],
3626
+ action: /* @__PURE__ */ __name(async (context, args) => {
3627
+ const config = context.services.config;
3628
+ if (!config) return message(t("Config not loaded."), "error");
3629
+ const normalized = args.trim();
3630
+ if (normalized !== "" && normalized !== "--dry-run") {
3631
+ return message(t("Usage: /curator run [--dry-run]"), "error");
3632
+ }
3633
+ if (normalized !== "--dry-run") {
3634
+ const blocked = mutationGuard(config);
3635
+ if (blocked) return blocked;
3636
+ }
3637
+ try {
3638
+ const result = await runAutoSkillCurator(config.getProjectRoot(), {
3639
+ dryRun: normalized === "--dry-run"
3640
+ });
3641
+ if (!result.dryRun && result.archived.length > 0) {
3642
+ await refreshSkillCache(config);
3643
+ }
3644
+ return message(formatRun(result));
3645
+ } catch (error) {
3646
+ return message(
3647
+ t("Failed to run auto-skill curator: {{message}}", {
3648
+ message: error instanceof Error ? error.message : String(error)
3649
+ }),
3650
+ "error"
3651
+ );
3652
+ }
3653
+ }, "action")
3654
+ };
3655
+ var restoreCommand = {
3656
+ name: "restore",
3657
+ get description() {
3658
+ return t("Restore an archived project auto-skill.");
3659
+ },
3660
+ argumentHint: "<directory>",
3661
+ kind: "built-in" /* BUILT_IN */,
3662
+ supportedModes: ["interactive", "non_interactive", "acp"],
3663
+ action: /* @__PURE__ */ __name(async (context, args) => {
3664
+ const config = context.services.config;
3665
+ if (!config) return message(t("Config not loaded."), "error");
3666
+ const directoryName = args.trim();
3667
+ if (!directoryName) {
3668
+ return message(t("Usage: /curator restore <directory>"), "error");
3669
+ }
3670
+ const blocked = mutationGuard(config);
3671
+ if (blocked) return blocked;
3672
+ try {
3673
+ await restoreArchivedAutoSkill(config.getProjectRoot(), directoryName);
3674
+ await refreshSkillCache(config);
3675
+ return message(
3676
+ t("Restored auto-skill: {{name}}", { name: directoryName })
3677
+ );
3678
+ } catch (error) {
3679
+ return message(
3680
+ t("Failed to restore auto-skill: {{message}}", {
3681
+ message: error instanceof Error ? error.message : String(error)
3682
+ }),
3683
+ "error"
3684
+ );
3685
+ }
3686
+ }, "action"),
3687
+ completion: /* @__PURE__ */ __name(async (context, partialArg) => {
3688
+ const config = context.services.config;
3689
+ if (!config) return [];
3690
+ try {
3691
+ const status = await getAutoSkillCuratorStatus(config.getProjectRoot());
3692
+ return status.archived.map((entry) => entry.directoryName).filter((name) => name.startsWith(partialArg));
3693
+ } catch {
3694
+ return [];
3695
+ }
3696
+ }, "completion")
3697
+ };
3698
+ function pinCommand(name, pinned) {
3699
+ return {
3700
+ name,
3701
+ get description() {
3702
+ return pinned ? t("Exclude an auto-skill from automatic maintenance.") : t("Return a pinned auto-skill to automatic maintenance.");
3703
+ },
3704
+ argumentHint: "<directory>",
3705
+ kind: "built-in" /* BUILT_IN */,
3706
+ supportedModes: ["interactive", "non_interactive", "acp"],
3707
+ action: /* @__PURE__ */ __name(async (context, args) => {
3708
+ const config = context.services.config;
3709
+ if (!config) return message(t("Config not loaded."), "error");
3710
+ const directoryName = args.trim();
3711
+ if (!directoryName) {
3712
+ return message(
3713
+ pinned ? t("Usage: /curator pin <directory>") : t("Usage: /curator unpin <directory>"),
3714
+ "error"
3715
+ );
3716
+ }
3717
+ const blocked = mutationGuard(config);
3718
+ if (blocked) return blocked;
3719
+ try {
3720
+ await setAutoSkillPinned(
3721
+ config.getProjectRoot(),
3722
+ directoryName,
3723
+ pinned
3724
+ );
3725
+ return message(
3726
+ pinned ? t("Pinned auto-skill: {{name}}", { name: directoryName }) : t("Unpinned auto-skill: {{name}}", { name: directoryName })
3727
+ );
3728
+ } catch (error) {
3729
+ return message(
3730
+ t("Failed to update auto-skill pin: {{message}}", {
3731
+ message: error instanceof Error ? error.message : String(error)
3732
+ }),
3733
+ "error"
3734
+ );
3735
+ }
3736
+ }, "action"),
3737
+ completion: /* @__PURE__ */ __name(async (context, partialArg) => {
3738
+ const config = context.services.config;
3739
+ if (!config) return [];
3740
+ try {
3741
+ const status = await getAutoSkillCuratorStatus(config.getProjectRoot());
3742
+ return [...status.active, ...status.stale].filter((entry) => entry.pinned !== pinned).map((entry) => entry.directoryName).filter((directoryName) => directoryName.startsWith(partialArg));
3743
+ } catch {
3744
+ return [];
3745
+ }
3746
+ }, "completion")
3747
+ };
3748
+ }
3749
+ __name(pinCommand, "pinCommand");
3750
+ var pinAutoSkillCommand = pinCommand("pin", true);
3751
+ var unpinAutoSkillCommand = pinCommand("unpin", false);
3752
+ var curatorCommand = {
3753
+ name: "curator",
3754
+ get description() {
3755
+ return t("Maintain project auto-skills based on recent use.");
3756
+ },
3757
+ argumentHint: "[status|run [--dry-run]|pin <directory>|unpin <directory>|restore <directory>]",
3758
+ kind: "built-in" /* BUILT_IN */,
3759
+ supportedModes: ["interactive", "non_interactive", "acp"],
3760
+ action: statusAction,
3761
+ subCommands: [
3762
+ statusCommand,
3763
+ runCommand,
3764
+ pinAutoSkillCommand,
3765
+ unpinAutoSkillCommand,
3766
+ restoreCommand
3767
+ ]
3768
+ };
3769
+
3466
3770
  // packages/cli/src/ui/commands/copyCommand.ts
3467
3771
  init_esbuild_shims();
3468
3772
  function parseFencedCodeBlocks(markdown) {
@@ -3765,12 +4069,12 @@ var copyCommand = {
3765
4069
  content: selectedCodeBlock ? `${selectedCodeBlock.label} copied to the clipboard` : isIndexed ? `AI message ${messageIndex} copied to the clipboard` : "Last output copied to the clipboard"
3766
4070
  };
3767
4071
  } catch (error) {
3768
- const message = error instanceof Error ? error.message : String(error);
3769
- context.services.config?.getDebugLogger().debug(message);
4072
+ const message2 = error instanceof Error ? error.message : String(error);
4073
+ context.services.config?.getDebugLogger().debug(message2);
3770
4074
  return {
3771
4075
  type: "message",
3772
4076
  messageType: "error",
3773
- content: `Failed to copy to the clipboard. ${message}`
4077
+ content: `Failed to copy to the clipboard. ${message2}`
3774
4078
  };
3775
4079
  }
3776
4080
  } else {
@@ -4614,8 +4918,8 @@ function formatErrorMessage2(error) {
4614
4918
  }
4615
4919
  __name(formatErrorMessage2, "formatErrorMessage");
4616
4920
  function formatHeapSnapshotErrorMessage(error) {
4617
- const message = formatErrorMessage2(error);
4618
- return message.startsWith("Heap snapshot") ? message : `${t("Heap snapshot failed:")} ${message}`;
4921
+ const message2 = formatErrorMessage2(error);
4922
+ return message2.startsWith("Heap snapshot") ? message2 : `${t("Heap snapshot failed:")} ${message2}`;
4619
4923
  }
4620
4924
  __name(formatHeapSnapshotErrorMessage, "formatHeapSnapshotErrorMessage");
4621
4925
  var doctorCommand = {
@@ -6049,147 +6353,256 @@ var CLEAR_KEYWORDS = /* @__PURE__ */ new Set([
6049
6353
  "none",
6050
6354
  "cancel"
6051
6355
  ]);
6052
- function sanitizeConditionForPrompt(condition) {
6053
- return condition.replace(/[\r\n]+/g, " ").replace(/"/g, "'");
6054
- }
6055
- __name(sanitizeConditionForPrompt, "sanitizeConditionForPrompt");
6056
- var goalInstructionPrompt = /* @__PURE__ */ __name((condition) => `A session-scoped Stop hook is now active with condition: "${sanitizeConditionForPrompt(condition)}". Briefly acknowledge the goal, then immediately start (or continue) working toward it \u2014 treat the condition itself as your directive and do not pause to ask the user what to do. The hook will block stopping until the condition holds. It auto-clears once the condition is met \u2014 do not tell the user to run \`/goal clear\` after success; that's only for clearing a goal early.`, "goalInstructionPrompt");
6057
- var formatTurns = /* @__PURE__ */ __name((n) => `${n} ${n === 1 ? "turn" : "turns"}`, "formatTurns");
6058
- function assertNeverGoalKind(kind) {
6059
- throw new Error(`Unexpected terminal goal kind: ${kind}`);
6060
- }
6061
- __name(assertNeverGoalKind, "assertNeverGoalKind");
6062
- function terminalGoalTitle(kind) {
6063
- switch (kind) {
6356
+ function formatLegacyTurns(count) {
6357
+ return `${count} ${count === 1 ? "turn" : "turns"}`;
6358
+ }
6359
+ __name(formatLegacyTurns, "formatLegacyTurns");
6360
+ function assertNeverTerminalKind(kind) {
6361
+ throw new Error(`Unexpected GoalTerminalKind: ${kind}`);
6362
+ }
6363
+ __name(assertNeverTerminalKind, "assertNeverTerminalKind");
6364
+ function formatLegacyTerminalSummary(event) {
6365
+ let title;
6366
+ switch (event.kind) {
6064
6367
  case "achieved":
6065
- return "Goal achieved";
6368
+ title = "Goal achieved";
6369
+ break;
6066
6370
  case "failed":
6067
- return "Goal could not be achieved";
6371
+ title = "Goal could not be achieved";
6372
+ break;
6068
6373
  case "aborted":
6069
- return "Goal aborted";
6374
+ title = "Goal aborted";
6375
+ break;
6070
6376
  default:
6071
- return assertNeverGoalKind(kind);
6377
+ title = assertNeverTerminalKind(event.kind);
6072
6378
  }
6073
- }
6074
- __name(terminalGoalTitle, "terminalGoalTitle");
6075
- function formatTerminalSummary(event) {
6076
- const title = terminalGoalTitle(event.kind);
6077
6379
  const stats = [];
6078
- if (event.iterations > 0) stats.push(formatTurns(event.iterations));
6079
- if (typeof event.durationMs === "number")
6380
+ if (event.iterations > 0) stats.push(formatLegacyTurns(event.iterations));
6381
+ if (typeof event.durationMs === "number") {
6080
6382
  stats.push(formatDuration(event.durationMs, { hideTrailingZeros: true }));
6383
+ }
6081
6384
  const subtitle = stats.length > 0 ? ` \xB7 ${stats.join(" \xB7 ")}` : "";
6082
6385
  const reason = event.lastReason?.trim();
6083
- const reasonLine = reason ? `
6084
- Last check: ${reason}` : "";
6085
6386
  return `${title}${subtitle}
6086
- Goal: ${event.condition}${reasonLine}`;
6387
+ Goal: ${event.condition}${reason ? `
6388
+ Last check: ${reason}` : ""}`;
6389
+ }
6390
+ __name(formatLegacyTerminalSummary, "formatLegacyTerminalSummary");
6391
+ async function runLegacyGoalCommand(context, args, explicitSet = false) {
6392
+ const { config } = context.services;
6393
+ if (!config) return errorMessage("Configuration is not available.");
6394
+ const sessionId = config.getSessionId();
6395
+ const objective = args.trim();
6396
+ if (!objective) {
6397
+ const active = getActiveGoal(sessionId);
6398
+ if (active) {
6399
+ const turns = active.iterations === 0 ? "not yet evaluated" : formatLegacyTurns(active.iterations);
6400
+ return {
6401
+ type: "message",
6402
+ messageType: "info",
6403
+ content: `Goal active: ${active.condition} (${turns})${active.lastReason ? `
6404
+ Last check: ${active.lastReason}` : ""}`
6405
+ };
6406
+ }
6407
+ const terminal = getLastGoalTerminal(sessionId);
6408
+ return {
6409
+ type: "message",
6410
+ messageType: "info",
6411
+ content: terminal ? formatLegacyTerminalSummary(terminal) : "No goal set. Usage: `/goal <condition>` (or `/goal clear`)."
6412
+ };
6413
+ }
6414
+ if (!explicitSet && CLEAR_KEYWORDS.has(objective.toLowerCase())) {
6415
+ const cleared = unregisterGoalHook(config, sessionId);
6416
+ if (!cleared) {
6417
+ return {
6418
+ type: "message",
6419
+ messageType: "info",
6420
+ content: "No goal set."
6421
+ };
6422
+ }
6423
+ const item = {
6424
+ type: "goal_status" /* GOAL_STATUS */,
6425
+ kind: "cleared",
6426
+ condition: cleared.condition,
6427
+ iterations: cleared.iterations,
6428
+ durationMs: Date.now() - cleared.setAt
6429
+ };
6430
+ context.ui.addItem(item, Date.now());
6431
+ return {
6432
+ type: "message",
6433
+ messageType: "info",
6434
+ content: `Goal cleared: ${cleared.condition}`
6435
+ };
6436
+ }
6437
+ if (!config.isTrustedFolder()) {
6438
+ return errorMessage(
6439
+ "/goal is only available in trusted workspaces. Trust this folder via `/trust` and try again."
6440
+ );
6441
+ }
6442
+ if (config.getDisableAllHooks()) {
6443
+ return errorMessage(
6444
+ "/goal is disabled because hooks are turned off in this session (`disableAllHooks` or bare mode)."
6445
+ );
6446
+ }
6447
+ if (!config.getHookSystem()) {
6448
+ return errorMessage(
6449
+ "Hook system is not initialized; cannot set a /goal in this session."
6450
+ );
6451
+ }
6452
+ let registered;
6453
+ try {
6454
+ registered = registerGoalHook({
6455
+ config,
6456
+ sessionId,
6457
+ condition: objective,
6458
+ tokensAtStart: 0
6459
+ });
6460
+ } catch (error) {
6461
+ return errorMessage(
6462
+ `Failed to set goal: ${error instanceof Error ? error.message : String(error)}`
6463
+ );
6464
+ }
6465
+ context.ui.addItem(
6466
+ {
6467
+ type: "goal_status" /* GOAL_STATUS */,
6468
+ kind: "set",
6469
+ condition: registered.condition,
6470
+ setAt: registered.setAt
6471
+ },
6472
+ Date.now()
6473
+ );
6474
+ installGoalTerminalObserver({
6475
+ sessionId,
6476
+ config,
6477
+ addItem: context.ui.addItem
6478
+ });
6479
+ const result = {
6480
+ type: "submit_prompt",
6481
+ content: [
6482
+ {
6483
+ text: `A session-scoped Stop hook is now active with condition: "${objective.replace(/[\r\n]+/g, " ").replace(/"/g, "'")}". Briefly acknowledge the goal, then immediately start (or continue) working toward it \u2014 treat the condition itself as your directive and do not pause to ask the user what to do. The hook will block stopping until the condition holds. It auto-clears once the condition is met \u2014 do not tell the user to run \`/goal clear\` after success; that is only for clearing a goal early.`
6484
+ }
6485
+ ]
6486
+ };
6487
+ return result;
6087
6488
  }
6088
- __name(formatTerminalSummary, "formatTerminalSummary");
6089
- function infoMessage(content) {
6090
- return { type: "message", messageType: "info", content };
6489
+ __name(runLegacyGoalCommand, "runLegacyGoalCommand");
6490
+ function parseGoalCommand(args) {
6491
+ let input = args.trim();
6492
+ if (/^\/goal(?:\s|$)/i.test(input)) {
6493
+ input = input.slice("/goal".length).trim();
6494
+ }
6495
+ if (!input) return { kind: "status" };
6496
+ const [head = "", ...tail] = input.split(/\s+/);
6497
+ const keyword = head.toLowerCase();
6498
+ const objective = tail.join(" ").trim();
6499
+ if (keyword === "set") {
6500
+ return objective ? { kind: "set", objective } : { kind: "error", message: "`/goal set` requires an objective." };
6501
+ }
6502
+ if (keyword === "edit") {
6503
+ return objective ? { kind: "edit", objective } : { kind: "error", message: "`/goal edit` requires an objective." };
6504
+ }
6505
+ if (tail.length === 0) {
6506
+ if (keyword === "pause") return { kind: "pause" };
6507
+ if (keyword === "resume") return { kind: "resume" };
6508
+ if (CLEAR_KEYWORDS.has(keyword)) return { kind: "clear" };
6509
+ }
6510
+ return { kind: "set", objective: input };
6091
6511
  }
6092
- __name(infoMessage, "infoMessage");
6512
+ __name(parseGoalCommand, "parseGoalCommand");
6093
6513
  function errorMessage(content) {
6094
6514
  return { type: "message", messageType: "error", content };
6095
6515
  }
6096
6516
  __name(errorMessage, "errorMessage");
6517
+ function goalControl(operation, response, cause) {
6518
+ return {
6519
+ type: "goal_control",
6520
+ operation,
6521
+ response,
6522
+ ...cause ? { cause } : {}
6523
+ };
6524
+ }
6525
+ __name(goalControl, "goalControl");
6097
6526
  var goalCommand = {
6098
6527
  name: "goal",
6099
6528
  get description() {
6100
- return t("Set a goal \u2014 keep working until the condition is met");
6529
+ return t("Set or control a session goal");
6101
6530
  },
6102
- argumentHint: "[<condition> | clear]",
6531
+ argumentHint: "[<objective> | set <objective> | edit <objective> | pause | resume | clear]",
6103
6532
  kind: "built-in" /* BUILT_IN */,
6104
6533
  supportedModes: ["interactive", "non_interactive", "acp"],
6105
6534
  action: /* @__PURE__ */ __name(async (context, args) => {
6106
- const { config } = context.services;
6107
- if (!config) {
6108
- return errorMessage("Configuration is not available.");
6109
- }
6110
- const sessionId = config.getSessionId();
6111
- const q = args.trim();
6112
- if (q === "") {
6113
- const active = getActiveGoal(sessionId);
6114
- if (active) {
6115
- const turns = active.iterations === 0 ? "not yet evaluated" : formatTurns(active.iterations);
6116
- const lastReason = active.lastReason ? `
6117
- Last check: ${active.lastReason}` : "";
6118
- return infoMessage(
6119
- `Goal active: ${active.condition} (${turns})${lastReason}`
6535
+ if (context.executionMode !== "interactive") {
6536
+ const operation2 = parseGoalCommand(args);
6537
+ if (operation2.kind === "error") return errorMessage(operation2.message);
6538
+ if (operation2.kind !== "status" && operation2.kind !== "clear" && operation2.kind !== "set") {
6539
+ return errorMessage(
6540
+ `'/goal ${operation2.kind}' is only available in interactive mode.`
6120
6541
  );
6121
6542
  }
6122
- const last = getLastGoalTerminal(sessionId);
6123
- if (last) {
6124
- return infoMessage(formatTerminalSummary(last));
6125
- }
6126
- return infoMessage(
6127
- "No goal set. Usage: `/goal <condition>` (or `/goal clear`)."
6128
- );
6129
- }
6130
- if (CLEAR_KEYWORDS.has(q.toLowerCase())) {
6131
- const cleared = unregisterGoalHook(config, sessionId);
6132
- if (!cleared) {
6133
- return infoMessage("No goal set.");
6134
- }
6135
- const clearedItem = {
6136
- type: "goal_status" /* GOAL_STATUS */,
6137
- kind: "cleared",
6138
- condition: cleared.condition,
6139
- iterations: cleared.iterations,
6140
- durationMs: Date.now() - cleared.setAt
6543
+ const explicitSet = operation2.kind === "set";
6544
+ const legacyArgs = explicitSet ? operation2.objective : args;
6545
+ return await runLegacyGoalCommand(context, legacyArgs, explicitSet) ?? {
6546
+ type: "message",
6547
+ messageType: "info",
6548
+ content: "Command executed successfully."
6141
6549
  };
6142
- context.ui.addItem(clearedItem, Date.now());
6143
- if (context.executionMode !== "interactive") {
6144
- return infoMessage(`Goal cleared: ${cleared.condition}`);
6145
- }
6146
- return;
6147
6550
  }
6148
- if (!config.isTrustedFolder()) {
6551
+ const { config } = context.services;
6552
+ if (!config) return errorMessage("Configuration is not available.");
6553
+ const operation = parseGoalCommand(args);
6554
+ if (operation.kind === "error") return errorMessage(operation.message);
6555
+ const requiresTrustedFolder = operation.kind === "set" || operation.kind === "edit" || operation.kind === "resume";
6556
+ if (requiresTrustedFolder && !config.isTrustedFolder()) {
6149
6557
  return errorMessage(
6150
6558
  "/goal is only available in trusted workspaces. Trust this folder via `/trust` and try again."
6151
6559
  );
6152
6560
  }
6153
- if (config.getDisableAllHooks()) {
6154
- return errorMessage(
6155
- "/goal is disabled because hooks are turned off in this session (`disableAllHooks` or bare mode)."
6156
- );
6157
- }
6158
- if (!config.getHookSystem()) {
6159
- return errorMessage(
6160
- "Hook system is not initialized; cannot set a /goal in this session."
6161
- );
6162
- }
6163
- let registered;
6164
6561
  try {
6165
- registered = registerGoalHook({
6166
- config,
6167
- sessionId,
6168
- condition: q,
6169
- tokensAtStart: 0
6170
- });
6171
- } catch (err) {
6562
+ const runtime = await config.getGoalRuntimeReady();
6563
+ const snapshot = runtime.getSnapshot();
6564
+ if (operation.kind === "status") {
6565
+ return goalControl(operation, { snapshot });
6566
+ }
6567
+ const current = snapshot.goal;
6568
+ if (operation.kind === "set") {
6569
+ const request2 = current ? {
6570
+ action: "replace",
6571
+ objective: operation.objective,
6572
+ expectedGoalId: current.goalId,
6573
+ expectedRevision: current.revision
6574
+ } : { action: "create", objective: operation.objective };
6575
+ return goalControl(
6576
+ operation,
6577
+ await runtime.dispatch(request2),
6578
+ request2.action
6579
+ );
6580
+ }
6581
+ if (!current) {
6582
+ if (operation.kind === "clear") {
6583
+ return goalControl(operation, { snapshot });
6584
+ }
6585
+ return errorMessage(`Cannot ${operation.kind}: no Goal is active.`);
6586
+ }
6587
+ const version = {
6588
+ expectedGoalId: current.goalId,
6589
+ expectedRevision: current.revision
6590
+ };
6591
+ const request = operation.kind === "edit" ? {
6592
+ action: "edit",
6593
+ objective: operation.objective,
6594
+ ...version
6595
+ } : { action: operation.kind, ...version };
6596
+ return goalControl(
6597
+ operation,
6598
+ await runtime.dispatch(request),
6599
+ request.action
6600
+ );
6601
+ } catch (error) {
6172
6602
  return errorMessage(
6173
- `Failed to set goal: ${err instanceof Error ? err.message : String(err)}`
6603
+ error instanceof Error ? error.message : String(error)
6174
6604
  );
6175
6605
  }
6176
- const setItem = {
6177
- type: "goal_status" /* GOAL_STATUS */,
6178
- kind: "set",
6179
- condition: registered.condition,
6180
- setAt: registered.setAt
6181
- };
6182
- context.ui.addItem(setItem, Date.now());
6183
- installGoalTerminalObserver({
6184
- sessionId,
6185
- config,
6186
- addItem: context.ui.addItem
6187
- });
6188
- const result = {
6189
- type: "submit_prompt",
6190
- content: [{ text: goalInstructionPrompt(q) }]
6191
- };
6192
- return result;
6193
6606
  }, "action")
6194
6607
  };
6195
6608
 
@@ -6200,6 +6613,7 @@ var helpCommand = {
6200
6613
  altNames: ["?"],
6201
6614
  kind: "built-in" /* BUILT_IN */,
6202
6615
  supportedModes: ["interactive"],
6616
+ canRunDuringStreaming: true,
6203
6617
  get description() {
6204
6618
  return t("for help on Qwen Code");
6205
6619
  },
@@ -6268,7 +6682,7 @@ var expandNowCommand = {
6268
6682
  content: t("History is already expanded in this session.")
6269
6683
  };
6270
6684
  }
6271
- const { expandCollapsedHistory } = await import("./resumeHistoryUtils-BNBTP5AS.js");
6685
+ const { expandCollapsedHistory } = await import("./resumeHistoryUtils-4QAMC2S6.js");
6272
6686
  const updated = expandCollapsedHistory(history);
6273
6687
  loadHistory(updated);
6274
6688
  refreshStatic();
@@ -6383,6 +6797,13 @@ function getHookExitCodes(eventName) {
6383
6797
  { code: 0, description: t("command completes successfully") },
6384
6798
  { code: "Other", description: t("show stderr to user only") }
6385
6799
  ],
6800
+ ["SessionDelete" /* SessionDelete */]: [
6801
+ { code: 0, description: t("fire-and-forget; exit status is ignored") },
6802
+ {
6803
+ code: "Other",
6804
+ description: t("fire-and-forget; exit status is ignored")
6805
+ }
6806
+ ],
6386
6807
  ["SubagentStart" /* SubagentStart */]: [
6387
6808
  { code: 0, description: t("stdout shown to subagent") },
6388
6809
  {
@@ -6480,6 +6901,9 @@ function getHookShortDescription(eventName) {
6480
6901
  "When the turn ends due to an API error (fires instead of Stop)"
6481
6902
  ),
6482
6903
  ["SessionEnd" /* SessionEnd */]: t("When a session is ending"),
6904
+ ["SessionDelete" /* SessionDelete */]: t(
6905
+ "After an explicitly selected session is deleted"
6906
+ ),
6483
6907
  ["PermissionRequest" /* PermissionRequest */]: t(
6484
6908
  "When a permission dialog is displayed"
6485
6909
  ),
@@ -6528,6 +6952,9 @@ function getHookDescription(eventName) {
6528
6952
  ["SessionEnd" /* SessionEnd */]: t(
6529
6953
  "Input to command is JSON with session end reason."
6530
6954
  ),
6955
+ ["SessionDelete" /* SessionDelete */]: t(
6956
+ "Input to command is JSON with deleted_session_id. It runs after an explicitly selected session is deleted; output and failures are ignored."
6957
+ ),
6531
6958
  ["SubagentStart" /* SubagentStart */]: t(
6532
6959
  "Input to command is JSON with agent_id and agent_type."
6533
6960
  ),
@@ -6806,16 +7233,16 @@ function formatFileList(openFiles) {
6806
7233
  const basename3 = path6.basename(file.path);
6807
7234
  const isDuplicate = (basenameCounts.get(basename3) || 0) > 1;
6808
7235
  const parentDir = path6.basename(path6.dirname(file.path));
6809
- const displayName = isDuplicate ? `${basename3} (/${parentDir})` : basename3;
6810
- return ` - ${displayName}${file.isActive ? " (active)" : ""}`;
7236
+ const displayName2 = isDuplicate ? `${basename3} (/${parentDir})` : basename3;
7237
+ return ` - ${displayName2}${file.isActive ? " (active)" : ""}`;
6811
7238
  }).join("\n");
6812
- const infoMessage2 = `
7239
+ const infoMessage = `
6813
7240
  (Note: The file list is limited to a number of recently accessed files within your workspace and only includes local files on disk)`;
6814
7241
  return `
6815
7242
 
6816
7243
  Open files:
6817
7244
  ${fileList}
6818
- ${infoMessage2}`;
7245
+ ${infoMessage}`;
6819
7246
  }
6820
7247
  __name(formatFileList, "formatFileList");
6821
7248
  async function getIdeStatusMessageWithFiles(ideClient) {
@@ -6891,7 +7318,7 @@ var ideCommand = /* @__PURE__ */ __name(async () => {
6891
7318
  supportedModes: ["interactive"],
6892
7319
  subCommands: []
6893
7320
  };
6894
- const statusCommand = {
7321
+ const statusCommand2 = {
6895
7322
  name: "status",
6896
7323
  get description() {
6897
7324
  return t("check status of IDE integration");
@@ -7041,11 +7468,11 @@ var ideCommand = /* @__PURE__ */ __name(async () => {
7041
7468
  const { status } = ideClient.getConnectionStatus();
7042
7469
  const isConnected = status === "connected" /* Connected */;
7043
7470
  if (isConnected) {
7044
- ideSlashCommand.subCommands = [statusCommand, disableCommand];
7471
+ ideSlashCommand.subCommands = [statusCommand2, disableCommand];
7045
7472
  } else {
7046
7473
  ideSlashCommand.subCommands = [
7047
7474
  enableCommand,
7048
- statusCommand,
7475
+ statusCommand2,
7049
7476
  installCommand2
7050
7477
  ];
7051
7478
  }
@@ -8236,6 +8663,7 @@ init_esbuild_shims();
8236
8663
  var MAIN_MODEL_CONFIGURATION_HINT = "Configure models in settings.modelProviders and ensure the required environment variables are set. In interactive mode, run /auth to configure or switch providers, or run /model without arguments to choose from configured models.";
8237
8664
  var FAST_MODEL_CONFIGURATION_HINT = "Configure models in settings.modelProviders and ensure the required environment variables are set. In interactive mode, run /auth to configure or switch providers, or run /model --fast without a model to choose from configured models.";
8238
8665
  var VISION_MODEL_CONFIGURATION_HINT = "Configure an image-capable model in settings.modelProviders and ensure the required environment variables are set. Run /model --vision <model-id> to set it, or leave it unset to auto-pick a same-provider vision model.";
8666
+ var COMPACTION_MODEL_CONFIGURATION_HINT = "Configure models in settings.modelProviders and ensure the required environment variables are set. In interactive mode, run /auth to configure or switch providers, or run /model --compaction without a model to choose from configured models.";
8239
8667
  var IMAGE_MODEL_CONFIGURATION_HINT = "Configure a model with imageOnly: true, baseUrl, and envKey in settings.modelProviders. Run /model --image <model-id> to select it.";
8240
8668
  function parseScopeFlags(args) {
8241
8669
  let scopeOverride;
@@ -8303,7 +8731,7 @@ function formatUnavailableModelMessage(kind, modelName, authType, availableModel
8303
8731
  new Set(availableModels.map((model) => model.id))
8304
8732
  );
8305
8733
  const availableModelsLine = availableModelIds.length === 0 ? `No models are configured for auth type '${authType}'.` : `Available models for '${authType}': ${availableModelIds.join(", ")}.`;
8306
- const hint = kind === "Fast model" ? FAST_MODEL_CONFIGURATION_HINT : kind === "Vision model" ? VISION_MODEL_CONFIGURATION_HINT : kind === "Image model" ? IMAGE_MODEL_CONFIGURATION_HINT : MAIN_MODEL_CONFIGURATION_HINT;
8734
+ const hint = kind === "Fast model" ? FAST_MODEL_CONFIGURATION_HINT : kind === "Vision model" ? VISION_MODEL_CONFIGURATION_HINT : kind === "Compaction model" ? COMPACTION_MODEL_CONFIGURATION_HINT : kind === "Image model" ? IMAGE_MODEL_CONFIGURATION_HINT : MAIN_MODEL_CONFIGURATION_HINT;
8307
8735
  return `${kind} '${modelName}' is not available for auth type '${authType}'.
8308
8736
  ${availableModelsLine}
8309
8737
  ` + hint;
@@ -8337,6 +8765,15 @@ function formatUnavailableVisionModelMessage(modelName, availableModels) {
8337
8765
  );
8338
8766
  }
8339
8767
  __name(formatUnavailableVisionModelMessage, "formatUnavailableVisionModelMessage");
8768
+ function formatUnavailableCompactionModelMessage(modelName, availableModels) {
8769
+ return formatUnavailableAuxModelMessage(
8770
+ "Compaction model",
8771
+ modelName,
8772
+ availableModels,
8773
+ COMPACTION_MODEL_CONFIGURATION_HINT
8774
+ );
8775
+ }
8776
+ __name(formatUnavailableCompactionModelMessage, "formatUnavailableCompactionModelMessage");
8340
8777
  function formatUnavailableImageModelMessage(modelName, availableModels) {
8341
8778
  return formatUnavailableAuxModelMessage(
8342
8779
  "Image model",
@@ -8400,9 +8837,10 @@ function getAvailableModelIds(context, mode = "main") {
8400
8837
  const availableModels = models.filter((m) => {
8401
8838
  if (mode === "image")
8402
8839
  return m.imageOnly === true && !m.fastOnly && !m.voiceOnly;
8403
- if (mode === "fast") return !m.voiceOnly && !m.imageOnly;
8404
- if (mode === "voice") return !m.fastOnly && !m.imageOnly;
8405
- return !m.fastOnly && !m.voiceOnly && !m.imageOnly;
8840
+ if (mode === "vision") return !m.fastOnly && !m.voiceOnly && !m.imageOnly;
8841
+ if (mode === "fast") return !m.voiceOnly && !m.imageOnly && !m.visionOnly;
8842
+ if (mode === "voice") return !m.fastOnly && !m.imageOnly && !m.visionOnly;
8843
+ return !m.fastOnly && !m.voiceOnly && !m.imageOnly && !m.visionOnly;
8406
8844
  });
8407
8845
  return availableModels.map((model) => model.id);
8408
8846
  }
@@ -8412,10 +8850,10 @@ var modelCommand = {
8412
8850
  completionPriority: 100,
8413
8851
  get description() {
8414
8852
  return t(
8415
- "Switch the model for this session (--fast for suggestion model, --voice for voice transcription model, --vision for the vision bridge model, --image for the image generation model, --project to persist to project settings, --global to persist to user settings, [model-id] to switch immediately, or [model-id] [prompt] to run a one-off prompt on another model; the inline prompt is sent verbatim without @file expansion)."
8853
+ "Switch the model for this session (--fast for suggestion model, --voice for voice transcription model, --vision for the vision bridge model, --compaction for chat compression model, --image for the image generation model, --project to persist to project settings, --global to persist to user settings, [model-id] to switch immediately, or [model-id] [prompt] to run a one-off prompt on another model; the inline prompt is sent verbatim without @file expansion)."
8416
8854
  );
8417
8855
  },
8418
- argumentHint: "[--fast|--voice|--vision|--image] [--project|--global] [<model-id>] | <model-id> <prompt>",
8856
+ argumentHint: "[--fast|--voice|--vision|--compaction|--image] [--project|--global] [<model-id>] | <model-id> <prompt>",
8419
8857
  kind: "built-in" /* BUILT_IN */,
8420
8858
  supportedModes: ["interactive", "non_interactive", "acp"],
8421
8859
  completion: /* @__PURE__ */ __name(async (context, partialArg) => {
@@ -8437,6 +8875,12 @@ var modelCommand = {
8437
8875
  "Set the image-capable model used to transcribe images for a text-only main model"
8438
8876
  )
8439
8877
  },
8878
+ {
8879
+ value: "--compaction",
8880
+ description: t(
8881
+ "Set the model used for chat compression (auto-compaction)"
8882
+ )
8883
+ },
8440
8884
  {
8441
8885
  value: "--image",
8442
8886
  description: t("Set the model used to generate images")
@@ -8460,10 +8904,12 @@ var modelCommand = {
8460
8904
  const trimmed = partialArg.trim();
8461
8905
  if (trimmed) {
8462
8906
  let mode = "main";
8463
- const modelPrefix = trimmed.replace(/(?:^|\s)--fast(?:\s|$)/, " ").replace(/(?:^|\s)--voice(?:\s|$)/, " ").replace(/(?:^|\s)--vision(?:\s|$)/, " ").replace(/(?:^|\s)--image(?:\s|$)/, " ").replace(/(?:^|\s)--project(?:\s|$)/, " ").replace(/(?:^|\s)--global(?:\s|$)/, " ").trim();
8907
+ const modelPrefix = trimmed.replace(/(?:^|\s)--fast(?:\s|$)/, " ").replace(/(?:^|\s)--voice(?:\s|$)/, " ").replace(/(?:^|\s)--vision(?:\s|$)/, " ").replace(/(?:^|\s)--compaction(?:\s|$)/, " ").replace(/(?:^|\s)--image(?:\s|$)/, " ").replace(/(?:^|\s)--project(?:\s|$)/, " ").replace(/(?:^|\s)--global(?:\s|$)/, " ").trim();
8464
8908
  if (/(?:^|\s)--fast(?:\s|$)/.test(trimmed)) mode = "fast";
8465
8909
  else if (/(?:^|\s)--voice(?:\s|$)/.test(trimmed)) mode = "voice";
8466
8910
  else if (/(?:^|\s)--vision(?:\s|$)/.test(trimmed)) mode = "vision";
8911
+ else if (/(?:^|\s)--compaction(?:\s|$)/.test(trimmed))
8912
+ mode = "compaction";
8467
8913
  else if (/(?:^|\s)--image(?:\s|$)/.test(trimmed)) mode = "image";
8468
8914
  return getAvailableModelIds(context, mode).filter(
8469
8915
  (id) => id.startsWith(modelPrefix)
@@ -8536,7 +8982,7 @@ var modelCommand = {
8536
8982
  content: t("Settings service not available.")
8537
8983
  };
8538
8984
  }
8539
- const availableModels = config.getAllConfiguredModels().filter((m) => !m.fastOnly && !m.imageOnly);
8985
+ const availableModels = config.getAllConfiguredModels().filter((m) => !m.fastOnly && !m.imageOnly && !m.visionOnly);
8540
8986
  const matches = availableModels.filter((model) => model.id === modelName2);
8541
8987
  if (matches.length === 0) {
8542
8988
  return {
@@ -8621,7 +9067,7 @@ Use "/model --fast <model-id>" to set fast model.`
8621
9067
  content: formatUnavailableFastModelMessage(modelName2, [])
8622
9068
  };
8623
9069
  }
8624
- const availableModels = (selector.authType ? config.getAvailableModelsForAuthType(selector.authType) : config.getAllConfiguredModels()).filter((m) => !m.voiceOnly && !m.imageOnly);
9070
+ const availableModels = (selector.authType ? config.getAvailableModelsForAuthType(selector.authType) : config.getAllConfiguredModels()).filter((m) => !m.voiceOnly && !m.imageOnly && !m.visionOnly);
8625
9071
  if (!availableModels.some((model) => model.id === selector.modelId)) {
8626
9072
  return {
8627
9073
  type: "message",
@@ -8732,6 +9178,90 @@ ${formatNonVisionModelWarning(modelName2)}`;
8732
9178
  content: t("Vision Model") + ": " + modelName2 + scopeSuffix + visionWarning
8733
9179
  };
8734
9180
  }
9181
+ const isCompactionModelCommand = args === "--compaction" || args.startsWith("--compaction ");
9182
+ if (isCompactionModelCommand) {
9183
+ const modelName2 = args.replace("--compaction", "").trim();
9184
+ if (!modelName2 || modelName2 === "clear") {
9185
+ if (modelName2 === "clear") {
9186
+ if (!settings) {
9187
+ return {
9188
+ type: "message",
9189
+ messageType: "error",
9190
+ content: t("Settings service not available.")
9191
+ };
9192
+ }
9193
+ persistSetting(settings, "compactionModel", void 0, scopeOverride);
9194
+ config.setCompactionModel(void 0);
9195
+ return {
9196
+ type: "message",
9197
+ messageType: "info",
9198
+ content: t("Compaction model override cleared") + scopeSuffix
9199
+ };
9200
+ }
9201
+ if (context.executionMode !== "interactive") {
9202
+ const compactionModel = context.services.settings?.merged?.compactionModel?.trim() || t("not set (falls back to the main model)");
9203
+ return {
9204
+ type: "message",
9205
+ messageType: "info",
9206
+ content: t(
9207
+ 'Current compaction model: {{compactionModel}}\nUse "/model --compaction <model-id>" to set compaction model, or "/model --compaction clear" to clear the override.',
9208
+ { compactionModel }
9209
+ )
9210
+ };
9211
+ }
9212
+ return {
9213
+ type: "dialog",
9214
+ dialog: "compaction-model",
9215
+ ...persistScopeSpread(scopeOverride)
9216
+ };
9217
+ }
9218
+ if (!settings) {
9219
+ return {
9220
+ type: "message",
9221
+ messageType: "error",
9222
+ content: t("Settings service not available.")
9223
+ };
9224
+ }
9225
+ const selector = (() => {
9226
+ try {
9227
+ return resolveModelId(modelName2);
9228
+ } catch {
9229
+ return void 0;
9230
+ }
9231
+ })();
9232
+ if (!selector) {
9233
+ return {
9234
+ type: "message",
9235
+ messageType: "error",
9236
+ content: formatUnavailableCompactionModelMessage(modelName2, [])
9237
+ };
9238
+ }
9239
+ const availableModels = (selector.authType ? config.getAvailableModelsForAuthType(selector.authType) : config.getAllConfiguredModels()).filter(
9240
+ (m) => !m.fastOnly && !m.voiceOnly && !m.imageOnly && !m.visionOnly
9241
+ );
9242
+ if (!availableModels.some((model) => model.id === selector.modelId)) {
9243
+ return {
9244
+ type: "message",
9245
+ messageType: "error",
9246
+ content: selector.authType ? formatUnavailableModelMessage(
9247
+ "Compaction model",
9248
+ selector.modelId,
9249
+ selector.authType,
9250
+ availableModels
9251
+ ) : formatUnavailableCompactionModelMessage(
9252
+ modelName2,
9253
+ availableModels
9254
+ )
9255
+ };
9256
+ }
9257
+ persistSetting(settings, "compactionModel", modelName2, scopeOverride);
9258
+ config.setCompactionModel(modelName2);
9259
+ return {
9260
+ type: "message",
9261
+ messageType: "info",
9262
+ content: t("Compaction Model") + ": " + modelName2 + scopeSuffix
9263
+ };
9264
+ }
8735
9265
  const isImageModelCommand = args === "--image" || args.startsWith("--image ");
8736
9266
  if (isImageModelCommand) {
8737
9267
  const modelName2 = args.replace("--image", "").trim();
@@ -9686,7 +10216,7 @@ async function completion(context, _partialArg) {
9686
10216
  }
9687
10217
  }
9688
10218
  __name(completion, "completion");
9689
- var restoreCommand = /* @__PURE__ */ __name((config) => {
10219
+ var restoreCommand2 = /* @__PURE__ */ __name((config) => {
9690
10220
  if (!config?.getFileCheckpointingEnabled()) {
9691
10221
  return null;
9692
10222
  }
@@ -9784,6 +10314,7 @@ var settingsCommand = {
9784
10314
  },
9785
10315
  kind: "built-in" /* BUILT_IN */,
9786
10316
  supportedModes: ["interactive"],
10317
+ canRunDuringStreaming: true,
9787
10318
  action: /* @__PURE__ */ __name((_context, _args) => ({
9788
10319
  type: "dialog",
9789
10320
  dialog: "settings"
@@ -10669,9 +11200,9 @@ var summaryCommand = {
10669
11200
  }
10670
11201
  }, "validateChatHistory");
10671
11202
  const generateSummaryMarkdown = /* @__PURE__ */ __name(async (history2) => {
10672
- const conversationContext = history2.map((message) => ({
10673
- role: message.role,
10674
- parts: message.parts
11203
+ const conversationContext = history2.map((message2) => ({
11204
+ role: message2.role,
11205
+ parts: message2.parts
10675
11206
  }));
10676
11207
  const rawSystemInstruction = geminiClient.getChat().getGenerationConfig().systemInstruction;
10677
11208
  const chatSystemInstruction = typeof rawSystemInstruction === "string" ? rawSystemInstruction : void 0;
@@ -11210,11 +11741,11 @@ var vimCommand = {
11210
11741
  supportedModes: ["interactive"],
11211
11742
  action: /* @__PURE__ */ __name(async (context, _args) => {
11212
11743
  const newVimState = await context.ui.toggleVimEnabled();
11213
- const message = newVimState ? "Entered Vim mode. Run /vim again to exit." : "Exited Vim mode.";
11744
+ const message2 = newVimState ? "Entered Vim mode. Run /vim again to exit." : "Exited Vim mode.";
11214
11745
  return {
11215
11746
  type: "message",
11216
11747
  messageType: "info",
11217
- content: message
11748
+ content: message2
11218
11749
  };
11219
11750
  }, "action")
11220
11751
  };
@@ -12835,8 +13366,8 @@ var insightCommand = {
12835
13366
  resume = null;
12836
13367
  resolve4();
12837
13368
  }, "flushResume");
12838
- const pushMessage = /* @__PURE__ */ __name((message) => {
12839
- pendingMessages.push(message);
13369
+ const pushMessage = /* @__PURE__ */ __name((message2) => {
13370
+ pendingMessages.push(message2);
12840
13371
  flushResume();
12841
13372
  }, "pushMessage");
12842
13373
  const streamMessages = /* @__PURE__ */ __name(async function* () {
@@ -12847,9 +13378,9 @@ var insightCommand = {
12847
13378
  });
12848
13379
  }
12849
13380
  while (pendingMessages.length > 0) {
12850
- const message = pendingMessages.shift();
12851
- if (message) {
12852
- yield message;
13381
+ const message2 = pendingMessages.shift();
13382
+ if (message2) {
13383
+ yield message2;
12853
13384
  }
12854
13385
  }
12855
13386
  }
@@ -13219,10 +13750,10 @@ var updateCommand = {
13219
13750
  { performStandaloneUpdate },
13220
13751
  installationInfo
13221
13752
  ] = await Promise.all([
13222
- import("./updateCheck-4Q6RIKFW.js"),
13223
- import("./processUtils-PB5K2DYH.js"),
13224
- import("./standalone-update-JAKIM2NF.js"),
13225
- import("./installationInfo-4MGG4WVI.js")
13753
+ import("./updateCheck-7EG4BLBH.js"),
13754
+ import("./processUtils-2CSVE5BW.js"),
13755
+ import("./standalone-update-E4V5V7WT.js"),
13756
+ import("./installationInfo-2LIKCNVX.js")
13226
13757
  ]);
13227
13758
  const { formatUpdateInstructions, getInstallationInfo: getInstallationInfo2 } = installationInfo;
13228
13759
  const settings = context.services.settings;
@@ -13314,7 +13845,7 @@ ${t(
13314
13845
  installInfo.standaloneDir,
13315
13846
  info.update.latest
13316
13847
  );
13317
- const message = result === "done" ? t(
13848
+ const message2 = result === "done" ? t(
13318
13849
  "Update successful! The new version will be used on your next run."
13319
13850
  ) : t(
13320
13851
  "Update downloaded. It will be applied after you exit this session."
@@ -13324,17 +13855,17 @@ ${t(
13324
13855
  messageType: "info",
13325
13856
  content: `${info.message}
13326
13857
  ${t("Downloading update...")}
13327
- ${message}`
13858
+ ${message2}`
13328
13859
  };
13329
13860
  } catch (err) {
13330
- const message = t("Update failed: {{error}}", {
13861
+ const message2 = t("Update failed: {{error}}", {
13331
13862
  error: err instanceof Error ? err.message : String(err)
13332
13863
  });
13333
13864
  return {
13334
13865
  type: "message",
13335
13866
  messageType: "error",
13336
13867
  content: `${info.message}
13337
- ${message}`
13868
+ ${message2}`
13338
13869
  };
13339
13870
  }
13340
13871
  }
@@ -13391,6 +13922,7 @@ var BuiltinCommandLoader = class {
13391
13922
  compressFastCommand,
13392
13923
  configCommand,
13393
13924
  contextCommand,
13925
+ curatorCommand,
13394
13926
  copyCommand,
13395
13927
  diffCommand,
13396
13928
  deleteCommand,
@@ -13422,7 +13954,7 @@ var BuiltinCommandLoader = class {
13422
13954
  recapCommand,
13423
13955
  reloadPluginsCommand,
13424
13956
  renameCommand,
13425
- restoreCommand(this.config),
13957
+ restoreCommand2(this.config),
13426
13958
  resumeCommand,
13427
13959
  rewindCommand,
13428
13960
  skillsCommand,
@@ -13514,6 +14046,8 @@ var BundledSkillLoader = class {
13514
14046
  );
13515
14047
  let body = skill.body;
13516
14048
  const modelId = this.config?.getModel()?.trim() || "";
14049
+ const cliVersion = this.config?.getCliVersion()?.trim() || "unknown";
14050
+ body = body.replaceAll("{{cliVersion}}", cliVersion);
13517
14051
  if (body.includes("{{model}}") || body.includes("YOUR_MODEL_ID")) {
13518
14052
  body = body.replaceAll("{{model}}", modelId);
13519
14053
  body = body.replaceAll("YOUR_MODEL_ID", modelId);
@@ -13678,8 +14212,8 @@ __name(extractInjections, "extractInjections");
13678
14212
 
13679
14213
  // packages/cli/src/services/prompt-processors/shellProcessor.ts
13680
14214
  var ConfirmationRequiredError = class extends Error {
13681
- constructor(message, commandsToConfirm) {
13682
- super(message);
14215
+ constructor(message2, commandsToConfirm) {
14216
+ super(message2);
13683
14217
  this.commandsToConfirm = commandsToConfirm;
13684
14218
  this.name = "ConfirmationRequiredError";
13685
14219
  }
@@ -13871,8 +14405,8 @@ var AtFileProcessor = class {
13871
14405
  }
13872
14406
  output.push(...fileContentParts);
13873
14407
  } catch (error) {
13874
- const message = error instanceof Error ? error.message : String(error);
13875
- const uiMessage = `Failed to inject content for '@{${pathStr}}': ${message}`;
14408
+ const message2 = error instanceof Error ? error.message : String(error);
14409
+ const uiMessage = `Failed to inject content for '@{${pathStr}}': ${message2}`;
13876
14410
  debugLogger13.error(
13877
14411
  `[AtFileProcessor] ${uiMessage}. Leaving placeholder in prompt.`
13878
14412
  );
@@ -14566,6 +15100,24 @@ var McpPromptLoader = class {
14566
15100
  init_esbuild_shims();
14567
15101
  import { dirname as dirname3 } from "node:path";
14568
15102
  var debugLogger17 = createDebugLogger("SKILL_COMMAND_LOADER");
15103
+ async function recordAutoSkillCommandUsage(config, command) {
15104
+ const detail = command.skillDetail;
15105
+ if (!config || detail?.level !== "project" || !detail.filePath) {
15106
+ return;
15107
+ }
15108
+ try {
15109
+ await recordAutoSkillUsage(config.getProjectRoot(), {
15110
+ name: detail.name,
15111
+ level: "project",
15112
+ filePath: detail.filePath
15113
+ });
15114
+ } catch (error) {
15115
+ debugLogger17.warn(
15116
+ `Failed to record auto-skill command usage: ${error instanceof Error ? error.message : String(error)}`
15117
+ );
15118
+ }
15119
+ }
15120
+ __name(recordAutoSkillCommandUsage, "recordAutoSkillCommandUsage");
14569
15121
  var SkillCommandLoader = class {
14570
15122
  constructor(config) {
14571
15123
  this.config = config;
@@ -14620,6 +15172,7 @@ var SkillCommandLoader = class {
14620
15172
  name: skill.name,
14621
15173
  description: skill.description,
14622
15174
  body: skill.body,
15175
+ filePath: skill.filePath,
14623
15176
  level: skill.level,
14624
15177
  ...isExtension && skill.extensionName ? { extensionName: skill.extensionName } : {}
14625
15178
  },
@@ -14795,6 +15348,12 @@ function handleCommandResult(result, outputHistoryItems) {
14795
15348
  reason: "Action confirmation is not supported in non-interactive mode. Commands requiring confirmation cannot be executed.",
14796
15349
  originalType: "confirm_action"
14797
15350
  };
15351
+ case "goal_control":
15352
+ return {
15353
+ type: "unsupported",
15354
+ reason: "Goal control is not supported in non-interactive mode yet.",
15355
+ originalType: "goal_control"
15356
+ };
14798
15357
  default: {
14799
15358
  const _exhaustive = result;
14800
15359
  return {
@@ -14944,6 +15503,7 @@ var handleSlashCommand = /* @__PURE__ */ __name(async (rawQuery, abortController
14944
15503
  const combinedContent = [];
14945
15504
  let firstModelOverride;
14946
15505
  const onCompleteCallbacks = [];
15506
+ const successfulSkillCommands = [];
14947
15507
  for (const skill of stackedResult.skills) {
14948
15508
  if (!skill.action) continue;
14949
15509
  const skillContext = {
@@ -14963,10 +15523,14 @@ var handleSlashCommand = /* @__PURE__ */ __name(async (rawQuery, abortController
14963
15523
  onCompleteCallbacks.push(skillResult.onComplete);
14964
15524
  }
14965
15525
  }
15526
+ const succeeded = skillResult?.type === "submit_prompt";
14966
15527
  recordSkillInvocation(config, {
14967
15528
  skillName: getSkillCommandName(skill),
14968
- success: skillResult?.type === "submit_prompt"
15529
+ success: succeeded
14969
15530
  });
15531
+ if (succeeded) {
15532
+ successfulSkillCommands.push(skill);
15533
+ }
14970
15534
  }
14971
15535
  if (stackedResult.remainingText) {
14972
15536
  combinedContent.push([{ text: stackedResult.remainingText }]);
@@ -14982,6 +15546,9 @@ var handleSlashCommand = /* @__PURE__ */ __name(async (rawQuery, abortController
14982
15546
  if (hookResult.blockedResult) {
14983
15547
  return hookResult.blockedResult;
14984
15548
  }
15549
+ for (const skill of successfulSkillCommands) {
15550
+ void recordAutoSkillCommandUsage(config, skill);
15551
+ }
14985
15552
  return {
14986
15553
  type: "submit_prompt",
14987
15554
  content: hookResult.content,
@@ -15100,6 +15667,7 @@ var handleSlashCommand = /* @__PURE__ */ __name(async (rawQuery, abortController
15100
15667
  return hookResult.blockedResult;
15101
15668
  }
15102
15669
  recordSkillCommandInvocation(true);
15670
+ void recordAutoSkillCommandUsage(config, commandToExecute);
15103
15671
  return handleCommandResult(
15104
15672
  { ...result, content: hookResult.content },
15105
15673
  outputHistoryItems
@@ -15154,11 +15722,11 @@ function normalizePartList(parts) {
15154
15722
  return [parts];
15155
15723
  }
15156
15724
  __name(normalizePartList, "normalizePartList");
15157
- function extractPartsFromUserMessage(message) {
15158
- if (!message) {
15725
+ function extractPartsFromUserMessage(message2) {
15726
+ if (!message2) {
15159
15727
  return null;
15160
15728
  }
15161
- const content = message.message?.content;
15729
+ const content = message2.message?.content;
15162
15730
  if (typeof content === "string") {
15163
15731
  return content;
15164
15732
  }
@@ -15456,6 +16024,7 @@ export {
15456
16024
  FileCommandLoader,
15457
16025
  SavedWorkflowLoader,
15458
16026
  McpPromptLoader,
16027
+ recordAutoSkillCommandUsage,
15459
16028
  SkillCommandLoader,
15460
16029
  appendUserPromptExpansionAdditionalContext,
15461
16030
  serializeUserPromptExpansionPrompt,