jinzd-ai-cli 0.4.329 → 0.4.330

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 (36) hide show
  1. package/README.md +4 -4
  2. package/README.zh-CN.md +4 -4
  3. package/dist/{batch-NNYRIS4U.js → batch-GXITPLER.js} +2 -2
  4. package/dist/{chunk-ABIR2TGW.js → chunk-265M6ZLH.js} +4 -4
  5. package/dist/{chunk-BRZZ3QAI.js → chunk-2BAFLDDL.js} +44 -7
  6. package/dist/{chunk-LKSMXCFL.js → chunk-2SYDIWRU.js} +1 -1
  7. package/dist/{chunk-IUC3DRGB.js → chunk-3YVZJHTF.js} +1 -1
  8. package/dist/{chunk-6UDKGZ3D.js → chunk-AJITHMRE.js} +1 -1
  9. package/dist/{chunk-YDH5ZWOQ.js → chunk-CCFCPAKN.js} +1 -1
  10. package/dist/{chunk-LRRBYGHE.js → chunk-DU44SD6A.js} +1 -1
  11. package/dist/{chunk-XF2S7LNM.js → chunk-DX2U6QK4.js} +1 -1
  12. package/dist/{chunk-I5KLH7TL.js → chunk-GEC3MEVQ.js} +48 -40
  13. package/dist/{chunk-DRNRQ6SD.js → chunk-GWEBO4RF.js} +1 -1
  14. package/dist/{chunk-SS3PG7LP.js → chunk-HMQA2R3O.js} +1 -1
  15. package/dist/{chunk-LSSOPLKJ.js → chunk-LLXHA2LA.js} +8 -8
  16. package/dist/{chunk-TYQODNI7.js → chunk-LUJ4JVMI.js} +4 -4
  17. package/dist/{chunk-MPCQG7LV.js → chunk-M5B6G6AY.js} +4 -4
  18. package/dist/{chunk-2CNJ25U7.js → chunk-QU74ONFF.js} +9 -3
  19. package/dist/{ci-ODKA57IG.js → ci-6K3JNHB4.js} +5 -5
  20. package/dist/{ci-format-QDC4XKYZ.js → ci-format-2L3RFJVH.js} +2 -2
  21. package/dist/{constants-MG7EGG5J.js → constants-DLJECTGQ.js} +1 -1
  22. package/dist/{constants-BYWEJLAI.js → constants-J5SJ232X.js} +1 -1
  23. package/dist/{doctor-cli-LYZSHYR6.js → doctor-cli-BHS7G2XY.js} +5 -5
  24. package/dist/electron-server.js +109 -58
  25. package/dist/{hub-GRHYVLGV.js → hub-PPG4N6QQ.js} +1 -1
  26. package/dist/index.js +21 -20
  27. package/dist/{persistent-memory-OCDFR4BH.js → persistent-memory-3XTSZ3QR.js} +2 -2
  28. package/dist/{persistent-memory-O6GWHGJH.js → persistent-memory-O4T2OTVV.js} +2 -2
  29. package/dist/{pr-LDUIDU27.js → pr-M6ZY4CEK.js} +5 -5
  30. package/dist/{run-tests-YTRU22LY.js → run-tests-H3DIUCDB.js} +2 -2
  31. package/dist/{run-tests-LTYJACRX.js → run-tests-WQE3XTUL.js} +2 -2
  32. package/dist/{server-2NZN22XP.js → server-5NQSYQ2T.js} +15 -15
  33. package/dist/{server-ZTFB3KMS.js → server-J2B26DZK.js} +5 -5
  34. package/dist/{task-orchestrator-URFLWSPI.js → task-orchestrator-CI7EDT25.js} +5 -5
  35. package/dist/{usage-IP6G4Q2K.js → usage-AJYZ5A7P.js} +3 -3
  36. package/package.json +1 -1
@@ -2,16 +2,16 @@
2
2
  import {
3
3
  formatDoctorReport,
4
4
  runDoctorCli
5
- } from "./chunk-ABIR2TGW.js";
6
- import "./chunk-SS3PG7LP.js";
5
+ } from "./chunk-265M6ZLH.js";
6
+ import "./chunk-HMQA2R3O.js";
7
7
  import "./chunk-RS7SKYTS.js";
8
- import "./chunk-I5KLH7TL.js";
9
- import "./chunk-2CNJ25U7.js";
8
+ import "./chunk-GEC3MEVQ.js";
9
+ import "./chunk-QU74ONFF.js";
10
10
  import "./chunk-E2W2MI6H.js";
11
11
  import "./chunk-TU3L3PW7.js";
12
12
  import "./chunk-HOSJZMQS.js";
13
13
  import "./chunk-BMLQPSHP.js";
14
- import "./chunk-6UDKGZ3D.js";
14
+ import "./chunk-AJITHMRE.js";
15
15
  export {
16
16
  formatDoctorReport,
17
17
  runDoctorCli
@@ -55,7 +55,7 @@ import {
55
55
  touchMemoryReferences,
56
56
  updateMemoryApproval,
57
57
  updateMemoryEntry
58
- } from "./chunk-LKSMXCFL.js";
58
+ } from "./chunk-2SYDIWRU.js";
59
59
  import {
60
60
  DEFAULT_PATTERNS,
61
61
  redactJson,
@@ -81,7 +81,7 @@ import {
81
81
  recoverGbkMojibake,
82
82
  runTestsTool,
83
83
  shellInvocation
84
- } from "./chunk-LRRBYGHE.js";
84
+ } from "./chunk-DU44SD6A.js";
85
85
  import {
86
86
  getCurrentSessionKey,
87
87
  getExecutionConfigDir,
@@ -123,7 +123,7 @@ import {
123
123
  SUBAGENT_MAX_ROUNDS_LIMIT,
124
124
  VERSION,
125
125
  buildUserIdentityPrompt
126
- } from "./chunk-IUC3DRGB.js";
126
+ } from "./chunk-3YVZJHTF.js";
127
127
 
128
128
  // src/web/access.ts
129
129
  import { randomBytes, timingSafeEqual } from "crypto";
