@hileeon/mcc 0.1.9 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/accounts/store.d.ts +11 -0
- package/dist/accounts/store.d.ts.map +1 -1
- package/dist/accounts/store.js.map +1 -1
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +8 -4
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/profile-test.d.ts +17 -0
- package/dist/commands/profile-test.d.ts.map +1 -0
- package/dist/commands/profile-test.js +188 -0
- package/dist/commands/profile-test.js.map +1 -0
- package/dist/core/model-router.d.ts.map +1 -1
- package/dist/core/model-router.js +31 -1
- package/dist/core/model-router.js.map +1 -1
- package/dist/dashboard/server.js +118 -30
- package/dist/dashboard/server.js.map +1 -1
- package/dist/mcc.js +6 -0
- package/dist/mcc.js.map +1 -1
- package/dist/mcp/installer.d.ts.map +1 -1
- package/dist/mcp/installer.js +5 -2
- package/dist/mcp/installer.js.map +1 -1
- package/dist/mcp/mcp-config.d.ts +17 -3
- package/dist/mcp/mcp-config.d.ts.map +1 -1
- package/dist/mcp/mcp-config.js +38 -19
- package/dist/mcp/mcp-config.js.map +1 -1
- package/dist/proxy/proxy-daemon.d.ts +1 -1
- package/dist/proxy/proxy-daemon.d.ts.map +1 -1
- package/dist/proxy/proxy-daemon.js +10 -5
- package/dist/proxy/proxy-daemon.js.map +1 -1
- package/dist/proxy/proxy-entry.js +6 -1
- package/dist/proxy/proxy-entry.js.map +1 -1
- package/dist/proxy/proxy-paths.d.ts +1 -0
- package/dist/proxy/proxy-paths.d.ts.map +1 -1
- package/dist/proxy/proxy-paths.js.map +1 -1
- package/dist/proxy/proxy-server.d.ts +1 -0
- package/dist/proxy/proxy-server.d.ts.map +1 -1
- package/dist/proxy/proxy-server.js +84 -2
- package/dist/proxy/proxy-server.js.map +1 -1
- package/dist/shared/provider-preset-catalog.d.ts +2 -0
- package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
- package/dist/shared/provider-preset-catalog.js +31 -22
- package/dist/shared/provider-preset-catalog.js.map +1 -1
- package/dist/shared/test-image.d.ts +15 -0
- package/dist/shared/test-image.d.ts.map +1 -0
- package/dist/shared/test-image.js +89 -0
- package/dist/shared/test-image.js.map +1 -0
- package/dist/ui/assets/{index-ClqmrjNk.js → index-7kowlJw9.js} +7 -7
- package/dist/ui/assets/{index-CwMwQ-Z4.css → index-DnC-lskL.css} +1 -1
- package/dist/ui/index.html +2 -2
- package/lib/mcp-hooks/image-analysis-runtime.cjs +58 -5
- package/lib/shared/logger.cjs +5 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,6 +19,8 @@ mcc profile add <name> # 添加 profile
|
|
|
19
19
|
mcc profile list # 查看所有 profile
|
|
20
20
|
mcc profile remove <name> # 删除 profile
|
|
21
21
|
mcc profile default [name] # 设默认 profile
|
|
22
|
+
mcc profile test [name...] # 体检 profile(验 key + 余额)
|
|
23
|
+
mcc profile test x --vision # 额外探测主模型能否识图
|
|
22
24
|
mcc mcp list # 查看可用 MCP 工具
|
|
23
25
|
mcc mcp add --name <id> --command <cmd> # 添加外部 MCP 工具
|
|
24
26
|
mcc mcp remove <name> # 删除外部 MCP 工具
|
|
@@ -32,6 +34,7 @@ mcc config # 打开 Web 配置控制台
|
|
|
32
34
|
- **多 profile 管理**:API key 存 `~/.mcc/profiles/<name>/.key`,元数据存 `~/.mcc/profiles.json`
|
|
33
35
|
- **实例隔离**:每个 profile 独立 `CLAUDE_CONFIG_DIR`,位于 `~/.mcc/instances/<name>/`
|
|
34
36
|
- **OpenAI 兼容模式**:`--protocol openai` 时自动启动本地翻译 proxy(端口 43456-43555),转发 OpenAI 格式请求到 upstream Anthropic 兼容端点
|
|
37
|
+
- **思考模式**:profile 支持 `reasoningEffort`,默认开启思考;强度以 Claude Code 自身的 `/effort`/Tab 为准并自动映射到各 provider,`reasoningEffort` 仅作兜底默认
|
|
35
38
|
- **Tiered model**:profile 支持 `opusModel`/`sonnetModel`/`haikuModel` 三级模型切换
|
|
36
39
|
- **内置 MCP**:`mcc-websearch`(多源搜索)和 `mcc-image-analysis`(图片/PDF 分析)
|
|
37
40
|
- **外部 MCP**:通过 `mcc mcp add` 注册第三方 MCP server,支持 `${MCC_PROVIDER_KEY:<providerId>}` 引用 provider API key
|
package/dist/accounts/store.d.ts
CHANGED
|
@@ -8,6 +8,16 @@
|
|
|
8
8
|
* └── <profile-name>/
|
|
9
9
|
* └── .key # API key (plain text)
|
|
10
10
|
*/
|
|
11
|
+
/**
|
|
12
|
+
* Thinking / reasoning intensity. Normalized across providers; how it maps:
|
|
13
|
+
* - openai-protocol → injected by the proxy as provider-specific params
|
|
14
|
+
* (Qwen: enable_thinking + thinking_budget; GLM: thinking{enabled} + reasoning_effort;
|
|
15
|
+
* generic: reasoning_effort, max clamped to high).
|
|
16
|
+
* - anthropic-protocol → exported as CLAUDE_CODE_EFFORT_LEVEL (honored by DeepSeek;
|
|
17
|
+
* a harmless no-op for providers like Kimi/MiMo whose thinking is binary always-on).
|
|
18
|
+
* Undefined is treated as 'high' (thinking on). 'off' disables.
|
|
19
|
+
*/
|
|
20
|
+
export type ReasoningEffort = 'off' | 'low' | 'medium' | 'high' | 'max';
|
|
11
21
|
export interface Profile {
|
|
12
22
|
name: string;
|
|
13
23
|
displayName?: string;
|
|
@@ -18,6 +28,7 @@ export interface Profile {
|
|
|
18
28
|
haikuModel?: string;
|
|
19
29
|
protocol?: 'anthropic' | 'openai';
|
|
20
30
|
proxyChatCompletionsPath?: string;
|
|
31
|
+
reasoningEffort?: ReasoningEffort;
|
|
21
32
|
createdAt: string;
|
|
22
33
|
lastUsedAt?: string;
|
|
23
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/accounts/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiBH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0BD,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAExC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE5D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEtD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAOlE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIjE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAUhD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKpD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD"}
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/accounts/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiBH;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAExE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0BD,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAExC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE5D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEtD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAOlE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIjE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAUhD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKpD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/accounts/store.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/accounts/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgH7D"}
|
package/dist/commands/launch.js
CHANGED
|
@@ -83,14 +83,13 @@ async function cmdLaunch(args) {
|
|
|
83
83
|
const wsProviders = (0, mcp_config_1.getEnabledWebSearchProviders)(mcpConfig);
|
|
84
84
|
const iaProvider = (0, mcp_config_1.getActiveImageAnalysisProvider)(mcpConfig);
|
|
85
85
|
const instancePath = await instanceMgr.ensureInstance(profileName);
|
|
86
|
-
console.log(` ${picocolors_1.default.dim('instance')} ${picocolors_1.default.dim(instancePath)}`);
|
|
87
86
|
(0, installer_1.syncInstanceMcpServers)(instancePath, registry_1.BUILTIN_MCP_SERVERS.map((s) => s.name), profileName);
|
|
88
87
|
// Initialize logging session
|
|
89
88
|
const sessionId = (0, logger_1.makeSessionId)();
|
|
90
89
|
const mccHome = process.env.MCC_HOME ?? path.join(process.env.HOME ?? process.env.USERPROFILE ?? '~', '.mcc');
|
|
91
90
|
const logDir = path.join(mccHome, 'logs', profileName, 'sessions', sessionId);
|
|
92
91
|
(0, logger_1.init)(sessionId, logDir);
|
|
93
|
-
logger_1.log.
|
|
92
|
+
logger_1.log.debug('MCC', `Session starting: ${profileName} | log: ${logDir}`);
|
|
94
93
|
console.log(` ${picocolors_1.default.dim('session')} ${picocolors_1.default.dim(sessionId)}`);
|
|
95
94
|
// MCP provider summary
|
|
96
95
|
if (wsProviders.length > 0) {
|
|
@@ -111,8 +110,13 @@ async function cmdLaunch(args) {
|
|
|
111
110
|
env.MCC_CURRENT_PROFILE = profileName;
|
|
112
111
|
env.MCC_LOG_SESSION_ID = sessionId;
|
|
113
112
|
env.MCC_LOG_DIR = logDir;
|
|
114
|
-
//
|
|
113
|
+
// Preserve full color depth — without this Claude Code's TUI looks dim when
|
|
114
|
+
// spawned as a child process (TTY color detection can downgrade).
|
|
115
|
+
env.FORCE_COLOR = '3';
|
|
116
|
+
env.COLORTERM = 'truecolor';
|
|
117
|
+
// Debug: instance path + key env vars (no secrets)
|
|
115
118
|
if ((0, logger_1.isDebugEnabled)()) {
|
|
119
|
+
console.log(` ${picocolors_1.default.dim('instance')} ${picocolors_1.default.dim(instancePath)}`);
|
|
116
120
|
const debugEnvs = [
|
|
117
121
|
['ANTHROPIC_BASE_URL', env.ANTHROPIC_BASE_URL],
|
|
118
122
|
['ANTHROPIC_MODEL', env.ANTHROPIC_MODEL],
|
|
@@ -134,7 +138,7 @@ async function cmdLaunch(args) {
|
|
|
134
138
|
// Start translation proxy for OpenAI-compatible profiles
|
|
135
139
|
if (profile.protocol === 'openai') {
|
|
136
140
|
try {
|
|
137
|
-
const proxyInfo = await (0, proxy_daemon_1.startProxy)(profileName, profile.baseUrl, apiKey, profile.model, profile.proxyChatCompletionsPath);
|
|
141
|
+
const proxyInfo = await (0, proxy_daemon_1.startProxy)(profileName, profile.baseUrl, apiKey, profile.model, profile.proxyChatCompletionsPath, profile.reasoningEffort);
|
|
138
142
|
env.ANTHROPIC_BASE_URL = `http://127.0.0.1:${proxyInfo.port}`;
|
|
139
143
|
env.ANTHROPIC_AUTH_TOKEN = proxyInfo.authToken;
|
|
140
144
|
// MCP image analysis also needs to go through the proxy
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBH,
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mcc profile test [name] [--vision]` — live health-check a profile's key.
|
|
3
|
+
*
|
|
4
|
+
* Three independent probes, each reported separately:
|
|
5
|
+
* 1. models — GET the provider's model list. Proves the key *authenticates*.
|
|
6
|
+
* 2. usable — a 1-token chat/messages call. Proves the account is actually
|
|
7
|
+
* callable (catches "key valid but balance = 0", e.g. DeepSeek 402,
|
|
8
|
+
* which the models endpoint alone reports as OK).
|
|
9
|
+
* 3. vision — (only with --vision) sends a 4-quadrant probe image to the
|
|
10
|
+
* profile's own model and checks it names all four colors, i.e.
|
|
11
|
+
* whether the main model can natively see images.
|
|
12
|
+
*
|
|
13
|
+
* Calls the upstream provider directly (not through the local proxy) so the
|
|
14
|
+
* result reflects the real provider, not the translation layer.
|
|
15
|
+
*/
|
|
16
|
+
export declare function cmdProfileTest(args: string[]): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=profile-test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-test.d.ts","sourceRoot":"","sources":["../../src/commands/profile-test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwJH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoClE"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `mcc profile test [name] [--vision]` — live health-check a profile's key.
|
|
4
|
+
*
|
|
5
|
+
* Three independent probes, each reported separately:
|
|
6
|
+
* 1. models — GET the provider's model list. Proves the key *authenticates*.
|
|
7
|
+
* 2. usable — a 1-token chat/messages call. Proves the account is actually
|
|
8
|
+
* callable (catches "key valid but balance = 0", e.g. DeepSeek 402,
|
|
9
|
+
* which the models endpoint alone reports as OK).
|
|
10
|
+
* 3. vision — (only with --vision) sends a 4-quadrant probe image to the
|
|
11
|
+
* profile's own model and checks it names all four colors, i.e.
|
|
12
|
+
* whether the main model can natively see images.
|
|
13
|
+
*
|
|
14
|
+
* Calls the upstream provider directly (not through the local proxy) so the
|
|
15
|
+
* result reflects the real provider, not the translation layer.
|
|
16
|
+
*/
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.cmdProfileTest = cmdProfileTest;
|
|
22
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
23
|
+
const store_1 = require("../accounts/store");
|
|
24
|
+
const test_image_1 = require("../shared/test-image");
|
|
25
|
+
const TIMEOUT_MS = 30000;
|
|
26
|
+
function trimBase(baseUrl) {
|
|
27
|
+
return baseUrl.trim().replace(/\/+$/, '');
|
|
28
|
+
}
|
|
29
|
+
function authHeaders(key, protocol) {
|
|
30
|
+
return protocol === 'anthropic'
|
|
31
|
+
? { 'x-api-key': key, 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json' }
|
|
32
|
+
: { Authorization: `Bearer ${key}`, 'Content-Type': 'application/json' };
|
|
33
|
+
}
|
|
34
|
+
async function http(url, init) {
|
|
35
|
+
const controller = new AbortController();
|
|
36
|
+
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
37
|
+
try {
|
|
38
|
+
const resp = await fetch(url, { ...init, signal: controller.signal });
|
|
39
|
+
const text = await resp.text();
|
|
40
|
+
let json = undefined;
|
|
41
|
+
try {
|
|
42
|
+
json = JSON.parse(text);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
/* non-JSON body */
|
|
46
|
+
}
|
|
47
|
+
return { status: resp.status, json, text };
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
clearTimeout(timer);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function errSnippet(status, json, text) {
|
|
54
|
+
const j = json;
|
|
55
|
+
const raw = j?.error?.message ?? j?.message ?? text;
|
|
56
|
+
// Collapse whitespace and strip HTML so a 404 error page stays one tidy line.
|
|
57
|
+
const msg = raw.replace(/<[^>]*>/g, ' ').replace(/\s+/g, ' ').trim().slice(0, 100);
|
|
58
|
+
return `HTTP ${status}${msg ? ` — ${msg}` : ''}`;
|
|
59
|
+
}
|
|
60
|
+
async function probeModels(base, key, protocol) {
|
|
61
|
+
const url = protocol === 'anthropic' ? `${base}/v1/models` : `${base}/models`;
|
|
62
|
+
try {
|
|
63
|
+
const { status, json, text } = await http(url, { method: 'GET', headers: authHeaders(key, protocol) });
|
|
64
|
+
// Many Anthropic-compatible providers don't expose /v1/models — a 404 here
|
|
65
|
+
// says nothing about the key (the `usable` probe is the real auth check).
|
|
66
|
+
if (status === 404)
|
|
67
|
+
return { ok: true, neutral: true, detail: 'no /v1/models endpoint' };
|
|
68
|
+
if (status !== 200)
|
|
69
|
+
return { ok: false, detail: errSnippet(status, json, text) };
|
|
70
|
+
const body = json;
|
|
71
|
+
const list = Array.isArray(body?.data) ? body.data : Array.isArray(body?.models) ? body.models : [];
|
|
72
|
+
return { ok: true, detail: `${list.length} models` };
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
return { ok: false, detail: e.message };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async function probeUsable(base, key, protocol, model) {
|
|
79
|
+
const url = protocol === 'anthropic' ? `${base}/v1/messages` : `${base}/chat/completions`;
|
|
80
|
+
const body = JSON.stringify({ model, max_tokens: 8, messages: [{ role: 'user', content: 'hi' }] });
|
|
81
|
+
try {
|
|
82
|
+
const { status, json, text } = await http(url, { method: 'POST', headers: authHeaders(key, protocol), body });
|
|
83
|
+
if (status !== 200)
|
|
84
|
+
return { ok: false, detail: errSnippet(status, json, text) };
|
|
85
|
+
return { ok: true, detail: `model=${model}` };
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
return { ok: false, detail: e.message };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function extractReply(protocol, json) {
|
|
92
|
+
if (protocol === 'anthropic') {
|
|
93
|
+
const d = json;
|
|
94
|
+
return (d?.content ?? [])
|
|
95
|
+
.filter((b) => b?.type === 'text' && typeof b.text === 'string')
|
|
96
|
+
.map((b) => b.text)
|
|
97
|
+
.join(' ');
|
|
98
|
+
}
|
|
99
|
+
const d = json;
|
|
100
|
+
const m = d?.choices?.[0]?.message;
|
|
101
|
+
return m?.content || m?.reasoning_content || '';
|
|
102
|
+
}
|
|
103
|
+
async function probeVision(base, key, protocol, model) {
|
|
104
|
+
const url = protocol === 'anthropic' ? `${base}/v1/messages` : `${base}/chat/completions`;
|
|
105
|
+
const b64 = (0, test_image_1.makeVisionProbeBase64)();
|
|
106
|
+
const content = protocol === 'anthropic'
|
|
107
|
+
? [
|
|
108
|
+
{ type: 'text', text: test_image_1.VISION_PROBE_PROMPT },
|
|
109
|
+
{ type: 'image', source: { type: 'base64', media_type: 'image/png', data: b64 } },
|
|
110
|
+
]
|
|
111
|
+
: [
|
|
112
|
+
{ type: 'text', text: test_image_1.VISION_PROBE_PROMPT },
|
|
113
|
+
{ type: 'image_url', image_url: { url: `data:image/png;base64,${b64}` } },
|
|
114
|
+
];
|
|
115
|
+
const body = JSON.stringify({ model, max_tokens: 300, messages: [{ role: 'user', content }] });
|
|
116
|
+
try {
|
|
117
|
+
const { status, json, text } = await http(url, { method: 'POST', headers: authHeaders(key, protocol), body });
|
|
118
|
+
if (status !== 200)
|
|
119
|
+
return { ok: false, detail: errSnippet(status, json, text) };
|
|
120
|
+
const reply = extractReply(protocol, json).replace(/\s+/g, ' ').trim();
|
|
121
|
+
if ((0, test_image_1.passesVisionProbe)(reply))
|
|
122
|
+
return { ok: true, detail: `read image: "${reply.slice(0, 60)}"` };
|
|
123
|
+
return { ok: false, detail: `wrong/blind: "${reply.slice(0, 60) || '(empty)'}"` };
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
return { ok: false, detail: e.message };
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function line(label, probe) {
|
|
130
|
+
if (!probe)
|
|
131
|
+
return ` ${picocolors_1.default.dim('vision'.padEnd(7))} ${picocolors_1.default.dim('–')} ${picocolors_1.default.dim('skipped (pass --vision)')}`;
|
|
132
|
+
const mark = probe.neutral ? picocolors_1.default.dim('•') : probe.ok ? picocolors_1.default.green('✓') : picocolors_1.default.red('✗');
|
|
133
|
+
const text = probe.neutral || probe.ok ? picocolors_1.default.dim(probe.detail) : picocolors_1.default.red(probe.detail);
|
|
134
|
+
return ` ${picocolors_1.default.dim(label.padEnd(7))} ${mark} ${text}`;
|
|
135
|
+
}
|
|
136
|
+
async function testOne(profile, wantVision) {
|
|
137
|
+
const protocol = profile.protocol || 'anthropic';
|
|
138
|
+
const key = (0, store_1.getProfileApiKey)(profile.name);
|
|
139
|
+
const head = ` ${picocolors_1.default.bold(profile.name)} ${picocolors_1.default.dim('·')} ${picocolors_1.default.dim(protocol)} ${picocolors_1.default.dim('·')} ${picocolors_1.default.cyan(profile.model)}`;
|
|
140
|
+
if (!key) {
|
|
141
|
+
console.log(head);
|
|
142
|
+
console.log(` ${picocolors_1.default.red('✗')} ${picocolors_1.default.red('no API key stored')}`);
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
const base = trimBase(profile.baseUrl);
|
|
146
|
+
const models = await probeModels(base, key, protocol);
|
|
147
|
+
const usable = await probeUsable(base, key, protocol, profile.model);
|
|
148
|
+
const vision = wantVision ? await probeVision(base, key, protocol, profile.model) : null;
|
|
149
|
+
console.log(head);
|
|
150
|
+
console.log(line('models', models));
|
|
151
|
+
console.log(line('usable', usable));
|
|
152
|
+
console.log(line('vision', vision));
|
|
153
|
+
// "Healthy" = can actually be used. Models-only success with an unusable
|
|
154
|
+
// account (balance 0) is still a failure worth surfacing in the exit code.
|
|
155
|
+
return usable.ok;
|
|
156
|
+
}
|
|
157
|
+
async function cmdProfileTest(args) {
|
|
158
|
+
const wantVision = args.includes('--vision');
|
|
159
|
+
const names = args.filter((a) => !a.startsWith('--'));
|
|
160
|
+
const targets = names.length
|
|
161
|
+
? names.map((n) => (0, store_1.getProfile)(n)).filter((p) => Boolean(p))
|
|
162
|
+
: (0, store_1.listProfiles)();
|
|
163
|
+
if (names.length) {
|
|
164
|
+
const missing = names.filter((n) => !(0, store_1.getProfile)(n));
|
|
165
|
+
if (missing.length) {
|
|
166
|
+
console.error(`[!] Profile not found: ${missing.join(', ')}`);
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (targets.length === 0) {
|
|
171
|
+
console.log('[i] No profiles to test.');
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
console.log(`Testing ${targets.length} profile(s)${wantVision ? ' + vision' : ''} ${picocolors_1.default.dim('(models = auth · usable = balance · vision = main model sees images)')}\n`);
|
|
175
|
+
let failures = 0;
|
|
176
|
+
for (const p of targets) {
|
|
177
|
+
const ok = await testOne(p, wantVision);
|
|
178
|
+
if (!ok)
|
|
179
|
+
failures++;
|
|
180
|
+
console.log();
|
|
181
|
+
}
|
|
182
|
+
if (failures > 0) {
|
|
183
|
+
console.log(picocolors_1.default.dim(`${failures}/${targets.length} profile(s) not usable.`));
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
console.log(picocolors_1.default.green(`All ${targets.length} profile(s) usable.`));
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=profile-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-test.js","sourceRoot":"","sources":["../../src/commands/profile-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-router.d.ts","sourceRoot":"","sources":["../../src/core/model-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"model-router.d.ts","sourceRoot":"","sources":["../../src/core/model-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAOjD,MAAM,WAAW,UAAU;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,4BAA4B,EAAE,MAAM,CAAC;IACrC,8BAA8B,EAAE,MAAM,CAAC;IACvC,6BAA6B,EAAE,MAAM,CAAC;IACtC,0BAA0B,EAAE,MAAM,CAAC;IACnC,iBAAiB,EAAE,GAAG,CAAC;IACvB,qBAAqB,EAAE,GAAG,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,UAAU,CAqFrG"}
|
|
@@ -21,7 +21,8 @@ function buildProfileEnv(profile, apiKey, claudeConfigDir) {
|
|
|
21
21
|
// Read MCP config for provider settings
|
|
22
22
|
const mcpConfig = (0, mcp_config_1.readMcpConfig)();
|
|
23
23
|
const wsProviders = (0, mcp_config_1.getEnabledWebSearchProviders)(mcpConfig);
|
|
24
|
-
const
|
|
24
|
+
const iaProviders = (0, mcp_config_1.getEnabledImageAnalysisProviders)(mcpConfig);
|
|
25
|
+
const iaProvider = iaProviders[0] ?? null;
|
|
25
26
|
const env = {
|
|
26
27
|
ANTHROPIC_BASE_URL: profile.baseUrl,
|
|
27
28
|
ANTHROPIC_AUTH_TOKEN: apiKey,
|
|
@@ -34,6 +35,25 @@ function buildProfileEnv(profile, apiKey, claudeConfigDir) {
|
|
|
34
35
|
DISABLE_COST_WARNINGS: '1',
|
|
35
36
|
CLAUDE_CONFIG_DIR: claudeConfigDir,
|
|
36
37
|
};
|
|
38
|
+
// Thinking, driven by Claude Code itself so the user's /effort + Tab toggle
|
|
39
|
+
// are the source of truth. We seed two env vars so thinking is ON by default
|
|
40
|
+
// regardless of how Claude Code treats a third-party model id:
|
|
41
|
+
// - CLAUDE_CODE_EFFORT_LEVEL → adaptive-thinking path (modern models):
|
|
42
|
+
// sends thinking{type:adaptive} + output_config.effort.
|
|
43
|
+
// - MAX_THINKING_TOKENS → legacy path: sends thinking{type:enabled,budget}.
|
|
44
|
+
// Both matter because some upstreams MANDATE thinking (e.g. kimi-k2.7-code
|
|
45
|
+
// 400s on a request with no thinking) — seeding both guarantees Claude Code
|
|
46
|
+
// emits a thinking field those models accept. For openai-protocol the proxy
|
|
47
|
+
// re-reads whatever Claude Code sent and translates it per provider.
|
|
48
|
+
// Undefined ⇒ 'high'. 'off' leaves thinking to the model/user default.
|
|
49
|
+
const effort = profile.reasoningEffort ?? 'high';
|
|
50
|
+
if (effort !== 'off') {
|
|
51
|
+
env.CLAUDE_CODE_EFFORT_LEVEL = effort;
|
|
52
|
+
const budgetByEffort = {
|
|
53
|
+
low: 4096, medium: 8192, high: 16384, max: 32768,
|
|
54
|
+
};
|
|
55
|
+
env.MAX_THINKING_TOKENS = String(budgetByEffort[effort] ?? 16384);
|
|
56
|
+
}
|
|
37
57
|
// MCP: WebSearch
|
|
38
58
|
env.MCC_WEBSEARCH_ENABLED = mcpConfig.websearch.enabled ? '1' : '0';
|
|
39
59
|
for (const p of wsProviders) {
|
|
@@ -57,10 +77,20 @@ function buildProfileEnv(profile, apiKey, claudeConfigDir) {
|
|
|
57
77
|
// MCP: Image Analysis
|
|
58
78
|
if (mcpConfig.imageAnalysis.enabled && iaProvider) {
|
|
59
79
|
env.MCC_IMAGE_ANALYSIS_ENABLED = '1';
|
|
80
|
+
// Legacy single-provider vars — kept for back-compat / launch display.
|
|
60
81
|
env.MCC_IMAGE_ANALYSIS_RUNTIME_BASE_URL = iaProvider.baseUrl;
|
|
61
82
|
env.MCC_IMAGE_ANALYSIS_RUNTIME_API_KEY = iaProvider.apiKey;
|
|
62
83
|
env.MCC_IMAGE_ANALYSIS_MODEL = iaProvider.model;
|
|
63
84
|
env.MCC_IMAGE_ANALYSIS_FORMAT = iaProvider.format;
|
|
85
|
+
// Full fallback chain — the runtime tries these in order; the first that
|
|
86
|
+
// succeeds wins, the rest are tried on 402 / auth / network errors.
|
|
87
|
+
env.MCC_IMAGE_ANALYSIS_PROVIDERS = JSON.stringify(iaProviders.map((p) => ({
|
|
88
|
+
id: p.id,
|
|
89
|
+
baseUrl: p.baseUrl,
|
|
90
|
+
apiKey: p.apiKey,
|
|
91
|
+
model: p.model,
|
|
92
|
+
format: p.format,
|
|
93
|
+
})));
|
|
64
94
|
}
|
|
65
95
|
return env;
|
|
66
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-router.js","sourceRoot":"","sources":["../../src/core/model-router.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;
|
|
1
|
+
{"version":3,"file":"model-router.js","sourceRoot":"","sources":["../../src/core/model-router.ts"],"names":[],"mappings":"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"}
|