@hileeon/mcc 0.1.8 → 0.1.9
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 +226 -127
- package/dist/accounts/store.d.ts +1 -0
- package/dist/accounts/store.d.ts.map +1 -1
- package/dist/accounts/store.js.map +1 -1
- package/dist/commands/launch.d.ts +9 -0
- package/dist/commands/launch.d.ts.map +1 -0
- package/dist/commands/launch.js +158 -0
- package/dist/commands/launch.js.map +1 -0
- package/dist/commands/mcp.d.ts +9 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +112 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/profile.d.ts +8 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +125 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/core/model-router.d.ts.map +1 -1
- package/dist/core/model-router.js +5 -2
- package/dist/core/model-router.js.map +1 -1
- package/dist/{dashboard-server.d.ts → dashboard/server.d.ts} +1 -1
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/{dashboard-server.js → dashboard/server.js} +169 -51
- package/dist/dashboard/server.js.map +1 -0
- package/dist/mcc.d.ts +4 -2
- package/dist/mcc.d.ts.map +1 -1
- package/dist/mcc.js +121 -408
- package/dist/mcc.js.map +1 -1
- package/dist/mcp/mcp-config.d.ts +17 -1
- package/dist/mcp/mcp-config.d.ts.map +1 -1
- package/dist/mcp/mcp-config.js +50 -17
- package/dist/mcp/mcp-config.js.map +1 -1
- package/dist/proxy/proxy-daemon.d.ts.map +1 -1
- package/dist/proxy/proxy-daemon.js +17 -2
- package/dist/proxy/proxy-daemon.js.map +1 -1
- package/dist/proxy/proxy-entry.js +5 -3
- package/dist/proxy/proxy-entry.js.map +1 -1
- package/dist/proxy/proxy-server.d.ts.map +1 -1
- package/dist/proxy/proxy-server.js +32 -6
- package/dist/proxy/proxy-server.js.map +1 -1
- package/dist/shared/config.d.ts +15 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +79 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/logger.d.ts +23 -18
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/logger.js +17 -178
- package/dist/shared/logger.js.map +1 -1
- package/dist/shared/provider-preset-catalog.d.ts +6 -2
- package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
- package/dist/shared/provider-preset-catalog.js +47 -26
- package/dist/shared/provider-preset-catalog.js.map +1 -1
- package/dist/ui/assets/index-ClqmrjNk.js +40 -0
- package/dist/ui/assets/index-CwMwQ-Z4.css +1 -0
- package/dist/ui/index.html +21 -13
- package/dist/update.d.ts +31 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +196 -0
- package/dist/update.js.map +1 -0
- package/lib/mcp/mcc-image-analysis-server.cjs +454 -454
- package/lib/mcp/mcc-websearch-server.cjs +339 -339
- package/lib/mcp-hooks/image-analysis-runtime.cjs +510 -510
- package/lib/mcp-hooks/image-analyzer-transformer.cjs +526 -526
- package/lib/mcp-hooks/websearch-transformer.cjs +1597 -1421
- package/lib/proxy/config/config-loader-facade.js +24 -24
- package/lib/proxy/glmt/delta-accumulator.js +362 -362
- package/lib/proxy/glmt/glmt-transformer.js +203 -203
- package/lib/proxy/glmt/index.js +40 -40
- package/lib/proxy/glmt/locale-enforcer.js +68 -68
- package/lib/proxy/glmt/pipeline/content-transformer.js +161 -161
- package/lib/proxy/glmt/pipeline/index.js +19 -19
- package/lib/proxy/glmt/pipeline/request-transformer.js +115 -115
- package/lib/proxy/glmt/pipeline/response-builder.js +204 -204
- package/lib/proxy/glmt/pipeline/stream-parser.js +233 -233
- package/lib/proxy/glmt/pipeline/tool-call-handler.js +77 -77
- package/lib/proxy/glmt/pipeline/types.js +5 -5
- package/lib/proxy/glmt/reasoning-enforcer.js +150 -150
- package/lib/proxy/glmt/sse-parser.js +101 -101
- package/lib/proxy/services/logging.js +13 -13
- package/lib/proxy/transformers/request-transformer.js +471 -471
- package/lib/proxy/transformers/sse-stream-transformer.js +198 -198
- package/lib/shared/logger.cjs +156 -138
- package/package.json +58 -41
- package/dist/dashboard-server.d.ts.map +0 -1
- package/dist/dashboard-server.js.map +0 -1
- package/dist/ui/assets/index-B16lhKZ6.js +0 -40
- package/dist/ui/assets/index-jEfiB6-h.css +0 -1
package/README.md
CHANGED
|
@@ -1,127 +1,226 @@
|
|
|
1
|
-
# MCC — My Cloud Code
|
|
2
|
-
|
|
3
|
-
多账号切换工具,在多个 Claude Code 账号(不同 API Provider)之间快速切换。支持直接 API 和 OpenAI 兼容模式(自动翻译 proxy)。
|
|
4
|
-
|
|
5
|
-
## 快速上手
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
## 核心命令
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
mcc <profile> [args...] # 用指定 profile 启动 Claude Code
|
|
18
|
-
mcc profile add <name> # 添加 profile
|
|
19
|
-
mcc profile list # 查看所有 profile
|
|
20
|
-
mcc profile remove <name> # 删除 profile
|
|
21
|
-
mcc profile default [name] # 设默认 profile
|
|
22
|
-
mcc mcp list # 查看可用 MCP 工具
|
|
23
|
-
mcc mcp add --name <id> --command <cmd> # 添加外部 MCP 工具
|
|
24
|
-
mcc mcp remove <name> # 删除外部 MCP 工具
|
|
25
|
-
mcc mcp enable <name> <profile> # 启用外部 MCP(指定 profile)
|
|
26
|
-
mcc mcp disable <name> <profile> # 禁用外部 MCP
|
|
27
|
-
mcc
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## 核心功能
|
|
31
|
-
|
|
32
|
-
- **多 profile 管理**:API key 存 `~/.mcc/profiles/<name>/.key`,元数据存 `~/.mcc/profiles.json`
|
|
33
|
-
- **实例隔离**:每个 profile 独立 `CLAUDE_CONFIG_DIR`,位于 `~/.mcc/instances/<name>/`
|
|
34
|
-
- **OpenAI 兼容模式**:`--protocol openai` 时自动启动本地翻译 proxy(端口 43456-43555),转发 OpenAI 格式请求到 upstream Anthropic 兼容端点
|
|
35
|
-
- **Tiered model**:profile 支持 `opusModel`/`sonnetModel`/`haikuModel` 三级模型切换
|
|
36
|
-
- **内置 MCP**:`mcc-websearch`(多源搜索)和 `mcc-image-analysis`(图片/PDF 分析)
|
|
37
|
-
- **外部 MCP**:通过 `mcc mcp add` 注册第三方 MCP server,支持 `${MCC_PROVIDER_KEY:<providerId>}` 引用 provider API key
|
|
38
|
-
- **Dashboard**:`
|
|
39
|
-
|
|
40
|
-
## 添加一个 profile
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
# Anthropic 直接 API 模式
|
|
44
|
-
mcc profile add prod --base-url https://api.deepseek.com/anthropic --api-key sk-xxxx --model deepseek-chat
|
|
45
|
-
|
|
46
|
-
# OpenAI 兼容模式(需要翻译 proxy)
|
|
47
|
-
mcc profile add minimax --base-url https://api.minimax.com --api-key sk-xxxx --model MiniMax-Text-01 --protocol openai
|
|
48
|
-
|
|
49
|
-
# 带 tiered model
|
|
50
|
-
mcc profile add big --base-url https://api.anthropic.com --api-key sk-xxxx --model claude-sonnet-4-6 --opus-model claude-opus-4-7 --sonnet-model claude-sonnet-4-6 --haiku-model claude-haiku-4-5
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## 添加外部 MCP
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
mcc mcp add minimax-plan \
|
|
57
|
-
--display-name "MiniMax Token Plan" \
|
|
58
|
-
--command uvx \
|
|
59
|
-
--args "minimax-coding-plan-mcp,-y" \
|
|
60
|
-
--provider-ref minimax
|
|
61
|
-
|
|
62
|
-
# 在指定 profile 启用
|
|
63
|
-
mcc mcp enable minimax-plan minimax
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## 目录结构
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
src/
|
|
70
|
-
├── mcc.ts # CLI
|
|
71
|
-
├──
|
|
72
|
-
│ ├──
|
|
73
|
-
│ ├──
|
|
74
|
-
│ └──
|
|
75
|
-
├──
|
|
76
|
-
├──
|
|
77
|
-
│ ├──
|
|
78
|
-
│
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
├──
|
|
82
|
-
├──
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
├──
|
|
87
|
-
├──
|
|
88
|
-
│ ├── logger.cjs
|
|
89
|
-
│
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
├──
|
|
100
|
-
├──
|
|
101
|
-
├──
|
|
102
|
-
│
|
|
103
|
-
|
|
104
|
-
├──
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
##
|
|
120
|
-
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
1
|
+
# MCC — My Cloud Code
|
|
2
|
+
|
|
3
|
+
多账号切换工具,在多个 Claude Code 账号(不同 API Provider)之间快速切换。支持直接 API 和 OpenAI 兼容模式(自动翻译 proxy)。
|
|
4
|
+
|
|
5
|
+
## 快速上手
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm install # 没装 pnpm?先 `npm i -g pnpm`
|
|
9
|
+
pnpm build # 首次必跑:tsc 编译后端
|
|
10
|
+
pnpm mcc -h # 验证 CLI(pnpm 直接透传 flag,无需 --)
|
|
11
|
+
pnpm dev # 启动前后端 dev server,浏览器开 http://localhost:5173
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## 核心命令
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
mcc <profile> [args...] # 用指定 profile 启动 Claude Code
|
|
18
|
+
mcc profile add <name> # 添加 profile
|
|
19
|
+
mcc profile list # 查看所有 profile
|
|
20
|
+
mcc profile remove <name> # 删除 profile
|
|
21
|
+
mcc profile default [name] # 设默认 profile
|
|
22
|
+
mcc mcp list # 查看可用 MCP 工具
|
|
23
|
+
mcc mcp add --name <id> --command <cmd> # 添加外部 MCP 工具
|
|
24
|
+
mcc mcp remove <name> # 删除外部 MCP 工具
|
|
25
|
+
mcc mcp enable <name> <profile> # 启用外部 MCP(指定 profile)
|
|
26
|
+
mcc mcp disable <name> <profile> # 禁用外部 MCP
|
|
27
|
+
mcc config # 打开 Web 配置控制台
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 核心功能
|
|
31
|
+
|
|
32
|
+
- **多 profile 管理**:API key 存 `~/.mcc/profiles/<name>/.key`,元数据存 `~/.mcc/profiles.json`
|
|
33
|
+
- **实例隔离**:每个 profile 独立 `CLAUDE_CONFIG_DIR`,位于 `~/.mcc/instances/<name>/`
|
|
34
|
+
- **OpenAI 兼容模式**:`--protocol openai` 时自动启动本地翻译 proxy(端口 43456-43555),转发 OpenAI 格式请求到 upstream Anthropic 兼容端点
|
|
35
|
+
- **Tiered model**:profile 支持 `opusModel`/`sonnetModel`/`haikuModel` 三级模型切换
|
|
36
|
+
- **内置 MCP**:`mcc-websearch`(多源搜索)和 `mcc-image-analysis`(图片/PDF 分析)
|
|
37
|
+
- **外部 MCP**:通过 `mcc mcp add` 注册第三方 MCP server,支持 `${MCC_PROVIDER_KEY:<providerId>}` 引用 provider API key
|
|
38
|
+
- **Dashboard**:`mcc config` 打开 Web 配置控制台(http://localhost:3000)
|
|
39
|
+
|
|
40
|
+
## 添加一个 profile
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Anthropic 直接 API 模式
|
|
44
|
+
mcc profile add prod --base-url https://api.deepseek.com/anthropic --api-key sk-xxxx --model deepseek-chat
|
|
45
|
+
|
|
46
|
+
# OpenAI 兼容模式(需要翻译 proxy)
|
|
47
|
+
mcc profile add minimax --base-url https://api.minimax.com --api-key sk-xxxx --model MiniMax-Text-01 --protocol openai
|
|
48
|
+
|
|
49
|
+
# 带 tiered model
|
|
50
|
+
mcc profile add big --base-url https://api.anthropic.com --api-key sk-xxxx --model claude-sonnet-4-6 --opus-model claude-opus-4-7 --sonnet-model claude-sonnet-4-6 --haiku-model claude-haiku-4-5
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 添加外部 MCP
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
mcc mcp add minimax-plan \
|
|
57
|
+
--display-name "MiniMax Token Plan" \
|
|
58
|
+
--command uvx \
|
|
59
|
+
--args "minimax-coding-plan-mcp,-y" \
|
|
60
|
+
--provider-ref minimax
|
|
61
|
+
|
|
62
|
+
# 在指定 profile 启用
|
|
63
|
+
mcc mcp enable minimax-plan minimax
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 目录结构
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
src/
|
|
70
|
+
├── mcc.ts # CLI 入口(参数解析 + dispatcher,~150 行)
|
|
71
|
+
├── commands/ # 每个 mcc 子命令一个文件
|
|
72
|
+
│ ├── launch.ts # mcc <profile>
|
|
73
|
+
│ ├── profile.ts # mcc profile add|list|remove|default
|
|
74
|
+
│ └── mcp.ts # mcc mcp list|add|remove|enable|disable
|
|
75
|
+
├── accounts/
|
|
76
|
+
│ ├── store.ts # Profile 元数据
|
|
77
|
+
│ ├── instance-manager.ts # CLAUDE_CONFIG_DIR 隔离
|
|
78
|
+
│ └── shared-manager.ts # 跨 instance 共享目录
|
|
79
|
+
├── core/model-router.ts # Profile env 构建
|
|
80
|
+
├── mcp/
|
|
81
|
+
│ ├── registry.ts # 内置 MCP 注册表
|
|
82
|
+
│ ├── installer.ts # MCP 安装到 instance
|
|
83
|
+
│ ├── external-registry.ts # 外部 MCP 注册表
|
|
84
|
+
│ └── mcp-config.ts # provider 配置
|
|
85
|
+
├── proxy/ # OpenAI→Anthropic 翻译 proxy
|
|
86
|
+
├── dashboard/server.ts # Express dashboard server(mcc config 启)
|
|
87
|
+
├── shared/
|
|
88
|
+
│ ├── logger.ts # thin shell → lib/shared/logger.cjs
|
|
89
|
+
│ └── provider-preset-catalog.ts
|
|
90
|
+
└── update.ts # mcc update / mcc update-check
|
|
91
|
+
|
|
92
|
+
ui/src/ # Dashboard 前端(React + Vite)
|
|
93
|
+
├── App.tsx # 编排骨架(~330 行)
|
|
94
|
+
├── types/domain.ts # 领域类型(Protocol、ProfileFormPayload 等)
|
|
95
|
+
├── lib/
|
|
96
|
+
│ ├── api.ts # 后端 API client + 边界类型
|
|
97
|
+
│ ├── providers.ts # 17 个 provider 单一真相源(id+name+品牌色)
|
|
98
|
+
│ └── strings.ts # 所有 UI 中文文案集中
|
|
99
|
+
├── hooks/ # 按域分离的状态 hook
|
|
100
|
+
│ ├── useProfiles.ts
|
|
101
|
+
│ ├── useMcpConfig.ts
|
|
102
|
+
│ └── useStatus.ts
|
|
103
|
+
├── design/
|
|
104
|
+
│ ├── tokens/ # primitive → semantic → components 三层
|
|
105
|
+
│ └── icons/ # Ui / ProviderIcon / ArcadeLogo
|
|
106
|
+
└── components/ # 业务面板组件
|
|
107
|
+
|
|
108
|
+
lib/
|
|
109
|
+
├── mcp/ # 内置 MCP server CJS(被复制到 ~/.mcc/mcp/)
|
|
110
|
+
│ ├── mcc-websearch-server.cjs
|
|
111
|
+
│ └── mcc-image-analysis-server.cjs
|
|
112
|
+
├── mcp-hooks/ # MCP runtime hooks(复制到 ~/.mcc/mcp-hooks/)
|
|
113
|
+
│ ├── image-analysis-runtime.cjs
|
|
114
|
+
│ ├── image-analyzer-transformer.cjs
|
|
115
|
+
│ └── websearch-transformer.cjs
|
|
116
|
+
└── shared/logger.cjs # logger 单一真相源(src/shared/logger.ts 是它的 TS shell)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## 存储结构
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
~/.mcc/
|
|
123
|
+
├── profiles.json
|
|
124
|
+
├── profiles/<name>/.key
|
|
125
|
+
├── instances/<name>/
|
|
126
|
+
│ ├── .claude.json # Claude Code 读取的 MCP 配置
|
|
127
|
+
│ └── .mcp/mcpServers.json
|
|
128
|
+
├── mcp/
|
|
129
|
+
├── mcp-hooks/
|
|
130
|
+
├── external-mcp-servers.json # 外部 MCP 定义
|
|
131
|
+
├── mcp-config.json # WebSearch/ImageAnalysis 配置
|
|
132
|
+
└── proxy/ # proxy PID/session
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## MCP 工具配置
|
|
136
|
+
|
|
137
|
+
通过 `~/.mcc/mcp-config.json` 配置,或通过 Dashboard UI。
|
|
138
|
+
|
|
139
|
+
WebSearch provider:duckduckgo(默认免 key)、博查 Bocha、阿里通义 web_search、MiniMax Search、exa、tavily、brave
|
|
140
|
+
|
|
141
|
+
ImageAnalysis provider:ali(qwen3-vl)、xiaomi(mimo-v2-omni)、minimax、deepseek(V4 起原生 vision)、kimi
|
|
142
|
+
|
|
143
|
+
## 本地开发
|
|
144
|
+
|
|
145
|
+
所有 dev 命令都通过 `pnpm <script>` 调,**跟全局 `mcc <cmd>` 心智模型一致,但跑的是本地代码**。
|
|
146
|
+
|
|
147
|
+
### 一键全栈 dev(日常推荐)
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
pnpm dev
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
`concurrently` 同时启两个 server,输出按颜色前缀混合显示:
|
|
154
|
+
- `[be]` 后端 API on `:3000`(`tsx watch` — 改 `src/` 自动重启)
|
|
155
|
+
- `[fe]` 前端 vite on `:5173`(HMR — 改 `ui/src/` 浏览器立即热更新)
|
|
156
|
+
|
|
157
|
+
**浏览器开 http://localhost:5173**(vite 自动把 `/api/*` proxy 到 :3000)。Ctrl-C 一次两个进程一起退。
|
|
158
|
+
|
|
159
|
+
### 用本地版 mcc 测命令
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
pnpm mcc deepseek # 启 deepseek profile(跟全局 mcc deepseek 等价)
|
|
163
|
+
pnpm mcc profile list # 列 profile
|
|
164
|
+
pnpm mcc config # 打开配置面板(dynamic import,无需先 build)
|
|
165
|
+
pnpm mcc mcp list # 任意子命令都能透传
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**带横线的 flag 直接传,无需 `--` 分隔**(这是 pnpm 比 npm 省心的地方):
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
pnpm mcc -v # ✓ 看版本
|
|
172
|
+
pnpm mcc -h # ✓ 看帮助
|
|
173
|
+
pnpm mcc deepseek --print "hello" # ✓ 透传 --print 给 Claude Code
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### 单独启前/后端
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
pnpm dash # 只起后端(tsx watch src/dashboard/server.ts),监听 :3000
|
|
180
|
+
pnpm ui # 只起前端(cd ui && vite),监听 :5173
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
适合:只改一端时省一个进程;或者你已经在 tmux/iTerm 里 split pane 习惯了,不想要 concurrently 的混合输出。
|
|
184
|
+
|
|
185
|
+
### 模拟 prod(最终用户体验)
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
pnpm dashboard
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
完整 `build` 后端 + `build:ui` 前端,再启 `dist/dashboard/server.js`。**一个 server**(:3000)同时提供 API 和 serve 前端静态文件 —— 跟 `mcc config` 全局版本走同一条路径。改了代码要重跑这条命令才生效。
|
|
192
|
+
|
|
193
|
+
### Typecheck
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
pnpm typecheck # 后端 tsc --noEmit
|
|
197
|
+
pnpm -C ui exec tsc --noEmit # 前端(`pnpm build:ui` 里也会跑)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### 让全局 `mcc` 指向本地代码
|
|
201
|
+
|
|
202
|
+
全局装的 `mcc` 来自 npm registry,不会跑你本地的修改。要让 `mcc config` 也指向本地代码:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
pnpm link --global # 把本地版 link 到全局
|
|
206
|
+
mcc config # 现在跑的是本地代码
|
|
207
|
+
mcc -v
|
|
208
|
+
|
|
209
|
+
# 用完恢复 npm registry 版本:
|
|
210
|
+
pnpm uninstall -g @hileeon/mcc && npm i -g @hileeon/mcc
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### 所有 scripts 一览
|
|
214
|
+
|
|
215
|
+
| Script | 干啥 | 何时用 |
|
|
216
|
+
|---|---|---|
|
|
217
|
+
| `pnpm mcc <args>` | `tsx src/mcc.ts <args>` — 透传 | 测任何 CLI 命令 |
|
|
218
|
+
| `pnpm dev` | `concurrently` 起 dash + ui | 日常 dev |
|
|
219
|
+
| `pnpm dash` | `tsx watch src/dashboard/server.ts` | 只起后端 |
|
|
220
|
+
| `pnpm ui` | `pnpm -C ui dev` | 只起前端 |
|
|
221
|
+
| `pnpm dashboard` | 完整 build + 启 `dist/` | 模拟 prod |
|
|
222
|
+
| `pnpm build` | tsc 编译后端 → `dist/` | 发布前 / link 前必跑 |
|
|
223
|
+
| `pnpm build:ui` | vite build 前端 → `dist/ui/` | 同上 |
|
|
224
|
+
| `pnpm build:all` | build + build:ui | 同上 |
|
|
225
|
+
| `pnpm build:watch` | tsc --watch | 不用 tsx 时的旧 watch 方式 |
|
|
226
|
+
| `pnpm typecheck` | tsc --noEmit | CI / 提交前 |
|
package/dist/accounts/store.d.ts
CHANGED
|
@@ -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,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,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 +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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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mcc <profile> [args...]` — launch Claude Code with the given profile.
|
|
3
|
+
*
|
|
4
|
+
* Owns the full launch lifecycle: validate profile → ensure instance →
|
|
5
|
+
* sync MCP servers → init session logging → (optionally) start the
|
|
6
|
+
* OpenAI translation proxy → spawn `claude` with the assembled env.
|
|
7
|
+
*/
|
|
8
|
+
export declare function cmdLaunch(args: string[]): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=launch.d.ts.map
|
|
@@ -0,0 +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,CA6G7D"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `mcc <profile> [args...]` — launch Claude Code with the given profile.
|
|
4
|
+
*
|
|
5
|
+
* Owns the full launch lifecycle: validate profile → ensure instance →
|
|
6
|
+
* sync MCP servers → init session logging → (optionally) start the
|
|
7
|
+
* OpenAI translation proxy → spawn `claude` with the assembled env.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
43
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
44
|
+
};
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.cmdLaunch = cmdLaunch;
|
|
47
|
+
const child_process_1 = require("child_process");
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
50
|
+
const store_1 = require("../accounts/store");
|
|
51
|
+
const instance_manager_1 = require("../accounts/instance-manager");
|
|
52
|
+
const model_router_1 = require("../core/model-router");
|
|
53
|
+
const installer_1 = require("../mcp/installer");
|
|
54
|
+
const registry_1 = require("../mcp/registry");
|
|
55
|
+
const mcp_config_1 = require("../mcp/mcp-config");
|
|
56
|
+
const proxy_daemon_1 = require("../proxy/proxy-daemon");
|
|
57
|
+
const logger_1 = require("../shared/logger");
|
|
58
|
+
const instanceMgr = new instance_manager_1.MCCInstanceManager();
|
|
59
|
+
async function cmdLaunch(args) {
|
|
60
|
+
const profileName = args[0];
|
|
61
|
+
if (!profileName) {
|
|
62
|
+
console.error('[!] Usage: mcc <profile> [args...]');
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
const profile = (0, store_1.getProfile)(profileName);
|
|
66
|
+
if (!profile) {
|
|
67
|
+
console.error(`[!] Profile not found: ${profileName}`);
|
|
68
|
+
console.error('[i] Available profiles:');
|
|
69
|
+
for (const p of (0, store_1.listProfiles)()) {
|
|
70
|
+
console.error(` - ${p.name} (baseUrl: ${p.baseUrl})`);
|
|
71
|
+
}
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
const proto = profile.protocol || 'anthropic';
|
|
75
|
+
console.log(` ${picocolors_1.default.cyan(picocolors_1.default.bold('●'))} ${picocolors_1.default.bold(profileName)} ${picocolors_1.default.dim('·')} ${picocolors_1.default.cyan(profile.model)} ${picocolors_1.default.dim('·')} ${picocolors_1.default.dim(proto)}`);
|
|
76
|
+
const apiKey = (0, store_1.getProfileApiKey)(profileName);
|
|
77
|
+
if (!apiKey) {
|
|
78
|
+
console.error(`[!] No API key found for profile: ${profileName}`);
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
// Read MCP config early so we can display provider info
|
|
82
|
+
const mcpConfig = (0, mcp_config_1.readMcpConfig)();
|
|
83
|
+
const wsProviders = (0, mcp_config_1.getEnabledWebSearchProviders)(mcpConfig);
|
|
84
|
+
const iaProvider = (0, mcp_config_1.getActiveImageAnalysisProvider)(mcpConfig);
|
|
85
|
+
const instancePath = await instanceMgr.ensureInstance(profileName);
|
|
86
|
+
console.log(` ${picocolors_1.default.dim('instance')} ${picocolors_1.default.dim(instancePath)}`);
|
|
87
|
+
(0, installer_1.syncInstanceMcpServers)(instancePath, registry_1.BUILTIN_MCP_SERVERS.map((s) => s.name), profileName);
|
|
88
|
+
// Initialize logging session
|
|
89
|
+
const sessionId = (0, logger_1.makeSessionId)();
|
|
90
|
+
const mccHome = process.env.MCC_HOME ?? path.join(process.env.HOME ?? process.env.USERPROFILE ?? '~', '.mcc');
|
|
91
|
+
const logDir = path.join(mccHome, 'logs', profileName, 'sessions', sessionId);
|
|
92
|
+
(0, logger_1.init)(sessionId, logDir);
|
|
93
|
+
logger_1.log.info('MCC', `Session starting: ${profileName} | log: ${logDir}`);
|
|
94
|
+
console.log(` ${picocolors_1.default.dim('session')} ${picocolors_1.default.dim(sessionId)}`);
|
|
95
|
+
// MCP provider summary
|
|
96
|
+
if (wsProviders.length > 0) {
|
|
97
|
+
console.log(` ${picocolors_1.default.dim('websearch')} ${picocolors_1.default.dim(wsProviders.join(', '))}`);
|
|
98
|
+
}
|
|
99
|
+
else if (mcpConfig.websearch.enabled) {
|
|
100
|
+
console.log(` ${picocolors_1.default.dim('websearch')} ${picocolors_1.default.dim('none enabled')}`);
|
|
101
|
+
}
|
|
102
|
+
if (mcpConfig.imageAnalysis.enabled) {
|
|
103
|
+
if (iaProvider) {
|
|
104
|
+
console.log(` ${picocolors_1.default.dim('image')} ${picocolors_1.default.dim(iaProvider.id)} ${picocolors_1.default.dim('·')} ${picocolors_1.default.cyan(iaProvider.model)}`);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
console.log(` ${picocolors_1.default.dim('image')} ${picocolors_1.default.dim('no active provider')}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const env = (0, model_router_1.buildProfileEnv)(profile, apiKey, instancePath);
|
|
111
|
+
env.MCC_CURRENT_PROFILE = profileName;
|
|
112
|
+
env.MCC_LOG_SESSION_ID = sessionId;
|
|
113
|
+
env.MCC_LOG_DIR = logDir;
|
|
114
|
+
// Debug: key env vars (no secrets)
|
|
115
|
+
if ((0, logger_1.isDebugEnabled)()) {
|
|
116
|
+
const debugEnvs = [
|
|
117
|
+
['ANTHROPIC_BASE_URL', env.ANTHROPIC_BASE_URL],
|
|
118
|
+
['ANTHROPIC_MODEL', env.ANTHROPIC_MODEL],
|
|
119
|
+
['CLAUDE_CONFIG_DIR', env.CLAUDE_CONFIG_DIR],
|
|
120
|
+
['MCC_WEBSEARCH_ENABLED', env.MCC_WEBSEARCH_ENABLED || '0'],
|
|
121
|
+
['MCC_IMAGE_ANALYSIS_ENABLED', env.MCC_IMAGE_ANALYSIS_ENABLED || '0'],
|
|
122
|
+
];
|
|
123
|
+
if (env.ANTHROPIC_DEFAULT_OPUS_MODEL !== env.ANTHROPIC_MODEL)
|
|
124
|
+
debugEnvs.push(['ANTHROPIC_DEFAULT_OPUS_MODEL', env.ANTHROPIC_DEFAULT_OPUS_MODEL]);
|
|
125
|
+
if (env.ANTHROPIC_DEFAULT_SONNET_MODEL !== env.ANTHROPIC_MODEL)
|
|
126
|
+
debugEnvs.push(['ANTHROPIC_DEFAULT_SONNET_MODEL', env.ANTHROPIC_DEFAULT_SONNET_MODEL]);
|
|
127
|
+
if (env.ANTHROPIC_DEFAULT_HAIKU_MODEL !== env.ANTHROPIC_MODEL)
|
|
128
|
+
debugEnvs.push(['ANTHROPIC_DEFAULT_HAIKU_MODEL', env.ANTHROPIC_DEFAULT_HAIKU_MODEL]);
|
|
129
|
+
console.log(` ${picocolors_1.default.dim('---')}`);
|
|
130
|
+
for (const [k, v] of debugEnvs) {
|
|
131
|
+
console.log(` ${picocolors_1.default.dim('env')} ${picocolors_1.default.dim(k)}=${picocolors_1.default.dim(v)}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Start translation proxy for OpenAI-compatible profiles
|
|
135
|
+
if (profile.protocol === 'openai') {
|
|
136
|
+
try {
|
|
137
|
+
const proxyInfo = await (0, proxy_daemon_1.startProxy)(profileName, profile.baseUrl, apiKey, profile.model, profile.proxyChatCompletionsPath);
|
|
138
|
+
env.ANTHROPIC_BASE_URL = `http://127.0.0.1:${proxyInfo.port}`;
|
|
139
|
+
env.ANTHROPIC_AUTH_TOKEN = proxyInfo.authToken;
|
|
140
|
+
// MCP image analysis also needs to go through the proxy
|
|
141
|
+
env.MCC_IMAGE_ANALYSIS_RUNTIME_BASE_URL = `http://127.0.0.1:${proxyInfo.port}`;
|
|
142
|
+
env.MCC_IMAGE_ANALYSIS_RUNTIME_API_KEY = proxyInfo.authToken;
|
|
143
|
+
console.log(` ${picocolors_1.default.dim('proxy')} ${picocolors_1.default.cyan(`:${proxyInfo.port}`)}`);
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
console.error(`[!] Failed to start translation proxy: ${e.message}`);
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
console.log(`\n ${picocolors_1.default.green('✓')} ${picocolors_1.default.bold('launching Claude Code')}`);
|
|
151
|
+
const remainingArgs = args.slice(1);
|
|
152
|
+
const child = (0, child_process_1.spawn)('claude', remainingArgs, {
|
|
153
|
+
env: { ...process.env, ...env },
|
|
154
|
+
stdio: 'inherit',
|
|
155
|
+
});
|
|
156
|
+
child.on('exit', (code) => process.exit(code ?? 0));
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mcc mcp <list|add|remove|enable|disable>` — external MCP server management.
|
|
3
|
+
*/
|
|
4
|
+
export declare function cmdMcpList(): Promise<void>;
|
|
5
|
+
export declare function cmdMcpAdd(args: string[]): Promise<void>;
|
|
6
|
+
export declare function cmdMcpRemove(args: string[]): Promise<void>;
|
|
7
|
+
export declare function cmdMcpEnable(args: string[]): Promise<void>;
|
|
8
|
+
export declare function cmdMcpDisable(args: string[]): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwBH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAahD;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC7D;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAahE;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAehE;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAejE"}
|