@@ -691,8 +691,14 @@ ${err}`
691
691
  "deepseek-v4-flash-vision-exp"
692
692
  ]);
693
693
  const DEEPSEEK_TARGET = "deepseek-flash";
694
- const LEGACY_KIMI = /* @__PURE__ */ new Set(["kimi-k2-0711-preview", "kimi-k2-turbo-preview"]);
695
- const KIMI_TARGET = "kimi-k2.6";
694
+ const LEGACY_KIMI = /* @__PURE__ */ new Set([
695
+ "kimi-k2-0711-preview",
696
+ "kimi-k2-turbo-preview",
697
+ "kimi-k2.5",
698
+ "kimi-k2-thinking",
699
+ "kimi-k2-thinking-turbo"
700
+ ]);
701
+ const KIMI_TARGET = "kimi-k2.7-code";
696
702
  const LEGACY_CLAUDE = {
697
703
  "claude-sonnet-4-5-20250929": "claude-sonnet-5-5",
698
704
  "claude-sonnet-4-5": "claude-sonnet-5-5",
@@ -921,7 +927,6 @@ function deepSeekCnyPricing(cacheRead, input, output) {
921
927
  output: output / CNY_PER_USD
922
928
  };
923
929
  }
924
- var DEEPSEEK_V4_PRO_ROUTED_TO_FLASH_AT = /* @__PURE__ */ new Date("2026-09-14T04:00:00.000Z");
925
930
  var DEEPSEEK_V41_FLASH_ROUTING_CONFIRMED_AT = /* @__PURE__ */ new Date("2026-09-11T00:00:00.000Z");
926
931
  function isDeepSeekPeakHour(at) {
927
932
  const weekday = at.getUTCDay();
@@ -937,7 +942,6 @@ function getDeepSeekV4Pricing(model, at) {
937
942
  const isPro = model.startsWith("deepseek-v4-pro");
938
943
  const isFlash = model.startsWith("deepseek-v4-flash");
939
944
  if (!isPro && !isFlash) return null;
940
- if (isPro && at >= DEEPSEEK_V4_PRO_ROUTED_TO_FLASH_AT) return deepSeekFlash41Pricing(at);
941
945
  if (isFlash && at >= DEEPSEEK_V41_FLASH_ROUTING_CONFIRMED_AT) return deepSeekFlash41Pricing(at);
942
946
  if (at < DEEPSEEK_TIME_PRICING_EFFECTIVE_AT) {
943
947
  return isPro ? deepSeekCnyPricing(0.025, 3, 6) : deepSeekCnyPricing(0.02, 1, 2);
@@ -1016,6 +1020,12 @@ var PRICING_TABLE = {
1016
1020
  // Kimi K3(2026-07 旗舰,1M 上下文)官方定价 platform.kimi.ai/pricing/chat-k3:
1017
1021
  // 输入 cache-miss $3.00 / cache-hit $0.30,输出 $15.00(/MTok)。
1018
1022
  "kimi-k3": { input: 3, output: 15, cacheRead: 0.3 },
1023
+ // K2.6 / K2.7 Code:官方 platform.kimi.ai/docs/pricing/chat(2026-10-18 核对,USD/MTok)。
1024
+ // 国内站人民币价 ¥6.5/¥27(缓存 ¥1.1 / ¥1.3)按 ¥6.9 折算与之相差 <3%,沿用 K3 那行的美元口径。
1025
+ // 此前 K2.6 没有单列,前缀落到 'kimi-k2'($0.6/$2.5),输出低报约 37%。
1026
+ "kimi-k2.6": { input: 0.95, output: 4, cacheRead: 0.16 },
1027
+ "kimi-k2.7-code": { input: 0.95, output: 4, cacheRead: 0.19 },
1028
+ "kimi-k2.7-code-highspeed": { input: 1.9, output: 8, cacheRead: 0.38 },
1019
1029
  // ── Zhipu GLM ─────────────────────────────────────────────────
1020
1030
  "glm-4-plus": { input: 0.7, output: 0.7 },
1021
1031
  "glm-4": { input: 0.14, output: 0.14 },
@@ -1037,6 +1047,11 @@ var PRICING_TABLE = {
1037
1047
  // 没公布截止日期,静态表表达不了这个时间维度;高估比低估安全——预算告警早触发
1038
1048
  // 好过晚触发。折扣期内 `/cost` 会比实际偏高约一倍,这是刻意的取舍。
1039
1049
  "glm-5.3-flash": { input: 0.116, output: 0.406, cacheRead: 0.033 },
1050
+ // GLM-5.3-FlashX:官方定价页(docs.bigmodel.cn/cn/guide/start/pricing,2026-10-18 浏览器读取)
1051
+ // 输入 2 元、输出 7 元、缓存命中 0.57 元。必须单列——否则前缀匹配会落到上面的 glm-5.3-flash,低报 2.5 倍。
1052
+ "glm-5.3-flashx": { input: 2 / CNY_PER_USD, output: 7 / CNY_PER_USD, cacheRead: 0.57 / CNY_PER_USD },
1053
+ // GLM-4.7-Flash:官方免费(输入/输出/缓存全免)。必须单列——否则前缀落到 'glm-4'($0.14)。
1054
+ "glm-4.7-flash": { input: 0, output: 0, cacheRead: 0 },
1040
1055
  // GLM-5.2:与 GLM-5.3 同价(同一定价页:8 / 28 / 缓存命中 2 元),口径修正同上。
1041
1056
  "glm-5.2": { input: 8 / CNY_PER_USD, output: 28 / CNY_PER_USD, cacheRead: 2 / CNY_PER_USD },
1042
1057
  // GLM-5V-Turbo(2026-04 视觉编程旗舰)官方直连 API 定价 $1.20 / $4.00。
@@ -1046,8 +1061,26 @@ var PRICING_TABLE = {
1046
1061
  "glm-z1-air": { input: 0.2, output: 0.6 },
1047
1062
  "glm-z1-flash": { input: 0, output: 0 },
1048
1063
  // ── MiniMax (海螺) ────────────────────────────────────────────
1049
- // GAP (v0.4.184): MiniMax-M3 / M2.x are unpriced — no verified rate anchor yet.
1050
- // Unpriced → `aicli usage` shows "—" (unknown), not a false $0.00. Add when confirmed.
1064
+ // 官方定价页 platform.minimax.cn/docs/guides/pricing(2026-10-18 核对,元/百万 tokens),按 ¥6.9 折算。
1065
+ // 本 provider 打的是国内站 api.minimaxi.com,按人民币计费。
1066
+ // M3 记的是「永久五折」后的价(官方原文标注永久,不同于智谱的限时折扣),≤512K 输入档;
1067
+ // >512K 那档见 computeCost 的 LONG_PROMPT_TIERS。M3 未公布缓存写入价,缺省按输入价(偏高估)。
1068
+ "minimax-m3": { input: 2.1 / CNY_PER_USD, output: 8.4 / CNY_PER_USD, cacheRead: 0.42 / CNY_PER_USD },
1069
+ "minimax-m2.7": { input: 2.1 / CNY_PER_USD, output: 8.4 / CNY_PER_USD, cacheRead: 0.42 / CNY_PER_USD, cacheWrite: 2.625 / CNY_PER_USD },
1070
+ "minimax-m2.7-highspeed": { input: 4.2 / CNY_PER_USD, output: 16.8 / CNY_PER_USD, cacheRead: 0.42 / CNY_PER_USD, cacheWrite: 2.625 / CNY_PER_USD },
1071
+ // M2.5 / M2.1 / M2(历史模型)同价;highspeed 变体输入输出翻倍、缓存同价。
1072
+ "minimax-m2": { input: 2.1 / CNY_PER_USD, output: 8.4 / CNY_PER_USD, cacheRead: 0.21 / CNY_PER_USD, cacheWrite: 2.625 / CNY_PER_USD },
1073
+ "minimax-m2.5-highspeed": { input: 4.2 / CNY_PER_USD, output: 16.8 / CNY_PER_USD, cacheRead: 0.21 / CNY_PER_USD, cacheWrite: 2.625 / CNY_PER_USD },
1074
+ "minimax-m2.1-highspeed": { input: 4.2 / CNY_PER_USD, output: 16.8 / CNY_PER_USD, cacheRead: 0.21 / CNY_PER_USD, cacheWrite: 2.625 / CNY_PER_USD },
1075
+ // ── Qwen(阿里云百炼,北京地域)───────────────────────────────────
1076
+ // 官方 help.aliyun.com/zh/model-studio/model-pricing(2026-10-18 核对,元/百万 tokens,原价),按 ¥6.9 折算。
1077
+ // 思考与非思考输出同价。qwen3.7-plus 当前限时 8 折,记原价(高估方向,同智谱 glm-5.3-flash 的取舍)。
1078
+ // 官方未给出各模型的缓存单价,不填 cacheRead,命中按输入全价算(高估方向)。
1079
+ // 长提示分档(qwen3.7-plus >256K、qwen-flash >128K / >256K)见 LONG_PROMPT_TIERS;此处为最低档。
1080
+ "qwen3.8-max": { input: 12 / CNY_PER_USD, output: 36 / CNY_PER_USD },
1081
+ "qwen3.7-plus": { input: 2 / CNY_PER_USD, output: 8 / CNY_PER_USD },
1082
+ "qwen3.8-flash": { input: 0.8 / CNY_PER_USD, output: 2.7 / CNY_PER_USD },
1083
+ "qwen-flash": { input: 0.15 / CNY_PER_USD, output: 1.5 / CNY_PER_USD },
1051
1084
  // ── OpenRouter (pass-through — actual cost depends on underlying model) ──
1052
1085
  // 绝大多数 id 仍**刻意留空**:真实价由底层模型 + OpenRouter 加价决定,静态表覆盖不了
1053
1086
  // 396 个模型,未收录的照旧显示 "—"(未知)而不是假的 $0.00。
@@ -1102,11 +1135,21 @@ function getPricing(provider, model, at = /* @__PURE__ */ new Date()) {
1102
1135
  return null;
1103
1136
  }
1104
1137
  var CLAUDE_HAIKU_55_LONG = { input: 0.5, output: 2.5, cacheWrite: 0.625, cacheRead: 0.05 };
1105
- var CLAUDE_HAIKU_55_TIER_TOKENS = 1e5;
1138
+ var LONG_PROMPT_TIERS = [
1139
+ { prefix: "claude-haiku-5-5", overTokens: 1e5, pricing: CLAUDE_HAIKU_55_LONG },
1140
+ {
1141
+ prefix: "minimax-m3",
1142
+ overTokens: 512e3,
1143
+ pricing: { input: 4.2 / CNY_PER_USD, output: 16.8 / CNY_PER_USD, cacheRead: 0.84 / CNY_PER_USD }
1144
+ },
1145
+ { prefix: "qwen3.7-plus", overTokens: 256e3, pricing: { input: 6 / CNY_PER_USD, output: 24 / CNY_PER_USD } },
1146
+ { prefix: "qwen-flash", overTokens: 256e3, pricing: { input: 1.2 / CNY_PER_USD, output: 12 / CNY_PER_USD } },
1147
+ { prefix: "qwen-flash", overTokens: 128e3, pricing: { input: 0.6 / CNY_PER_USD, output: 6 / CNY_PER_USD } }
1148
+ ];
1106
1149
  function longPromptTier(model, usage) {
1107
- if (!model.toLowerCase().startsWith("claude-haiku-5-5")) return null;
1150
+ const key = model.toLowerCase();
1108
1151
  const prompt = usage.inputTokens + (usage.cacheCreationTokens ?? 0) + (usage.cacheReadTokens ?? 0);
1109
- return prompt > CLAUDE_HAIKU_55_TIER_TOKENS ? CLAUDE_HAIKU_55_LONG : null;
1152
+ return LONG_PROMPT_TIERS.find((t) => key.startsWith(t.prefix) && prompt > t.overTokens)?.pricing ?? null;
1110
1153
  }
1111
1154
  function computeCost(provider, model, usage, at = /* @__PURE__ */ new Date()) {
1112
1155
  const p = longPromptTier(model, usage) ?? getPricing(provider, model, at);
@@ -4447,7 +4490,9 @@ var DeepSeekProvider = class extends OpenAICompatibleProvider {
4447
4490
  },
4448
4491
  {
4449
4492
  id: "deepseek-v4-pro",
4450
- displayName: "DeepSeek V4 Pro (text-only; routes to V4.1 Flash from 2026-09-14)",
4493
+ // 2026-09-11 官方撤回了「9-14 起路由到 Flash」,Pro 照常服务、按 Pro 价计费(见 pricing.ts)。
4494
+ // 价格约为 Flash 的 4 倍且不收图片,但 Flash 替代不了它的能力档,故保留。
4495
+ displayName: "DeepSeek V4 Pro (0813, text-only)",
4451
4496
  contextWindow: 1048576,
4452
4497
  supportsStreaming: true,
4453
4498
  supportsThinking: true
@@ -4506,20 +4551,24 @@ var DeepSeekProvider = class extends OpenAICompatibleProvider {
4506
4551
  var ZHIPU_CONFIG = {
4507
4552
  id: "zhipu",
4508
4553
  displayName: "Zhipu (GLM)",
4509
- defaultModel: "glm-4.6",
4554
+ defaultModel: "glm-5.3-flash",
4510
4555
  apiKeyEnvVar: "AICLI_API_KEY_ZHIPU",
4511
4556
  baseUrl: "https://open.bigmodel.cn/api/paas/v4",
4512
4557
  defaultTimeout: 3e5,
4513
4558
  models: [
4514
4559
  { id: "glm-5.3", displayName: "GLM-5.3 (2026-08 Flagship, 1M, Coding/Security, \u59CB\u7EC8\u601D\u8003)", contextWindow: 1048576, supportsStreaming: true, supportsThinking: true },
4560
+ // GLM-5.3-FlashX(2026-10):Flash 与 5.3 之间的一档,¥2/¥7、缓存命中 ¥0.57(官方定价页)。
4561
+ // 2026-10-18 实测:同样始终思考(`disabled` → 400/1210),`low` 档 200,base64 图片可识别。
4562
+ { id: "glm-5.3-flashx", displayName: "GLM-5.3 FlashX (\u539F\u751F\u591A\u6A21\u6001, 1M, \u4EF7\u683C\u7EA6\u4E3A 5.3 \u7684 1/4, \u59CB\u7EC8\u601D\u8003)", contextWindow: 1048576, supportsStreaming: true, supportsThinking: true },
4515
4563
  { id: "glm-5.3-flash", displayName: "GLM-5.3 Flash (\u539F\u751F\u591A\u6A21\u6001, 1M, \u8F93\u5165\u7EA6\u4E3A 5.3 \u7684 1/10, \u59CB\u7EC8\u601D\u8003)", contextWindow: 1048576, supportsStreaming: true, supportsThinking: true },
4516
- { id: "glm-5.2", displayName: "GLM-5.2 (2026-06 Flagship, 1M, Coding)", contextWindow: 1048576, supportsStreaming: true, supportsThinking: true },
4517
- { id: "glm-5v-turbo", displayName: "GLM-5V-Turbo (Multimodal Vision + Coding)", contextWindow: 202752, supportsStreaming: true },
4518
- // 2026-10-07 清理:移除 glm-5.1-reasoning / glm-5.1-air(官方模型总览与发布记录里**从未出现过**,
4519
- // 当初取自第三方标注,同 v0.4.198 的 `glm-5.2[1m]`)与 glm-5 / glm-5.1(已被 glm-5.2 / 5.3 取代,
4520
- // 要便宜有 glm-5.3-flash;glm-5 这里标的 128K 与官方 200K 也不符)。后两者端点仍可用,`/model` 照收,
4521
- // pricing.ts 保留其费率供历史成本回算。
4522
- { id: "glm-4.6", displayName: "GLM-4.6 (200K, \u4E2D\u6587\u5199\u4F5C\u63A8\u8350)", contextWindow: 204800, supportsStreaming: true }
4564
+ // 免费(输入/输出/缓存全免,官方定价页「更多文本模型」)。2026-10-18 实测 200,但慢(一句 ok 约 15s)。
4565
+ { id: "glm-4.7-flash", displayName: "GLM-4.7 Flash (\u514D\u8D39, 200K)", contextWindow: 2e5, supportsStreaming: true }
4566
+ // 2026-10-18 按「老模型没有价格优势就下架」清理(端点仍可用,`/model` 照收,pricing.ts 保留费率供历史回算):
4567
+ // - glm-5.2:与 glm-5.3 同价(¥8/¥28/缓存 ¥2),已被取代
4568
+ // - glm-5v-turbo:¥5/¥22 起,比同样原生多模态的 glm-5.3-flash(¥0.8/¥2.8)贵 6–8 倍
4569
+ // - glm-4.6:已不在官方定价页上,且旧价高于 glm-5.3-flash
4570
+ // 更早的 2026-10-07 清理:glm-5.1-reasoning / glm-5.1-air 官方从未存在(取自第三方标注,同 v0.4.198
4571
+ // 的 `glm-5.2[1m]`),glm-5 / glm-5.1 已被取代。
4523
4572
  ]
4524
4573
  };
4525
4574
  var REASONING_EFFORT_MODELS = /^glm-5/i;
@@ -4585,7 +4634,10 @@ var KimiProvider = class _KimiProvider extends OpenAICompatibleProvider {
4585
4634
  */
4586
4635
  static TEMP_1_MODELS = /* @__PURE__ */ new Set([
4587
4636
  "kimi-k3",
4637
+ "kimi-k2.7-code",
4638
+ "kimi-k2.7-code-highspeed",
4588
4639
  "kimi-k2.6",
4640
+ // 已 404 的旧 code 仍留在这里:config 自愈迁移之外的显式 `/model kimi-k2.5` 不该先撞 temperature 400
4589
4641
  "kimi-k2.5",
4590
4642
  "kimi-k2-thinking",
4591
4643
  "kimi-k2-thinking-turbo"
@@ -4606,7 +4658,7 @@ var KimiProvider = class _KimiProvider extends OpenAICompatibleProvider {
4606
4658
  info = {
4607
4659
  id: "kimi",
4608
4660
  displayName: "Kimi (Moonshot AI)",
4609
- defaultModel: "kimi-k2.6",
4661
+ defaultModel: "kimi-k2.7-code",
4610
4662
  apiKeyEnvVar: "AICLI_API_KEY_KIMI",
4611
4663
  requiresApiKey: true,
4612
4664
  baseUrl: this.defaultBaseUrl,
@@ -4616,39 +4668,33 @@ var KimiProvider = class _KimiProvider extends OpenAICompatibleProvider {
4616
4668
  // - contextWindow 1M(1048576);code 就是 `kimi-k3`(UI 名 "K3 · Max" ≠ API code)
4617
4669
  // - temperature 固定 1.0(已并入 TEMP_1_MODELS)
4618
4670
  // - vision 走 base64 / ms://file-id(不收公网 URL)——本版未接图片输入路径,仅文本/工具
4619
- // 默认仍保持 kimi-k2.6(K3 输出 $15/MTok 偏贵,按需 /model kimi-k3)。
4671
+ // 默认用 kimi-k2.7-code(K3 输出 $15/MTok,约为它的 4 倍,按需 /model kimi-k3)。
4620
4672
  {
4621
4673
  id: "kimi-k3",
4622
4674
  displayName: "Kimi K3",
4623
4675
  contextWindow: 1048576,
4624
4676
  supportsStreaming: true
4625
4677
  },
4626
- // Kimi K2.6 / K2.5 系列(最新一代,推荐)
4627
- {
4628
- id: "kimi-k2.6",
4629
- displayName: "Kimi K2.6",
4630
- contextWindow: 262144,
4631
- supportsStreaming: true
4632
- },
4633
- {
4634
- id: "kimi-k2.5",
4635
- displayName: "Kimi K2.5",
4636
- contextWindow: 262144,
4637
- supportsStreaming: true
4638
- },
4639
- // Kimi K2 Thinking 系列(支持多步推理 + 工具调用)
4678
+ // Kimi K2.7 Code(官方 platform.kimi.com/docs/guide/kimi-k2-7-code-quickstart,2026-10-18 核对):
4679
+ // - 256K 上下文;虽名为 Coding 模型,官方写明也支持对话与 Agent 任务
4680
+ // - 思考默认开启且**关不掉**(关闭报错)——本 provider 不发 thinking 字段,正好不踩
4681
+ // - temperature 固定 1.0(已并入 TEMP_1_MODELS);tool_choice 只收 auto / none
4682
+ // - 价格与 K2.6 相同($0.95/$4.00),各项基准提升 10–30%,故取代 K2.6 成为默认
4640
4683
  {
4641
- id: "kimi-k2-thinking",
4642
- displayName: "Kimi K2 Thinking",
4684
+ id: "kimi-k2.7-code",
4685
+ displayName: "Kimi K2.7 Code",
4643
4686
  contextWindow: 262144,
4644
4687
  supportsStreaming: true
4645
4688
  },
4689
+ // 同一模型的高速版:输出约 5–6 倍速,价格翻倍。
4646
4690
  {
4647
- id: "kimi-k2-thinking-turbo",
4648
- displayName: "Kimi K2 Thinking Turbo",
4691
+ id: "kimi-k2.7-code-highspeed",
4692
+ displayName: "Kimi K2.7 Code Highspeed (2x price, ~5x speed)",
4649
4693
  contextWindow: 262144,
4650
4694
  supportsStreaming: true
4651
4695
  }
4696
+ // 2026-10-18 下架:kimi-k2.6 与 K2.7 Code 同价、已被取代(端点仍可用,`/model` 照收);
4697
+ // kimi-k2.5 / kimi-k2-thinking / kimi-k2-thinking-turbo 端点已 404,由 config 自愈迁移到 kimi-k2.7-code。
4652
4698
  ]
4653
4699
  };
4654
4700
  /**
@@ -4760,11 +4806,10 @@ var MINIMAX_CONFIG = {
4760
4806
  apiKeyEnvVar: "AICLI_API_KEY_MINIMAX",
4761
4807
  baseUrl: "https://api.minimaxi.com/v1",
4762
4808
  models: [
4763
- { id: "MiniMax-M3", displayName: "MiniMax M3\uFF08\u65D7\u8230\uFF0C1M \u4E0A\u4E0B\u6587\uFF09", contextWindow: 1e6, supportsStreaming: true },
4764
- { id: "MiniMax-M2.7", displayName: "MiniMax M2.7", contextWindow: 1e6, supportsStreaming: true },
4765
- { id: "MiniMax-M2.7-highspeed", displayName: "MiniMax M2.7 Highspeed", contextWindow: 1e6, supportsStreaming: true },
4766
- { id: "MiniMax-M2.5", displayName: "MiniMax M2.5", contextWindow: 1e6, supportsStreaming: true },
4767
- { id: "MiniMax-M2.5-highspeed", displayName: "MiniMax M2.5 Highspeed", contextWindow: 1e6, supportsStreaming: true }
4809
+ { id: "MiniMax-M3", displayName: "MiniMax M3\uFF08\u65D7\u8230\uFF0C1M \u4E0A\u4E0B\u6587\uFF09", contextWindow: 1e6, supportsStreaming: true }
4810
+ // 2026-10-18 按「老模型没有价格优势就下架」清理(官方定价页 platform.minimax.cn/docs/guides/pricing):
4811
+ // M3「永久五折」后 ¥2.1/¥8.4,与 M2.7 同价、比 M2.x highspeed 便宜一半;M2.5 / M2.1 / M2 官方已归入
4812
+ // 「历史模型」。端点仍可用,`/model` 照收,pricing.ts 保留费率供历史回算。
4768
4813
  ]
4769
4814
  };
4770
4815
  var MiniMaxProvider = createStaticProviderClass(MINIMAX_CONFIG);
@@ -4773,14 +4818,20 @@ var MiniMaxProvider = createStaticProviderClass(MINIMAX_CONFIG);
4773
4818
  var QWEN_CONFIG = {
4774
4819
  id: "qwen",
4775
4820
  displayName: "Qwen (Alibaba Cloud)",
4776
- defaultModel: "qwen-plus",
4821
+ defaultModel: "qwen3.8-flash",
4777
4822
  apiKeyEnvVar: "AICLI_API_KEY_QWEN",
4778
4823
  baseUrl: "https://dashscope.aliyuncs.com/compatible-mode/v1",
4824
+ // 2026-10-18 按百炼官方文档更新(help.aliyun.com/zh/model-studio/models、/model-pricing、/deep-thinking)。
4825
+ // **未经真实端点实测**(本机无 Qwen key)。三款 qwen3.x 默认开启思考、支持非流式调用、纯文本输入;
4826
+ // 思考与非思考输出同价。上下文按官方价格阶梯的上限 1M 记。
4779
4827
  models: [
4780
- { id: "qwen-plus", displayName: "Qwen Plus", contextWindow: 131072, supportsStreaming: true },
4781
- { id: "qwen-max", displayName: "Qwen Max", contextWindow: 131072, supportsStreaming: true },
4782
- { id: "qwen-turbo", displayName: "Qwen Turbo", contextWindow: 131072, supportsStreaming: true },
4783
- { id: "qwen-coder-plus", displayName: "Qwen Coder Plus", contextWindow: 131072, supportsStreaming: true }
4828
+ { id: "qwen3.8-max", displayName: "Qwen3.8 Max\uFF08\u65D7\u8230\uFF0C1M\uFF0C\xA512/\xA536\uFF09", contextWindow: 1e6, supportsStreaming: true },
4829
+ { id: "qwen3.7-plus", displayName: "Qwen3.7 Plus\uFF081M\uFF0C\u2264256K \xA52/\xA58\uFF09", contextWindow: 1e6, supportsStreaming: true },
4830
+ { id: "qwen3.8-flash", displayName: "Qwen3.8 Flash\uFF081M\uFF0C\xA50.8/\xA52.7\uFF09", contextWindow: 1e6, supportsStreaming: true },
4831
+ // 老模型里唯一有价格优势的:≤128K ¥0.15/¥1.5,最便宜。默认不开思考。
4832
+ { id: "qwen-flash", displayName: "Qwen Flash\uFF08\u6700\u4FBF\u5B9C\uFF0C\u2264128K \xA50.15/\xA51.5\uFF09", contextWindow: 1e6, supportsStreaming: true }
4833
+ // 下架(端点若仍可用,`/model` 照收):qwen-max ¥2.4/¥9.6 比 qwen3.7-plus 还贵;qwen-plus 价格不如
4834
+ // qwen-flash、能力不如 qwen3.8-flash;qwen-turbo / qwen-coder-plus 已不在官方价格页上。
4784
4835
  ]
4785
4836
  };
4786
4837
  var QwenProvider = createStaticProviderClass(QWEN_CONFIG);
@@ -17834,7 +17885,7 @@ Cache: write=${cacheCreate} read=${cacheRead}` : "";
17834
17885
  Cost: ${formatCost(cost)}` : "";
17835
17886
  let memoryLine = "";
17836
17887
  try {
17837
- const { countPendingMemories: countPendingMemories2 } = await import("./persistent-memory-OCDFR4BH.js");
17888
+ const { countPendingMemories: countPendingMemories2 } = await import("./persistent-memory-3XTSZ3QR.js");
17838
17889
  const pending = countPendingMemories2(ctx.config.getConfigDir());
17839
17890
  if (pending > 0) memoryLine = `
