@qwen-code/qwen-code 0.18.5 → 0.19.0
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/qwen-ignore.md +31 -15
- package/bundled/qc-helper/docs/configuration/settings.md +15 -14
- package/bundled/qc-helper/docs/extension/introduction.md +24 -6
- package/bundled/qc-helper/docs/features/mcp.md +9 -6
- package/bundled/qc-helper/docs/qwen-serve.md +1 -1
- package/chunks/{agent-2TEY55UD.js → agent-IPSDEZNB.js} +24 -22
- package/chunks/{agent-headless-SCUAXEEE.js → agent-headless-ZMTUWMZJ.js} +24 -22
- package/chunks/{anthropicContentGenerator-5S4OMMNL.js → anthropicContentGenerator-6MCH4X6S.js} +12 -11
- package/chunks/artifact-tool-PBX64YTT.js +675 -0
- package/chunks/{askUserQuestion-WHVYL2S2.js → askUserQuestion-5ZQOWSRT.js} +20 -7
- package/chunks/chunk-22IFUCVR.js +291 -0
- package/chunks/{chunk-XGU3ETVO.js → chunk-255L5QYW.js} +3 -3
- package/chunks/{chunk-26ZYKTYZ.js → chunk-2BIF2NVV.js} +2 -2
- package/chunks/{chunk-LTN3VYMZ.js → chunk-3UALQ56H.js} +1 -1
- package/chunks/{chunk-2O3NAOJG.js → chunk-57XRIZVC.js} +1 -1
- package/chunks/{chunk-MSJ2MXJ6.js → chunk-BGUDAULQ.js} +11 -290
- package/chunks/{chunk-FH4P6RQA.js → chunk-BNXANYLH.js} +1 -1
- package/chunks/{chunk-WE6TNQJU.js → chunk-C4K3FEQ2.js} +36 -0
- package/chunks/{chunk-G4BUMVEY.js → chunk-CGEGHF2C.js} +2 -217
- package/chunks/{chunk-2CNO5W47.js → chunk-CICUTYTF.js} +174 -5026
- package/chunks/chunk-EEEZIVFJ.js +908 -0
- package/chunks/chunk-EJYJYJZ2.js +3703 -0
- package/chunks/{chunk-ATLUHLZE.js → chunk-EW6C27XX.js} +1 -1
- package/chunks/{chunk-SIJKWK35.js → chunk-GAAALA2X.js} +6 -6
- package/chunks/{chunk-C6MI2ASN.js → chunk-GZCJS5WH.js} +2 -2
- package/chunks/{chunk-KGV3F6UF.js → chunk-HGNSRCRB.js} +1 -1
- package/chunks/{chunk-42HGOMED.js → chunk-JDV3VBPY.js} +216 -1
- package/chunks/{chunk-CX3SGIPK.js → chunk-JRVB4QUY.js} +2 -2
- package/chunks/{chunk-F5E6IKYN.js → chunk-KFR4QTV3.js} +557 -22
- package/chunks/{chunk-ID533GA3.js → chunk-OTBK43JR.js} +1 -1
- package/chunks/{chunk-GOMVJKBL.js → chunk-PLY4F7QW.js} +5 -3
- package/chunks/{chunk-VKILGMZQ.js → chunk-PO5LVPK3.js} +1 -1
- package/chunks/{chunk-AE6RQU6F.js → chunk-PRYMDRBV.js} +1 -1
- package/chunks/{chunk-GBN55AWZ.js → chunk-QKUAGMGE.js} +2 -2
- package/chunks/{chunk-KQIKOTQJ.js → chunk-RYLJU2DY.js} +60 -5
- package/chunks/{chunk-KZGQ3G3Q.js → chunk-S7ILEIB4.js} +82 -84
- package/chunks/{chunk-CTHZVIMD.js → chunk-T2VDEFUU.js} +2 -2
- package/chunks/{chunk-LF6BKGZT.js → chunk-TXVGVZYR.js} +3 -3
- package/chunks/{chunk-C7JA3XCX.js → chunk-VRIVIYRL.js} +5 -5
- package/chunks/{chunk-XU7BKR3B.js → chunk-XU5P23GN.js} +3 -3
- package/chunks/{chunk-VECKCOH6.js → chunk-YF3ORUIU.js} +6362 -4888
- package/chunks/{computer-use-OB3C5QG2.js → computer-use-YYK42DD5.js} +24 -22
- package/chunks/contextCommand-BO45MUAA.js +56 -0
- package/chunks/{cron-create-THNDTYXU.js → cron-create-DXKAP5KN.js} +4 -4
- package/chunks/{cron-delete-BS5H6TFJ.js → cron-delete-WGO4PZTF.js} +4 -4
- package/chunks/{cron-list-7OBVHT7K.js → cron-list-EY7D3ZUC.js} +4 -4
- package/chunks/{dist-GKRNVFBH.js → dist-ZBX7LPJZ.js} +2 -1
- package/chunks/{edit-GNCLIF67.js → edit-QERNJN7K.js} +24 -22
- package/chunks/{en-S3OQBISC.js → en-UTXMGXIR.js} +47 -0
- package/chunks/{enter-worktree-E7BNZOGT.js → enter-worktree-6ZKH5IL3.js} +24 -22
- package/chunks/{enterPlanMode-IA42A5EU.js → enterPlanMode-B2PBF4MA.js} +27 -23
- package/chunks/{exit-worktree-QJ2K74UT.js → exit-worktree-EOCMQO4I.js} +24 -22
- package/chunks/{exitPlanMode-UKKHBUYJ.js → exitPlanMode-WSRXCBRZ.js} +36 -28
- package/chunks/{geminiContentGenerator-ICSDM37U.js → geminiContentGenerator-NTR4LTKS.js} +4 -4
- package/chunks/{glob-IGD7LWYX.js → glob-IWDJQI2V.js} +26 -23
- package/chunks/{grep-IZM3IVND.js → grep-2DV5BXMH.js} +24 -22
- package/chunks/{keychain-token-storage-YHXIWXIB.js → keychain-token-storage-CSYMNRPP.js} +2 -2
- package/chunks/{loop-wakeup-SSBWZ64K.js → loop-wakeup-XVSDE7QR.js} +5 -5
- package/chunks/{ls-YPFUHZRQ.js → ls-LPY3ATQQ.js} +6 -6
- package/chunks/{lsp-FD6DNVAF.js → lsp-ZT3AAXIF.js} +2 -2
- package/chunks/{monitor-ALJNE3R4.js → monitor-6HBDS2RS.js} +24 -22
- package/chunks/{notebook-edit-7XRZX55T.js → notebook-edit-J5AY5BRY.js} +25 -23
- package/chunks/{openaiContentGenerator-FWKITDFJ.js → openaiContentGenerator-ENABCJDM.js} +12 -15
- package/chunks/{qwenContentGenerator-5RPGQZ63.js → qwenContentGenerator-ISW42U7C.js} +26 -24
- package/chunks/{qwenOAuth2-WZ54YZ4J.js → qwenOAuth2-K4AASPCV.js} +5 -4
- package/chunks/{read-file-4WN2DT5N.js → read-file-NRX2FSSQ.js} +9 -8
- package/chunks/{ripGrep-4ZKT6KBQ.js → ripGrep-WF5CKHR5.js} +24 -22
- package/chunks/{scheduler-O2E65VDK.js → scheduler-PNPG5WJ3.js} +73 -27
- package/chunks/{send-message-FWFTX62Q.js → send-message-447W6NH6.js} +24 -4
- package/chunks/{serve-3DM6CRGD.js → serve-ZBRCIIHW.js} +430 -70
- package/chunks/{shell-ARVZK6RF.js → shell-DLIL6MLU.js} +24 -22
- package/chunks/{skill-BFUBGA4I.js → skill-32TXHY4A.js} +11 -10
- package/chunks/{src-5YMCDSII.js → src-PDDLF5BB.js} +114 -67
- package/chunks/{syntheticOutput-JY5NEDTV.js → syntheticOutput-GQRDRLGR.js} +3 -3
- package/chunks/{task-create-IGILDV25.js → task-create-66DDSTVI.js} +6 -6
- package/chunks/{task-list-KBEJVAAG.js → task-list-GOPXRSHG.js} +5 -5
- package/chunks/{task-stop-WFTMQ6AC.js → task-stop-M7NKGFX2.js} +2 -2
- package/chunks/{task-update-UIVX7ZEV.js → task-update-M5TBHLZV.js} +6 -6
- package/chunks/{team-create-HRBV5ATK.js → team-create-EHLDSJGI.js} +28 -26
- package/chunks/{team-delete-LPOXDPVB.js → team-delete-DKKDS65W.js} +5 -5
- package/chunks/{todoWrite-R4RIJKOD.js → todoWrite-4VX7X44D.js} +4 -4
- package/chunks/{tool-search-67HI54YA.js → tool-search-FU7IZAOO.js} +9 -8
- package/chunks/{web-fetch-JU7SS6KE.js → web-fetch-YPP3V4FJ.js} +4 -4
- package/chunks/{workflow-W4SCLWLU.js → workflow-WUDNBCGX.js} +544 -92
- package/chunks/{write-file-TLNXC2NR.js → write-file-NVFPX6CH.js} +24 -22
- package/chunks/{zh-TW-3OKU7LDA.js → zh-TW-J2TTW67R.js} +47 -0
- package/chunks/{zh-QXLZV2PX.js → zh-YOXVTJU5.js} +47 -0
- package/cli.js +8018 -4955
- package/locales/en.js +68 -0
- package/locales/zh-TW.js +65 -0
- package/locales/zh.js +65 -0
- package/package.json +3 -2
- package/web-shell/assets/{arc-CRFN10gD.js → arc-pxOt9B72.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-IRlu1CpH.js → architectureDiagram-3BPJPVTR-B9XuYYOT.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-htIZ6iw8.js → blockDiagram-GPEHLZMM-5yK68iu4.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-A2GoRq3O.js → c4Diagram-AAUBKEIU-B1LY-qNI.js} +1 -1
- package/web-shell/assets/channel-Cx7egbSX.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-CdP2AC6u.js → chunk-2J33WTMH-DkgXg7cM.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-DrA07nW2.js → chunk-4BX2VUAB-DdM45KFM.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-CFGnVU2f.js → chunk-55IACEB6-CmdsDjD4.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-BTMkq3Tk.js → chunk-727SXJPM-CQ4pJ5GH.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-C9sYg04Z.js → chunk-AQP2D5EJ-Dy6UWz37.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-Cag-cj6I.js → chunk-FMBD7UC4-CC8nFqap.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-CDSTFoR7.js → chunk-ND2GUHAM-CkmS7lx7.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-CN9Z6oOs.js → chunk-QZHKN3VN-DynyqleZ.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CwH_F8cH.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CwH_F8cH.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-DuN9j8Du.js → cose-bilkent-S5V4N54A-DA0fzCsY.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-ByCWe45f.js → dagre-BM42HDAG-DHYXRqCo.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-eWyU_pKZ.js → diagram-2AECGRRQ-DWD6BcPs.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-0Bfu3Fq5.js → diagram-5GNKFQAL-CX9wnqVc.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-B6KBKkQP.js → diagram-KO2AKTUF-BpE8Kbt8.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-TToDmeA_.js → diagram-LMA3HP47-DLPcrP0C.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-CQCkC2Yx.js → diagram-OG6HWLK6-CSUCBsCe.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-Cm9ls1iB.js → erDiagram-TEJ5UH35-d3Z0uMXS.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-Dyoz80Pv.js → flowDiagram-I6XJVG4X-C7vj5FX3.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-Cfut9yaU.js → ganttDiagram-6RSMTGT7-BV9UvDV_.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BCuJdlfD.js → gitGraphDiagram-PVQCEYII-CoWp0mW4.js} +1 -1
- package/web-shell/assets/index-CjTH6cLP.js +516 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-CXKxF2VL.js → infoDiagram-5YYISTIA-DUswfJHA.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-DE7HWSU8.js → ishikawaDiagram-YF4QCWOH-WidEKukx.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-D__YUfds.js → journeyDiagram-JHISSGLW-D7IRK3VN.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-D82R169M.js → kanban-definition-UN3LZRKU-CwFJ6Cja.js} +1 -1
- package/web-shell/assets/{linear-DpyMbKqT.js → linear-BQ8GvDRY.js} +1 -1
- package/web-shell/assets/{mermaid.core-D1KEFDhn.js → mermaid.core-CwF8A_xO.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-BwVUFGFE.js → mindmap-definition-RKZ34NQL-TR1s0iZi.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-BO_qoEGx.js → pieDiagram-4H26LBE5-Cd91pMl9.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-Cx0ZaWPo.js → quadrantDiagram-W4KKPZXB-BGxGDNMl.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-BJPXejOA.js → requirementDiagram-4Y6WPE33-Cq3fWmYz.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C1xeIL9i.js → sankeyDiagram-5OEKKPKP-ChLyGdq0.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CSYKQUjf.js → sequenceDiagram-3UESZ5HK-tazy79aB.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-d9hiHlAW.js → stateDiagram-AJRCARHV-dIYLUNSf.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-luL7KTiX.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-BhCBkq8k.js → timeline-definition-PNZ67QCA-BuENhrC2.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-DPPFWp_y.js → vennDiagram-CIIHVFJN-DLtum9dF.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-CcOUIgXY.js → wardley-L42UT6IY-Bf7OSF3y.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-p7oR5X7r.js → wardleyDiagram-YWT4CUSO-slMw3OB3.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-Dfr7-SEy.js → xychartDiagram-2RQKCTM6-CdxOm8oC.js} +1 -1
- package/web-shell/index.html +1 -1
- package/chunks/chunk-77WXWU44.js +0 -26
- package/chunks/contextCommand-3327KUC4.js +0 -54
- package/web-shell/assets/channel-WwImfsc7.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CJKQYFeJ.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CJKQYFeJ.js +0 -1
- package/web-shell/assets/index-DaebdpHq.js +0 -516
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DgReoybQ.js +0 -1
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
getLanguageSettingsOptions,
|
|
8
8
|
t,
|
|
9
9
|
writeStderrLine
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-VRIVIYRL.js";
|
|
11
11
|
import {
|
|
12
12
|
DEFAULT_STOP_HOOK_BLOCK_CAP,
|
|
13
13
|
DEFAULT_TOOL_OUTPUT_BATCH_BUDGET,
|
|
@@ -17,22 +17,28 @@ import {
|
|
|
17
17
|
IdeClient,
|
|
18
18
|
SkillError,
|
|
19
19
|
ideContextStore,
|
|
20
|
-
require_main
|
|
21
|
-
|
|
22
|
-
import {
|
|
23
|
-
isWithinRoot,
|
|
20
|
+
require_main,
|
|
21
|
+
resolveModelConfig,
|
|
24
22
|
stripRuntimeSnapshotPrefix
|
|
25
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-YF3ORUIU.js";
|
|
24
|
+
import {
|
|
25
|
+
DEFAULT_QWEN_CUSTOM_IGNORE_FILE_NAMES
|
|
26
|
+
} from "./chunk-EEEZIVFJ.js";
|
|
27
|
+
import {
|
|
28
|
+
AuthType,
|
|
29
|
+
MODEL_GENERATION_CONFIG_FIELDS,
|
|
30
|
+
isWithinRoot
|
|
31
|
+
} from "./chunk-CICUTYTF.js";
|
|
26
32
|
import {
|
|
27
33
|
atomicWriteFileSync
|
|
28
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-3UALQ56H.js";
|
|
29
35
|
import {
|
|
30
36
|
FatalConfigError,
|
|
31
37
|
QWEN_DIR,
|
|
32
38
|
Storage,
|
|
33
39
|
createDebugLogger,
|
|
34
40
|
getErrorMessage
|
|
35
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-C4K3FEQ2.js";
|
|
36
42
|
import {
|
|
37
43
|
init_esbuild_shims
|
|
38
44
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -13472,7 +13478,7 @@ var BoundedAsyncQueue = class {
|
|
|
13472
13478
|
}
|
|
13473
13479
|
};
|
|
13474
13480
|
|
|
13475
|
-
// packages/cli/src/serve/
|
|
13481
|
+
// packages/cli/src/serve/event-bus.ts
|
|
13476
13482
|
init_esbuild_shims();
|
|
13477
13483
|
|
|
13478
13484
|
// packages/acp-bridge/src/bridgeErrors.ts
|
|
@@ -13899,6 +13905,7 @@ var SERVE_CONTROL_EXT_METHODS = {
|
|
|
13899
13905
|
sessionClose: "qwen/control/session/close",
|
|
13900
13906
|
sessionApprovalMode: "qwen/control/session/approval_mode",
|
|
13901
13907
|
sessionBranch: "qwen/control/session/branch",
|
|
13908
|
+
sessionForkAgent: "qwen/control/session/fork_agent",
|
|
13902
13909
|
sessionRecap: "qwen/control/session/recap",
|
|
13903
13910
|
sessionBtw: "qwen/control/session/btw",
|
|
13904
13911
|
sessionShellHistory: "qwen/control/session/shell_history",
|
|
@@ -15651,7 +15658,7 @@ var SETTINGS_SCHEMA = {
|
|
|
15651
15658
|
category: "Model",
|
|
15652
15659
|
requiresRestart: false,
|
|
15653
15660
|
default: {},
|
|
15654
|
-
description: "Model providers configuration grouped by authType. Each authType
|
|
15661
|
+
description: "Model providers configuration grouped by authType. Each authType maps to a ProviderConfig object with protocol and models fields.",
|
|
15655
15662
|
showInDialog: false,
|
|
15656
15663
|
mergeStrategy: "replace" /* REPLACE */
|
|
15657
15664
|
},
|
|
@@ -15711,6 +15718,48 @@ var SETTINGS_SCHEMA = {
|
|
|
15711
15718
|
description: "Enable Vim keybindings",
|
|
15712
15719
|
showInDialog: true
|
|
15713
15720
|
},
|
|
15721
|
+
voice: {
|
|
15722
|
+
type: "object",
|
|
15723
|
+
label: "Voice Dictation",
|
|
15724
|
+
category: "General",
|
|
15725
|
+
requiresRestart: false,
|
|
15726
|
+
default: {},
|
|
15727
|
+
description: "Voice dictation settings.",
|
|
15728
|
+
showInDialog: false,
|
|
15729
|
+
properties: {
|
|
15730
|
+
enabled: {
|
|
15731
|
+
type: "boolean",
|
|
15732
|
+
label: "Voice Dictation",
|
|
15733
|
+
category: "General",
|
|
15734
|
+
requiresRestart: false,
|
|
15735
|
+
default: false,
|
|
15736
|
+
description: "Enable voice dictation in the prompt input.",
|
|
15737
|
+
showInDialog: false
|
|
15738
|
+
},
|
|
15739
|
+
mode: {
|
|
15740
|
+
type: "enum",
|
|
15741
|
+
label: "Voice Dictation Mode",
|
|
15742
|
+
category: "General",
|
|
15743
|
+
requiresRestart: false,
|
|
15744
|
+
default: "hold",
|
|
15745
|
+
description: 'How push-to-talk behaves: "hold" to talk while held, or "tap" to start and tap (or pause) to stop and submit.',
|
|
15746
|
+
showInDialog: false,
|
|
15747
|
+
options: [
|
|
15748
|
+
{ value: "hold", label: "Hold to talk" },
|
|
15749
|
+
{ value: "tap", label: "Tap to toggle" }
|
|
15750
|
+
]
|
|
15751
|
+
},
|
|
15752
|
+
language: {
|
|
15753
|
+
type: "string",
|
|
15754
|
+
label: "Voice Dictation Language",
|
|
15755
|
+
category: "General",
|
|
15756
|
+
requiresRestart: false,
|
|
15757
|
+
default: "",
|
|
15758
|
+
description: 'Preferred spoken language for voice transcription (e.g. "english", "chinese"). Leave empty to auto-detect.',
|
|
15759
|
+
showInDialog: false
|
|
15760
|
+
}
|
|
15761
|
+
}
|
|
15762
|
+
},
|
|
15714
15763
|
enableAutoUpdate: {
|
|
15715
15764
|
type: "boolean",
|
|
15716
15765
|
label: "Enable Auto Update",
|
|
@@ -15751,7 +15800,7 @@ var SETTINGS_SCHEMA = {
|
|
|
15751
15800
|
// surprised when a mid-session edit doesn't take effect immediately.
|
|
15752
15801
|
requiresRestart: true,
|
|
15753
15802
|
default: 30,
|
|
15754
|
-
description: "Number of days to retain ~/.qwen/file-history/ session backups used by /rewind
|
|
15803
|
+
description: "Number of days to retain ~/.qwen/file-history/ session backups used by /rewind and background subagent transcripts under <projectDir>/subagents/. Data older than this is removed by a background housekeeping pass that runs at most once per day. Set to 0 for minimum retention (~1 hour) \u2014 protects sessions touched in the last hour, plus the currently active session.",
|
|
15755
15804
|
showInDialog: true
|
|
15756
15805
|
},
|
|
15757
15806
|
gitCoAuthor: {
|
|
@@ -15897,6 +15946,15 @@ var SETTINGS_SCHEMA = {
|
|
|
15897
15946
|
{ value: "text", label: "Text" },
|
|
15898
15947
|
{ value: "json", label: "JSON" }
|
|
15899
15948
|
]
|
|
15949
|
+
},
|
|
15950
|
+
showTimestamps: {
|
|
15951
|
+
type: "boolean",
|
|
15952
|
+
label: "Show Timestamps",
|
|
15953
|
+
category: "General",
|
|
15954
|
+
requiresRestart: false,
|
|
15955
|
+
default: false,
|
|
15956
|
+
description: "Show [HH:MM:SS] timestamp before each assistant response.",
|
|
15957
|
+
showInDialog: true
|
|
15900
15958
|
}
|
|
15901
15959
|
}
|
|
15902
15960
|
},
|
|
@@ -15992,6 +16050,15 @@ var SETTINGS_SCHEMA = {
|
|
|
15992
16050
|
description: "Hide the window title bar",
|
|
15993
16051
|
showInDialog: false
|
|
15994
16052
|
},
|
|
16053
|
+
disableWorkflowKeywordTrigger: {
|
|
16054
|
+
type: "boolean",
|
|
16055
|
+
label: "Disable Workflow Keyword Trigger",
|
|
16056
|
+
category: "UI",
|
|
16057
|
+
requiresRestart: false,
|
|
16058
|
+
default: false,
|
|
16059
|
+
description: "When true, mentioning the word `workflow` in a prompt no longer softly steers the turn toward the Workflow tool (and the Footer `workflow active` indicator is suppressed). Only applies when workflows are enabled.",
|
|
16060
|
+
showInDialog: true
|
|
16061
|
+
},
|
|
15995
16062
|
showStatusInTitle: {
|
|
15996
16063
|
type: "boolean",
|
|
15997
16064
|
label: "Show Status in Title",
|
|
@@ -16404,6 +16471,15 @@ var SETTINGS_SCHEMA = {
|
|
|
16404
16471
|
description: "Model used for generating prompt suggestions and speculative execution. Leave empty to use the main model. A smaller/faster model (e.g., qwen3-coder-flash) reduces latency and cost.",
|
|
16405
16472
|
showInDialog: true
|
|
16406
16473
|
},
|
|
16474
|
+
voiceModel: {
|
|
16475
|
+
type: "string",
|
|
16476
|
+
label: "Voice Model",
|
|
16477
|
+
category: "Model",
|
|
16478
|
+
requiresRestart: false,
|
|
16479
|
+
default: "",
|
|
16480
|
+
description: "Model used for voice transcription. Set with /model --voice. Leave empty to keep voice dictation disabled until a voice model is selected.",
|
|
16481
|
+
showInDialog: false
|
|
16482
|
+
},
|
|
16407
16483
|
model: {
|
|
16408
16484
|
type: "object",
|
|
16409
16485
|
label: "Model",
|
|
@@ -16500,7 +16576,7 @@ var SETTINGS_SCHEMA = {
|
|
|
16500
16576
|
category: "Model",
|
|
16501
16577
|
requiresRestart: false,
|
|
16502
16578
|
default: true,
|
|
16503
|
-
description: "Skip streaming loop
|
|
16579
|
+
description: "Skip the opt-in streaming loop-detection heuristics (content/thought repetition, read-file and action stagnation, global-duplicate and alternating tool-call patterns). Defaults to true to avoid false-positive interruptions; set to false to re-enable them as an unattended-run guardrail. A minimal always-on guard (consecutive identical tool calls plus a per-turn tool-call cap) still runs regardless of this setting.",
|
|
16504
16580
|
showInDialog: false
|
|
16505
16581
|
},
|
|
16506
16582
|
skipStartupContext: {
|
|
@@ -16748,9 +16824,19 @@ var SETTINGS_SCHEMA = {
|
|
|
16748
16824
|
category: "Context",
|
|
16749
16825
|
requiresRestart: true,
|
|
16750
16826
|
default: true,
|
|
16751
|
-
description: "Respect .qwenignore files when searching",
|
|
16827
|
+
description: "Respect .qwenignore and configured custom ignore files when searching",
|
|
16752
16828
|
showInDialog: true
|
|
16753
16829
|
},
|
|
16830
|
+
customIgnoreFiles: {
|
|
16831
|
+
type: "array",
|
|
16832
|
+
label: "Custom Ignore Files",
|
|
16833
|
+
category: "Context",
|
|
16834
|
+
requiresRestart: true,
|
|
16835
|
+
default: [...DEFAULT_QWEN_CUSTOM_IGNORE_FILE_NAMES],
|
|
16836
|
+
description: "Project-root-relative ignore files to use instead of the defaults (`.agentignore`, `.aiignore`) when respectQwenIgnore is enabled. .qwenignore is always included when respectQwenIgnore is enabled.",
|
|
16837
|
+
showInDialog: false,
|
|
16838
|
+
items: { type: "string" }
|
|
16839
|
+
},
|
|
16754
16840
|
enableRecursiveFileSearch: {
|
|
16755
16841
|
type: "boolean",
|
|
16756
16842
|
label: "Enable Recursive File Search",
|
|
@@ -17305,7 +17391,7 @@ var SETTINGS_SCHEMA = {
|
|
|
17305
17391
|
default: void 0,
|
|
17306
17392
|
description: "Optional fixed quorum size for consensus policy. Capped at M (count of registered voters at request issue time) to prevent unreachable quorum. Unset = floor(M/2)+1. Requires daemon restart \u2014 read once at boot.",
|
|
17307
17393
|
showInDialog: false,
|
|
17308
|
-
//
|
|
17394
|
+
// run-qwen-serve.ts validates `Number.isInteger(n) && n >= 1` and
|
|
17309
17395
|
// refuses to boot otherwise. Override the generated schema so IDE
|
|
17310
17396
|
// (VSCode, JetBrains via JSON Schema) flags `0`, `-1`, `1.5`
|
|
17311
17397
|
// BEFORE the user restarts the daemon. The bare `type:'number'`
|
|
@@ -17822,6 +17908,15 @@ var SETTINGS_SCHEMA = {
|
|
|
17822
17908
|
description: "Enable agent team collaboration tools (experimental). When enabled, the model can create agent teams and coordinate work using team_create, team_delete, send_message, task_create, task_update, and task_list tools. Can also be enabled via QWEN_CODE_ENABLE_AGENT_TEAM=1 environment variable.",
|
|
17823
17909
|
showInDialog: true
|
|
17824
17910
|
},
|
|
17911
|
+
artifact: {
|
|
17912
|
+
type: "boolean",
|
|
17913
|
+
label: "Enable Artifacts",
|
|
17914
|
+
category: "Experimental",
|
|
17915
|
+
requiresRestart: true,
|
|
17916
|
+
default: false,
|
|
17917
|
+
description: "Enable the Artifact tool (experimental). When enabled, the model can publish a self-contained HTML page as an interactive Artifact and open it in the browser. Interactive, non-SDK sessions only. Can also be enabled via QWEN_CODE_ENABLE_ARTIFACT=1, or hard-disabled via QWEN_CODE_DISABLE_ARTIFACT=1.",
|
|
17918
|
+
showInDialog: true
|
|
17919
|
+
},
|
|
17825
17920
|
emitToolUseSummaries: {
|
|
17826
17921
|
type: "boolean",
|
|
17827
17922
|
label: "Tool Use Summaries",
|
|
@@ -17833,6 +17928,134 @@ var SETTINGS_SCHEMA = {
|
|
|
17833
17928
|
}
|
|
17834
17929
|
}
|
|
17835
17930
|
},
|
|
17931
|
+
artifact: {
|
|
17932
|
+
type: "object",
|
|
17933
|
+
label: "Artifacts",
|
|
17934
|
+
category: "Experimental",
|
|
17935
|
+
requiresRestart: true,
|
|
17936
|
+
default: {},
|
|
17937
|
+
description: "Configuration for the experimental Artifact tool (enable it via experimental.artifact). Selects the publish backend and, for the host backend, the upload command and shareable URL template.",
|
|
17938
|
+
showInDialog: false,
|
|
17939
|
+
properties: {
|
|
17940
|
+
autoOpen: {
|
|
17941
|
+
type: "boolean",
|
|
17942
|
+
label: "Auto-open Artifacts",
|
|
17943
|
+
category: "Experimental",
|
|
17944
|
+
requiresRestart: true,
|
|
17945
|
+
default: true,
|
|
17946
|
+
description: "Open published artifacts in the browser automatically. Set to false to publish without launching a browser. QWEN_ARTIFACT_NO_AUTO_OPEN=1 overrides this setting.",
|
|
17947
|
+
showInDialog: false
|
|
17948
|
+
},
|
|
17949
|
+
publisher: {
|
|
17950
|
+
type: "enum",
|
|
17951
|
+
label: "Artifact Publisher",
|
|
17952
|
+
category: "Experimental",
|
|
17953
|
+
requiresRestart: true,
|
|
17954
|
+
default: "local",
|
|
17955
|
+
description: "Where artifacts are published: 'local' (a file:// page on disk, the default), 'host' (upload via artifact.host.uploadCommand and return a shareable link), or 'oss' (native Aliyun OSS upload).",
|
|
17956
|
+
showInDialog: false,
|
|
17957
|
+
options: [
|
|
17958
|
+
{ value: "local", label: "Local (file://)" },
|
|
17959
|
+
{ value: "host", label: "Host (shareable link)" },
|
|
17960
|
+
{ value: "oss", label: "Aliyun OSS" }
|
|
17961
|
+
]
|
|
17962
|
+
},
|
|
17963
|
+
host: {
|
|
17964
|
+
type: "object",
|
|
17965
|
+
label: "Artifact Host",
|
|
17966
|
+
category: "Experimental",
|
|
17967
|
+
requiresRestart: true,
|
|
17968
|
+
default: {},
|
|
17969
|
+
description: 'Host-backend config, used when artifact.publisher is "host".',
|
|
17970
|
+
showInDialog: false,
|
|
17971
|
+
properties: {
|
|
17972
|
+
uploadCommand: {
|
|
17973
|
+
type: "string",
|
|
17974
|
+
label: "Upload Command",
|
|
17975
|
+
category: "Experimental",
|
|
17976
|
+
requiresRestart: true,
|
|
17977
|
+
default: "",
|
|
17978
|
+
description: 'Command that uploads the artifact, run with execFile (no shell). {file} = local HTML path, {key} = remote object key. e.g. "aws s3 cp {file} s3://bucket/{key} --content-type text/html".',
|
|
17979
|
+
showInDialog: false
|
|
17980
|
+
},
|
|
17981
|
+
urlTemplate: {
|
|
17982
|
+
type: "string",
|
|
17983
|
+
label: "URL Template",
|
|
17984
|
+
category: "Experimental",
|
|
17985
|
+
requiresRestart: true,
|
|
17986
|
+
default: "",
|
|
17987
|
+
description: 'Shareable URL template; {key} is substituted. e.g. "https://bucket.example.com/{key}".',
|
|
17988
|
+
showInDialog: false
|
|
17989
|
+
},
|
|
17990
|
+
keyPrefix: {
|
|
17991
|
+
type: "string",
|
|
17992
|
+
label: "Key Prefix",
|
|
17993
|
+
category: "Experimental",
|
|
17994
|
+
requiresRestart: true,
|
|
17995
|
+
default: "artifacts",
|
|
17996
|
+
description: 'Remote key prefix; the object key is "{prefix}/{id}/index.html".',
|
|
17997
|
+
showInDialog: false
|
|
17998
|
+
}
|
|
17999
|
+
}
|
|
18000
|
+
},
|
|
18001
|
+
oss: {
|
|
18002
|
+
type: "object",
|
|
18003
|
+
label: "Artifact OSS",
|
|
18004
|
+
category: "Experimental",
|
|
18005
|
+
requiresRestart: true,
|
|
18006
|
+
default: {},
|
|
18007
|
+
description: 'Native Aliyun OSS backend, used when artifact.publisher is "oss". Credentials are read from OSS_ACCESS_KEY_ID / OSS_ACCESS_KEY_SECRET (or ALIBABA_CLOUD_*), never from settings.',
|
|
18008
|
+
showInDialog: false,
|
|
18009
|
+
properties: {
|
|
18010
|
+
bucket: {
|
|
18011
|
+
type: "string",
|
|
18012
|
+
label: "OSS Bucket",
|
|
18013
|
+
category: "Experimental",
|
|
18014
|
+
requiresRestart: true,
|
|
18015
|
+
default: "",
|
|
18016
|
+
description: "OSS bucket name.",
|
|
18017
|
+
showInDialog: false
|
|
18018
|
+
},
|
|
18019
|
+
endpoint: {
|
|
18020
|
+
type: "string",
|
|
18021
|
+
label: "OSS Endpoint",
|
|
18022
|
+
category: "Experimental",
|
|
18023
|
+
requiresRestart: true,
|
|
18024
|
+
default: "",
|
|
18025
|
+
description: 'OSS endpoint host, e.g. "oss-cn-hangzhou.aliyuncs.com".',
|
|
18026
|
+
showInDialog: false
|
|
18027
|
+
},
|
|
18028
|
+
keyPrefix: {
|
|
18029
|
+
type: "string",
|
|
18030
|
+
label: "Key Prefix",
|
|
18031
|
+
category: "Experimental",
|
|
18032
|
+
requiresRestart: true,
|
|
18033
|
+
default: "artifacts",
|
|
18034
|
+
description: 'Remote key prefix; the object key is "{prefix}/{id}/index.html".',
|
|
18035
|
+
showInDialog: false
|
|
18036
|
+
},
|
|
18037
|
+
acl: {
|
|
18038
|
+
type: "string",
|
|
18039
|
+
label: "Object ACL",
|
|
18040
|
+
category: "Experimental",
|
|
18041
|
+
requiresRestart: true,
|
|
18042
|
+
default: "public-read",
|
|
18043
|
+
description: 'Object ACL applied on upload. "public-read" (default) makes the link shareable.',
|
|
18044
|
+
showInDialog: false
|
|
18045
|
+
},
|
|
18046
|
+
publicBaseUrl: {
|
|
18047
|
+
type: "string",
|
|
18048
|
+
label: "Public Base URL",
|
|
18049
|
+
category: "Experimental",
|
|
18050
|
+
requiresRestart: true,
|
|
18051
|
+
default: "",
|
|
18052
|
+
description: 'Optional CDN / custom-domain base for the returned URL. Upload still goes through endpoint. e.g. "https://cdn.example.com".',
|
|
18053
|
+
showInDialog: false
|
|
18054
|
+
}
|
|
18055
|
+
}
|
|
18056
|
+
}
|
|
18057
|
+
}
|
|
18058
|
+
},
|
|
17836
18059
|
worktree: {
|
|
17837
18060
|
type: "object",
|
|
17838
18061
|
label: "Worktree",
|
|
@@ -18876,11 +19099,74 @@ var V3ToV4Migration = class {
|
|
|
18876
19099
|
};
|
|
18877
19100
|
var v3ToV4Migration = new V3ToV4Migration();
|
|
18878
19101
|
|
|
19102
|
+
// packages/cli/src/config/migration/versions/v4-to-v5.ts
|
|
19103
|
+
init_esbuild_shims();
|
|
19104
|
+
var PROVIDER_KEY_TO_PROTOCOL = {
|
|
19105
|
+
openai: "openai",
|
|
19106
|
+
"qwen-oauth": "qwen-oauth",
|
|
19107
|
+
gemini: "gemini",
|
|
19108
|
+
"vertex-ai": "gemini",
|
|
19109
|
+
anthropic: "anthropic"
|
|
19110
|
+
};
|
|
19111
|
+
var V4ToV5Migration = class {
|
|
19112
|
+
static {
|
|
19113
|
+
__name(this, "V4ToV5Migration");
|
|
19114
|
+
}
|
|
19115
|
+
fromVersion = 4;
|
|
19116
|
+
toVersion = 5;
|
|
19117
|
+
shouldMigrate(settings) {
|
|
19118
|
+
if (typeof settings !== "object" || settings === null) {
|
|
19119
|
+
return false;
|
|
19120
|
+
}
|
|
19121
|
+
const s = settings;
|
|
19122
|
+
if (s["$version"] !== 4 && s["$version"] !== void 0) {
|
|
19123
|
+
return false;
|
|
19124
|
+
}
|
|
19125
|
+
if (s["$version"] === 4) {
|
|
19126
|
+
return true;
|
|
19127
|
+
}
|
|
19128
|
+
const modelProviders = s["modelProviders"];
|
|
19129
|
+
if (typeof modelProviders !== "object" || modelProviders === null) {
|
|
19130
|
+
return false;
|
|
19131
|
+
}
|
|
19132
|
+
return Object.values(modelProviders).some((v) => Array.isArray(v));
|
|
19133
|
+
}
|
|
19134
|
+
migrate(settings, _scope) {
|
|
19135
|
+
if (typeof settings !== "object" || settings === null) {
|
|
19136
|
+
throw new Error("Settings must be an object");
|
|
19137
|
+
}
|
|
19138
|
+
const result = structuredClone(settings);
|
|
19139
|
+
const warnings = [];
|
|
19140
|
+
const modelProviders = result["modelProviders"];
|
|
19141
|
+
if (typeof modelProviders === "object" && modelProviders !== null) {
|
|
19142
|
+
const providers = modelProviders;
|
|
19143
|
+
for (const [key, value] of Object.entries(providers)) {
|
|
19144
|
+
if (!Array.isArray(value)) {
|
|
19145
|
+
continue;
|
|
19146
|
+
}
|
|
19147
|
+
if (!Object.hasOwn(PROVIDER_KEY_TO_PROTOCOL, key)) {
|
|
19148
|
+
warnings.push(
|
|
19149
|
+
`Unknown provider key "${key}", defaulting protocol to "openai". If this provider uses a different protocol (anthropic, gemini), edit settings.json to set "protocol" explicitly.`
|
|
19150
|
+
);
|
|
19151
|
+
}
|
|
19152
|
+
providers[key] = {
|
|
19153
|
+
protocol: Object.hasOwn(PROVIDER_KEY_TO_PROTOCOL, key) ? PROVIDER_KEY_TO_PROTOCOL[key] : "openai",
|
|
19154
|
+
models: value
|
|
19155
|
+
};
|
|
19156
|
+
}
|
|
19157
|
+
}
|
|
19158
|
+
result["$version"] = 5;
|
|
19159
|
+
return { settings: result, warnings };
|
|
19160
|
+
}
|
|
19161
|
+
};
|
|
19162
|
+
var v4ToV5Migration = new V4ToV5Migration();
|
|
19163
|
+
|
|
18879
19164
|
// packages/cli/src/config/migration/index.ts
|
|
18880
19165
|
var ALL_MIGRATIONS = [
|
|
18881
19166
|
v1ToV2Migration,
|
|
18882
19167
|
v2ToV3Migration,
|
|
18883
|
-
v3ToV4Migration
|
|
19168
|
+
v3ToV4Migration,
|
|
19169
|
+
v4ToV5Migration
|
|
18884
19170
|
];
|
|
18885
19171
|
function runMigrations(settings, scope) {
|
|
18886
19172
|
const scheduler = new MigrationScheduler([...ALL_MIGRATIONS], scope);
|
|
@@ -18964,7 +19250,7 @@ var dotEnvSourcedKeys = /* @__PURE__ */ new Set();
|
|
|
18964
19250
|
var settingsEnvSourcedKeys = /* @__PURE__ */ new Set();
|
|
18965
19251
|
var lastReloadSnapshot = /* @__PURE__ */ new Map();
|
|
18966
19252
|
var lastReloadSnapshotSeeded = false;
|
|
18967
|
-
var SETTINGS_VERSION =
|
|
19253
|
+
var SETTINGS_VERSION = 5;
|
|
18968
19254
|
var SETTINGS_VERSION_KEY = "$version";
|
|
18969
19255
|
function getSystemSettingsPath() {
|
|
18970
19256
|
if (process2.env["QWEN_CODE_SYSTEM_SETTINGS_PATH"]) {
|
|
@@ -19045,9 +19331,16 @@ function hasAnyProviderEntries(modelProviders) {
|
|
|
19045
19331
|
if (!isPlainObject2(modelProviders)) {
|
|
19046
19332
|
return false;
|
|
19047
19333
|
}
|
|
19048
|
-
return Object.values(modelProviders).some(
|
|
19049
|
-
(
|
|
19050
|
-
|
|
19334
|
+
return Object.values(modelProviders).some((providerModels) => {
|
|
19335
|
+
if (Array.isArray(providerModels)) {
|
|
19336
|
+
return providerModels.length > 0;
|
|
19337
|
+
}
|
|
19338
|
+
if (isPlainObject2(providerModels)) {
|
|
19339
|
+
const models = providerModels["models"];
|
|
19340
|
+
return Array.isArray(models) && models.length > 0;
|
|
19341
|
+
}
|
|
19342
|
+
return false;
|
|
19343
|
+
});
|
|
19051
19344
|
}
|
|
19052
19345
|
__name(hasAnyProviderEntries, "hasAnyProviderEntries");
|
|
19053
19346
|
function getModelProvidersOverrideWarnings(loadedSettings) {
|
|
@@ -20077,7 +20370,7 @@ __name(getPackageJson, "getPackageJson");
|
|
|
20077
20370
|
// packages/cli/src/utils/version.ts
|
|
20078
20371
|
async function getCliVersion() {
|
|
20079
20372
|
const pkgJson = await getPackageJson();
|
|
20080
|
-
return "0.
|
|
20373
|
+
return "0.19.0";
|
|
20081
20374
|
}
|
|
20082
20375
|
__name(getCliVersion, "getCliVersion");
|
|
20083
20376
|
|
|
@@ -20222,6 +20515,242 @@ function createLoadedSettingsAdapter(settings, scope) {
|
|
|
20222
20515
|
}
|
|
20223
20516
|
__name(createLoadedSettingsAdapter, "createLoadedSettingsAdapter");
|
|
20224
20517
|
|
|
20518
|
+
// packages/cli/src/utils/acpModelUtils.ts
|
|
20519
|
+
init_esbuild_shims();
|
|
20520
|
+
function formatAcpModelId(modelId, authType) {
|
|
20521
|
+
return `${modelId}(${authType})`;
|
|
20522
|
+
}
|
|
20523
|
+
__name(formatAcpModelId, "formatAcpModelId");
|
|
20524
|
+
function sanitizeProviderBaseUrl(baseUrl) {
|
|
20525
|
+
const scheme = baseUrl.match(/^[A-Za-z][A-Za-z\d+.-]*:\/\//);
|
|
20526
|
+
if (!scheme) {
|
|
20527
|
+
return baseUrl;
|
|
20528
|
+
}
|
|
20529
|
+
const authorityStart = scheme[0].length;
|
|
20530
|
+
const stripAt = /* @__PURE__ */ __name((at) => `${baseUrl.slice(0, authorityStart)}${baseUrl.slice(at + 1)}`, "stripAt");
|
|
20531
|
+
const authorityEnd = findAuthorityEnd(baseUrl, authorityStart);
|
|
20532
|
+
const authorityAt = baseUrl.slice(authorityStart, authorityEnd).lastIndexOf("@");
|
|
20533
|
+
const authorityAtIndex = authorityAt === -1 ? -1 : authorityStart + authorityAt;
|
|
20534
|
+
try {
|
|
20535
|
+
const parsed = new URL(baseUrl);
|
|
20536
|
+
if (parsed.username || parsed.password) {
|
|
20537
|
+
return authorityAtIndex >= authorityStart ? stripAt(authorityAtIndex) : baseUrl;
|
|
20538
|
+
}
|
|
20539
|
+
return baseUrl;
|
|
20540
|
+
} catch {
|
|
20541
|
+
if (authorityAtIndex >= authorityStart) {
|
|
20542
|
+
return stripAt(authorityAtIndex);
|
|
20543
|
+
}
|
|
20544
|
+
const fallbackAt = findUnescapedUserInfoFallbackAt(
|
|
20545
|
+
baseUrl,
|
|
20546
|
+
authorityStart,
|
|
20547
|
+
authorityEnd
|
|
20548
|
+
);
|
|
20549
|
+
return fallbackAt === -1 ? baseUrl : stripAt(fallbackAt);
|
|
20550
|
+
}
|
|
20551
|
+
}
|
|
20552
|
+
__name(sanitizeProviderBaseUrl, "sanitizeProviderBaseUrl");
|
|
20553
|
+
function findUnescapedUserInfoFallbackAt(baseUrl, authorityStart, authorityEnd) {
|
|
20554
|
+
const at = baseUrl.lastIndexOf("@");
|
|
20555
|
+
if (at < authorityStart || authorityEnd >= at) {
|
|
20556
|
+
return -1;
|
|
20557
|
+
}
|
|
20558
|
+
const colon = baseUrl.indexOf(":", authorityStart);
|
|
20559
|
+
if (colon === -1 || colon > authorityEnd) {
|
|
20560
|
+
return -1;
|
|
20561
|
+
}
|
|
20562
|
+
const portCandidate = baseUrl.slice(colon + 1, authorityEnd);
|
|
20563
|
+
return /^\d+$/.test(portCandidate) ? -1 : at;
|
|
20564
|
+
}
|
|
20565
|
+
__name(findUnescapedUserInfoFallbackAt, "findUnescapedUserInfoFallbackAt");
|
|
20566
|
+
function findAuthorityEnd(baseUrl, authorityStart) {
|
|
20567
|
+
const slash = baseUrl.indexOf("/", authorityStart);
|
|
20568
|
+
const query = baseUrl.indexOf("?", authorityStart);
|
|
20569
|
+
const hash = baseUrl.indexOf("#", authorityStart);
|
|
20570
|
+
let end = baseUrl.length;
|
|
20571
|
+
if (slash !== -1) end = Math.min(end, slash);
|
|
20572
|
+
if (query !== -1) end = Math.min(end, query);
|
|
20573
|
+
if (hash !== -1) end = Math.min(end, hash);
|
|
20574
|
+
return end;
|
|
20575
|
+
}
|
|
20576
|
+
__name(findAuthorityEnd, "findAuthorityEnd");
|
|
20577
|
+
function parseAcpBaseModelId(value) {
|
|
20578
|
+
const trimmed = value.trim();
|
|
20579
|
+
const closeIdx = trimmed.lastIndexOf(")");
|
|
20580
|
+
const openIdx = trimmed.lastIndexOf("(");
|
|
20581
|
+
if (openIdx >= 0 && closeIdx === trimmed.length - 1 && openIdx < closeIdx) {
|
|
20582
|
+
return trimmed.slice(0, openIdx);
|
|
20583
|
+
}
|
|
20584
|
+
return trimmed;
|
|
20585
|
+
}
|
|
20586
|
+
__name(parseAcpBaseModelId, "parseAcpBaseModelId");
|
|
20587
|
+
function parseAcpModelOption(input) {
|
|
20588
|
+
const trimmed = input.trim();
|
|
20589
|
+
const closeIdx = trimmed.lastIndexOf(")");
|
|
20590
|
+
const openIdx = trimmed.lastIndexOf("(");
|
|
20591
|
+
if (openIdx >= 0 && closeIdx === trimmed.length - 1 && openIdx < closeIdx) {
|
|
20592
|
+
const maybeModelId = trimmed.slice(0, openIdx);
|
|
20593
|
+
const maybeAuthType = trimmed.slice(openIdx + 1, closeIdx);
|
|
20594
|
+
if (maybeAuthType) {
|
|
20595
|
+
return { modelId: maybeModelId, authType: maybeAuthType };
|
|
20596
|
+
}
|
|
20597
|
+
}
|
|
20598
|
+
return { modelId: trimmed };
|
|
20599
|
+
}
|
|
20600
|
+
__name(parseAcpModelOption, "parseAcpModelOption");
|
|
20601
|
+
|
|
20602
|
+
// packages/cli/src/utils/modelConfigUtils.ts
|
|
20603
|
+
init_esbuild_shims();
|
|
20604
|
+
var AUTH_ENV_MODEL_VARS = {
|
|
20605
|
+
[AuthType.USE_OPENAI]: ["OPENAI_MODEL", "QWEN_MODEL"],
|
|
20606
|
+
[AuthType.USE_GEMINI]: ["GEMINI_MODEL"],
|
|
20607
|
+
[AuthType.USE_VERTEX_AI]: ["GOOGLE_MODEL"],
|
|
20608
|
+
[AuthType.USE_ANTHROPIC]: ["ANTHROPIC_MODEL"],
|
|
20609
|
+
[AuthType.QWEN_OAUTH]: []
|
|
20610
|
+
};
|
|
20611
|
+
function getIgnoredTopLevelGenerationConfigFields(settingsGenerationConfig, modelProvider) {
|
|
20612
|
+
if (!settingsGenerationConfig || !modelProvider) {
|
|
20613
|
+
return [];
|
|
20614
|
+
}
|
|
20615
|
+
const providerGenerationConfig = modelProvider.generationConfig ?? {};
|
|
20616
|
+
return MODEL_GENERATION_CONFIG_FIELDS.filter(
|
|
20617
|
+
(field) => Object.hasOwn(settingsGenerationConfig, field) && !Object.hasOwn(providerGenerationConfig, field)
|
|
20618
|
+
);
|
|
20619
|
+
}
|
|
20620
|
+
__name(getIgnoredTopLevelGenerationConfigFields, "getIgnoredTopLevelGenerationConfigFields");
|
|
20621
|
+
function buildIgnoredTopLevelGenerationConfigWarning(authType, modelProvider, ignoredFields) {
|
|
20622
|
+
if (ignoredFields.length === 0) {
|
|
20623
|
+
return void 0;
|
|
20624
|
+
}
|
|
20625
|
+
const fieldList = ignoredFields.map((field) => `model.generationConfig.${field}`).join(", ");
|
|
20626
|
+
const isSingular = ignoredFields.length === 1;
|
|
20627
|
+
const verb = isSingular ? "is" : "are";
|
|
20628
|
+
const fieldReference = isSingular ? "this field" : "these fields";
|
|
20629
|
+
const pronoun = isSingular ? "it" : "them";
|
|
20630
|
+
return `Warning: ${fieldList} ${verb} ignored for provider model "${modelProvider.id}" from modelProviders.${authType}. Move ${fieldReference} to modelProviders.${authType}[].generationConfig for that model if you want ${pronoun} to apply.`;
|
|
20631
|
+
}
|
|
20632
|
+
__name(buildIgnoredTopLevelGenerationConfigWarning, "buildIgnoredTopLevelGenerationConfigWarning");
|
|
20633
|
+
function getAuthTypeFromEnv() {
|
|
20634
|
+
if (process.env["QWEN_OAUTH"]) {
|
|
20635
|
+
return AuthType.QWEN_OAUTH;
|
|
20636
|
+
}
|
|
20637
|
+
if (process.env["OPENAI_API_KEY"] && (process.env["OPENAI_MODEL"] || process.env["QWEN_MODEL"]) && process.env["OPENAI_BASE_URL"]) {
|
|
20638
|
+
return AuthType.USE_OPENAI;
|
|
20639
|
+
}
|
|
20640
|
+
if (process.env["GEMINI_API_KEY"] && process.env["GEMINI_MODEL"]) {
|
|
20641
|
+
return AuthType.USE_GEMINI;
|
|
20642
|
+
}
|
|
20643
|
+
if (process.env["GOOGLE_API_KEY"] && process.env["GOOGLE_MODEL"]) {
|
|
20644
|
+
return AuthType.USE_VERTEX_AI;
|
|
20645
|
+
}
|
|
20646
|
+
if (process.env["ANTHROPIC_API_KEY"] && process.env["ANTHROPIC_MODEL"] && process.env["ANTHROPIC_BASE_URL"]) {
|
|
20647
|
+
return AuthType.USE_ANTHROPIC;
|
|
20648
|
+
}
|
|
20649
|
+
return void 0;
|
|
20650
|
+
}
|
|
20651
|
+
__name(getAuthTypeFromEnv, "getAuthTypeFromEnv");
|
|
20652
|
+
function resolveCliGenerationConfig(inputs) {
|
|
20653
|
+
const { argv, settings, selectedAuthType } = inputs;
|
|
20654
|
+
const env = inputs.env ?? process.env;
|
|
20655
|
+
const authType = selectedAuthType;
|
|
20656
|
+
let resolvedModel;
|
|
20657
|
+
let sourceEnvVar;
|
|
20658
|
+
let resolvedFromSettings = false;
|
|
20659
|
+
if (argv.model) {
|
|
20660
|
+
resolvedModel = argv.model;
|
|
20661
|
+
} else if (settings.model?.name) {
|
|
20662
|
+
resolvedModel = stripRuntimeSnapshotPrefix(settings.model.name);
|
|
20663
|
+
resolvedFromSettings = true;
|
|
20664
|
+
} else if (authType && AUTH_ENV_MODEL_VARS[authType]) {
|
|
20665
|
+
for (const envVar of AUTH_ENV_MODEL_VARS[authType]) {
|
|
20666
|
+
if (env[envVar]) {
|
|
20667
|
+
resolvedModel = env[envVar];
|
|
20668
|
+
sourceEnvVar = envVar;
|
|
20669
|
+
break;
|
|
20670
|
+
}
|
|
20671
|
+
}
|
|
20672
|
+
}
|
|
20673
|
+
let modelProvider;
|
|
20674
|
+
let disambiguationWarning;
|
|
20675
|
+
if (resolvedModel && authType && settings.modelProviders) {
|
|
20676
|
+
const providerConfig = settings.modelProviders[authType];
|
|
20677
|
+
if (providerConfig && providerConfig.models) {
|
|
20678
|
+
const providers = providerConfig.models;
|
|
20679
|
+
const persistedBaseUrl = settings.model?.baseUrl;
|
|
20680
|
+
if (resolvedFromSettings && persistedBaseUrl) {
|
|
20681
|
+
const exactMatch = providers.find(
|
|
20682
|
+
(p) => p.id === resolvedModel && p.baseUrl === persistedBaseUrl
|
|
20683
|
+
);
|
|
20684
|
+
modelProvider = exactMatch ?? providers.find((p) => p.id === resolvedModel);
|
|
20685
|
+
if (!exactMatch && modelProvider) {
|
|
20686
|
+
const fallbackBaseUrl = modelProvider.baseUrl === void 0 ? "(default baseUrl)" : sanitizeProviderBaseUrl(modelProvider.baseUrl);
|
|
20687
|
+
disambiguationWarning = `Persisted model.baseUrl '${sanitizeProviderBaseUrl(persistedBaseUrl)}' no longer matches any provider for model '${resolvedModel}' (authType '${authType}'); using the first id match ('${fallbackBaseUrl}'). Re-select the model to update it.`;
|
|
20688
|
+
}
|
|
20689
|
+
} else {
|
|
20690
|
+
modelProvider = providers.find((p) => p.id === resolvedModel);
|
|
20691
|
+
}
|
|
20692
|
+
}
|
|
20693
|
+
}
|
|
20694
|
+
const allModelEnvVars = Object.values(AUTH_ENV_MODEL_VARS).flat();
|
|
20695
|
+
const filteredEnv = { ...env };
|
|
20696
|
+
if (sourceEnvVar) {
|
|
20697
|
+
for (const envVar of allModelEnvVars) {
|
|
20698
|
+
if (envVar !== sourceEnvVar) {
|
|
20699
|
+
delete filteredEnv[envVar];
|
|
20700
|
+
}
|
|
20701
|
+
}
|
|
20702
|
+
} else {
|
|
20703
|
+
for (const envVar of allModelEnvVars) {
|
|
20704
|
+
delete filteredEnv[envVar];
|
|
20705
|
+
}
|
|
20706
|
+
}
|
|
20707
|
+
const configSources = {
|
|
20708
|
+
authType,
|
|
20709
|
+
cli: {
|
|
20710
|
+
model: argv.model,
|
|
20711
|
+
apiKey: argv.openaiApiKey,
|
|
20712
|
+
baseUrl: argv.openaiBaseUrl
|
|
20713
|
+
},
|
|
20714
|
+
settings: {
|
|
20715
|
+
model: settings.model?.name ? stripRuntimeSnapshotPrefix(settings.model.name) : void 0,
|
|
20716
|
+
apiKey: settings.security?.auth?.apiKey,
|
|
20717
|
+
baseUrl: settings.security?.auth?.baseUrl,
|
|
20718
|
+
generationConfig: settings.model?.generationConfig
|
|
20719
|
+
},
|
|
20720
|
+
modelProvider,
|
|
20721
|
+
env: filteredEnv
|
|
20722
|
+
};
|
|
20723
|
+
const resolved = resolveModelConfig(configSources);
|
|
20724
|
+
const ignoredGenerationConfigWarning = authType && modelProvider ? buildIgnoredTopLevelGenerationConfigWarning(
|
|
20725
|
+
authType,
|
|
20726
|
+
modelProvider,
|
|
20727
|
+
getIgnoredTopLevelGenerationConfigFields(
|
|
20728
|
+
settings.model?.generationConfig,
|
|
20729
|
+
modelProvider
|
|
20730
|
+
)
|
|
20731
|
+
) : void 0;
|
|
20732
|
+
const enableOpenAILogging = (typeof argv.openaiLogging === "undefined" ? settings.model?.enableOpenAILogging : argv.openaiLogging) ?? false;
|
|
20733
|
+
const openAILoggingDir = argv.openaiLoggingDir || settings.model?.openAILoggingDir;
|
|
20734
|
+
const generationConfig = {
|
|
20735
|
+
...resolved.config,
|
|
20736
|
+
enableOpenAILogging,
|
|
20737
|
+
openAILoggingDir
|
|
20738
|
+
};
|
|
20739
|
+
return {
|
|
20740
|
+
model: resolved.config.model || "",
|
|
20741
|
+
apiKey: resolved.config.apiKey || "",
|
|
20742
|
+
baseUrl: resolved.config.baseUrl || "",
|
|
20743
|
+
generationConfig,
|
|
20744
|
+
sources: resolved.sources,
|
|
20745
|
+
warnings: [
|
|
20746
|
+
...resolved.warnings,
|
|
20747
|
+
...disambiguationWarning ? [disambiguationWarning] : [],
|
|
20748
|
+
...ignoredGenerationConfigWarning ? [ignoredGenerationConfigWarning] : []
|
|
20749
|
+
]
|
|
20750
|
+
};
|
|
20751
|
+
}
|
|
20752
|
+
__name(resolveCliGenerationConfig, "resolveCliGenerationConfig");
|
|
20753
|
+
|
|
20225
20754
|
// packages/acp-bridge/src/bridgeTypes.ts
|
|
20226
20755
|
init_esbuild_shims();
|
|
20227
20756
|
var MID_TURN_QUEUE_DRAIN_METHOD = "craft/drainMidTurnQueue";
|
|
@@ -20234,7 +20763,7 @@ import { execFile } from "node:child_process";
|
|
|
20234
20763
|
|
|
20235
20764
|
// packages/cli/src/generated/git-commit.ts
|
|
20236
20765
|
init_esbuild_shims();
|
|
20237
|
-
var GIT_COMMIT_INFO = "
|
|
20766
|
+
var GIT_COMMIT_INFO = "fc883d958";
|
|
20238
20767
|
|
|
20239
20768
|
// packages/cli/src/utils/systemInfo.ts
|
|
20240
20769
|
var debugLogger4 = createDebugLogger("STATUS");
|
|
@@ -20324,7 +20853,7 @@ async function getExtendedSystemInfo(context) {
|
|
|
20324
20853
|
const baseInfo = await getSystemInfo(context);
|
|
20325
20854
|
const memoryUsage = formatMemoryUsage(process4.memoryUsage().rss);
|
|
20326
20855
|
const sandboxEnv = getSandboxEnv(true);
|
|
20327
|
-
const contentGeneratorConfig = baseInfo.selectedAuthType ===
|
|
20856
|
+
const contentGeneratorConfig = baseInfo.selectedAuthType === AuthType.USE_OPENAI || baseInfo.selectedAuthType === AuthType.USE_ANTHROPIC ? context.services.config?.getContentGeneratorConfig() : void 0;
|
|
20328
20857
|
const baseUrl = contentGeneratorConfig?.baseUrl;
|
|
20329
20858
|
const apiKeyEnvKey = contentGeneratorConfig?.apiKeyEnvKey;
|
|
20330
20859
|
const gitCommit = GIT_COMMIT_INFO && !["N/A"].includes(GIT_COMMIT_INFO) ? GIT_COMMIT_INFO : void 0;
|
|
@@ -20438,6 +20967,12 @@ export {
|
|
|
20438
20967
|
reloadEnvironment,
|
|
20439
20968
|
CORRUPTED_SUFFIX,
|
|
20440
20969
|
loadSettings,
|
|
20970
|
+
formatAcpModelId,
|
|
20971
|
+
sanitizeProviderBaseUrl,
|
|
20972
|
+
parseAcpBaseModelId,
|
|
20973
|
+
parseAcpModelOption,
|
|
20974
|
+
getAuthTypeFromEnv,
|
|
20975
|
+
resolveCliGenerationConfig,
|
|
20441
20976
|
require_debug,
|
|
20442
20977
|
require_constants,
|
|
20443
20978
|
require_re,
|