@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.
Files changed (86) hide show
  1. package/README.md +226 -127
  2. package/dist/accounts/store.d.ts +1 -0
  3. package/dist/accounts/store.d.ts.map +1 -1
  4. package/dist/accounts/store.js.map +1 -1
  5. package/dist/commands/launch.d.ts +9 -0
  6. package/dist/commands/launch.d.ts.map +1 -0
  7. package/dist/commands/launch.js +158 -0
  8. package/dist/commands/launch.js.map +1 -0
  9. package/dist/commands/mcp.d.ts +9 -0
  10. package/dist/commands/mcp.d.ts.map +1 -0
  11. package/dist/commands/mcp.js +112 -0
  12. package/dist/commands/mcp.js.map +1 -0
  13. package/dist/commands/profile.d.ts +8 -0
  14. package/dist/commands/profile.d.ts.map +1 -0
  15. package/dist/commands/profile.js +125 -0
  16. package/dist/commands/profile.js.map +1 -0
  17. package/dist/core/model-router.d.ts.map +1 -1
  18. package/dist/core/model-router.js +5 -2
  19. package/dist/core/model-router.js.map +1 -1
  20. package/dist/{dashboard-server.d.ts → dashboard/server.d.ts} +1 -1
  21. package/dist/dashboard/server.d.ts.map +1 -0
  22. package/dist/{dashboard-server.js → dashboard/server.js} +169 -51
  23. package/dist/dashboard/server.js.map +1 -0
  24. package/dist/mcc.d.ts +4 -2
  25. package/dist/mcc.d.ts.map +1 -1
  26. package/dist/mcc.js +121 -408
  27. package/dist/mcc.js.map +1 -1
  28. package/dist/mcp/mcp-config.d.ts +17 -1
  29. package/dist/mcp/mcp-config.d.ts.map +1 -1
  30. package/dist/mcp/mcp-config.js +50 -17
  31. package/dist/mcp/mcp-config.js.map +1 -1
  32. package/dist/proxy/proxy-daemon.d.ts.map +1 -1
  33. package/dist/proxy/proxy-daemon.js +17 -2
  34. package/dist/proxy/proxy-daemon.js.map +1 -1
  35. package/dist/proxy/proxy-entry.js +5 -3
  36. package/dist/proxy/proxy-entry.js.map +1 -1
  37. package/dist/proxy/proxy-server.d.ts.map +1 -1
  38. package/dist/proxy/proxy-server.js +32 -6
  39. package/dist/proxy/proxy-server.js.map +1 -1
  40. package/dist/shared/config.d.ts +15 -0
  41. package/dist/shared/config.d.ts.map +1 -0
  42. package/dist/shared/config.js +79 -0
  43. package/dist/shared/config.js.map +1 -0
  44. package/dist/shared/logger.d.ts +23 -18
  45. package/dist/shared/logger.d.ts.map +1 -1
  46. package/dist/shared/logger.js +17 -178
  47. package/dist/shared/logger.js.map +1 -1
  48. package/dist/shared/provider-preset-catalog.d.ts +6 -2
  49. package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
  50. package/dist/shared/provider-preset-catalog.js +47 -26
  51. package/dist/shared/provider-preset-catalog.js.map +1 -1
  52. package/dist/ui/assets/index-ClqmrjNk.js +40 -0
  53. package/dist/ui/assets/index-CwMwQ-Z4.css +1 -0
  54. package/dist/ui/index.html +21 -13
  55. package/dist/update.d.ts +31 -0
  56. package/dist/update.d.ts.map +1 -0
  57. package/dist/update.js +196 -0
  58. package/dist/update.js.map +1 -0
  59. package/lib/mcp/mcc-image-analysis-server.cjs +454 -454
  60. package/lib/mcp/mcc-websearch-server.cjs +339 -339
  61. package/lib/mcp-hooks/image-analysis-runtime.cjs +510 -510
  62. package/lib/mcp-hooks/image-analyzer-transformer.cjs +526 -526
  63. package/lib/mcp-hooks/websearch-transformer.cjs +1597 -1421
  64. package/lib/proxy/config/config-loader-facade.js +24 -24
  65. package/lib/proxy/glmt/delta-accumulator.js +362 -362
  66. package/lib/proxy/glmt/glmt-transformer.js +203 -203
  67. package/lib/proxy/glmt/index.js +40 -40
  68. package/lib/proxy/glmt/locale-enforcer.js +68 -68
  69. package/lib/proxy/glmt/pipeline/content-transformer.js +161 -161
  70. package/lib/proxy/glmt/pipeline/index.js +19 -19
  71. package/lib/proxy/glmt/pipeline/request-transformer.js +115 -115
  72. package/lib/proxy/glmt/pipeline/response-builder.js +204 -204
  73. package/lib/proxy/glmt/pipeline/stream-parser.js +233 -233
  74. package/lib/proxy/glmt/pipeline/tool-call-handler.js +77 -77
  75. package/lib/proxy/glmt/pipeline/types.js +5 -5
  76. package/lib/proxy/glmt/reasoning-enforcer.js +150 -150
  77. package/lib/proxy/glmt/sse-parser.js +101 -101
  78. package/lib/proxy/services/logging.js +13 -13
  79. package/lib/proxy/transformers/request-transformer.js +471 -471
  80. package/lib/proxy/transformers/sse-stream-transformer.js +198 -198
  81. package/lib/shared/logger.cjs +156 -138
  82. package/package.json +58 -41
  83. package/dist/dashboard-server.d.ts.map +0 -1
  84. package/dist/dashboard-server.js.map +0 -1
  85. package/dist/ui/assets/index-B16lhKZ6.js +0 -40
  86. 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 install