17840
17891
  Memory: \u26A0 ${pending} pending approval \u2014 see the Memory panel or /memory`;
@@ -18822,7 +18873,7 @@ async function handleTest(args, ctx) {
18822
18873
  const isCommand = argStr.includes(" ") || /^(mvn|gradle|npm|pytest|cargo|go)\b/.test(argStr);
18823
18874
  testArgs = isCommand ? { command: argStr } : { filter: argStr };
18824
18875
  }
18825
- const runTests = ctx.runTests ?? (await import("./run-tests-LTYJACRX.js")).executeTests;
18876
+ const runTests = ctx.runTests ?? (await import("./run-tests-WQE3XTUL.js")).executeTests;
18826
18877
  const report = await runTests(testArgs);
18827
18878
  ctx.send({ type: "info", message: report });
18828
18879
  } catch (err) {
@@ -19213,7 +19264,7 @@ async function handleMemory(args, ctx) {
19213
19264
  }
19214
19265
  if (intent.kind === "status") {
19215
19266
  const { getChatIndexStatus: getChatIndexStatus2 } = await import("./chat-index-RLVLQRRC.js");
19216
- const { listMemoryEntries: listMemoryEntries2, isMemoryExpired: isMemoryExpired2, formatMemoryForPrompt: formatMemoryForPrompt2 } = await import("./persistent-memory-OCDFR4BH.js");
19267
+ const { listMemoryEntries: listMemoryEntries2, isMemoryExpired: isMemoryExpired2, formatMemoryForPrompt: formatMemoryForPrompt2 } = await import("./persistent-memory-3XTSZ3QR.js");
19217
19268
  const memories = listMemoryEntries2(configDir, { includeExpired: true, includeRejected: true });
19218
19269
  const injected = formatMemoryForPrompt2(configDir, process.cwd(), ctx.config.get("memory")?.maxChars);
19219
19270
  const view = buildMemoryStatusView({
@@ -19236,7 +19287,7 @@ async function handleMemory(args, ctx) {
19236
19287
  return;
19237
19288
  }
19238
19289
  if (intent.kind === "recall") {
19239
- const { searchPersistentMemories: searchPersistentMemories2, touchMemoryReferences: touchMemoryReferences2 } = await import("./persistent-memory-OCDFR4BH.js");
19290
+ const { searchPersistentMemories: searchPersistentMemories2, touchMemoryReferences: touchMemoryReferences2 } = await import("./persistent-memory-3XTSZ3QR.js");
19240
19291
  const { searchChatMemory: searchChatMemory2 } = await import("./chat-index-RLVLQRRC.js");
19241
19292
  const persistentHits = searchPersistentMemories2(configDir, intent.query, process.cwd(), 3);
19242
19293
  if (persistentHits.length > 0) {
@@ -19357,7 +19408,7 @@ async function handleMemory(args, ctx) {
19357
19408
  ctx.handleMemoryManage(intent.action, args[1], intent.action === "expire" ? args[2] : void 0);
19358
19409
  } else if (intent.kind === "export") {
19359
19410
  if (args[1] === "md") {
19360
- const { exportMemoryEntries: exportMemoryEntries2 } = await import("./persistent-memory-OCDFR4BH.js");
19411
+ const { exportMemoryEntries: exportMemoryEntries2 } = await import("./persistent-memory-3XTSZ3QR.js");
19361
19412
  ctx.send({
19362
19413
  type: "export_data",
19363
19414
  format: "md",
@@ -20363,7 +20414,7 @@ No tools match "${filter}".
20363
20414
  const { join: join26 } = await import("path");
20364
20415
  const { existsSync: existsSync32 } = await import("fs");
20365
20416
  const { getGitRoot: getGitRoot2 } = await import("./git-context-VNCA2GU7.js");
20366
- const { MCP_PROJECT_CONFIG_NAME: MCP_PROJECT_CONFIG_NAME2 } = await import("./constants-BYWEJLAI.js");
20417
+ const { MCP_PROJECT_CONFIG_NAME: MCP_PROJECT_CONFIG_NAME2 } = await import("./constants-J5SJ232X.js");
20367
20418
  const { approveProject, hashMcpFile } = await import("./project-trust-6CJB5ZMX.js");
20368
20419
  const cwd = process.cwd();
20369
20420
  const projectRoot = getGitRoot2(cwd) ?? cwd;
@@ -21282,7 +21333,7 @@ function createReviewCommands() {
21282
21333
  usage: "/test [command|filter]",
21283
21334
  async execute(args, ctx) {
21284
21335
  try {
21285
- const { executeTests } = await import("./run-tests-LTYJACRX.js");
21336
+ const { executeTests } = await import("./run-tests-WQE3XTUL.js");
21286
21337
  const argStr = args.join(" ").trim();
21287
21338
  let testArgs = {};
21288
21339
  if (argStr) {
@@ -158,7 +158,7 @@ ${content}`);
158
158
  }
