@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.
- package/bundled/qc-helper/docs/configuration/settings.md +41 -38
- package/bundled/qc-helper/docs/features/channels/github.md +7 -0
- package/bundled/qc-helper/docs/features/channels/gitlab.md +6 -0
- package/bundled/qc-helper/docs/features/code-review.md +78 -23
- package/bundled/qc-helper/docs/features/commands.md +2 -0
- package/bundled/qc-helper/docs/features/hooks.md +115 -18
- package/bundled/qc-helper/docs/features/memory.md +27 -0
- package/bundled/qc-helper/docs/features/skills.md +46 -1
- package/bundled/qc-helper/docs/features/sub-agents.md +42 -9
- package/bundled/qc-helper/docs/features/tool-use-summaries.md +7 -7
- package/bundled/qc-helper/docs/qwen-serve.md +21 -1
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +13 -13
- package/bundled/qc-helper/docs/support/troubleshooting.md +6 -1
- package/bundled/review/DESIGN.md +167 -32
- package/bundled/review/SKILL.md +156 -32
- package/chunks/{MaxSizedBox-TQBQ247P.js → MaxSizedBox-OJR636GP.js} +40 -38
- package/chunks/{StandaloneSessionPicker-2HPTKCLX.js → StandaloneSessionPicker-AMMBF5UY.js} +62 -59
- package/chunks/{acp-startup-profiler-2C4A5ZTJ.js → acp-startup-profiler-3RICG2YW.js} +2 -2
- package/chunks/{acpAgent-PS6EDGH3.js → acpAgent-M57LVIQA.js} +662 -560
- package/chunks/{agent-VDOUB35F.js → agent-PE37ARLM.js} +36 -34
- package/chunks/{agent-headless-EO53EFS2.js → agent-headless-45ASME4R.js} +36 -34
- package/chunks/{anthropicContentGenerator-OFHSZJBF.js → anthropicContentGenerator-WCBYB6JG.js} +337 -27
- package/chunks/{artifact-tool-RDN2W7ND.js → artifact-tool-TBOYEKTY.js} +2 -2
- package/chunks/{askUserQuestion-OZERWH5R.js → askUserQuestion-23Y5WZFJ.js} +2 -2
- package/chunks/{bridge-W7AZSRZQ.js → bridge-K3ZRPO4D.js} +42 -40
- package/chunks/{ca-6W3SK7OQ.js → ca-4OJN75WT.js} +46 -5
- package/chunks/{channel-management-service-5S7YCWX5.js → channel-management-service-IXJ2MZTS.js} +7 -7
- package/chunks/{channel-settings-store-JFVRSNER.js → channel-settings-store-PEAR3IME.js} +43 -41
- package/chunks/{channel-worker-group-OVWGYMZS.js → channel-worker-group-NDG4WOOZ.js} +8 -8
- package/chunks/{channel-worker-manager-H55GKOQA.js → channel-worker-manager-ZCW6UW34.js} +8 -8
- package/chunks/{channel-worker-supervisor-CABBXYHK.js → channel-worker-supervisor-ATGFTZRN.js} +4 -4
- package/chunks/{chunk-W3UKBMSI.js → chunk-22YFMJBW.js} +84 -8
- package/chunks/{chunk-6MPDY6ZG.js → chunk-24ER7UV4.js} +1 -1
- package/chunks/{chunk-QDK4F2N5.js → chunk-2DNKEBXY.js} +1 -1
- package/chunks/{chunk-D6MDRSZ6.js → chunk-2LZCLQIS.js} +22 -11
- package/chunks/{chunk-JYBU6YUE.js → chunk-2M5N3DHY.js} +1 -1
- package/chunks/{chunk-KR32NIAN.js → chunk-2MI7ZTRT.js} +10 -10
- package/chunks/{chunk-LHKCY7DY.js → chunk-2UISUFHQ.js} +3 -3
- package/chunks/{chunk-JXVC2PL3.js → chunk-33FNCQSY.js} +2 -2
- package/chunks/{chunk-NBD76HUW.js → chunk-3LGZEYOF.js} +2 -2
- package/chunks/{chunk-CO2U743O.js → chunk-3MWNROHB.js} +4 -4
- package/chunks/{chunk-E2BHWIDT.js → chunk-3RXUYQJI.js} +6 -2
- package/chunks/{chunk-E5Z2AVNV.js → chunk-3SH53ANB.js} +0 -11
- package/chunks/{chunk-LYI2PZDK.js → chunk-3XF4WT3B.js} +2 -2
- package/chunks/{chunk-N4ACHWNH.js → chunk-432XCUHF.js} +1 -1
- package/chunks/{chunk-FNDXMN7I.js → chunk-4AGGSHCH.js} +774 -205
- package/chunks/{chunk-DUNI4EBW.js → chunk-4K3RV3OA.js} +80 -50
- package/chunks/{chunk-L2E5GFAG.js → chunk-4LKVQFHM.js} +2 -2
- package/chunks/{chunk-YDLJGZHL.js → chunk-4NFY2S7N.js} +0 -33
- package/chunks/{chunk-JLZ3RBQG.js → chunk-5JPVOYWA.js} +144 -11
- package/chunks/{chunk-6TAASXWL.js → chunk-5VYFXHY2.js} +3 -3
- package/chunks/{chunk-EU5TBFJI.js → chunk-6NE5NTHJ.js} +2 -2
- package/chunks/{chunk-XQK4XXTN.js → chunk-6O5DVH27.js} +1 -1
- package/chunks/{chunk-2RFKHEXL.js → chunk-6PLDPT2C.js} +1 -1
- package/chunks/{chunk-3APUUXRF.js → chunk-A5YZ3FA2.js} +2 -1
- package/chunks/{chunk-SHN4KHDK.js → chunk-A6SX5TAH.js} +3 -3
- package/chunks/{chunk-SZ3KHTDR.js → chunk-AKA24BGO.js} +1 -1
- package/chunks/{chunk-Q3T5KA2V.js → chunk-BFHXDAR7.js} +1 -1
- package/chunks/{chunk-L55JWS76.js → chunk-BGXZBI5B.js} +1 -1
- package/chunks/{chunk-P5VC5USY.js → chunk-BKGA75MU.js} +1 -1
- package/chunks/{chunk-2KKCCLPT.js → chunk-BKXTHMOZ.js} +1 -1
- package/chunks/{chunk-V4XNUDPE.js → chunk-BSKUTHLO.js} +15 -7
- package/chunks/{chunk-MM7TH7ZM.js → chunk-CFDR3GNL.js} +18 -3
- package/chunks/{chunk-E2FN6SM7.js → chunk-CIUUYB23.js} +5 -5
- package/chunks/{chunk-A7Y5H4TX.js → chunk-D2GPKXCQ.js} +7 -7
- package/chunks/{chunk-JCJ7LKNA.js → chunk-DIEFUBV6.js} +1644 -1570
- package/chunks/{chunk-GL4JOZXU.js → chunk-DSGJLHM3.js} +4 -4
- package/chunks/{chunk-675H6PLP.js → chunk-DYA25Y7U.js} +1 -1
- package/chunks/{chunk-3I6DUGQD.js → chunk-E4WHKETF.js} +32 -4
- package/chunks/{chunk-CU47KXB5.js → chunk-EGYJRIDF.js} +6 -6
- package/chunks/{chunk-6CQWRWUC.js → chunk-EIMKVOSF.js} +3 -3
- package/chunks/{chunk-QTERJVPZ.js → chunk-EKTCKZV5.js} +1 -0
- package/chunks/{chunk-NHFEMWAZ.js → chunk-FF75UUB2.js} +1 -1
- package/chunks/{chunk-L32VV3ZJ.js → chunk-FG63DZQA.js} +12 -12
- package/chunks/{chunk-FCYYAB4S.js → chunk-FHPKHXHT.js} +3 -3
- package/chunks/{chunk-GJ2GBPBD.js → chunk-FXVHVCNA.js} +5 -5
- package/chunks/{chunk-56Z7QEAQ.js → chunk-GMSBXEH4.js} +16 -16
- package/chunks/chunk-GOFAQQZA.js +132 -0
- package/chunks/{chunk-YUFIEIWC.js → chunk-GTM6IHBB.js} +2 -2
- package/chunks/{chunk-HIVKI6O6.js → chunk-H35Q5CEG.js} +9 -7
- package/chunks/{chunk-FJ5WUMUQ.js → chunk-H36SETQS.js} +1 -1
- package/chunks/{chunk-AUOULH6Q.js → chunk-H6FIBBXK.js} +1610 -2196
- package/chunks/{chunk-VEMNQMHA.js → chunk-H6ZYP74A.js} +5 -13
- package/chunks/{chunk-TTJZAIFP.js → chunk-HEBW74ZW.js} +3 -3
- package/chunks/{chunk-6FMJLI5M.js → chunk-HFVW54NL.js} +41 -6
- package/chunks/{chunk-44F4LBWZ.js → chunk-HIXVWF7I.js} +56 -18
- package/chunks/{chunk-EQNUDTL6.js → chunk-HUIQ4FYC.js} +2 -2
- package/chunks/{chunk-5NNHICSA.js → chunk-I7JDGNG6.js} +3 -3
- package/chunks/{chunk-PVNQRENX.js → chunk-IF6K42YJ.js} +1 -1
- package/chunks/{chunk-PJOHNFIY.js → chunk-IWGTGH4G.js} +5 -5
- package/chunks/{chunk-B4AJNNOL.js → chunk-J26HHFI5.js} +1 -1
- package/chunks/{chunk-CNTR4GR6.js → chunk-JELIWHXD.js} +1 -1
- package/chunks/{chunk-V25K5ID7.js → chunk-K2J5JZ6B.js} +1 -1
- package/chunks/{chunk-IGTHU3T4.js → chunk-KKN2IE7Q.js} +1 -1
- package/chunks/{chunk-TZTAV5RH.js → chunk-KVUBYJDM.js} +2 -2
- package/chunks/{chunk-3F2WDAV6.js → chunk-KXWERR6P.js} +14 -14
- package/chunks/{chunk-JJPKFJBT.js → chunk-L7FTDKCD.js} +3 -3
- package/chunks/chunk-LBOVL47Y.js +29 -0
- package/chunks/{chunk-FS674JW4.js → chunk-LBWNSLJK.js} +3 -3
- package/chunks/{chunk-I5BT7ADR.js → chunk-LGT3YMLN.js} +4 -4
- package/chunks/{chunk-UV6KF7T3.js → chunk-LZV2BZPL.js} +3 -3
- package/chunks/{chunk-P755N4CS.js → chunk-M5LIY7Y6.js} +6 -6
- package/chunks/{chunk-YGE3IXJP.js → chunk-M744OFVE.js} +1 -1
- package/chunks/{chunk-NTDH4IML.js → chunk-MCXMWLFT.js} +7 -7
- package/chunks/chunk-MISUEWB4.js +8749 -0
- package/chunks/{chunk-TEGJSJDF.js → chunk-MOHAWIAW.js} +2 -2
- package/chunks/{chunk-KXDONCPU.js → chunk-MTR4JWQJ.js} +4 -4
- package/chunks/{chunk-RSVPYAGK.js → chunk-MUEJ4R3E.js} +5 -5
- package/chunks/{chunk-PCK4B6LR.js → chunk-N42C2FU3.js} +1 -1
- package/chunks/{chunk-WWCMSZII.js → chunk-NW57GHNL.js} +71 -7
- package/chunks/{chunk-PQNHRFJC.js → chunk-NYX53SV4.js} +0 -2
- package/chunks/{chunk-QARJNL2V.js → chunk-O2ZYHG33.js} +5 -4
- package/chunks/{chunk-V7RNNPGC.js → chunk-P5Y23G2L.js} +18 -1
- package/chunks/{chunk-GURGAJTX.js → chunk-PDDYAXL2.js} +4 -1
- package/chunks/chunk-PWCQRLM5.js +1170 -0
- package/chunks/{chunk-VMX5RZQH.js → chunk-Q3G5L5KF.js} +18 -9
- package/chunks/{chunk-DQ2O5QOJ.js → chunk-QDWLUXKP.js} +1 -1
- package/chunks/chunk-QL4TN4HS.js +59 -0
- package/chunks/{chunk-E6CJ2SMM.js → chunk-QMBEW7EW.js} +2 -2
- package/chunks/{chunk-U4VTUMMK.js → chunk-QONSRAEV.js} +1 -1
- package/chunks/{chunk-DEEABGH2.js → chunk-QPSYIV2O.js} +3320 -536
- package/chunks/{chunk-Q5WZTTWE.js → chunk-QWDVZH24.js} +6 -8
- package/chunks/{chunk-2LEOZTBT.js → chunk-QWW6I2UO.js} +111 -26
- package/chunks/{chunk-LOY7RWQG.js → chunk-QYPT3QUD.js} +3 -3
- package/chunks/{chunk-6PQPKTXP.js → chunk-R7XNRHYD.js} +1 -1
- package/chunks/{chunk-7SJN2IWT.js → chunk-RCXCGZG6.js} +5 -5
- package/chunks/{chunk-HX6RLYUO.js → chunk-RL6J3BPE.js} +4 -4
- package/chunks/{chunk-Z3S5EMOW.js → chunk-RPYYTL7E.js} +60 -12
- package/chunks/{chunk-MB32MS4U.js → chunk-RR224BUP.js} +215 -174
- package/chunks/{chunk-H6I4PGRV.js → chunk-SKSF3LGQ.js} +4 -4
- package/chunks/{chunk-77V3VIKL.js → chunk-SQ3YD5MI.js} +9 -9
- package/chunks/{chunk-CBBP4BMC.js → chunk-SRY26X4H.js} +72 -206
- package/chunks/{chunk-RDJOB6S3.js → chunk-TXABHVZD.js} +1 -1
- package/chunks/{chunk-R2XWGR75.js → chunk-TYERNYH4.js} +2 -2
- package/chunks/chunk-TZTBZ25J.js +222 -0
- package/chunks/{chunk-45IOTAUS.js → chunk-U25CMJYY.js} +1 -1
- package/chunks/{chunk-7ULQIS27.js → chunk-UEJESCS7.js} +1 -1
- package/chunks/{chunk-HC45LTEN.js → chunk-UH7Z7Y45.js} +1 -1
- package/chunks/{chunk-CPZAH673.js → chunk-UKZEXS6K.js} +2 -0
- package/chunks/{chunk-54YCNSK5.js → chunk-UQDFEU47.js} +4113 -10152
- package/chunks/{chunk-XP4L6KS3.js → chunk-URN76TKR.js} +2 -2
- package/chunks/{chunk-XUGZYLDH.js → chunk-UWSXFI6E.js} +1 -1
- package/chunks/{chunk-AOHY3QJ3.js → chunk-VA5NLVPT.js} +3 -3
- package/chunks/{chunk-PZEXDV3H.js → chunk-VUNRNRN6.js} +71 -43
- package/chunks/{chunk-FANRZEAJ.js → chunk-VWOVHOTT.js} +1 -1
- package/chunks/{chunk-QTHQ6Z5X.js → chunk-WK4TJUEA.js} +1 -1
- package/chunks/{chunk-ZPZ7ZJEE.js → chunk-WUC6ZFXO.js} +1 -1
- package/chunks/{chunk-7KAXXBER.js → chunk-WY2ENRDN.js} +3 -3
- package/chunks/{chunk-TIRRPCFS.js → chunk-X6QNZOTC.js} +1 -1
- package/chunks/{chunk-KWHKHSIS.js → chunk-X6WUYMOV.js} +8 -8
- package/chunks/{chunk-IIUGIWWY.js → chunk-XC2VAFVZ.js} +1 -1
- package/chunks/{chunk-D4HTUMGX.js → chunk-XC656O42.js} +3 -3
- package/chunks/{chunk-RG64CDT2.js → chunk-XMJO6C44.js} +131 -48
- package/chunks/{chunk-ZMOJ7ISP.js → chunk-XUMAD5IT.js} +1 -1
- package/chunks/{chunk-THVU3RNH.js → chunk-YAVY33G4.js} +1 -1
- package/chunks/{chunk-YANIWTRZ.js → chunk-YPUHMQXV.js} +1 -1
- package/chunks/{chunk-QCXGC7QB.js → chunk-YU6TBRTA.js} +3 -3
- package/chunks/{chunk-OFZKFPYG.js → chunk-YWMDTMAU.js} +3 -3
- package/chunks/{chunk-DSFHVTWD.js → chunk-YXEVDA66.js} +2 -2
- package/chunks/{chunk-JE2CEOBO.js → chunk-ZGSUFIL5.js} +4 -4
- package/chunks/{chunk-BBIQAX4V.js → chunk-ZJES4C3I.js} +30 -18
- package/chunks/{computer-use-5QWCFNKD.js → computer-use-UJMK6JQU.js} +36 -34
- package/chunks/{config-utils-WADIDWGG.js → config-utils-7COTJMWK.js} +4 -4
- package/chunks/{contextCommand-4Z7T7TUM.js → contextCommand-4YABGF4S.js} +40 -38
- package/chunks/{core-runtime-6N4EFC2Q.js → core-runtime-7M4VM3DA.js} +36 -34
- package/chunks/{create-sub-session-AEREHZBQ.js → create-sub-session-HOFDW4N7.js} +39 -37
- package/chunks/{create-sub-session-62YZWVAY.js → create-sub-session-J32WC64U.js} +2 -2
- package/chunks/{cron-create-6E7GIQTG.js → cron-create-HMFSHIAR.js} +4 -4
- package/chunks/{cron-delete-JD26XY3W.js → cron-delete-ZJFHOX57.js} +4 -4
- package/chunks/{cron-list-CUWFB44G.js → cron-list-ZEX2NBMN.js} +4 -4
- package/chunks/{daemon-PCNCI5YU.js → daemon-CCIX4BMG.js} +47 -6
- package/chunks/{daemon-status-provider-DDF7C5M7.js → daemon-status-provider-W2U5Q3J5.js} +47 -45
- package/chunks/{daemon-trust-policy-Q4KSOJTR.js → daemon-trust-policy-IFICWPXP.js} +42 -40
- package/chunks/{daemon-trust-policy-monitor-V6FTE3IY.js → daemon-trust-policy-monitor-GX7EO6FW.js} +42 -40
- package/chunks/{de-SY6O76BF.js → de-A6TI4LBB.js} +46 -5
- package/chunks/{deferred-core-runtime-GHJ5GQHK.js → deferred-core-runtime-U36OOOKE.js} +36 -34
- package/chunks/display-image-VS3TXYQH.js +184 -0
- package/chunks/{dist-ZHXOBXDN.js → dist-3BMEUGTG.js} +1 -1
- package/chunks/{dist-26BIMQT6.js → dist-4KAX7CCL.js} +289 -27
- package/chunks/{dist-OAOC5OV4.js → dist-7JGAAQSC.js} +2 -2
- package/chunks/{dist-SL2LUMML.js → dist-A7H2KKUC.js} +1 -1
- package/chunks/{dist-2PERFI23.js → dist-DPPHJAVL.js} +3 -3
- package/chunks/{dist-PVEAFLHY.js → dist-HVBMEYWK.js} +1 -1
- package/chunks/{dist-ULIG4M5H.js → dist-NEBRI7WO.js} +67 -15
- package/chunks/{dist-WGMNT3JQ.js → dist-SFQ34F4M.js} +24 -6
- package/chunks/{earlyInputCapture-TQXLLISD.js → earlyInputCapture-5ZWDH3SB.js} +37 -35
- package/chunks/{edit-FJEUV6KZ.js → edit-J7SW6UP6.js} +36 -34
- package/chunks/{en-NBK3JKCE.js → en-L4UQDLWW.js} +57 -6
- package/chunks/{enter-worktree-7GE3TZ4P.js → enter-worktree-NRLOHRB6.js} +36 -34
- package/chunks/{enterPlanMode-KR5TMPCJ.js → enterPlanMode-GDSTEFSM.js} +36 -34
- package/chunks/{environment-SWL3CMB3.js → environment-KHYEKG5W.js} +39 -37
- package/chunks/{errors-XQE7BGZV.js → errors-VNLAJV3O.js} +39 -37
- package/chunks/{exit-worktree-CHKTYNCV.js → exit-worktree-ARVID7DF.js} +36 -34
- package/chunks/{exitPlanMode-QYAG6LWX.js → exitPlanMode-4ZFY7KUH.js} +36 -34
- package/chunks/{fast-path-Z2K7W6DC.js → fast-path-KA65VREJ.js} +9 -5
- package/chunks/{fr-4KG5V7UT.js → fr-QF7RI5ZE.js} +46 -5
- package/chunks/{gemini-YU4XKEDG.js → gemini-5PMCNPF7.js} +149 -90
- package/chunks/{geminiContentGenerator-ZZX6NBO4.js → geminiContentGenerator-NFSYJ4HA.js} +6 -6
- package/chunks/{glob-VYF5CXSX.js → glob-F3EAUDAX.js} +36 -34
- package/chunks/{goal-tools-HGO6VXPB.js → goal-tools-SPQ5M6D3.js} +3 -3
- package/chunks/{grep-5DP5ZUTW.js → grep-UJMPVZER.js} +36 -34
- package/chunks/{handleAutoUpdate-UVBJ56DL.js → handleAutoUpdate-MG4FRZPN.js} +42 -40
- package/chunks/{i18n-UQNYHEUD.js → i18n-EVHV4ZF3.js} +38 -36
- package/chunks/{image-gen-WHPIZNWF.js → image-gen-UC7XVHI7.js} +9 -9
- package/chunks/{initializer-GMIICF4W.js → initializer-O5B6HUBI.js} +43 -41
- package/chunks/{installationInfo-4MGG4WVI.js → installationInfo-2LIKCNVX.js} +37 -35
- package/chunks/{ja-F3GSQXMF.js → ja-URQESVGW.js} +46 -5
- package/chunks/{keychain-token-storage-IKO4G53C.js → keychain-token-storage-7BT4TQ2A.js} +2 -2
- package/chunks/{kittyProtocolDetector-MBRTDRBK.js → kittyProtocolDetector-BFLAKYXH.js} +1 -1
- package/chunks/{list-CPN2W334.js → list-BPKIE3Z4.js} +45 -43
- package/chunks/{list-agents-PXJ7ZUFB.js → list-agents-TWEGRJWO.js} +2 -2
- package/chunks/{loadedSettingsAdapter-ZQAV5NDO.js → loadedSettingsAdapter-NGLFF4V4.js} +42 -40
- package/chunks/{loggingContentGenerator-5E7W4IEP.js → loggingContentGenerator-7TFESRG5.js} +52 -37
- package/chunks/{loop-wakeup-Y26NQZ5I.js → loop-wakeup-6LLEOQYV.js} +5 -5
- package/chunks/{ls-ONQTTMQR.js → ls-H5WX22VK.js} +4 -4
- package/chunks/{lsp-YGHHRGMD.js → lsp-G6FXYEIS.js} +2 -2
- package/chunks/{managed-npm-update-MKKAXYXA.js → managed-npm-update-CLZGGV7F.js} +39 -37
- package/chunks/{mcp-V5NTJF6X.js → mcp-X5OZOOXX.js} +42 -40
- package/chunks/{monitor-CO3ASY6E.js → monitor-TGSVSAZZ.js} +36 -34
- package/chunks/nonInteractiveCli-GUMJ5JLG.js +150 -0
- package/chunks/{notebook-edit-Z7AEE6FM.js → notebook-edit-EZISE7IC.js} +36 -34
- package/chunks/{openaiContentGenerator-CA3MQOP3.js → openaiContentGenerator-ZAKS5A6P.js} +18 -18
- package/chunks/{pidfile-NL7MKDRU.js → pidfile-PCMBX4LR.js} +37 -35
- package/chunks/{processUtils-PB5K2DYH.js → processUtils-2CSVE5BW.js} +2 -2
- package/chunks/{pt-EQ33KWEN.js → pt-EEEQXRUI.js} +46 -5
- package/chunks/{qwenContentGenerator-JYFNDCOS.js → qwenContentGenerator-S3H6PIC4.js} +42 -40
- package/chunks/{qwenOAuth2-W2ALKQDD.js → qwenOAuth2-MNU425VE.js} +8 -8
- package/chunks/{read-file-IEOR5H5W.js → read-file-HXJXHBI6.js} +10 -10
- package/chunks/{read-mcp-resource-U2IJN5HM.js → read-mcp-resource-DRZSI3HE.js} +2 -2
- package/chunks/{record-artifact-MGPJ7EG4.js → record-artifact-IPIRWMFY.js} +3 -3
- package/chunks/{resumeHistoryUtils-BNBTP5AS.js → resumeHistoryUtils-4QAMC2S6.js} +44 -42
- package/chunks/{ripGrep-UMQODKEB.js → ripGrep-MCETPF2E.js} +36 -34
- package/chunks/{ru-7OZAUKGG.js → ru-WGZDYQAB.js} +46 -5
- package/chunks/{run-qwen-serve-RN2R6QQW.js → run-qwen-serve-3NMODTXV.js} +219 -55
- package/chunks/{runtime-QFJ2MJF5.js → runtime-AQOV7DVP.js} +49 -45
- package/chunks/{scheduler-AMYUFOZI.js → scheduler-DN7SZ6ZE.js} +36 -34
- package/chunks/{sdk-exporters-http-4BQANSJ6.js → sdk-exporters-http-IKNWQJNV.js} +2 -2
- package/chunks/{sdk-impl-Z4VXWVFX.js → sdk-impl-7CUUMQDB.js} +2 -2
- package/chunks/{send-message-PMP4ATVM.js → send-message-HGCVVDTZ.js} +5 -4
- package/chunks/{serve-EIIYJVX3.js → serve-WZB45HVT.js} +42 -40
- package/chunks/{server-EP2LLAPD.js → server-GOTZFEEZ.js} +616 -387
- package/chunks/{session-GMPZBLOW.js → session-23LOFLWN.js} +149 -87
- package/chunks/{settings-LN7RNKBS.js → settings-LI2ORVXC.js} +41 -39
- package/chunks/{shell-EM2OWU5X.js → shell-GLC6OP3C.js} +36 -34
- package/chunks/{skill-T5VPSK73.js → skill-C7W6M4GO.js} +27 -14
- package/chunks/{skill-settings-GMR3GMNY.js → skill-settings-W25NCK5I.js} +41 -39
- package/chunks/{spawnChannel-YPCU62DI.js → spawnChannel-OHJLEBLD.js} +38 -36
- package/chunks/{standalone-update-JAKIM2NF.js → standalone-update-E4V5V7WT.js} +39 -37
- package/chunks/{startInteractiveUI-YETQWGYF.js → startInteractiveUI-FKILLW7Q.js} +1815 -1034
- package/chunks/{syntheticOutput-D7E6ZFKR.js → syntheticOutput-EYL7DWO7.js} +3 -3
- package/chunks/{task-create-NFCYD43L.js → task-create-CSCEG4SM.js} +10 -9
- package/chunks/{task-list-TAVMGEVD.js → task-list-6CVQPORX.js} +6 -6
- package/chunks/{task-stop-ZDF2UJRM.js → task-stop-Y5ZTFVRX.js} +2 -2
- package/chunks/{task-update-6L7LHGEX.js → task-update-C52LNFU5.js} +10 -9
- package/chunks/{team-create-LFJ6HGNY.js → team-create-HBIJ7NHT.js} +36 -34
- package/chunks/{team-delete-DPGGRQBU.js → team-delete-CE7DC53R.js} +6 -6
- package/chunks/{team-plan-approval-C2KLSDGO.js → team-plan-approval-IBJOKS4J.js} +36 -34
- package/chunks/terminal-image-renderer-BOQJPVLB.js +89 -0
- package/chunks/{theme-manager-JQ3ZGBP5.js → theme-manager-NSS7VLUD.js} +37 -35
- package/chunks/{todoWrite-2UO5G6G6.js → todoWrite-YKAA57W2.js} +107 -36
- package/chunks/{tool-search-FAZBFRJZ.js → tool-search-DEAS54VG.js} +13 -12
- package/chunks/{total-session-admission-5CALIVYO.js → total-session-admission-4LWTX3WD.js} +43 -41
- package/chunks/{trustedFolders-KOPSP44S.js → trustedFolders-NF3J2TA7.js} +38 -36
- package/chunks/{update-relaunch-6QL2TICS.js → update-relaunch-WUHRH5V3.js} +5 -5
- package/chunks/{updateCheck-4Q6RIKFW.js → updateCheck-7EG4BLBH.js} +41 -39
- package/chunks/{useAutoAcceptIndicator-Q5BMKZV3.js → useAutoAcceptIndicator-ZRV56GVP.js} +46 -44
- package/chunks/{validateNonInterActiveAuth-GKOC5F6Z.js → validateNonInterActiveAuth-WC2FPE3I.js} +86 -84
- package/chunks/{version-VSATY2LD.js → version-6SS7KCUP.js} +1 -1
- package/chunks/{web-fetch-JCLKL6NL.js → web-fetch-Y5QQMPKA.js} +13 -13
- package/chunks/{web-search-DSQTFUBX.js → web-search-QKKEU723.js} +8 -8
- package/chunks/{workflow-M6QAVKVJ.js → workflow-PWIU6Q2M.js} +418 -304
- package/chunks/{workspace-providers-status-YKLTLMJA.js → workspace-providers-status-B2DM6FNK.js} +45 -43
- package/chunks/{workspace-registration-store-5DMGKU64.js → workspace-registration-store-7Y33TTHJ.js} +2 -2
- package/chunks/{workspace-registry-PTYUSYXX.js → workspace-registry-TSNJKLPC.js} +43 -41
- package/chunks/{workspace-service-25ML3T47.js → workspace-service-4I2QHDX4.js} +50 -48
- package/chunks/{workspace-skills-status-YKZWOYRX.js → workspace-skills-status-HVXNWVGR.js} +44 -42
- package/chunks/{workspace-trust-reconciler-5FI2S3OS.js → workspace-trust-reconciler-RDBBGMWP.js} +49 -47
- package/chunks/{write-file-AY7VLP5X.js → write-file-RQ4DG5RY.js} +36 -34
- package/chunks/{zh-H3YDK5QW.js → zh-72XPUG5P.js} +54 -6
- package/chunks/{zh-TW-JYCP7XUA.js → zh-TW-LTB4SRH3.js} +54 -6
- package/chunks/{zoom-image-S4LJZMD5.js → zoom-image-O5YCB7WN.js} +10 -10
- package/cli.js +32 -48
- package/locales/ca.js +60 -4
- package/locales/de.js +62 -4
- package/locales/en.js +76 -6
- package/locales/fr.js +64 -4
- package/locales/ja.js +61 -4
- package/locales/pt.js +60 -4
- package/locales/ru.js +63 -4
- package/locales/zh-TW.js +67 -6
- package/locales/zh.js +67 -6
- package/package.json +3 -3
- package/web-shell/assets/{arc-xjArKHU2.js → arc-Bd7d781i.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-BgrQDNYG.js → architectureDiagram-3BPJPVTR-CpnOJqNE.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-CXxWC-1_.js → blockDiagram-GPEHLZMM-NxVTiWnk.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-Dx1tLm3v.js → c4Diagram-AAUBKEIU-BWT75l82.js} +1 -1
- package/web-shell/assets/channel-A434sWK5.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-CBxjogVR.js → chunk-2J33WTMH-Dzz03hk6.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-izb-rY5W.js → chunk-4BX2VUAB-DRF-egfm.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-NzLyvSb8.js → chunk-55IACEB6-Co15vq5x.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-DVyKb0dl.js → chunk-727SXJPM-DHSUk1J7.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-BtqL7NzB.js → chunk-AQP2D5EJ-Br8u_E2R.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-iNpdKIO0.js → chunk-FMBD7UC4-DXbPTnqF.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-DI7cbFmX.js → chunk-ND2GUHAM-BleQdi4d.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-3Y_-xFYs.js → chunk-QZHKN3VN-CqgBf-95.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CwPuhldB.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CwPuhldB.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A--raRatZn.js → cose-bilkent-S5V4N54A-WS7b13Yg.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-B8SU70mO.js → dagre-BM42HDAG-v_55ki8o.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-ewgoakXo.js → diagram-2AECGRRQ-DaYAjbdK.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-Bm_JLTnS.js → diagram-5GNKFQAL-D_Hy-L64.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-DEIUjUy9.js → diagram-KO2AKTUF-dB06cZyD.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-C2Wmrpj-.js → diagram-LMA3HP47-DzSluD4F.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-CtYe6bFx.js → diagram-OG6HWLK6-Cvb6CeXQ.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-DfpHcWLV.js → erDiagram-TEJ5UH35-7eB2Hmov.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-CAiUhio5.js → flowDiagram-I6XJVG4X-B08iGCw_.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-CYc7ezr4.js → ganttDiagram-6RSMTGT7-BgsrCHq-.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-70lbkcRS.js → gitGraphDiagram-PVQCEYII-DQLurQ2i.js} +1 -1
- package/web-shell/assets/{index-Ww86nT9f.js → index-B_1Z0Mgr.js} +1 -1
- package/web-shell/assets/index-Bi1dP2mU.css +5 -0
- package/web-shell/assets/index-DJ-z1Oba.js +1756 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-C7e8DWPa.js → infoDiagram-5YYISTIA-DXZGO8qB.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-BYLr2op-.js → ishikawaDiagram-YF4QCWOH-g7gbuH2w.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-hEibAHKX.js → journeyDiagram-JHISSGLW-euefICGn.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-F2rt8Uhp.js → kanban-definition-UN3LZRKU-Dws8-mjG.js} +1 -1
- package/web-shell/assets/{linear-DPhyNezd.js → linear-C63F0tyh.js} +1 -1
- package/web-shell/assets/{mermaid.core-ZUtnug0n.js → mermaid.core-fLrhp_4-.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-DDWcMoi8.js → mindmap-definition-RKZ34NQL-qRkydfT-.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-CTRKzw1_.js → pieDiagram-4H26LBE5-BZ0wQaKN.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CAEwYG_z.js → quadrantDiagram-W4KKPZXB-Fjq6GbSZ.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-CRjnH9D9.js → requirementDiagram-4Y6WPE33-CqWvjLHU.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-LPQT_sOd.js → sankeyDiagram-5OEKKPKP-VcXX6PVZ.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Ht2Iqvb0.js → sequenceDiagram-3UESZ5HK-BJSRtxFr.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-CIUdqOXu.js → stateDiagram-AJRCARHV-Dt9zUwmZ.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CCxQt56w.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-BcilneZF.js → timeline-definition-PNZ67QCA-DQwlNRws.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BljwiiH1.js → vennDiagram-CIIHVFJN-DwxjUEtQ.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-DeKjkYjq.js → wardley-L42UT6IY-D3QdMSpJ.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-L3U1H7KG.js → wardleyDiagram-YWT4CUSO-BddN8oK8.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-IJnWsgMT.js → xychartDiagram-2RQKCTM6-BUNuBrRJ.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-4KP2F2TE.js +0 -82
- package/chunks/chunk-HGT6JR3U.js +0 -177
- package/chunks/nonInteractiveCli-ZJYEOO7U.js +0 -148
- package/web-shell/assets/channel-B1cyk94G.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BpBYZoRE.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BpBYZoRE.js +0 -1
- package/web-shell/assets/index-C1k3PDuU.css +0 -5
- package/web-shell/assets/index-DZLIXILO.js +0 -1750
- package/web-shell/assets/insert-DmRbh9Rv.svg +0 -1
- 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-
|
|
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-
|
|
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-
|
|
31
|
+
} from "./chunk-3LGZEYOF.js";
|
|
32
|
+
import {
|
|
33
|
+
rollbackStandaloneUpdate
|
|
34
|
+
} from "./chunk-YWMDTMAU.js";
|
|
32
35
|
import {
|
|
33
36
|
themeManager
|
|
34
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-KKN2IE7Q.js";
|
|
35
38
|
import {
|
|
36
39
|
getErrorMessage as getErrorMessage2
|
|
37
|
-
} from "./chunk-
|
|
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-
|
|
54
|
+
} from "./chunk-VUNRNRN6.js";
|
|
55
55
|
import {
|
|
56
56
|
stripUnsafeCharacters,
|
|
57
57
|
toCodePoints
|
|
58
|
-
} from "./chunk-
|
|
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-
|
|
66
|
+
} from "./chunk-BKGA75MU.js";
|
|
67
67
|
import {
|
|
68
68
|
getExtendedSystemInfo,
|
|
69
69
|
getGitVersion,
|
|
70
70
|
getNpmVersion
|
|
71
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-QWDVZH24.js";
|
|
72
72
|
import {
|
|
73
73
|
formatDuration,
|
|
74
|
-
formatMemoryUsage,
|
|
75
74
|
formatTokenCount
|
|
76
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-3SH53ANB.js";
|
|
77
76
|
import {
|
|
78
77
|
isInlineModelOverrideAllowed,
|
|
79
78
|
parseAcpModelOption
|
|
80
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
99
|
+
} from "./chunk-KXWERR6P.js";
|
|
101
100
|
import {
|
|
102
101
|
getInstallationInfo
|
|
103
|
-
} from "./chunk-
|
|
102
|
+
} from "./chunk-FXVHVCNA.js";
|
|
104
103
|
import {
|
|
105
104
|
isFolderTrustEnabled,
|
|
106
105
|
loadTrustedFolders
|
|
107
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
230
|
+
} from "./chunk-4K3RV3OA.js";
|
|
222
231
|
import {
|
|
223
232
|
getAutoMemoryRoot
|
|
224
|
-
} from "./chunk-
|
|
233
|
+
} from "./chunk-E4WHKETF.js";
|
|
225
234
|
import {
|
|
226
235
|
ToolNames,
|
|
227
236
|
isShellProgressData
|
|
228
|
-
} from "./chunk-
|
|
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-
|
|
246
|
+
} from "./chunk-3RXUYQJI.js";
|
|
238
247
|
import {
|
|
239
248
|
isCpuProfileRecording,
|
|
240
249
|
startCpuProfile,
|
|
241
250
|
stopCpuProfile
|
|
242
|
-
} from "./chunk-
|
|
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
|
|
1580
|
-
addAndRecordArenaMessage("error" /* ERROR */, `${
|
|
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-
|
|
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
|
|
3057
|
+
let message3 = t("Set {{key}} = {{value}}", {
|
|
3046
3058
|
key,
|
|
3047
3059
|
value: String(newValue)
|
|
3048
3060
|
});
|
|
3049
3061
|
if (def.requiresRestart) {
|
|
3050
|
-
|
|
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:
|
|
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
|
|
3102
|
+
let message2 = t("Set {{key}} = {{value}}", {
|
|
3091
3103
|
key,
|
|
3092
3104
|
value: displayValue
|
|
3093
3105
|
});
|
|
3094
3106
|
if (def.requiresRestart) {
|
|
3095
|
-
|
|
3107
|
+
message2 += "\n" + t("(This setting requires a restart to take effect.)");
|
|
3096
3108
|
}
|
|
3097
3109
|
if (isSensitiveKey(key)) {
|
|
3098
|
-
|
|
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:
|
|
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
|
|
3769
|
-
context.services.config?.getDebugLogger().debug(
|
|
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. ${
|
|
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
|
|
4618
|
-
return
|
|
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
|
|
6053
|
-
return
|
|
6054
|
-
}
|
|
6055
|
-
__name(
|
|
6056
|
-
|
|
6057
|
-
|
|
6058
|
-
|
|
6059
|
-
|
|
6060
|
-
|
|
6061
|
-
|
|
6062
|
-
|
|
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
|
-
|
|
6368
|
+
title = "Goal achieved";
|
|
6369
|
+
break;
|
|
6066
6370
|
case "failed":
|
|
6067
|
-
|
|
6371
|
+
title = "Goal could not be achieved";
|
|
6372
|
+
break;
|
|
6068
6373
|
case "aborted":
|
|
6069
|
-
|
|
6374
|
+
title = "Goal aborted";
|
|
6375
|
+
break;
|
|
6070
6376
|
default:
|
|
6071
|
-
|
|
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(
|
|
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}${
|
|
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(
|
|
6089
|
-
function
|
|
6090
|
-
|
|
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(
|
|
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
|
|
6529
|
+
return t("Set or control a session goal");
|
|
6101
6530
|
},
|
|
6102
|
-
argumentHint: "[<
|
|
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
|
-
|
|
6107
|
-
|
|
6108
|
-
|
|
6109
|
-
|
|
6110
|
-
|
|
6111
|
-
|
|
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
|
|
6123
|
-
|
|
6124
|
-
|
|
6125
|
-
|
|
6126
|
-
|
|
6127
|
-
|
|
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
|
-
|
|
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
|
-
|
|
6166
|
-
|
|
6167
|
-
|
|
6168
|
-
|
|
6169
|
-
|
|
6170
|
-
|
|
6171
|
-
|
|
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
|
-
|
|
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-
|
|
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
|
|
6810
|
-
return ` - ${
|
|
7236
|
+
const displayName2 = isDuplicate ? `${basename3} (/${parentDir})` : basename3;
|
|
7237
|
+
return ` - ${displayName2}${file.isActive ? " (active)" : ""}`;
|
|
6811
7238
|
}).join("\n");
|
|
6812
|
-
const
|
|
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
|
-
${
|
|
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
|
|
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 = [
|
|
7471
|
+
ideSlashCommand.subCommands = [statusCommand2, disableCommand];
|
|
7045
7472
|
} else {
|
|
7046
7473
|
ideSlashCommand.subCommands = [
|
|
7047
7474
|
enableCommand,
|
|
7048
|
-
|
|
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 === "
|
|
8404
|
-
if (mode === "
|
|
8405
|
-
return !m.fastOnly && !m.
|
|
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
|
|
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((
|
|
10673
|
-
role:
|
|
10674
|
-
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
|
|
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:
|
|
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((
|
|
12839
|
-
pendingMessages.push(
|
|
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
|
|
12851
|
-
if (
|
|
12852
|
-
yield
|
|
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-
|
|
13223
|
-
import("./processUtils-
|
|
13224
|
-
import("./standalone-update-
|
|
13225
|
-
import("./installationInfo-
|
|
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
|
|
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
|
-
${
|
|
13858
|
+
${message2}`
|
|
13328
13859
|
};
|
|
13329
13860
|
} catch (err) {
|
|
13330
|
-
const
|
|
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
|
-
${
|
|
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
|
-
|
|
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(
|
|
13682
|
-
super(
|
|
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
|
|
13875
|
-
const uiMessage = `Failed to inject content for '@{${pathStr}}': ${
|
|
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:
|
|
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(
|
|
15158
|
-
if (!
|
|
15725
|
+
function extractPartsFromUserMessage(message2) {
|
|
15726
|
+
if (!message2) {
|
|
15159
15727
|
return null;
|
|
15160
15728
|
}
|
|
15161
|
-
const 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,
|