jinzd-ai-cli 0.4.308 → 0.4.310
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/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/{batch-S7XLEEOH.js → batch-O5SXWZ4D.js} +2 -2
- package/dist/{chunk-WVEIUSXE.js → chunk-3YEUWSKJ.js} +1 -1
- package/dist/{chunk-LR3TGZWQ.js → chunk-3YZGQIDN.js} +1 -1
- package/dist/{chunk-BGZN4K7Q.js → chunk-5J4KKOEK.js} +4 -4
- package/dist/{chunk-NLK45GUS.js → chunk-A7WJGEXR.js} +1 -1
- package/dist/{chunk-WT252ZDV.js → chunk-EHMMBIZT.js} +14 -10
- package/dist/{chunk-YBZM7PHI.js → chunk-LCVJYA32.js} +8 -3
- package/dist/{chunk-G6DVGQ4I.js → chunk-LONB36SP.js} +15 -2
- package/dist/{chunk-HC33C4U3.js → chunk-MKQZEKX5.js} +8 -8
- package/dist/{chunk-7OHXFTZO.js → chunk-QGOHEDYN.js} +1 -1
- package/dist/{chunk-2MNUMLN4.js → chunk-SXWQKEU4.js} +1 -1
- package/dist/{chunk-E2PNXNKI.js → chunk-TF5343WH.js} +4 -4
- package/dist/{chunk-2DYQDLLF.js → chunk-TSACXF4M.js} +1 -1
- package/dist/{chunk-3537CQ5M.js → chunk-WKAILZFD.js} +1 -1
- package/dist/{chunk-JJNUASMJ.js → chunk-WKNVMMCN.js} +1 -1
- package/dist/{chunk-TPTFV3Y6.js → chunk-WKPPGB7V.js} +6 -5
- package/dist/{ci-5HONSUAS.js → ci-M4K3JCYV.js} +5 -5
- package/dist/{ci-format-URUH3ZZ5.js → ci-format-EHIWLOUS.js} +2 -2
- package/dist/{constants-FG27DQMS.js → constants-5H5VNSST.js} +1 -1
- package/dist/{constants-BLDBI7IG.js → constants-RCFLPOBR.js} +1 -1
- package/dist/{doctor-cli-QQLMNJN7.js → doctor-cli-GMM6AOFR.js} +5 -5
- package/dist/electron-server.js +48 -25
- package/dist/{hub-GGFW3DCC.js → hub-55SCA6IZ.js} +1 -1
- package/dist/index.js +51 -27
- package/dist/{persistent-memory-UNLCXUWH.js → persistent-memory-GKL3V6OV.js} +2 -2
- package/dist/{persistent-memory-YYWIN6BG.js → persistent-memory-WV7EXQKP.js} +2 -2
- package/dist/{pr-YCFGPFI7.js → pr-ROHHZXSS.js} +5 -5
- package/dist/{run-tests-GHY4BYDE.js → run-tests-EI4HRC7T.js} +2 -2
- package/dist/{run-tests-KRNMFXAN.js → run-tests-RGDSMN5K.js} +2 -2
- package/dist/{server-QRAWSG4Z.js → server-4YPZGX3J.js} +15 -15
- package/dist/{server-73UBHSFV.js → server-HONA3NPQ.js} +5 -5
- package/dist/{task-orchestrator-GI3RGLZI.js → task-orchestrator-IC5WWIY3.js} +5 -5
- package/dist/{usage-GWTIGZF5.js → usage-J2ALUUKQ.js} +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -131,7 +131,7 @@ aicli user delete x # Delete user
|
|
|
131
131
|
|----------|--------|-------------|
|
|
132
132
|
| **Claude** | Opus 4, Sonnet 4, Haiku 4 | [console.anthropic.com](https://console.anthropic.com) |
|
|
133
133
|
| **Gemini** | 2.5 Pro, 2.5 Flash | [aistudio.google.com](https://aistudio.google.com) |
|
|
134
|
-
| **DeepSeek** | deepseek-
|
|
134
|
+
| **DeepSeek** | deepseek-flash (default, multimodal), deepseek-v4-pro | [platform.deepseek.com](https://platform.deepseek.com) |
|
|
135
135
|
| **OpenAI** | GPT-5.4, GPT-5, GPT-4.1, o3, o4-mini | [platform.openai.com](https://platform.openai.com) |
|
|
136
136
|
| **OpenRouter** | 300+ models (Claude, GPT, Gemini, Llama, Qwen, Mistral...) | [openrouter.ai](https://openrouter.ai) |
|
|
137
137
|
| **Zhipu** | GLM-4, GLM-5 | [open.bigmodel.cn](https://open.bigmodel.cn) |
|
package/README.zh-CN.md
CHANGED
|
@@ -119,7 +119,7 @@ aicli user delete x # 删除用户
|
|
|
119
119
|
|----------|------|-------------|
|
|
120
120
|
| **Claude** | Opus 4, Sonnet 4, Haiku 4 | [console.anthropic.com](https://console.anthropic.com) |
|
|
121
121
|
| **Gemini** | 2.5 Pro, 2.5 Flash | [aistudio.google.com](https://aistudio.google.com) |
|
|
122
|
-
| **DeepSeek** | deepseek-
|
|
122
|
+
| **DeepSeek** | deepseek-flash(默认,多模态), deepseek-v4-pro | [platform.deepseek.com](https://platform.deepseek.com) |
|
|
123
123
|
| **OpenAI** | GPT-5.4, GPT-5, GPT-4.1, o3, o4-mini | [platform.openai.com](https://platform.openai.com) |
|
|
124
124
|
| **OpenRouter** | 300+ 模型(Claude/GPT/Gemini/Llama/Qwen/Mistral...) | [openrouter.ai](https://openrouter.ai) |
|
|
125
125
|
| **Zhipu(智谱)** | GLM-4, GLM-5 | [open.bigmodel.cn](https://open.bigmodel.cn) |
|
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
} from "./chunk-RS7SKYTS.js";
|
|
5
5
|
import {
|
|
6
6
|
ConfigManager
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-LCVJYA32.js";
|
|
8
8
|
import "./chunk-TU3L3PW7.js";
|
|
9
9
|
import {
|
|
10
10
|
atomicWriteFileSync
|
|
11
11
|
} from "./chunk-BMLQPSHP.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-SXWQKEU4.js";
|
|
13
13
|
|
|
14
14
|
// src/cli/batch.ts
|
|
15
15
|
import Anthropic from "@anthropic-ai/sdk";
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
MEMORY_FILE_NAME,
|
|
14
14
|
MEMORY_MAX_CHARS,
|
|
15
15
|
MEMORY_STORE_FILE_NAME
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-SXWQKEU4.js";
|
|
17
17
|
|
|
18
18
|
// src/memory/persistent-memory.ts
|
|
19
19
|
import { copyFileSync, existsSync, mkdirSync, readFileSync, statSync } from "fs";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
evaluateCiGate,
|
|
4
4
|
normalizeCiThresholds
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-A7WJGEXR.js";
|
|
6
6
|
import {
|
|
7
7
|
buildReviewPrompt,
|
|
8
8
|
buildSecurityReviewPrompt,
|
|
@@ -13,13 +13,13 @@ import {
|
|
|
13
13
|
} from "./chunk-6YZEZFX5.js";
|
|
14
14
|
import {
|
|
15
15
|
ProviderRegistry
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-EHMMBIZT.js";
|
|
17
17
|
import {
|
|
18
18
|
ConfigManager
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-LCVJYA32.js";
|
|
20
20
|
import {
|
|
21
21
|
VERSION
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-SXWQKEU4.js";
|
|
23
23
|
|
|
24
24
|
// src/cli/ci.ts
|
|
25
25
|
import { execFileSync } from "child_process";
|
|
@@ -1670,30 +1670,34 @@ var DeepSeekProvider = class extends OpenAICompatibleProvider {
|
|
|
1670
1670
|
info = {
|
|
1671
1671
|
id: "deepseek",
|
|
1672
1672
|
displayName: "DeepSeek",
|
|
1673
|
-
defaultModel: "deepseek-
|
|
1673
|
+
defaultModel: "deepseek-flash",
|
|
1674
1674
|
apiKeyEnvVar: "AICLI_API_KEY_DEEPSEEK",
|
|
1675
1675
|
requiresApiKey: true,
|
|
1676
1676
|
baseUrl: this.defaultBaseUrl,
|
|
1677
1677
|
models: [
|
|
1678
|
-
// ── V4
|
|
1678
|
+
// ── V4.1 Flash (2026-09):1M context,原生多模态,Thinking / Non-Thinking 双模式 ──
|
|
1679
|
+
// model code 实测取自端点本身:`/v1/models` 只列 `deepseek-flash` 与 `deepseek-v4-pro`,
|
|
1680
|
+
// 传 `deepseek-v4.1-flash` 报 400 并把合法名字写在错误消息里。**不要**按发布公告里的
|
|
1681
|
+
// 版本号拼 code(v0.4.198 的 `glm-5.2[1m]` 就是这么栽的)。
|
|
1679
1682
|
{
|
|
1680
|
-
id: "deepseek-
|
|
1681
|
-
displayName: "DeepSeek V4
|
|
1683
|
+
id: "deepseek-flash",
|
|
1684
|
+
displayName: "DeepSeek V4.1 Flash (multimodal, 1M)",
|
|
1682
1685
|
contextWindow: 1048576,
|
|
1683
1686
|
supportsStreaming: true,
|
|
1684
1687
|
supportsThinking: true
|
|
1685
1688
|
},
|
|
1686
1689
|
{
|
|
1687
|
-
id: "deepseek-v4-
|
|
1688
|
-
displayName: "DeepSeek V4
|
|
1690
|
+
id: "deepseek-v4-pro",
|
|
1691
|
+
displayName: "DeepSeek V4 Pro (text-only; routes to V4.1 Flash from 2026-09-14)",
|
|
1689
1692
|
contextWindow: 1048576,
|
|
1690
1693
|
supportsStreaming: true,
|
|
1691
1694
|
supportsThinking: true
|
|
1692
1695
|
}
|
|
1693
|
-
// Legacy aliases
|
|
1694
|
-
//
|
|
1695
|
-
//
|
|
1696
|
-
//
|
|
1696
|
+
// Legacy aliases:`deepseek-v4-flash` / `deepseek-v4-flash-vision-exp` 的底层模型已退役,
|
|
1697
|
+
// 端点仍接受这两个名字并路由到 V4.1 Flash(实测传 `deepseek-v4-flash` 返回 200 且响应
|
|
1698
|
+
// `model` 字段回显 `deepseek-flash`)。它们不再列进推荐清单,config 里 pin 过的会被
|
|
1699
|
+
// `migrateLegacyModels()` 自愈到 `deepseek-flash`;pricing.ts 保留旧 id 供历史成本回算。
|
|
1700
|
+
// `deepseek-chat` / `deepseek-reasoner` 早在 v0.4.140 移除(2026-07-24 停用)。
|
|
1697
1701
|
]
|
|
1698
1702
|
};
|
|
1699
1703
|
/**
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
CONFIG_FILE_NAME,
|
|
12
12
|
HISTORY_DIR_NAME,
|
|
13
13
|
PLUGINS_DIR_NAME
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-SXWQKEU4.js";
|
|
15
15
|
|
|
16
16
|
// src/config/config-manager.ts
|
|
17
17
|
import { readFileSync, existsSync, mkdirSync } from "fs";
|
|
@@ -381,8 +381,13 @@ ${err}`
|
|
|
381
381
|
* @returns true if config was modified and should be persisted.
|
|
382
382
|
*/
|
|
383
383
|
migrateLegacyModels() {
|
|
384
|
-
const LEGACY_DEEPSEEK = /* @__PURE__ */ new Set([
|
|
385
|
-
|
|
384
|
+
const LEGACY_DEEPSEEK = /* @__PURE__ */ new Set([
|
|
385
|
+
"deepseek-chat",
|
|
386
|
+
"deepseek-reasoner",
|
|
387
|
+
"deepseek-v4-flash",
|
|
388
|
+
"deepseek-v4-flash-vision-exp"
|
|
389
|
+
]);
|
|
390
|
+
const DEEPSEEK_TARGET = "deepseek-flash";
|
|
386
391
|
const LEGACY_KIMI = /* @__PURE__ */ new Set(["kimi-k2-0711-preview", "kimi-k2-turbo-preview"]);
|
|
387
392
|
const KIMI_TARGET = "kimi-k2.6";
|
|
388
393
|
let changed = false;
|
|
@@ -16,15 +16,28 @@ function deepSeekCnyPricing(cacheRead, input, output) {
|
|
|
16
16
|
output: output / CNY_PER_USD
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
|
+
var DEEPSEEK_V4_PRO_ROUTED_TO_FLASH_AT = /* @__PURE__ */ new Date("2026-09-14T04:00:00.000Z");
|
|
20
|
+
var DEEPSEEK_V41_FLASH_ROUTING_CONFIRMED_AT = /* @__PURE__ */ new Date("2026-09-11T00:00:00.000Z");
|
|
21
|
+
function isDeepSeekPeakHour(at) {
|
|
22
|
+
const weekday = at.getUTCDay();
|
|
23
|
+
if (weekday === 0 || weekday === 6) return false;
|
|
24
|
+
const hour = at.getUTCHours();
|
|
25
|
+
return hour >= 1 && hour < 4 || hour >= 6 && hour < 10;
|
|
26
|
+
}
|
|
27
|
+
function deepSeekFlash41Pricing(at) {
|
|
28
|
+
return isDeepSeekPeakHour(at) ? { cacheRead: 6e-3, input: 0.3, output: 1.2 } : { cacheRead: 3e-3, input: 0.15, output: 0.6 };
|
|
29
|
+
}
|
|
19
30
|
function getDeepSeekV4Pricing(model, at) {
|
|
31
|
+
if (model.startsWith("deepseek-flash")) return deepSeekFlash41Pricing(at);
|
|
20
32
|
const isPro = model.startsWith("deepseek-v4-pro");
|
|
21
33
|
const isFlash = model.startsWith("deepseek-v4-flash");
|
|
22
34
|
if (!isPro && !isFlash) return null;
|
|
35
|
+
if (isPro && at >= DEEPSEEK_V4_PRO_ROUTED_TO_FLASH_AT) return deepSeekFlash41Pricing(at);
|
|
36
|
+
if (isFlash && at >= DEEPSEEK_V41_FLASH_ROUTING_CONFIRMED_AT) return deepSeekFlash41Pricing(at);
|
|
23
37
|
if (at < DEEPSEEK_TIME_PRICING_EFFECTIVE_AT) {
|
|
24
38
|
return isPro ? deepSeekCnyPricing(0.025, 3, 6) : deepSeekCnyPricing(0.02, 1, 2);
|
|
25
39
|
}
|
|
26
|
-
const
|
|
27
|
-
const isPeak = beijingHour >= 9 && beijingHour < 12 || beijingHour >= 14 && beijingHour < 18;
|
|
40
|
+
const isPeak = isDeepSeekPeakHour(at);
|
|
28
41
|
if (isPro) {
|
|
29
42
|
return isPeak ? deepSeekCnyPricing(0.3, 9, 27) : deepSeekCnyPricing(0.15, 4.5, 13.5);
|
|
30
43
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
computeCost,
|
|
4
4
|
formatCost
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-LONB36SP.js";
|
|
6
6
|
import {
|
|
7
7
|
clearRecentlyDeniedAutoActions,
|
|
8
8
|
estimateTokens,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
setPreferredAgentName,
|
|
17
17
|
truncateForPersist,
|
|
18
18
|
undoStack
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-WKPPGB7V.js";
|
|
20
20
|
import {
|
|
21
21
|
buildReviewPrompt,
|
|
22
22
|
buildSecurityReviewPrompt
|
|
@@ -51,7 +51,7 @@ import {
|
|
|
51
51
|
touchMemoryReferences,
|
|
52
52
|
updateMemoryApproval,
|
|
53
53
|
updateMemoryEntry
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-3YZGQIDN.js";
|
|
55
55
|
import {
|
|
56
56
|
theme
|
|
57
57
|
} from "./chunk-5C76XDDF.js";
|
|
@@ -65,7 +65,7 @@ import {
|
|
|
65
65
|
import {
|
|
66
66
|
buildDoctorReport,
|
|
67
67
|
formatDoctorReport
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-TF5343WH.js";
|
|
69
69
|
import {
|
|
70
70
|
describePlugin,
|
|
71
71
|
getActivePluginAssets,
|
|
@@ -80,7 +80,7 @@ import {
|
|
|
80
80
|
trustHook,
|
|
81
81
|
trustPlugin,
|
|
82
82
|
untrustHook
|
|
83
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-WKAILZFD.js";
|
|
84
84
|
import {
|
|
85
85
|
isCleanDocumentBody,
|
|
86
86
|
stripOuterCodeFence
|
|
@@ -109,7 +109,7 @@ import {
|
|
|
109
109
|
MCP_TOOL_PREFIX,
|
|
110
110
|
REPO_URL,
|
|
111
111
|
VERSION
|
|
112
|
-
} from "./chunk-
|
|
112
|
+
} from "./chunk-SXWQKEU4.js";
|
|
113
113
|
|
|
114
114
|
// src/skills/manager.ts
|
|
115
115
|
import { existsSync, readdirSync, mkdirSync, statSync } from "fs";
|
|
@@ -2426,7 +2426,7 @@ No tools match "${filter}".
|
|
|
2426
2426
|
const { join: join6 } = await import("path");
|
|
2427
2427
|
const { existsSync: existsSync6 } = await import("fs");
|
|
2428
2428
|
const { getGitRoot } = await import("./git-context-EXOEHQSF.js");
|
|
2429
|
-
const { MCP_PROJECT_CONFIG_NAME } = await import("./constants-
|
|
2429
|
+
const { MCP_PROJECT_CONFIG_NAME } = await import("./constants-RCFLPOBR.js");
|
|
2430
2430
|
const { approveProject, hashMcpFile } = await import("./project-trust-KGG2BWKC.js");
|
|
2431
2431
|
const cwd = process.cwd();
|
|
2432
2432
|
const projectRoot = getGitRoot(cwd) ?? cwd;
|
|
@@ -3534,7 +3534,7 @@ function createReviewCommands() {
|
|
|
3534
3534
|
usage: "/test [command|filter]",
|
|
3535
3535
|
async execute(args, ctx) {
|
|
3536
3536
|
try {
|
|
3537
|
-
const { executeTests } = await import("./run-tests-
|
|
3537
|
+
const { executeTests } = await import("./run-tests-EI4HRC7T.js");
|
|
3538
3538
|
const argStr = args.join(" ").trim();
|
|
3539
3539
|
let testArgs = {};
|
|
3540
3540
|
if (argStr) {
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
MEMORY_FILE_NAME,
|
|
13
13
|
MEMORY_MAX_CHARS,
|
|
14
14
|
MEMORY_STORE_FILE_NAME
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-TSACXF4M.js";
|
|
16
16
|
|
|
17
17
|
// src/memory/persistent-memory.ts
|
|
18
18
|
import { copyFileSync, existsSync, mkdirSync, readFileSync, statSync } from "fs";
|
|
@@ -8,13 +8,13 @@ import {
|
|
|
8
8
|
listHooks,
|
|
9
9
|
listInstalledPlugins,
|
|
10
10
|
resetStats
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-WKAILZFD.js";
|
|
12
12
|
import {
|
|
13
13
|
ProviderRegistry
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-EHMMBIZT.js";
|
|
15
15
|
import {
|
|
16
16
|
ConfigManager
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-LCVJYA32.js";
|
|
18
18
|
import {
|
|
19
19
|
getGitRoot
|
|
20
20
|
} from "./chunk-HOSJZMQS.js";
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
MCP_PROJECT_CONFIG_NAME,
|
|
27
27
|
MEMORY_FILE_NAME,
|
|
28
28
|
VERSION
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-SXWQKEU4.js";
|
|
30
30
|
|
|
31
31
|
// src/diagnostics/doctor-report.ts
|
|
32
32
|
import { existsSync as existsSync3, statSync as statSync2 } from "fs";
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
searchPersistentMemories,
|
|
12
12
|
touchMemoryReferences,
|
|
13
13
|
updateMemoryEntry
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-3YZGQIDN.js";
|
|
15
15
|
import {
|
|
16
16
|
indexProject
|
|
17
17
|
} from "./chunk-RWRZVQCB.js";
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
runHook,
|
|
31
31
|
runLifecycleHooks,
|
|
32
32
|
runTool
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-WKAILZFD.js";
|
|
34
34
|
import {
|
|
35
35
|
buildTruncatedArgumentsError,
|
|
36
36
|
getDangerLevel,
|
|
@@ -63,7 +63,7 @@ import {
|
|
|
63
63
|
recoverGbkMojibake,
|
|
64
64
|
runTestsTool,
|
|
65
65
|
shellInvocation
|
|
66
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-WKNVMMCN.js";
|
|
67
67
|
import {
|
|
68
68
|
CONFIG_DIR_NAME,
|
|
69
69
|
DEFAULT_MAX_TOOL_OUTPUT_CHARS_CAP,
|
|
@@ -72,7 +72,7 @@ import {
|
|
|
72
72
|
SUBAGENT_ALLOWED_TOOLS,
|
|
73
73
|
SUBAGENT_DEFAULT_MAX_ROUNDS,
|
|
74
74
|
SUBAGENT_MAX_ROUNDS_LIMIT
|
|
75
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-SXWQKEU4.js";
|
|
76
76
|
import {
|
|
77
77
|
getCurrentSessionKey,
|
|
78
78
|
getExecutionConfigDir,
|
|
@@ -1448,9 +1448,10 @@ ${err.message}`;
|
|
|
1448
1448
|
}
|
|
1449
1449
|
if (BINARY_EXTENSIONS.has(ext)) {
|
|
1450
1450
|
if (IMAGE_EXTENSIONS.has(ext)) {
|
|
1451
|
+
const ref = /\s/.test(filePath) ? `@"${filePath}"` : `@${filePath}`;
|
|
1451
1452
|
return `[Image file: ${filePath} (${ext})]
|
|
1452
1453
|
read_file cannot return image content \u2014 tool results are text-only, so no tool can put an image into your context.
|
|
1453
|
-
To have an image looked at, ask the USER to reference it from their input line with
|
|
1454
|
+
To have an image looked at, ask the USER to reference it from their input line with ${ref} (quote the path exactly like that when it contains spaces; they can use a glob for a batch, e.g. @dir/*.png, up to ${MAX_GLOB_MATCHES} at a time). A vision-capable model must be active, or the reference is rejected.
|
|
1454
1455
|
Do NOT claim you inspected this image \u2014 you have not seen it.`;
|
|
1455
1456
|
}
|
|
1456
1457
|
return `[Binary file: ${filePath} (${ext})]
|
|
@@ -3,16 +3,16 @@ import {
|
|
|
3
3
|
CI_COMMENT_MARKER,
|
|
4
4
|
countSeverity,
|
|
5
5
|
runCi
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-5J4KKOEK.js";
|
|
7
|
+
import "./chunk-A7WJGEXR.js";
|
|
8
8
|
import "./chunk-HLWUDRBO.js";
|
|
9
9
|
import "./chunk-6YZEZFX5.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-EHMMBIZT.js";
|
|
11
|
+
import "./chunk-LCVJYA32.js";
|
|
12
12
|
import "./chunk-RMEJR3AW.js";
|
|
13
13
|
import "./chunk-TU3L3PW7.js";
|
|
14
14
|
import "./chunk-BMLQPSHP.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-SXWQKEU4.js";
|
|
16
16
|
export {
|
|
17
17
|
CI_COMMENT_MARKER,
|
|
18
18
|
countSeverity,
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
import {
|
|
3
3
|
formatDoctorReport,
|
|
4
4
|
runDoctorCli
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-TF5343WH.js";
|
|
6
|
+
import "./chunk-WKAILZFD.js";
|
|
7
7
|
import "./chunk-RS7SKYTS.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-EHMMBIZT.js";
|
|
9
|
+
import "./chunk-LCVJYA32.js";
|
|
10
10
|
import "./chunk-RMEJR3AW.js";
|
|
11
11
|
import "./chunk-TU3L3PW7.js";
|
|
12
12
|
import "./chunk-HOSJZMQS.js";
|
|
13
13
|
import "./chunk-BMLQPSHP.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-SXWQKEU4.js";
|
|
15
15
|
export {
|
|
16
16
|
formatDoctorReport,
|
|
17
17
|
runDoctorCli
|
package/dist/electron-server.js
CHANGED
|
@@ -55,7 +55,7 @@ import {
|
|
|
55
55
|
touchMemoryReferences,
|
|
56
56
|
updateMemoryApproval,
|
|
57
57
|
updateMemoryEntry
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-QGOHEDYN.js";
|
|
59
59
|
import {
|
|
60
60
|
DEFAULT_PATTERNS,
|
|
61
61
|
redactJson,
|
|
@@ -80,7 +80,7 @@ import {
|
|
|
80
80
|
recoverGbkMojibake,
|
|
81
81
|
runTestsTool,
|
|
82
82
|
shellInvocation
|
|
83
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-3YEUWSKJ.js";
|
|
84
84
|
import {
|
|
85
85
|
getCurrentSessionKey,
|
|
86
86
|
getExecutionConfigDir,
|
|
@@ -122,7 +122,7 @@ import {
|
|
|
122
122
|
SUBAGENT_MAX_ROUNDS_LIMIT,
|
|
123
123
|
VERSION,
|
|
124
124
|
buildUserIdentityPrompt
|
|
125
|
-
} from "./chunk-
|
|
125
|
+
} from "./chunk-TSACXF4M.js";
|
|
126
126
|
|
|
127
127
|
// src/web/access.ts
|
|
128
128
|
import { randomBytes, timingSafeEqual } from "crypto";
|
|
@@ -683,8 +683,13 @@ ${err}`
|
|
|
683
683
|
* @returns true if config was modified and should be persisted.
|
|
684
684
|
*/
|
|
685
685
|
migrateLegacyModels() {
|
|
686
|
-
const LEGACY_DEEPSEEK = /* @__PURE__ */ new Set([
|
|
687
|
-
|
|
686
|
+
const LEGACY_DEEPSEEK = /* @__PURE__ */ new Set([
|
|
687
|
+
"deepseek-chat",
|
|
688
|
+
"deepseek-reasoner",
|
|
689
|
+
"deepseek-v4-flash",
|
|
690
|
+
"deepseek-v4-flash-vision-exp"
|
|
691
|
+
]);
|
|
692
|
+
const DEEPSEEK_TARGET = "deepseek-flash";
|
|
688
693
|
const LEGACY_KIMI = /* @__PURE__ */ new Set(["kimi-k2-0711-preview", "kimi-k2-turbo-preview"]);
|
|
689
694
|
const KIMI_TARGET = "kimi-k2.6";
|
|
690
695
|
let changed = false;
|
|
@@ -883,15 +888,28 @@ function deepSeekCnyPricing(cacheRead, input, output) {
|
|
|
883
888
|
output: output / CNY_PER_USD
|
|
884
889
|
};
|
|
885
890
|
}
|
|
891
|
+
var DEEPSEEK_V4_PRO_ROUTED_TO_FLASH_AT = /* @__PURE__ */ new Date("2026-09-14T04:00:00.000Z");
|
|
892
|
+
var DEEPSEEK_V41_FLASH_ROUTING_CONFIRMED_AT = /* @__PURE__ */ new Date("2026-09-11T00:00:00.000Z");
|
|
893
|
+
function isDeepSeekPeakHour(at) {
|
|
894
|
+
const weekday = at.getUTCDay();
|
|
895
|
+
if (weekday === 0 || weekday === 6) return false;
|
|
896
|
+
const hour = at.getUTCHours();
|
|
897
|
+
return hour >= 1 && hour < 4 || hour >= 6 && hour < 10;
|
|
898
|
+
}
|
|
899
|
+
function deepSeekFlash41Pricing(at) {
|
|
900
|
+
return isDeepSeekPeakHour(at) ? { cacheRead: 6e-3, input: 0.3, output: 1.2 } : { cacheRead: 3e-3, input: 0.15, output: 0.6 };
|
|
901
|
+
}
|
|
886
902
|
function getDeepSeekV4Pricing(model, at) {
|
|
903
|
+
if (model.startsWith("deepseek-flash")) return deepSeekFlash41Pricing(at);
|
|
887
904
|
const isPro = model.startsWith("deepseek-v4-pro");
|
|
888
905
|
const isFlash = model.startsWith("deepseek-v4-flash");
|
|
889
906
|
if (!isPro && !isFlash) return null;
|
|
907
|
+
if (isPro && at >= DEEPSEEK_V4_PRO_ROUTED_TO_FLASH_AT) return deepSeekFlash41Pricing(at);
|
|
908
|
+
if (isFlash && at >= DEEPSEEK_V41_FLASH_ROUTING_CONFIRMED_AT) return deepSeekFlash41Pricing(at);
|
|
890
909
|
if (at < DEEPSEEK_TIME_PRICING_EFFECTIVE_AT) {
|
|
891
910
|
return isPro ? deepSeekCnyPricing(0.025, 3, 6) : deepSeekCnyPricing(0.02, 1, 2);
|
|
892
911
|
}
|
|
893
|
-
const
|
|
894
|
-
const isPeak = beijingHour >= 9 && beijingHour < 12 || beijingHour >= 14 && beijingHour < 18;
|
|
912
|
+
const isPeak = isDeepSeekPeakHour(at);
|
|
895
913
|
if (isPro) {
|
|
896
914
|
return isPeak ? deepSeekCnyPricing(0.3, 9, 27) : deepSeekCnyPricing(0.15, 4.5, 13.5);
|
|
897
915
|
}
|
|
@@ -4166,30 +4184,34 @@ var DeepSeekProvider = class extends OpenAICompatibleProvider {
|
|
|
4166
4184
|
info = {
|
|
4167
4185
|
id: "deepseek",
|
|
4168
4186
|
displayName: "DeepSeek",
|
|
4169
|
-
defaultModel: "deepseek-
|
|
4187
|
+
defaultModel: "deepseek-flash",
|
|
4170
4188
|
apiKeyEnvVar: "AICLI_API_KEY_DEEPSEEK",
|
|
4171
4189
|
requiresApiKey: true,
|
|
4172
4190
|
baseUrl: this.defaultBaseUrl,
|
|
4173
4191
|
models: [
|
|
4174
|
-
// ── V4
|
|
4192
|
+
// ── V4.1 Flash (2026-09):1M context,原生多模态,Thinking / Non-Thinking 双模式 ──
|
|
4193
|
+
// model code 实测取自端点本身:`/v1/models` 只列 `deepseek-flash` 与 `deepseek-v4-pro`,
|
|
4194
|
+
// 传 `deepseek-v4.1-flash` 报 400 并把合法名字写在错误消息里。**不要**按发布公告里的
|
|
4195
|
+
// 版本号拼 code(v0.4.198 的 `glm-5.2[1m]` 就是这么栽的)。
|
|
4175
4196
|
{
|
|
4176
|
-
id: "deepseek-
|
|
4177
|
-
displayName: "DeepSeek V4
|
|
4197
|
+
id: "deepseek-flash",
|
|
4198
|
+
displayName: "DeepSeek V4.1 Flash (multimodal, 1M)",
|
|
4178
4199
|
contextWindow: 1048576,
|
|
4179
4200
|
supportsStreaming: true,
|
|
4180
4201
|
supportsThinking: true
|
|
4181
4202
|
},
|
|
4182
4203
|
{
|
|
4183
|
-
id: "deepseek-v4-
|
|
4184
|
-
displayName: "DeepSeek V4
|
|
4204
|
+
id: "deepseek-v4-pro",
|
|
4205
|
+
displayName: "DeepSeek V4 Pro (text-only; routes to V4.1 Flash from 2026-09-14)",
|
|
4185
4206
|
contextWindow: 1048576,
|
|
4186
4207
|
supportsStreaming: true,
|
|
4187
4208
|
supportsThinking: true
|
|
4188
4209
|
}
|
|
4189
|
-
// Legacy aliases
|
|
4190
|
-
//
|
|
4191
|
-
//
|
|
4192
|
-
//
|
|
4210
|
+
// Legacy aliases:`deepseek-v4-flash` / `deepseek-v4-flash-vision-exp` 的底层模型已退役,
|
|
4211
|
+
// 端点仍接受这两个名字并路由到 V4.1 Flash(实测传 `deepseek-v4-flash` 返回 200 且响应
|
|
4212
|
+
// `model` 字段回显 `deepseek-flash`)。它们不再列进推荐清单,config 里 pin 过的会被
|
|
4213
|
+
// `migrateLegacyModels()` 自愈到 `deepseek-flash`;pricing.ts 保留旧 id 供历史成本回算。
|
|
4214
|
+
// `deepseek-chat` / `deepseek-reasoner` 早在 v0.4.140 移除(2026-07-24 停用)。
|
|
4193
4215
|
]
|
|
4194
4216
|
};
|
|
4195
4217
|
/**
|
|
@@ -7069,9 +7091,10 @@ ${err.message}`;
|
|
|
7069
7091
|
}
|
|
7070
7092
|
if (BINARY_EXTENSIONS.has(ext)) {
|
|
7071
7093
|
if (IMAGE_EXTENSIONS.has(ext)) {
|
|
7094
|
+
const ref = /\s/.test(filePath) ? `@"${filePath}"` : `@${filePath}`;
|
|
7072
7095
|
return `[Image file: ${filePath} (${ext})]
|
|
7073
7096
|
read_file cannot return image content \u2014 tool results are text-only, so no tool can put an image into your context.
|
|
7074
|
-
To have an image looked at, ask the USER to reference it from their input line with
|
|
7097
|
+
To have an image looked at, ask the USER to reference it from their input line with ${ref} (quote the path exactly like that when it contains spaces; they can use a glob for a batch, e.g. @dir/*.png, up to ${MAX_GLOB_MATCHES} at a time). A vision-capable model must be active, or the reference is rejected.
|
|
7075
7098
|
Do NOT claim you inspected this image \u2014 you have not seen it.`;
|
|
7076
7099
|
}
|
|
7077
7100
|
return `[Binary file: ${filePath} (${ext})]
|
|
@@ -17236,7 +17259,7 @@ Cache: write=${cacheCreate} read=${cacheRead}` : "";
|
|
|
17236
17259
|
Cost: ${formatCost(cost)}` : "";
|
|
17237
17260
|
let memoryLine = "";
|
|
17238
17261
|
try {
|
|
17239
|
-
const { countPendingMemories: countPendingMemories2 } = await import("./persistent-memory-
|
|
17262
|
+
const { countPendingMemories: countPendingMemories2 } = await import("./persistent-memory-GKL3V6OV.js");
|
|
17240
17263
|
const pending = countPendingMemories2(ctx.config.getConfigDir());
|
|
17241
17264
|
if (pending > 0) memoryLine = `
|
|
17242
17265
|
Memory: \u26A0 ${pending} pending approval \u2014 see the Memory panel or /memory`;
|
|
@@ -18224,7 +18247,7 @@ async function handleTest(args, ctx) {
|
|
|
18224
18247
|
const isCommand = argStr.includes(" ") || /^(mvn|gradle|npm|pytest|cargo|go)\b/.test(argStr);
|
|
18225
18248
|
testArgs = isCommand ? { command: argStr } : { filter: argStr };
|
|
18226
18249
|
}
|
|
18227
|
-
const runTests = ctx.runTests ?? (await import("./run-tests-
|
|
18250
|
+
const runTests = ctx.runTests ?? (await import("./run-tests-RGDSMN5K.js")).executeTests;
|
|
18228
18251
|
const report = await runTests(testArgs);
|
|
18229
18252
|
ctx.send({ type: "info", message: report });
|
|
18230
18253
|
} catch (err) {
|
|
@@ -18615,7 +18638,7 @@ async function handleMemory(args, ctx) {
|
|
|
18615
18638
|
}
|
|
18616
18639
|
if (intent.kind === "status") {
|
|
18617
18640
|
const { getChatIndexStatus: getChatIndexStatus2 } = await import("./chat-index-RLVLQRRC.js");
|
|
18618
|
-
const { listMemoryEntries: listMemoryEntries2, isMemoryExpired: isMemoryExpired2, formatMemoryForPrompt: formatMemoryForPrompt2 } = await import("./persistent-memory-
|
|
18641
|
+
const { listMemoryEntries: listMemoryEntries2, isMemoryExpired: isMemoryExpired2, formatMemoryForPrompt: formatMemoryForPrompt2 } = await import("./persistent-memory-GKL3V6OV.js");
|
|
18619
18642
|
const memories = listMemoryEntries2(configDir, { includeExpired: true, includeRejected: true });
|
|
18620
18643
|
const injected = formatMemoryForPrompt2(configDir, process.cwd(), ctx.config.get("memory")?.maxChars);
|
|
18621
18644
|
const view = buildMemoryStatusView({
|
|
@@ -18638,7 +18661,7 @@ async function handleMemory(args, ctx) {
|
|
|
18638
18661
|
return;
|
|
18639
18662
|
}
|
|
18640
18663
|
if (intent.kind === "recall") {
|
|
18641
|
-
const { searchPersistentMemories: searchPersistentMemories2, touchMemoryReferences: touchMemoryReferences2 } = await import("./persistent-memory-
|
|
18664
|
+
const { searchPersistentMemories: searchPersistentMemories2, touchMemoryReferences: touchMemoryReferences2 } = await import("./persistent-memory-GKL3V6OV.js");
|
|
18642
18665
|
const { searchChatMemory: searchChatMemory2 } = await import("./chat-index-RLVLQRRC.js");
|
|
18643
18666
|
const persistentHits = searchPersistentMemories2(configDir, intent.query, process.cwd(), 3);
|
|
18644
18667
|
if (persistentHits.length > 0) {
|
|
@@ -18759,7 +18782,7 @@ async function handleMemory(args, ctx) {
|
|
|
18759
18782
|
ctx.handleMemoryManage(intent.action, args[1], intent.action === "expire" ? args[2] : void 0);
|
|
18760
18783
|
} else if (intent.kind === "export") {
|
|
18761
18784
|
if (args[1] === "md") {
|
|
18762
|
-
const { exportMemoryEntries: exportMemoryEntries2 } = await import("./persistent-memory-
|
|
18785
|
+
const { exportMemoryEntries: exportMemoryEntries2 } = await import("./persistent-memory-GKL3V6OV.js");
|
|
18763
18786
|
ctx.send({
|
|
18764
18787
|
type: "export_data",
|
|
18765
18788
|
format: "md",
|
|
@@ -19764,7 +19787,7 @@ No tools match "${filter}".
|
|
|
19764
19787
|
const { join: join26 } = await import("path");
|
|
19765
19788
|
const { existsSync: existsSync32 } = await import("fs");
|
|
19766
19789
|
const { getGitRoot: getGitRoot2 } = await import("./git-context-VNCA2GU7.js");
|
|
19767
|
-
const { MCP_PROJECT_CONFIG_NAME: MCP_PROJECT_CONFIG_NAME2 } = await import("./constants-
|
|
19790
|
+
const { MCP_PROJECT_CONFIG_NAME: MCP_PROJECT_CONFIG_NAME2 } = await import("./constants-5H5VNSST.js");
|
|
19768
19791
|
const { approveProject, hashMcpFile } = await import("./project-trust-6CJB5ZMX.js");
|
|
19769
19792
|
const cwd = process.cwd();
|
|
19770
19793
|
const projectRoot = getGitRoot2(cwd) ?? cwd;
|
|
@@ -20683,7 +20706,7 @@ function createReviewCommands() {
|
|
|
20683
20706
|
usage: "/test [command|filter]",
|
|
20684
20707
|
async execute(args, ctx) {
|
|
20685
20708
|
try {
|
|
20686
|
-
const { executeTests } = await import("./run-tests-
|
|
20709
|
+
const { executeTests } = await import("./run-tests-RGDSMN5K.js");
|
|
20687
20710
|
const argStr = args.join(" ").trim();
|
|
20688
20711
|
let testArgs = {};
|
|
20689
20712
|
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-
|
|
161
|
+
const { TaskOrchestrator } = await import("./task-orchestrator-IC5WWIY3.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-
|
|
27
|
+
} from "./chunk-MKQZEKX5.js";
|
|
28
28
|
import {
|
|
29
29
|
CostTracker,
|
|
30
30
|
getPricing,
|
|
31
31
|
setCostCurrency
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-LONB36SP.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-
|
|
50
|
+
} from "./chunk-WKPPGB7V.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-
|
|
63
|
+
} from "./chunk-3YZGQIDN.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-
|
|
84
|
+
} from "./chunk-TF5343WH.js";
|
|
85
85
|
import {
|
|
86
86
|
getActivePluginAssets,
|
|
87
87
|
getPendingHookTrust,
|
|
88
88
|
installFlushOnExit,
|
|
89
89
|
mergePluginHooks,
|
|
90
90
|
runLifecycleHooks
|
|
91
|
-
} from "./chunk-
|
|
91
|
+
} from "./chunk-WKAILZFD.js";
|
|
92
92
|
import "./chunk-RS7SKYTS.js";
|
|
93
93
|
import {
|
|
94
94
|
ProviderRegistry,
|
|
95
95
|
listBuiltInProviderMetadata
|
|
96
|
-
} from "./chunk-
|
|
96
|
+
} from "./chunk-EHMMBIZT.js";
|
|
97
97
|
import {
|
|
98
98
|
ConfigManager
|
|
99
|
-
} from "./chunk-
|
|
99
|
+
} from "./chunk-LCVJYA32.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-
|
|
137
|
+
} from "./chunk-WKNVMMCN.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-
|
|
155
|
+
} from "./chunk-SXWQKEU4.js";
|
|
156
156
|
import "./chunk-SXIJLSVF.js";
|
|
157
157
|
|
|
158
158
|
// src/index.ts
|
|
@@ -1077,7 +1077,10 @@ function getVisionModelHint(model, provider) {
|
|
|
1077
1077
|
if (bare.includes("vision") || bare.includes("vl") || bare.includes("5v") || // glm-5v-turbo
|
|
1078
1078
|
bare.endsWith(".6v") || // glm-4.6v
|
|
1079
1079
|
bare === "glm-5.3-flash" || // GLM-5 系列首个原生多模态(名字里没有 v,得单独认)
|
|
1080
|
-
|
|
1080
|
+
// DeepSeek V4.1 Flash(2026-09)原生多模态。放在这条通用规则里而不是只写进下面的
|
|
1081
|
+
// deepseek 分支,是为了让 OpenRouter 的 `deepseek/deepseek-flash` 也一并放行——
|
|
1082
|
+
// 按 provider 分支写就会重演 v0.4.295「同一个坑换个前缀又漏一次」。
|
|
1083
|
+
bare.startsWith("deepseek-flash") || bare.endsWith("-v")) return null;
|
|
1081
1084
|
if (provider === "kimi") {
|
|
1082
1085
|
if (model.startsWith("moonshot-v1-")) {
|
|
1083
1086
|
const visionModel = model + "-vision-preview";
|
|
@@ -1089,7 +1092,8 @@ function getVisionModelHint(model, provider) {
|
|
|
1089
1092
|
return `model "${model}" does not support images. Use /model glm-5.3-flash (or glm-4.6v)`;
|
|
1090
1093
|
}
|
|
1091
1094
|
if (provider === "deepseek") {
|
|
1092
|
-
|
|
1095
|
+
if (bare.startsWith("deepseek-v4-flash")) return null;
|
|
1096
|
+
return `model "${model}" does not support images. Use /model deepseek-flash (DeepSeek V4.1 Flash)`;
|
|
1093
1097
|
}
|
|
1094
1098
|
return `model "${model}" may not support image input`;
|
|
1095
1099
|
}
|
|
@@ -1121,21 +1125,41 @@ function expandGlob(rawPath, cwd) {
|
|
|
1121
1125
|
return { kind: "ok", files };
|
|
1122
1126
|
}
|
|
1123
1127
|
var MAX_PATH_SPACE_TOKENS = 8;
|
|
1128
|
+
function stripQuoteChars(s) {
|
|
1129
|
+
return s.replace(/["']/g, "");
|
|
1130
|
+
}
|
|
1131
|
+
function quotesBalanced(s) {
|
|
1132
|
+
const dq = (s.match(/"/g) ?? []).length;
|
|
1133
|
+
const sq = (s.match(/'/g) ?? []).length;
|
|
1134
|
+
return dq % 2 === 0 && sq % 2 === 0 && (dq > 0 || sq > 0);
|
|
1135
|
+
}
|
|
1124
1136
|
function expandUnquotedPath(input, pathStart, rawPath, cwd) {
|
|
1125
|
-
const plain = {
|
|
1137
|
+
const plain = { text: rawPath, path: rawPath, consumed: rawPath.length };
|
|
1126
1138
|
if (existsSync2(resolve(cwd, rawPath))) return plain;
|
|
1127
1139
|
let acc = rawPath;
|
|
1128
1140
|
let consumed = rawPath.length;
|
|
1129
1141
|
let rest = input.slice(pathStart + rawPath.length);
|
|
1142
|
+
let balancedFallback = null;
|
|
1143
|
+
const dequoted = stripQuoteChars(acc);
|
|
1144
|
+
if (dequoted !== acc && existsSync2(resolve(cwd, dequoted))) {
|
|
1145
|
+
return { text: acc, path: dequoted, consumed };
|
|
1146
|
+
}
|
|
1130
1147
|
for (let i = 0; i < MAX_PATH_SPACE_TOKENS; i++) {
|
|
1131
1148
|
const next = /^([ \t]+)(\S+)/.exec(rest);
|
|
1132
1149
|
if (!next) break;
|
|
1133
1150
|
acc += next[1] + next[2];
|
|
1134
1151
|
consumed += next[0].length;
|
|
1135
1152
|
rest = rest.slice(next[0].length);
|
|
1136
|
-
if (existsSync2(resolve(cwd, acc))) return {
|
|
1153
|
+
if (existsSync2(resolve(cwd, acc))) return { text: acc, path: acc, consumed };
|
|
1154
|
+
const candidate = stripQuoteChars(acc);
|
|
1155
|
+
if (candidate !== acc) {
|
|
1156
|
+
if (existsSync2(resolve(cwd, candidate))) return { text: acc, path: candidate, consumed };
|
|
1157
|
+
if (balancedFallback === null && quotesBalanced(acc)) {
|
|
1158
|
+
balancedFallback = { text: acc, path: candidate, consumed };
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1137
1161
|
}
|
|
1138
|
-
return plain;
|
|
1162
|
+
return balancedFallback ?? plain;
|
|
1139
1163
|
}
|
|
1140
1164
|
function parseAtReferences(input, cwd) {
|
|
1141
1165
|
const atPattern = /@(?:"([^"]+)"|'([^']+)'|(\S+))/g;
|
|
@@ -1149,9 +1173,9 @@ function parseAtReferences(input, cwd) {
|
|
|
1149
1173
|
if (match[3] !== void 0) {
|
|
1150
1174
|
const pathStart = match.index + 1;
|
|
1151
1175
|
const expanded = expandUnquotedPath(input, pathStart, rawPath, cwd);
|
|
1152
|
-
if (expanded.consumed > rawPath.length) {
|
|
1153
|
-
rawPath = expanded.
|
|
1154
|
-
matchedText = "@" + expanded.
|
|
1176
|
+
if (expanded.consumed > rawPath.length || expanded.path !== rawPath) {
|
|
1177
|
+
rawPath = expanded.path;
|
|
1178
|
+
matchedText = "@" + expanded.text;
|
|
1155
1179
|
atPattern.lastIndex = pathStart + expanded.consumed;
|
|
1156
1180
|
}
|
|
1157
1181
|
}
|
|
@@ -4064,7 +4088,7 @@ program.command("web").description("Start Web UI server with browser-based chat
|
|
|
4064
4088
|
console.error("Error: Invalid port number. Must be between 1 and 65535.");
|
|
4065
4089
|
process.exit(1);
|
|
4066
4090
|
}
|
|
4067
|
-
const { startWebServer } = await import("./server-
|
|
4091
|
+
const { startWebServer } = await import("./server-4YPZGX3J.js");
|
|
4068
4092
|
await startWebServer({ port, host: options.host, externalOrigin: options.externalOrigin });
|
|
4069
4093
|
});
|
|
4070
4094
|
program.command("user [action] [username]").description("Manage Web UI users (list | create <name> | delete <name> | reset-password <name> | logout-all <name> | migrate <name>)").action(async (action, username) => {
|
|
@@ -4231,11 +4255,11 @@ program.command("sessions").description("List recent conversation sessions").opt
|
|
|
4231
4255
|
console.log(footer + "\n");
|
|
4232
4256
|
});
|
|
4233
4257
|
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) => {
|
|
4234
|
-
const { runUsageCli } = await import("./usage-
|
|
4258
|
+
const { runUsageCli } = await import("./usage-J2ALUUKQ.js");
|
|
4235
4259
|
await runUsageCli(options);
|
|
4236
4260
|
});
|
|
4237
4261
|
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) => {
|
|
4238
|
-
const { runDoctorCli } = await import("./doctor-cli-
|
|
4262
|
+
const { runDoctorCli } = await import("./doctor-cli-GMM6AOFR.js");
|
|
4239
4263
|
const argv = process.argv.slice(2);
|
|
4240
4264
|
await runDoctorCli({
|
|
4241
4265
|
json: !!options.json || argv.includes("--json"),
|
|
@@ -4244,7 +4268,7 @@ program.command("doctor").description("Health check: API keys, config, MCP, rece
|
|
|
4244
4268
|
});
|
|
4245
4269
|
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) => {
|
|
4246
4270
|
try {
|
|
4247
|
-
const batch = await import("./batch-
|
|
4271
|
+
const batch = await import("./batch-O5SXWZ4D.js");
|
|
4248
4272
|
switch (action) {
|
|
4249
4273
|
case "submit":
|
|
4250
4274
|
if (!arg) {
|
|
@@ -4287,7 +4311,7 @@ program.command("batch <action> [arg] [arg2]").description("Anthropic Message Ba
|
|
|
4287
4311
|
}
|
|
4288
4312
|
});
|
|
4289
4313
|
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) => {
|
|
4290
|
-
const { startMcpServer } = await import("./server-
|
|
4314
|
+
const { startMcpServer } = await import("./server-HONA3NPQ.js");
|
|
4291
4315
|
await startMcpServer({
|
|
4292
4316
|
allowDestructive: !!options.allowDestructive,
|
|
4293
4317
|
allowOutsideCwd: !!options.allowOutsideCwd,
|
|
@@ -4300,7 +4324,7 @@ program.command("pr <action> [target]").description("PR review helpers: review |
|
|
|
4300
4324
|
console.error(`Unknown pr action: ${action}. Use review | security-review | summarize.`);
|
|
4301
4325
|
process.exit(1);
|
|
4302
4326
|
}
|
|
4303
|
-
const { runPrCli } = await import("./pr-
|
|
4327
|
+
const { runPrCli } = await import("./pr-ROHHZXSS.js");
|
|
4304
4328
|
const result = await runPrCli({
|
|
4305
4329
|
action,
|
|
4306
4330
|
target,
|
|
@@ -4320,8 +4344,8 @@ program.command("pr <action> [target]").description("PR review helpers: review |
|
|
|
4320
4344
|
process.exit(result.exitCode);
|
|
4321
4345
|
});
|
|
4322
4346
|
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) => {
|
|
4323
|
-
const { runCi } = await import("./ci-
|
|
4324
|
-
const { formatCiResult } = await import("./ci-format-
|
|
4347
|
+
const { runCi } = await import("./ci-M4K3JCYV.js");
|
|
4348
|
+
const { formatCiResult } = await import("./ci-format-EHIWLOUS.js");
|
|
4325
4349
|
const formats = [options.json, options.markdown, options.sarif].filter(Boolean).length;
|
|
4326
4350
|
if (formats > 1) {
|
|
4327
4351
|
console.error("Choose only one output format: --json, --markdown, or --sarif.");
|
|
@@ -4480,7 +4504,7 @@ program.command("hub [topic]").description("Start multi-agent hub (discuss / bra
|
|
|
4480
4504
|
config.get("customProviders"),
|
|
4481
4505
|
config.getConfigDir()
|
|
4482
4506
|
);
|
|
4483
|
-
const { startHub } = await import("./hub-
|
|
4507
|
+
const { startHub } = await import("./hub-55SCA6IZ.js");
|
|
4484
4508
|
await startHub(
|
|
4485
4509
|
{
|
|
4486
4510
|
topic: topic ?? "",
|
|
@@ -27,11 +27,11 @@ import {
|
|
|
27
27
|
touchMemoryReferences,
|
|
28
28
|
updateMemoryApproval,
|
|
29
29
|
updateMemoryEntry
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-QGOHEDYN.js";
|
|
31
31
|
import "./chunk-FSC6KEWU.js";
|
|
32
32
|
import "./chunk-2XMUCC42.js";
|
|
33
33
|
import "./chunk-CGLYJRFA.js";
|
|
34
|
-
import "./chunk-
|
|
34
|
+
import "./chunk-TSACXF4M.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-
|
|
31
|
+
} from "./chunk-3YZGQIDN.js";
|
|
32
32
|
import "./chunk-3FEZSLGI.js";
|
|
33
33
|
import "./chunk-HOSJZMQS.js";
|
|
34
34
|
import "./chunk-BMLQPSHP.js";
|
|
35
|
-
import "./chunk-
|
|
35
|
+
import "./chunk-SXWQKEU4.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-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-5J4KKOEK.js";
|
|
6
|
+
import "./chunk-A7WJGEXR.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-
|
|
17
|
+
} from "./chunk-EHMMBIZT.js";
|
|
18
18
|
import {
|
|
19
19
|
ConfigManager
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-LCVJYA32.js";
|
|
21
21
|
import "./chunk-RMEJR3AW.js";
|
|
22
22
|
import "./chunk-TU3L3PW7.js";
|
|
23
23
|
import "./chunk-BMLQPSHP.js";
|
|
24
24
|
import {
|
|
25
25
|
VERSION
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-SXWQKEU4.js";
|
|
27
27
|
|
|
28
28
|
// src/cli/pr.ts
|
|
29
29
|
import { execFileSync } from "child_process";
|
|
@@ -2,9 +2,9 @@ import {
|
|
|
2
2
|
executeTests,
|
|
3
3
|
runTestProcess,
|
|
4
4
|
runTestsTool
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-3YEUWSKJ.js";
|
|
6
6
|
import "./chunk-QMFMST2T.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-TSACXF4M.js";
|
|
8
8
|
export {
|
|
9
9
|
executeTests,
|
|
10
10
|
runTestProcess,
|
|
@@ -86,7 +86,7 @@ import {
|
|
|
86
86
|
skillHistoryNote,
|
|
87
87
|
snapshotFile,
|
|
88
88
|
stripRoutingTags
|
|
89
|
-
} from "./chunk-
|
|
89
|
+
} from "./chunk-MKQZEKX5.js";
|
|
90
90
|
import {
|
|
91
91
|
CNY_PER_USD,
|
|
92
92
|
CostTracker,
|
|
@@ -95,7 +95,7 @@ import {
|
|
|
95
95
|
getCostCurrency,
|
|
96
96
|
getPricing,
|
|
97
97
|
setCostCurrency
|
|
98
|
-
} from "./chunk-
|
|
98
|
+
} from "./chunk-LONB36SP.js";
|
|
99
99
|
import {
|
|
100
100
|
DEFAULT_MAX_TOOL_OUTPUT_CHARS,
|
|
101
101
|
ToolExecutor,
|
|
@@ -130,7 +130,7 @@ import {
|
|
|
130
130
|
spawnAgentContext,
|
|
131
131
|
truncateOutput,
|
|
132
132
|
undoStack
|
|
133
|
-
} from "./chunk-
|
|
133
|
+
} from "./chunk-WKPPGB7V.js";
|
|
134
134
|
import {
|
|
135
135
|
buildReviewPrompt,
|
|
136
136
|
buildSecurityReviewPrompt
|
|
@@ -157,7 +157,7 @@ import {
|
|
|
157
157
|
restoreMemoryEntries,
|
|
158
158
|
updateMemoryApproval,
|
|
159
159
|
updateMemoryEntry
|
|
160
|
-
} from "./chunk-
|
|
160
|
+
} from "./chunk-3YZGQIDN.js";
|
|
161
161
|
import "./chunk-RWRZVQCB.js";
|
|
162
162
|
import "./chunk-B3MPYI4E.js";
|
|
163
163
|
import "./chunk-M6HLYG33.js";
|
|
@@ -176,7 +176,7 @@ import {
|
|
|
176
176
|
buildDoctorReport,
|
|
177
177
|
formatDoctorReport,
|
|
178
178
|
loadContextFiles
|
|
179
|
-
} from "./chunk-
|
|
179
|
+
} from "./chunk-TF5343WH.js";
|
|
180
180
|
import {
|
|
181
181
|
describePlugin,
|
|
182
182
|
getActivePluginAssets,
|
|
@@ -191,14 +191,14 @@ import {
|
|
|
191
191
|
runTool,
|
|
192
192
|
setPluginEnabled,
|
|
193
193
|
trustPlugin
|
|
194
|
-
} from "./chunk-
|
|
194
|
+
} from "./chunk-WKAILZFD.js";
|
|
195
195
|
import "./chunk-RS7SKYTS.js";
|
|
196
196
|
import {
|
|
197
197
|
ProviderRegistry
|
|
198
|
-
} from "./chunk-
|
|
198
|
+
} from "./chunk-EHMMBIZT.js";
|
|
199
199
|
import {
|
|
200
200
|
ConfigManager
|
|
201
|
-
} from "./chunk-
|
|
201
|
+
} from "./chunk-LCVJYA32.js";
|
|
202
202
|
import {
|
|
203
203
|
CONTENT_ONLY_STREAM_REMINDER,
|
|
204
204
|
TEE_FINAL_USER_NUDGE,
|
|
@@ -231,7 +231,7 @@ import {
|
|
|
231
231
|
import {
|
|
232
232
|
assertReadablePath
|
|
233
233
|
} from "./chunk-JJFJWD35.js";
|
|
234
|
-
import "./chunk-
|
|
234
|
+
import "./chunk-WKNVMMCN.js";
|
|
235
235
|
import {
|
|
236
236
|
AGENTIC_BEHAVIOR_GUIDELINE,
|
|
237
237
|
AUTHOR,
|
|
@@ -247,7 +247,7 @@ import {
|
|
|
247
247
|
SKILLS_DIR_NAME,
|
|
248
248
|
VERSION,
|
|
249
249
|
buildUserIdentityPrompt
|
|
250
|
-
} from "./chunk-
|
|
250
|
+
} from "./chunk-SXWQKEU4.js";
|
|
251
251
|
import {
|
|
252
252
|
runWithExecutionContext,
|
|
253
253
|
runWithSessionKey
|
|
@@ -978,7 +978,7 @@ Cache: write=${cacheCreate} read=${cacheRead}` : "";
|
|
|
978
978
|
Cost: ${formatCost(cost)}` : "";
|
|
979
979
|
let memoryLine = "";
|
|
980
980
|
try {
|
|
981
|
-
const { countPendingMemories: countPendingMemories2 } = await import("./persistent-memory-
|
|
981
|
+
const { countPendingMemories: countPendingMemories2 } = await import("./persistent-memory-WV7EXQKP.js");
|
|
982
982
|
const pending = countPendingMemories2(ctx.config.getConfigDir());
|
|
983
983
|
if (pending > 0) memoryLine = `
|
|
984
984
|
Memory: \u26A0 ${pending} pending approval \u2014 see the Memory panel or /memory`;
|
|
@@ -1907,7 +1907,7 @@ async function handleTest(args, ctx) {
|
|
|
1907
1907
|
const isCommand = argStr.includes(" ") || /^(mvn|gradle|npm|pytest|cargo|go)\b/.test(argStr);
|
|
1908
1908
|
testArgs = isCommand ? { command: argStr } : { filter: argStr };
|
|
1909
1909
|
}
|
|
1910
|
-
const runTests = ctx.runTests ?? (await import("./run-tests-
|
|
1910
|
+
const runTests = ctx.runTests ?? (await import("./run-tests-EI4HRC7T.js")).executeTests;
|
|
1911
1911
|
const report = await runTests(testArgs);
|
|
1912
1912
|
ctx.send({ type: "info", message: report });
|
|
1913
1913
|
} catch (err) {
|
|
@@ -2183,7 +2183,7 @@ async function handleMemory(args, ctx) {
|
|
|
2183
2183
|
}
|
|
2184
2184
|
if (intent.kind === "status") {
|
|
2185
2185
|
const { getChatIndexStatus } = await import("./chat-index-7CLR4CBG.js");
|
|
2186
|
-
const { listMemoryEntries: listMemoryEntries2, isMemoryExpired: isMemoryExpired2, formatMemoryForPrompt: formatMemoryForPrompt2 } = await import("./persistent-memory-
|
|
2186
|
+
const { listMemoryEntries: listMemoryEntries2, isMemoryExpired: isMemoryExpired2, formatMemoryForPrompt: formatMemoryForPrompt2 } = await import("./persistent-memory-WV7EXQKP.js");
|
|
2187
2187
|
const memories = listMemoryEntries2(configDir, { includeExpired: true, includeRejected: true });
|
|
2188
2188
|
const injected = formatMemoryForPrompt2(configDir, process.cwd(), ctx.config.get("memory")?.maxChars);
|
|
2189
2189
|
const view = buildMemoryStatusView({
|
|
@@ -2206,7 +2206,7 @@ async function handleMemory(args, ctx) {
|
|
|
2206
2206
|
return;
|
|
2207
2207
|
}
|
|
2208
2208
|
if (intent.kind === "recall") {
|
|
2209
|
-
const { searchPersistentMemories, touchMemoryReferences } = await import("./persistent-memory-
|
|
2209
|
+
const { searchPersistentMemories, touchMemoryReferences } = await import("./persistent-memory-WV7EXQKP.js");
|
|
2210
2210
|
const { searchChatMemory } = await import("./chat-index-7CLR4CBG.js");
|
|
2211
2211
|
const persistentHits = searchPersistentMemories(configDir, intent.query, process.cwd(), 3);
|
|
2212
2212
|
if (persistentHits.length > 0) {
|
|
@@ -2327,7 +2327,7 @@ async function handleMemory(args, ctx) {
|
|
|
2327
2327
|
ctx.handleMemoryManage(intent.action, args[1], intent.action === "expire" ? args[2] : void 0);
|
|
2328
2328
|
} else if (intent.kind === "export") {
|
|
2329
2329
|
if (args[1] === "md") {
|
|
2330
|
-
const { exportMemoryEntries: exportMemoryEntries2 } = await import("./persistent-memory-
|
|
2330
|
+
const { exportMemoryEntries: exportMemoryEntries2 } = await import("./persistent-memory-WV7EXQKP.js");
|
|
2331
2331
|
ctx.send({
|
|
2332
2332
|
type: "export_data",
|
|
2333
2333
|
format: "md",
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ToolRegistry
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-WKPPGB7V.js";
|
|
5
5
|
import "./chunk-6JHACXB3.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-3YZGQIDN.js";
|
|
7
7
|
import "./chunk-RWRZVQCB.js";
|
|
8
8
|
import "./chunk-B3MPYI4E.js";
|
|
9
9
|
import "./chunk-M6HLYG33.js";
|
|
@@ -14,7 +14,7 @@ import "./chunk-JL44HGZC.js";
|
|
|
14
14
|
import "./chunk-3FEZSLGI.js";
|
|
15
15
|
import {
|
|
16
16
|
runTool
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-WKAILZFD.js";
|
|
18
18
|
import "./chunk-RS7SKYTS.js";
|
|
19
19
|
import {
|
|
20
20
|
getDangerLevel,
|
|
@@ -24,10 +24,10 @@ import "./chunk-TU3L3PW7.js";
|
|
|
24
24
|
import "./chunk-HOSJZMQS.js";
|
|
25
25
|
import "./chunk-BMLQPSHP.js";
|
|
26
26
|
import "./chunk-JJFJWD35.js";
|
|
27
|
-
import "./chunk-
|
|
27
|
+
import "./chunk-WKNVMMCN.js";
|
|
28
28
|
import {
|
|
29
29
|
VERSION
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-SXWQKEU4.js";
|
|
31
31
|
import "./chunk-SXIJLSVF.js";
|
|
32
32
|
|
|
33
33
|
// src/mcp/server.ts
|
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
googleSearchContext,
|
|
5
5
|
isToolCapableProvider,
|
|
6
6
|
truncateOutput
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WKPPGB7V.js";
|
|
8
8
|
import "./chunk-6JHACXB3.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-3YZGQIDN.js";
|
|
10
10
|
import "./chunk-RWRZVQCB.js";
|
|
11
11
|
import "./chunk-B3MPYI4E.js";
|
|
12
12
|
import "./chunk-M6HLYG33.js";
|
|
@@ -17,7 +17,7 @@ import "./chunk-JL44HGZC.js";
|
|
|
17
17
|
import "./chunk-3FEZSLGI.js";
|
|
18
18
|
import {
|
|
19
19
|
runTool
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-WKAILZFD.js";
|
|
21
21
|
import "./chunk-RS7SKYTS.js";
|
|
22
22
|
import {
|
|
23
23
|
getDangerLevel,
|
|
@@ -29,10 +29,10 @@ import {
|
|
|
29
29
|
atomicWriteFileSync
|
|
30
30
|
} from "./chunk-BMLQPSHP.js";
|
|
31
31
|
import "./chunk-JJFJWD35.js";
|
|
32
|
-
import "./chunk-
|
|
32
|
+
import "./chunk-WKNVMMCN.js";
|
|
33
33
|
import {
|
|
34
34
|
SUBAGENT_ALLOWED_TOOLS
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-SXWQKEU4.js";
|
|
36
36
|
import "./chunk-SXIJLSVF.js";
|
|
37
37
|
|
|
38
38
|
// src/hub/task-orchestrator.ts
|
|
@@ -5,14 +5,14 @@ import {
|
|
|
5
5
|
formatCost,
|
|
6
6
|
getPricing,
|
|
7
7
|
setCostCurrency
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-LONB36SP.js";
|
|
9
9
|
import "./chunk-RS7SKYTS.js";
|
|
10
10
|
import {
|
|
11
11
|
ConfigManager
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-LCVJYA32.js";
|
|
13
13
|
import "./chunk-TU3L3PW7.js";
|
|
14
14
|
import "./chunk-BMLQPSHP.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-SXWQKEU4.js";
|
|
16
16
|
|
|
17
17
|
// src/cli/usage.ts
|
|
18
18
|
function classifyRowCost(row) {
|