159
159
  }
160
160
  async function runTaskMode(config, providers, configManager, topic) {
161
- const { TaskOrchestrator } = await import("./task-orchestrator-URFLWSPI.js");
161
+ const { TaskOrchestrator } = await import("./task-orchestrator-CI7EDT25.js");
162
162
  const orchestrator = new TaskOrchestrator(config, providers, configManager);
163
163
  let interrupted = false;
164
164
  const onSigint = () => {
package/dist/index.js CHANGED
@@ -24,12 +24,12 @@ import {
24
24
  setupProxy,
25
25
  snapshotFile,
26
26
  stripRoutingTags
27
- } from "./chunk-LSSOPLKJ.js";
27
+ } from "./chunk-LLXHA2LA.js";
28
28
  import {
29
29
  CostTracker,
30
30
  getPricing,
31
31
  setCostCurrency
32
- } from "./chunk-BRZZ3QAI.js";
32
+ } from "./chunk-2BAFLDDL.js";
33
33
  import {
34
34
  ToolExecutor,
35
35
  ToolRegistry,
@@ -47,7 +47,7 @@ import {
47
47
  setMaxOutputCap,
48
48
  spawnAgentContext,
49
49
  undoStack
50
- } from "./chunk-MPCQG7LV.js";
50
+ } from "./chunk-M5B6G6AY.js";
51
51
  import "./chunk-HLWUDRBO.js";