9
- npm run build # tsc 编译
10
- npm run dev -- help # 不编译直接跑
11
- npm run dashboard # 启动 Web 管理界面(http://localhost:3000)
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 dashboard # 打开 Web Dashboard
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**:`npm run dashboard` 启动 Express 管理界面(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 入口
71
- ├── accounts/
72
- │ ├── store.ts # Profile 元数据
73
- │ ├── instance-manager.ts # CLAUDE_CONFIG_DIR 隔离
74
- │ └── shared-manager.ts # instance 共享目录
75
- ├── core/model-router.ts # Profile env 构建
76
- ├── mcp/
77
- │ ├── registry.ts # 内置 MCP 注册表
78
- ├── installer.ts # MCP 安装到 instance
79
- ├── external-registry.ts # 外部 MCP 注册表
80
- │ └── mcp-config.ts # provider 配置
81
- ├── proxy/ # OpenAI→Anthropic 翻译 proxy
82
- ├── dashboard-server.ts # Express Dashboard
83
- └── shared/logger.ts # 日志系统
84
-
85
- lib/
86
- ├── mcp/ # 内置 MCP server JS
87
- ├── mcp-hooks/ # MCP runtime hooks
88
- │ ├── logger.cjs
89
- ├── image-analysis-runtime.cjs
90
- │ ├── image-analyzer-transformer.cjs
91
- │ └── websearch-transformer.cjs
92
- └── shared/logger.cjs
93
- ```
94
-
95
- ## 存储结构
96
-
97
- ```
98
- ~/.mcc/
99
- ├── profiles.json
100
- ├── profiles/<name>/.key
101
- ├── instances/<name>/
102
- ├── .claude.json # Claude Code 读取的 MCP 配置
103
- │ └── .mcp/mcpServers.json
104
- ├── mcp/
105
- ├── mcp-hooks/
106
- ├── external-mcp-servers.json # 外部 MCP 定义
107
- ├── mcp-config.json # WebSearch/ImageAnalysis 配置
108
- └── proxy/ # proxy PID/session
109
- ```
110
-
111
- ## MCP 工具配置
112
-
113
- 通过 `~/.mcc/mcp-config.json` 配置,或通过 Dashboard UI。
114
-
115
- WebSearch provider:duckduckgo(默认,免 API key)、exa、tavily、brave
116
-
117
- ImageAnalysis provider:ali(qwen-vl)、kimi(moonshot-vl)、minimax、deepseek
118
-
119
- ## 开发
120
-
121
- ```bash
122
- npm install
123
- npm run build # tsc
124
- npm run dev -- help # 直接跑 dist/
125
- npm run build:ui # 构建 React Dashboard
126
- npm run dashboard # 编译 + 启动 Dashboard
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 / 提交前 |
@@ -10,6 +10,7 @@
10
10
  */
11
11
  export interface Profile {
12
12
  name: string;
13
+ displayName?: string;
13
14
  baseUrl: string;
14
15
  model: string;
15
16
  opusModel?: string;
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDH,oCAEC;AAED,gCAEC;AAED,8CAEC;AAED,kCAOC;AAED,4CAIC;AAED,sCAUC;AAED,8CAKC;AAED,gCAEC;AApGD,uCAAyB;AACzB,2CAA6B;AAE7B,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,EAAE,MAAM,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,eAAe,CAAC,CAAC;AAClD,CAAC;AAqBD,SAAS,gBAAgB;IACvB,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAkB;IAC3C,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED,SAAgB,YAAY;IAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,gBAAgB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,gBAAgB,EAAE,CAAC,cAAc,CAAC;AAC3C,CAAC;AAED,SAAgB,WAAW,CAAC,OAAgB,EAAE,MAAc;IAC1D,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3F,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IACnF,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACjD,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO;IACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACzF,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;IACxE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC3B,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,IAAI,gBAAgB,EAAE,CAAC,QAAQ,CAAC;AAC7C,CAAC"}
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"}