@qwen-code/qwen-code 0.18.5-nightly.20260622.6bc3f853e → 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.
Files changed (146) hide show
  1. package/bundled/qc-helper/docs/configuration/qwen-ignore.md +31 -15
  2. package/bundled/qc-helper/docs/configuration/settings.md +15 -14
  3. package/bundled/qc-helper/docs/extension/introduction.md +24 -6
  4. package/bundled/qc-helper/docs/features/mcp.md +9 -6
  5. package/bundled/qc-helper/docs/qwen-serve.md +1 -1
  6. package/chunks/{agent-WFLPE5MW.js → agent-IPSDEZNB.js} +24 -22
  7. package/chunks/{agent-headless-Q27MG73I.js → agent-headless-ZMTUWMZJ.js} +24 -22
  8. package/chunks/{anthropicContentGenerator-5S4OMMNL.js → anthropicContentGenerator-6MCH4X6S.js} +12 -11
  9. package/chunks/artifact-tool-PBX64YTT.js +675 -0
  10. package/chunks/{askUserQuestion-WHVYL2S2.js → askUserQuestion-5ZQOWSRT.js} +20 -7
  11. package/chunks/chunk-22IFUCVR.js +291 -0
  12. package/chunks/{chunk-XGU3ETVO.js → chunk-255L5QYW.js} +3 -3
  13. package/chunks/{chunk-26ZYKTYZ.js → chunk-2BIF2NVV.js} +2 -2
  14. package/chunks/{chunk-LTN3VYMZ.js → chunk-3UALQ56H.js} +1 -1
  15. package/chunks/{chunk-2O3NAOJG.js → chunk-57XRIZVC.js} +1 -1
  16. package/chunks/{chunk-MSJ2MXJ6.js → chunk-BGUDAULQ.js} +11 -290
  17. package/chunks/{chunk-FH4P6RQA.js → chunk-BNXANYLH.js} +1 -1
  18. package/chunks/{chunk-WE6TNQJU.js → chunk-C4K3FEQ2.js} +36 -0
  19. package/chunks/{chunk-G4BUMVEY.js → chunk-CGEGHF2C.js} +2 -217
  20. package/chunks/{chunk-GM3LTU6K.js → chunk-CICUTYTF.js} +173 -5025
  21. package/chunks/chunk-EEEZIVFJ.js +908 -0
  22. package/chunks/chunk-EJYJYJZ2.js +3703 -0
  23. package/chunks/{chunk-ATLUHLZE.js → chunk-EW6C27XX.js} +1 -1
  24. package/chunks/{chunk-QBUR6J4B.js → chunk-GAAALA2X.js} +6 -6
  25. package/chunks/{chunk-C6MI2ASN.js → chunk-GZCJS5WH.js} +2 -2
  26. package/chunks/{chunk-KGV3F6UF.js → chunk-HGNSRCRB.js} +1 -1
  27. package/chunks/{chunk-42HGOMED.js → chunk-JDV3VBPY.js} +216 -1
  28. package/chunks/{chunk-CX3SGIPK.js → chunk-JRVB4QUY.js} +2 -2
  29. package/chunks/{chunk-7Z2O7IBO.js → chunk-KFR4QTV3.js} +557 -22
  30. package/chunks/{chunk-ID533GA3.js → chunk-OTBK43JR.js} +1 -1
  31. package/chunks/{chunk-GOMVJKBL.js → chunk-PLY4F7QW.js} +5 -3
  32. package/chunks/{chunk-VKILGMZQ.js → chunk-PO5LVPK3.js} +1 -1
  33. package/chunks/{chunk-AE6RQU6F.js → chunk-PRYMDRBV.js} +1 -1
  34. package/chunks/{chunk-GBN55AWZ.js → chunk-QKUAGMGE.js} +2 -2
  35. package/chunks/{chunk-KQIKOTQJ.js → chunk-RYLJU2DY.js} +60 -5
  36. package/chunks/{chunk-SWGPABMH.js → chunk-S7ILEIB4.js} +82 -84
  37. package/chunks/{chunk-CTHZVIMD.js → chunk-T2VDEFUU.js} +2 -2
  38. package/chunks/{chunk-LF6BKGZT.js → chunk-TXVGVZYR.js} +3 -3
  39. package/chunks/{chunk-EJ6NFQ2L.js → chunk-VRIVIYRL.js} +5 -5
  40. package/chunks/{chunk-XU7BKR3B.js → chunk-XU5P23GN.js} +3 -3
  41. package/chunks/{chunk-CXZV4Q4J.js → chunk-YF3ORUIU.js} +6362 -4888
  42. package/chunks/{computer-use-F5O56FVW.js → computer-use-YYK42DD5.js} +24 -22
  43. package/chunks/contextCommand-BO45MUAA.js +56 -0
  44. package/chunks/{cron-create-THNDTYXU.js → cron-create-DXKAP5KN.js} +4 -4
  45. package/chunks/{cron-delete-BS5H6TFJ.js → cron-delete-WGO4PZTF.js} +4 -4
  46. package/chunks/{cron-list-7OBVHT7K.js → cron-list-EY7D3ZUC.js} +4 -4
  47. package/chunks/{dist-GKRNVFBH.js → dist-ZBX7LPJZ.js} +2 -1
  48. package/chunks/{edit-UV7MBOJU.js → edit-QERNJN7K.js} +24 -22
  49. package/chunks/{en-S3OQBISC.js → en-UTXMGXIR.js} +47 -0
  50. package/chunks/{enter-worktree-TSCHZMJ3.js → enter-worktree-6ZKH5IL3.js} +24 -22
  51. package/chunks/{enterPlanMode-LKS7VIUG.js → enterPlanMode-B2PBF4MA.js} +27 -23
  52. package/chunks/{exit-worktree-Q6EWFLZU.js → exit-worktree-EOCMQO4I.js} +24 -22
  53. package/chunks/{exitPlanMode-HS6I4D2O.js → exitPlanMode-WSRXCBRZ.js} +36 -28
  54. package/chunks/{geminiContentGenerator-GEZ63VSW.js → geminiContentGenerator-NTR4LTKS.js} +4 -4
  55. package/chunks/{glob-ZN5LKB7E.js → glob-IWDJQI2V.js} +26 -23
  56. package/chunks/{grep-NIKBBYBU.js → grep-2DV5BXMH.js} +24 -22
  57. package/chunks/{keychain-token-storage-YHXIWXIB.js → keychain-token-storage-CSYMNRPP.js} +2 -2
  58. package/chunks/{loop-wakeup-SSBWZ64K.js → loop-wakeup-XVSDE7QR.js} +5 -5
  59. package/chunks/{ls-YPFUHZRQ.js → ls-LPY3ATQQ.js} +6 -6
  60. package/chunks/{lsp-FD6DNVAF.js → lsp-ZT3AAXIF.js} +2 -2
  61. package/chunks/{monitor-A25XKPU5.js → monitor-6HBDS2RS.js} +24 -22
  62. package/chunks/{notebook-edit-E72AIOUS.js → notebook-edit-J5AY5BRY.js} +25 -23
  63. package/chunks/{openaiContentGenerator-ZDLZDXLU.js → openaiContentGenerator-ENABCJDM.js} +12 -15
  64. package/chunks/{qwenContentGenerator-HVJPPMTT.js → qwenContentGenerator-ISW42U7C.js} +26 -24
  65. package/chunks/{qwenOAuth2-WZ54YZ4J.js → qwenOAuth2-K4AASPCV.js} +5 -4
  66. package/chunks/{read-file-L6FM3KUX.js → read-file-NRX2FSSQ.js} +9 -8
  67. package/chunks/{ripGrep-YRJCUISE.js → ripGrep-WF5CKHR5.js} +24 -22
  68. package/chunks/{scheduler-M3742P2I.js → scheduler-PNPG5WJ3.js} +73 -27
  69. package/chunks/{send-message-FWFTX62Q.js → send-message-447W6NH6.js} +24 -4
  70. package/chunks/{serve-ZIP2GDFY.js → serve-ZBRCIIHW.js} +430 -70
  71. package/chunks/{shell-T5VSPJLU.js → shell-DLIL6MLU.js} +24 -22
  72. package/chunks/{skill-ETTFYDOV.js → skill-32TXHY4A.js} +11 -10
  73. package/chunks/{src-UKOPSYDK.js → src-PDDLF5BB.js} +114 -67
  74. package/chunks/{syntheticOutput-JY5NEDTV.js → syntheticOutput-GQRDRLGR.js} +3 -3
  75. package/chunks/{task-create-IGILDV25.js → task-create-66DDSTVI.js} +6 -6
  76. package/chunks/{task-list-KBEJVAAG.js → task-list-GOPXRSHG.js} +5 -5
  77. package/chunks/{task-stop-WFTMQ6AC.js → task-stop-M7NKGFX2.js} +2 -2
  78. package/chunks/{task-update-UIVX7ZEV.js → task-update-M5TBHLZV.js} +6 -6
  79. package/chunks/{team-create-DRKUVGBN.js → team-create-EHLDSJGI.js} +28 -26
  80. package/chunks/{team-delete-LPOXDPVB.js → team-delete-DKKDS65W.js} +5 -5
  81. package/chunks/{todoWrite-R4RIJKOD.js → todoWrite-4VX7X44D.js} +4 -4
  82. package/chunks/{tool-search-EIIK27ON.js → tool-search-FU7IZAOO.js} +9 -8
  83. package/chunks/{web-fetch-JU7SS6KE.js → web-fetch-YPP3V4FJ.js} +4 -4
  84. package/chunks/{workflow-4RGAYFSJ.js → workflow-WUDNBCGX.js} +544 -92
  85. package/chunks/{write-file-GLQYJFEZ.js → write-file-NVFPX6CH.js} +24 -22
  86. package/chunks/{zh-TW-3OKU7LDA.js → zh-TW-J2TTW67R.js} +47 -0
  87. package/chunks/{zh-QXLZV2PX.js → zh-YOXVTJU5.js} +47 -0
  88. package/cli.js +7932 -4946
  89. package/locales/en.js +68 -0
  90. package/locales/zh-TW.js +65 -0
  91. package/locales/zh.js +65 -0
  92. package/package.json +3 -2
  93. package/web-shell/assets/{arc-CRFN10gD.js → arc-pxOt9B72.js} +1 -1
  94. package/web-shell/assets/{architectureDiagram-3BPJPVTR-IRlu1CpH.js → architectureDiagram-3BPJPVTR-B9XuYYOT.js} +1 -1
  95. package/web-shell/assets/{blockDiagram-GPEHLZMM-htIZ6iw8.js → blockDiagram-GPEHLZMM-5yK68iu4.js} +1 -1
  96. package/web-shell/assets/{c4Diagram-AAUBKEIU-A2GoRq3O.js → c4Diagram-AAUBKEIU-B1LY-qNI.js} +1 -1
  97. package/web-shell/assets/channel-Cx7egbSX.js +1 -0
  98. package/web-shell/assets/{chunk-2J33WTMH-CdP2AC6u.js → chunk-2J33WTMH-DkgXg7cM.js} +1 -1
  99. package/web-shell/assets/{chunk-4BX2VUAB-DrA07nW2.js → chunk-4BX2VUAB-DdM45KFM.js} +1 -1
  100. package/web-shell/assets/{chunk-55IACEB6-CFGnVU2f.js → chunk-55IACEB6-CmdsDjD4.js} +1 -1
  101. package/web-shell/assets/{chunk-727SXJPM-BTMkq3Tk.js → chunk-727SXJPM-CQ4pJ5GH.js} +1 -1
  102. package/web-shell/assets/{chunk-AQP2D5EJ-C9sYg04Z.js → chunk-AQP2D5EJ-Dy6UWz37.js} +1 -1
  103. package/web-shell/assets/{chunk-FMBD7UC4-Cag-cj6I.js → chunk-FMBD7UC4-CC8nFqap.js} +1 -1
  104. package/web-shell/assets/{chunk-ND2GUHAM-CDSTFoR7.js → chunk-ND2GUHAM-CkmS7lx7.js} +1 -1
  105. package/web-shell/assets/{chunk-QZHKN3VN-CN9Z6oOs.js → chunk-QZHKN3VN-DynyqleZ.js} +1 -1
  106. package/web-shell/assets/classDiagram-4FO5ZUOK-CwH_F8cH.js +1 -0
  107. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CwH_F8cH.js +1 -0
  108. package/web-shell/assets/{cose-bilkent-S5V4N54A-DuN9j8Du.js → cose-bilkent-S5V4N54A-DA0fzCsY.js} +1 -1
  109. package/web-shell/assets/{dagre-BM42HDAG-ByCWe45f.js → dagre-BM42HDAG-DHYXRqCo.js} +1 -1
  110. package/web-shell/assets/{diagram-2AECGRRQ-eWyU_pKZ.js → diagram-2AECGRRQ-DWD6BcPs.js} +1 -1
  111. package/web-shell/assets/{diagram-5GNKFQAL-0Bfu3Fq5.js → diagram-5GNKFQAL-CX9wnqVc.js} +1 -1
  112. package/web-shell/assets/{diagram-KO2AKTUF-B6KBKkQP.js → diagram-KO2AKTUF-BpE8Kbt8.js} +1 -1
  113. package/web-shell/assets/{diagram-LMA3HP47-TToDmeA_.js → diagram-LMA3HP47-DLPcrP0C.js} +1 -1
  114. package/web-shell/assets/{diagram-OG6HWLK6-CQCkC2Yx.js → diagram-OG6HWLK6-CSUCBsCe.js} +1 -1
  115. package/web-shell/assets/{erDiagram-TEJ5UH35-Cm9ls1iB.js → erDiagram-TEJ5UH35-d3Z0uMXS.js} +1 -1
  116. package/web-shell/assets/{flowDiagram-I6XJVG4X-Dyoz80Pv.js → flowDiagram-I6XJVG4X-C7vj5FX3.js} +1 -1
  117. package/web-shell/assets/{ganttDiagram-6RSMTGT7-Cfut9yaU.js → ganttDiagram-6RSMTGT7-BV9UvDV_.js} +1 -1
  118. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BCuJdlfD.js → gitGraphDiagram-PVQCEYII-CoWp0mW4.js} +1 -1
  119. package/web-shell/assets/index-CjTH6cLP.js +516 -0
  120. package/web-shell/assets/{infoDiagram-5YYISTIA-CXKxF2VL.js → infoDiagram-5YYISTIA-DUswfJHA.js} +1 -1
  121. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-DE7HWSU8.js → ishikawaDiagram-YF4QCWOH-WidEKukx.js} +1 -1
  122. package/web-shell/assets/{journeyDiagram-JHISSGLW-D__YUfds.js → journeyDiagram-JHISSGLW-D7IRK3VN.js} +1 -1
  123. package/web-shell/assets/{kanban-definition-UN3LZRKU-D82R169M.js → kanban-definition-UN3LZRKU-CwFJ6Cja.js} +1 -1
  124. package/web-shell/assets/{linear-DpyMbKqT.js → linear-BQ8GvDRY.js} +1 -1
  125. package/web-shell/assets/{mermaid.core-D1KEFDhn.js → mermaid.core-CwF8A_xO.js} +5 -5
  126. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BwVUFGFE.js → mindmap-definition-RKZ34NQL-TR1s0iZi.js} +1 -1
  127. package/web-shell/assets/{pieDiagram-4H26LBE5-BO_qoEGx.js → pieDiagram-4H26LBE5-Cd91pMl9.js} +1 -1
  128. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-Cx0ZaWPo.js → quadrantDiagram-W4KKPZXB-BGxGDNMl.js} +1 -1
  129. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BJPXejOA.js → requirementDiagram-4Y6WPE33-Cq3fWmYz.js} +1 -1
  130. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C1xeIL9i.js → sankeyDiagram-5OEKKPKP-ChLyGdq0.js} +1 -1
  131. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CSYKQUjf.js → sequenceDiagram-3UESZ5HK-tazy79aB.js} +1 -1
  132. package/web-shell/assets/{stateDiagram-AJRCARHV-d9hiHlAW.js → stateDiagram-AJRCARHV-dIYLUNSf.js} +1 -1
  133. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-luL7KTiX.js +1 -0
  134. package/web-shell/assets/{timeline-definition-PNZ67QCA-BhCBkq8k.js → timeline-definition-PNZ67QCA-BuENhrC2.js} +1 -1
  135. package/web-shell/assets/{vennDiagram-CIIHVFJN-DPPFWp_y.js → vennDiagram-CIIHVFJN-DLtum9dF.js} +1 -1
  136. package/web-shell/assets/{wardley-L42UT6IY-CcOUIgXY.js → wardley-L42UT6IY-Bf7OSF3y.js} +1 -1
  137. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-p7oR5X7r.js → wardleyDiagram-YWT4CUSO-slMw3OB3.js} +1 -1
  138. package/web-shell/assets/{xychartDiagram-2RQKCTM6-Dfr7-SEy.js → xychartDiagram-2RQKCTM6-CdxOm8oC.js} +1 -1
  139. package/web-shell/index.html +1 -1
  140. package/chunks/chunk-77WXWU44.js +0 -26
  141. package/chunks/contextCommand-WBVNKL2C.js +0 -54
  142. package/web-shell/assets/channel-WwImfsc7.js +0 -1
  143. package/web-shell/assets/classDiagram-4FO5ZUOK-CJKQYFeJ.js +0 -1
  144. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CJKQYFeJ.js +0 -1
  145. package/web-shell/assets/index-DaebdpHq.js +0 -516
  146. 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-EJ6NFQ2L.js";
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
- } from "./chunk-CXZV4Q4J.js";
22
- import {
23
- isWithinRoot,
20
+ require_main,
21
+ resolveModelConfig,
24
22
  stripRuntimeSnapshotPrefix
25
- } from "./chunk-GM3LTU6K.js";
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-LTN3VYMZ.js";
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-WE6TNQJU.js";
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/eventBus.ts
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 contains an array of model configurations.",
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. Backups older than this are 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. Other persistent caches will honor the same setting in the future.",
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 detection. Defaults to true to avoid false-positive interruptions; set to false to re-enable as an unattended-run guardrail.",
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
- // runQwenServe.ts validates `Number.isInteger(n) && n >= 1` and
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 = 4;
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
- (providerModels) => Array.isArray(providerModels) && providerModels.length > 0
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.18.5-nightly.20260622.6bc3f853e";
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 = "6e7a8c221";
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 === "openai" /* USE_OPENAI */ || baseInfo.selectedAuthType === "anthropic" /* USE_ANTHROPIC */ ? context.services.config?.getContentGeneratorConfig() : void 0;
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,