52
52
  import {
53
53
  NO_THINKING,
@@ -60,7 +60,7 @@ import {
60
60
  countPendingMemories,
61
61
  detectStaleLegacyMarkdownEdit,
62
62
  formatMemoryForPrompt
63
- } from "./chunk-XF2S7LNM.js";
63
+ } from "./chunk-DX2U6QK4.js";
64
64
  import "./chunk-RWRZVQCB.js";
65
65
  import "./chunk-B3MPYI4E.js";
66
66
  import "./chunk-M6HLYG33.js";
@@ -81,22 +81,22 @@ import {
81
81
  import {
82
82
  loadContextFiles,
83
83
  writeCrashLog
84
- } from "./chunk-ABIR2TGW.js";
84
+ } from "./chunk-265M6ZLH.js";
85
85
  import {
86
86
  getActivePluginAssets,
87
87
  getPendingHookTrust,
88
88
  installFlushOnExit,
89
89
  mergePluginHooks,
90
90
  runLifecycleHooks
91
- } from "./chunk-SS3PG7LP.js";
91
+ } from "./chunk-HMQA2R3O.js";
92
92
  import "./chunk-RS7SKYTS.js";
93
93
  import {
94
94
  ProviderRegistry,
95
95
  listBuiltInProviderMetadata
96
- } from "./chunk-I5KLH7TL.js";
96
+ } from "./chunk-GEC3MEVQ.js";
97
97
  import {
98
98
  ConfigManager
99
- } from "./chunk-2CNJ25U7.js";
99
+ } from "./chunk-QU74ONFF.js";
100
100
  import {
101
101
  CONTENT_ONLY_STREAM_REMINDER,
102
102
  TEE_FINAL_USER_NUDGE,
@@ -134,7 +134,7 @@ import {
134
134
  isInterrupted,
135
135
  requestInterrupt,
136
136
  resetInterrupt
137
- } from "./chunk-DRNRQ6SD.js";
137
+ } from "./chunk-GWEBO4RF.js";
138
138
  import {
139
139
  AGENTIC_BEHAVIOR_GUIDELINE,
140
140
  AUTHOR,
@@ -152,7 +152,7 @@ import {
152
152
  SKILLS_DIR_NAME,
153
153
  VERSION,
154
154
  buildUserIdentityPrompt
155
- } from "./chunk-6UDKGZ3D.js";
155
+ } from "./chunk-AJITHMRE.js";
156
156
  import "./chunk-SXIJLSVF.js";
157
157
 
158
158
  // src/index.ts
@@ -1079,6 +1079,7 @@ function getVisionModelHint(model, provider) {
1079
1079
  if (bare.includes("vision") || bare.includes("vl") || bare.includes("5v") || // glm-5v-turbo
1080
1080
  bare.endsWith(".6v") || // glm-4.6v
1081
1081
  bare === "glm-5.3-flash" || // GLM-5 系列首个原生多模态(名字里没有 v,得单独认)
1082
+ bare === "glm-5.3-flashx" || // 同为原生多模态(2026-10-18 实测 base64 图片可识别)
1082
1083
  // DeepSeek V4.1 Flash(2026-09)原生多模态。放在这条通用规则里而不是只写进下面的
1083
1084
  // deepseek 分支,是为了让 OpenRouter 的 `deepseek/deepseek-flash` 也一并放行——
1084
1085
  // 按 provider 分支写就会重演 v0.4.295「同一个坑换个前缀又漏一次」。
@@ -1091,7 +1092,7 @@ function getVisionModelHint(model, provider) {
1091
1092
  return null;
1092
1093
  }
1093
1094
  if (provider === "zhipu") {
1094
- return `model "${model}" does not support images. Use /model glm-5.3-flash (or glm-4.6v)`;
1095
+ return `model "${model}" does not support images. Use /model glm-5.3-flash (or glm-5.3-flashx)`;
1095
1096
  }
1096
1097
  if (provider === "deepseek") {
1097
1098
  if (bare.startsWith("deepseek-v4-flash")) return null;
@@ -4117,7 +4118,7 @@ program.command("web").description("Start Web UI server with browser-based chat
4117
4118
  console.error("Error: Invalid port number. Must be between 1 and 65535.");
4118
4119
  process.exit(1);
4119
4120
  }
4120
- const { startWebServer, WebStartupError } = await import("./server-2NZN22XP.js");
4121
+ const { startWebServer, WebStartupError } = await import("./server-5NQSYQ2T.js");
4121
4122
  try {
4122
4123
  await startWebServer({ port, host: options.host, externalOrigin: options.externalOrigin });
4123
4124
  } catch (err) {
@@ -4294,11 +4295,11 @@ program.command("sessions").description("List recent conversation sessions").opt
4294
4295
  console.log(footer + "\n");
4295
4296
  });
4296
4297
  program.command("usage").description("Show token + cost usage grouped by provider/model (cross-session)").option("--days <n>", "Only the last N days (inclusive of today)").option("--month <ym>", "Only a specific month, format YYYY-MM (e.g. 2026-06)").option("--json", "Output as JSON (for scripting)").action(async (options) => {
4297
- const { runUsageCli } = await import("./usage-IP6G4Q2K.js");
4298
+ const { runUsageCli } = await import("./usage-AJYZ5A7P.js");
4298
4299
  await runUsageCli(options);
4299
4300
  });
4300
4301
  program.command("doctor").description("Health check: API keys, config, MCP, recent crashes, tool usage, disk usage").option("--json", "Output as JSON (for scripting)").option("--reset-stats", "Reset accumulated tool usage statistics").action(async (options) => {
4301
- const { runDoctorCli } = await import("./doctor-cli-LYZSHYR6.js");
4302
+ const { runDoctorCli } = await import("./doctor-cli-BHS7G2XY.js");
4302
4303
  const argv = process.argv.slice(2);
4303
4304
  await runDoctorCli({
4304
4305
  json: !!options.json || argv.includes("--json"),
@@ -4307,7 +4308,7 @@ program.command("doctor").description("Health check: API keys, config, MCP, rece
4307
4308
  });
4308
4309
  program.command("batch <action> [arg] [arg2]").description("Anthropic Message Batches: submit | list | status <id> | results <id> [out] | cancel <id>").option("--dry-run", "Parse and validate input without submitting (submit only)").action(async (action, arg, arg2, options) => {
4309
4310
  try {
4310
- const batch = await import("./batch-NNYRIS4U.js");
4311
+ const batch = await import("./batch-GXITPLER.js");
4311
4312
  switch (action) {
4312
4313
  case "submit":
4313
4314
  if (!arg) {
@@ -4350,7 +4351,7 @@ program.command("batch <action> [arg] [arg2]").description("Anthropic Message Ba
4350
4351
  }
4351
4352
  });
4352
4353
  program.command("mcp-serve").description("Start an MCP server over STDIO, exposing aicli's built-in tools to Claude Desktop / Cursor / other MCP clients").option("--allow-destructive", "Allow bash / run_interactive / task_create (always destructive in MCP mode)").option("--allow-outside-cwd", "Allow tool path arguments to escape the sandbox root \u2014 disabled by default").option("--tools <list>", "Comma-separated whitelist of tools to expose (default: all eligible tools)").option("--cwd <path>", "Working directory AND sandbox root (default: current directory)").action(async (options) => {
4353
- const { startMcpServer } = await import("./server-ZTFB3KMS.js");
4354
+ const { startMcpServer } = await import("./server-J2B26DZK.js");
4354
4355
  await startMcpServer({
4355
4356
  allowDestructive: !!options.allowDestructive,
4356
4357
  allowOutsideCwd: !!options.allowOutsideCwd,
@@ -4363,7 +4364,7 @@ program.command("pr <action> [target]").description("PR review helpers: review |
4363
4364
  console.error(`Unknown pr action: ${action}. Use review | security-review | summarize.`);
4364
4365
  process.exit(1);
4365
4366
  }
4366
- const { runPrCli } = await import("./pr-LDUIDU27.js");
4367
+ const { runPrCli } = await import("./pr-M6ZY4CEK.js");
4367
4368
  const result = await runPrCli({
4368
4369
  action,
4369
4370
  target,
@@ -4383,8 +4384,8 @@ program.command("pr <action> [target]").description("PR review helpers: review |
4383
4384
  process.exit(result.exitCode);
4384
4385
  });
4385
4386
  program.command("ci").description("Headless PR review (code + security) \u2014 reads git/gh diff, optionally posts to PR. Designed for GitHub Actions.").option("--pr <num>", "PR number or URL; diff fetched via gh pr diff <value>", (v) => /^#?\d+$/.test(v) ? parseInt(v.replace(/^#/, ""), 10) : v).option("--base <ref>", "Base ref for git diff <ref>...HEAD (ignored when --pr set)").option("--post", "Post review as a PR comment (requires gh CLI + GH_TOKEN, needs --pr)").option("--no-update", "Always create a new comment instead of updating the previous aicli review").option("--skip-code", "Skip the code review section").option("--skip-security", "Skip the security review section").option("--detailed", "Use the detailed code-review prompt").option("--max-diff <n>", "Max diff chars sent to the model (default 30000)", (v) => parseInt(v, 10)).option("--provider <id>", "Override provider (default: config.defaultProvider)").option("--model <id>", "Override model").option("--dry-run", "Print result to stdout instead of posting (overrides --post)").option("--json", "Output a structured JSON report").option("--markdown", "Output Markdown report (default)").option("--sarif", "Output SARIF 2.1.0 for code scanning artifacts").option("--fail-on-security-high", "Fail when the security review contains HIGH/CRITICAL findings (default)").option("--no-fail-on-security-high", "Do not fail on security HIGH/CRITICAL findings").option("--fail-on-test-failure", "Fail when the report mentions test failures (default)").option("--no-fail-on-test-failure", "Do not fail on test failure findings").option("--fail-on-lint-failure", "Fail when the report mentions lint/typecheck failures (default)").option("--no-fail-on-lint-failure", "Do not fail on lint/typecheck failure findings").action(async (options) => {
4386
- const { runCi } = await import("./ci-ODKA57IG.js");
4387
- const { formatCiResult } = await import("./ci-format-QDC4XKYZ.js");
4387
+ const { runCi } = await import("./ci-6K3JNHB4.js");
4388
+ const { formatCiResult } = await import("./ci-format-2L3RFJVH.js");
4388
4389
  const formats = [options.json, options.markdown, options.sarif].filter(Boolean).length;
4389
4390
  if (formats > 1) {
4390
4391
  console.error("Choose only one output format: --json, --markdown, or --sarif.");
@@ -4543,7 +4544,7 @@ program.command("hub [topic]").description("Start multi-agent hub (discuss / bra
4543
4544
  config.get("customProviders"),
4544
4545
  config.getConfigDir()
4545
4546
  );
4546
- const { startHub } = await import("./hub-GRHYVLGV.js");
4547
+ const { startHub } = await import("./hub-PPG4N6QQ.js");
4547
4548
  await startHub(
4548
4549
  {
4549
4550
  topic: topic ?? "",
@@ -27,11 +27,11 @@ import {
27
27
  touchMemoryReferences,
28
28
  updateMemoryApproval,
29
29
  updateMemoryEntry
30
- } from "./chunk-LKSMXCFL.js";
30
+ } from "./chunk-2SYDIWRU.js";
31
31
  import "./chunk-FSC6KEWU.js";
32
32
  import "./chunk-2XMUCC42.js";
33
33
  import "./chunk-CGLYJRFA.js";
34
- import "./chunk-IUC3DRGB.js";
34
+ import "./chunk-3YVZJHTF.js";
35
35
  export {
36
36
  addMemoryEntry,
37
37
  backupMemoryStore,
@@ -28,11 +28,11 @@ import {
28
28
  touchMemoryReferences,
29
29
  updateMemoryApproval,
30
30
  updateMemoryEntry
31
- } from "./chunk-XF2S7LNM.js";
31
+ } from "./chunk-DX2U6QK4.js";
32
32
  import "./chunk-3FEZSLGI.js";
33
33
  import "./chunk-HOSJZMQS.js";
34
34
  import "./chunk-BMLQPSHP.js";
35
- import "./chunk-6UDKGZ3D.js";
35
+ import "./chunk-AJITHMRE.js";
36
36
  export {
37
37
  addMemoryEntry,
38
38
  backupMemoryStore,
@@ -2,8 +2,8 @@
2
2
  import {
3
3
  countSeverity,
4
4
  runCi
5
- } from "./chunk-TYQODNI7.js";
6
- import "./chunk-YDH5ZWOQ.js";
5
+ } from "./chunk-LUJ4JVMI.js";
6
+ import "./chunk-CCFCPAKN.js";
7
7
  import {
8
8
  buildReviewPrompt,
9
9
  buildSecurityReviewPrompt,
@@ -14,16 +14,16 @@ import {
14
14
  } from "./chunk-6YZEZFX5.js";
15
15
  import {
16
16
  ProviderRegistry
17
- } from "./chunk-I5KLH7TL.js";
17
+ } from "./chunk-GEC3MEVQ.js";
18
18
  import {
19
19
  ConfigManager
20
- } from "./chunk-2CNJ25U7.js";
20
+ } from "./chunk-QU74ONFF.js";
21
21
  import "./chunk-E2W2MI6H.js";
22
22
  import "./chunk-TU3L3PW7.js";
23
23
  import "./chunk-BMLQPSHP.js";
24
24
  import {
25
25
  VERSION
26
- } from "./chunk-6UDKGZ3D.js";
26
+ } from "./chunk-AJITHMRE.js";
27
27
 
28
28
  // src/cli/pr.ts
29
29
  import { execFileSync } from "child_process";
@@ -3,8 +3,8 @@ import {
3
3
  executeTests,
4
4
  runTestProcess,
5
5
  runTestsTool
6
- } from "./chunk-DRNRQ6SD.js";
7
- import "./chunk-6UDKGZ3D.js";
6
+ } from "./chunk-GWEBO4RF.js";
7
+ import "./chunk-AJITHMRE.js";
8
8
  import "./chunk-SXIJLSVF.js";
9
9
  export {
10
10
  executeTests,