commandcode-api-proxy 0.1.3 → 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 CHANGED
@@ -1,11 +1,12 @@
1
+ <a href="#"><img src="./.github/assets/banner.webp" alt="Banner"></a>
2
+
1
3
  # Command Code API Proxy
2
4
 
3
- **OpenAI-compatible API proxy for [Command Code](https://commandcode.ai).**
4
- Use your Command Code subscription from **any** OpenAI-compatible client — OpenCode, Continue, the OpenAI SDK, or plain `curl`.
5
+ [![npm version](https://img.shields.io/npm/v/commandcode-api-proxy)](https://www.npmjs.com/package/commandcode-api-proxy)
6
+ [![downloads/month](https://img.shields.io/npm/dm/commandcode-api-proxy)](https://www.npmjs.com/package/commandcode-api-proxy)
5
7
 
6
- ```
7
- npx commandcode-api-proxy
8
- ```
8
+ **OpenAI-compatible API proxy for [Command Code](https://commandcode.ai).**
9
+ Use your Command Code subscription from **any** OpenAI-compatible client — OpenCode, Claude Code, or plain `curl`.
9
10
 
10
11
  ## Why?
11
12
 
@@ -18,10 +19,16 @@ Command Code exposes two API surfaces:
18
19
 
19
20
  This proxy talks `/alpha/generate` upstream and standard OpenAI downstream — so your existing plan works from any tool.
20
21
 
21
- ## Quick start
22
+ ## Run the proxy
22
23
 
23
24
  ```bash
24
- # Run directly (no install)
25
+ # Clone & run from source
26
+ git clone https://github.com/thaolaptrinh/commandcode-api-proxy.git
27
+ cd commandcode-api-proxy
28
+ npm install
29
+ npm run build && npm start
30
+
31
+ # Or run directly (no install)
25
32
  npx commandcode-api-proxy
26
33
 
27
34
  # Or install globally
@@ -29,17 +36,19 @@ npm install -g commandcode-api-proxy
29
36
  commandcode-api-proxy
30
37
  ```
31
38
 
32
- ### Authentication
39
+ On first run, the proxy prompts for your Command Code API key (get it from
40
+ https://commandcode.ai/settings). Other ways to provide it are in
41
+ [Authentication](#authentication).
33
42
 
34
- The proxy loads your API key from (in order of priority):
43
+ ## Authentication
35
44
 
36
- 1. `--api-key` CLI flag: `npx commandcode-api-proxy --api-key user_xxx`
37
- 2. `CC_API_KEY` environment variable
38
- 3. `~/.config/commandcode-api-proxy/auth.json` (saved via `auth login`)
45
+ Provide your API key via `--api-key`, the `CC_API_KEY` env var, or save it
46
+ with `auth login` (stored at `~/.config/commandcode-api-proxy/auth.json`).
39
47
 
40
- On first run without a key, the proxy prompts you to enter one and persists it.
48
+ ### CLI auth commands
41
49
 
42
- #### CLI auth commands
50
+ > From source, replace `commandcode-api-proxy` with `npm run auth --`
51
+ > (e.g. `npm run auth -- login`).
43
52
 
44
53
  ```bash
45
54
  # Save a new API key
@@ -52,9 +61,7 @@ commandcode-api-proxy auth login --force
52
61
  commandcode-api-proxy auth logout
53
62
  ```
54
63
 
55
- Get your API key from https://commandcode.ai/settings.
56
-
57
- ### CLI options
64
+ ## CLI options
58
65
 
59
66
  | Option | Description | Default |
60
67
  | --------------------- | --------------------------------- | ----------- |
@@ -64,97 +71,51 @@ Get your API key from https://commandcode.ai/settings.
64
71
  | `--setup-opencode` | Generate OpenCode provider config | — |
65
72
  | `--setup-claude-code` | Generate Claude Code model config | — |
66
73
 
67
- ## Endpoints
68
-
69
- ### `POST /v1/chat/completions` (OpenAI)
70
-
71
- ```bash
72
- curl http://127.0.0.1:8787/v1/chat/completions \
73
- -H "Authorization: Bearer proxy-managed" \
74
- -H "Content-Type: application/json" \
75
- -d '{
76
- "model": "deepseek/deepseek-v4-pro",
77
- "messages": [{"role": "user", "content": "Hello!"}],
78
- "stream": true
79
- }'
80
- ```
81
-
82
- ### `POST /v1/messages` (Anthropic)
74
+ Equivalent env vars (lower priority than CLI flags):
83
75
 
84
- ```bash
85
- curl http://127.0.0.1:8787/v1/messages \
86
- -H "x-api-key: proxy-managed" \
87
- -H "Content-Type: application/json" \
88
- -d '{
89
- "model": "claude-sonnet-4-5-20250929",
90
- "max_tokens": 4096,
91
- "messages": [{"role": "user", "content": "Hello!"}],
92
- "stream": true
93
- }'
94
- ```
95
-
96
- ### `POST /v1/messages/count_tokens` (Anthropic)
97
-
98
- ```bash
99
- curl http://127.0.0.1:8787/v1/messages/count_tokens \
100
- -H "x-api-key: proxy-managed" \
101
- -H "Content-Type: application/json" \
102
- -d '{
103
- "messages": [{"role": "user", "content": "Hello!"}]
104
- }'
105
- ```
106
-
107
- ### Anthropic model mapping
76
+ | Env var | Description |
77
+ | ---------------- | ----------------------------------------------------------------------------------------------------------------------- |
78
+ | `HOST` | Bind address |
79
+ | `PORT` | Port |
80
+ | `CC_API_KEY` | Command Code API key |
81
+ | `CC_API_BASE` | Upstream API base URL |
82
+ | `CC_CLI_VERSION` | CLI version sent upstream |
83
+ | `LOG_LEVEL` | Log level (`info`, `debug`, etc.) |
84
+ | `CORS_ORIGIN` | `Access-Control-Allow-Origin` value. `*` by default; empty string disables CORS. Restrict before exposing on a network. |
108
85
 
109
- Anthropic clients send Claude model IDs (e.g., `claude-sonnet-4-5-20250929`).
110
- The proxy maps them to CC models via a config file with glob wildcards:
86
+ > **Security:** the proxy forwards your paid Command Code key upstream and
87
+ > accepts any auth token from clients (`proxy-managed`), so it is designed for
88
+ > **localhost** use (`HOST=127.0.0.1`). Do not bind it to `0.0.0.0` on an
89
+ > untrusted network without restricting `CORS_ORIGIN` and putting your own auth
90
+ > in front.
111
91
 
112
- ```bash
113
- npx commandcode-api-proxy --setup-claude-code
114
- ```
115
-
116
- This writes `~/.config/commandcode-api-proxy/anthropic-models.json`:
117
-
118
- ```json
119
- {
120
- "default": "deepseek/deepseek-v4-pro",
121
- "mappings": {
122
- "claude-sonnet-*": "deepseek/deepseek-v4-pro",
123
- "claude-opus-*": "deepseek/deepseek-v4-pro",
124
- "claude-haiku-*": "deepseek/deepseek-v4-flash"
125
- }
126
- }
127
- ```
128
-
129
- **Glob matching:** `*` matches any characters. First matching pattern wins —
130
- put specific patterns before general ones (e.g. `claude-sonnet-*` before
131
- `claude-*`). Edit the file to customize mappings, then restart the proxy.
132
-
133
- Non-Claude model IDs pass through unchanged.
134
-
135
- **Optional override:** Set `ANTHROPIC_DEFAULT_MODEL` env var to override the
136
- config file's `default` field without editing the file.
92
+ ## Endpoints
137
93
 
138
- ### Anthropic limitations
94
+ | Endpoint | Protocol |
95
+ | -------------------------------- | --------- |
96
+ | `GET /health` | — |
97
+ | `GET /v1/models` | OpenAI |
98
+ | `POST /v1/chat/completions` | OpenAI |
99
+ | `POST /v1/messages` | Anthropic |
100
+ | `POST /v1/messages/count_tokens` | Anthropic |
139
101
 
140
- - **Thinking signatures**: placeholder only (not cryptographically signed).
141
- - **Cache control**: stripped (no CC analogue).
142
- - **Count tokens**: heuristic estimate, not exact.
143
- - **Built-in/server tools** (`computer_`, `bash_`, `web_search_`, etc.):
144
- rejected with `invalid_request_error`. Only custom tools supported.
145
- - **`metadata`, `top_k`, `top_p`, `service_tier`**: accepted but dropped.
102
+ All endpoints accept any auth token (use `proxy-managed`) — the proxy injects
103
+ your real Command Code key upstream.
146
104
 
147
105
  ## Client configuration
148
106
 
149
107
  ### OpenCode
150
108
 
151
- Run setup (writes to `~/.config/opencode/opencode.json`):
109
+ Run setup to auto-generate the provider config at `~/.config/opencode/opencode.json`:
152
110
 
153
111
  ```bash
154
112
  npx commandcode-api-proxy --setup-opencode
155
113
  ```
156
114
 
157
- Or add manually:
115
+ All CC models are listed directly — pick the one you want from the model selector.
116
+
117
+ Or add a `commandcode` provider manually — point `baseURL` at the proxy and
118
+ use any model ID from the [Model aliases](#model-aliases) table:
158
119
 
159
120
  ```json
160
121
  {
@@ -168,90 +129,33 @@ Or add manually:
168
129
  "apiKey": "proxy-managed"
169
130
  },
170
131
  "models": {
171
- "deepseek-v4-pro": {
172
- "name": "DeepSeek V4 Pro",
173
- "limit": { "context": 1048576, "output": 393216 }
174
- },
175
- "deepseek-v4-flash": {
176
- "name": "DeepSeek V4 Flash",
177
- "limit": { "context": 1048576, "output": 393216 }
178
- },
179
- "MiniMax-M2.7": { "name": "MiniMax M2.7", "limit": { "context": 204800, "output": 32768 } },
180
- "MiniMax-M2.5": { "name": "MiniMax M2.5", "limit": { "context": 204800, "output": 32768 } },
181
- "GLM-5.1": { "name": "GLM-5.1", "limit": { "context": 200000, "output": 131072 } },
182
- "GLM-5": { "name": "GLM-5", "limit": { "context": 200000, "output": 131072 } },
183
- "Kimi-K2.6": { "name": "Kimi K2.6", "limit": { "context": 262144, "output": 98304 } },
184
- "Kimi-K2.5": { "name": "Kimi K2.5", "limit": { "context": 262144, "output": 98304 } },
185
- "Qwen3.6-Max-Preview": {
186
- "name": "Qwen 3.6 Max Preview",
187
- "limit": { "context": 262144, "output": 65536 }
188
- },
189
- "Qwen3.6-Plus": {
190
- "name": "Qwen 3.6 Plus",
191
- "limit": { "context": 1048576, "output": 65536 }
192
- },
193
- "Qwen3.7-Max": { "name": "Qwen 3.7 Max", "limit": { "context": 1048576, "output": 65536 } },
194
- "Qwen3.7-Plus": {
195
- "name": "Qwen 3.7 Plus",
196
- "limit": { "context": 1048576, "output": 65536 }
197
- },
198
- "Step-3.5-Flash": {
199
- "name": "Step 3.5 Flash",
200
- "limit": { "context": 262144, "output": 65536 }
201
- },
202
- "mimo-v2.5": { "name": "MiMo V2.5", "limit": { "context": 1048576, "output": 131072 } }
132
+ "deepseek-v4-pro": { "name": "DeepSeek V4 Pro" }
203
133
  }
204
134
  }
205
135
  }
206
136
  }
207
137
  ```
208
138
 
209
- ### OpenAI Python SDK
210
-
211
- ```python
212
- from openai import OpenAI
213
-
214
- client = OpenAI(
215
- base_url="http://127.0.0.1:8787/v1",
216
- api_key="proxy-managed",
217
- )
218
-
219
- response = client.chat.completions.create(
220
- model="deepseek/deepseek-v4-pro",
221
- messages=[{"role": "user", "content": "Hello!"}],
222
- )
223
- ```
224
-
225
- ### Continue
226
-
227
- ```json
228
- {
229
- "models": [
230
- {
231
- "title": "Command Code",
232
- "provider": "openai",
233
- "model": "deepseek/deepseek-v4-pro",
234
- "apiKey": "proxy-managed",
235
- "apiBase": "http://127.0.0.1:8787/v1"
236
- }
237
- ]
238
- }
239
- ```
240
-
241
139
  ### Claude Code
242
140
 
243
- Run the proxy's setup to generate model config and Claude Code settings:
141
+ Claude Code only offers three tiers `sonnet`, `opus`, `haiku`. The setup
142
+ maps each tier to a Command Code model via env vars in `claude-settings.json`:
244
143
 
245
144
  ```bash
246
145
  npx commandcode-api-proxy --setup-claude-code
247
146
  ```
248
147
 
249
- This creates:
148
+ If a settings file already exists, re-run with `--force` to overwrite it.
250
149
 
251
- 1. Model mapping config at `~/.config/commandcode-api-proxy/anthropic-models.json`
252
- 2. Claude Code settings at `~/.config/commandcode-api-proxy/claude-settings.json`
150
+ | Claude Code tier | Env var | Maps to |
151
+ | ---------------- | -------------------------------- | ---------------------------- |
152
+ | `sonnet` | `ANTHROPIC_DEFAULT_SONNET_MODEL` | `deepseek/deepseek-v4-pro` |
153
+ | `opus` | `ANTHROPIC_DEFAULT_OPUS_MODEL` | `deepseek/deepseek-v4-pro` |
154
+ | `haiku` | `ANTHROPIC_DEFAULT_HAIKU_MODEL` | `deepseek/deepseek-v4-flash` |
253
155
 
254
- Then run:
156
+ Edit those env vars in the settings file to point at other CC models. To force
157
+ every `claude-*` request to a single model regardless of tier, set
158
+ `ANTHROPIC_DEFAULT_MODEL`. Then run:
255
159
 
256
160
  ```bash
257
161
  claude --settings ~/.config/commandcode-api-proxy/claude-settings.json
@@ -264,40 +168,50 @@ alias claude-proxy="claude --settings ~/.config/commandcode-api-proxy/claude-set
264
168
  claude-proxy
265
169
  ```
266
170
 
267
- ### Anthropic SDK (Python)
268
-
269
- ```python
270
- from anthropic import Anthropic
271
-
272
- client = Anthropic(
273
- base_url="http://127.0.0.1:8787/v1",
274
- api_key="proxy-managed",
275
- )
276
-
277
- message = client.messages.create(
278
- model="claude-sonnet-4-5-20250929",
279
- max_tokens=4096,
280
- messages=[{"role": "user", "content": "Hello!"}],
281
- )
282
- ```
283
-
284
171
  ## Model aliases
285
172
 
286
173
  Short names work in addition to full model IDs:
287
174
 
288
- | Alias | Maps to |
289
- | ------------------------------------- | ---------------------------- |
290
- | `deepseek-v4-pro`, `deepseek-v4` | `deepseek/deepseek-v4-pro` |
291
- | `deepseek-v4-flash`, `deepseek-flash` | `deepseek/deepseek-v4-flash` |
292
- | `minimax-m2.7`, `minimax-m2.5` | `MiniMaxAI/MiniMax-*` |
293
- | `glm-5.1`, `glm-5` | `zai-org/GLM-*` |
294
- | `kimi-k2.6`, `kimi-k2.5` | `moonshotai/Kimi-*` |
295
- | `qwen3.6-max`, `qwen3.6-plus` | `Qwen/Qwen3.6-*` |
296
- | `step3.5` | `stepfun/Step-3.5-Flash` |
297
- | `mimo-v2.5` | `xiaomi/mimo-v2.5` |
175
+ | Alias | Maps to |
176
+ | ------------------------------------------------ | ------------------------------------- |
177
+ | `deepseek-v4-pro`, `deepseek-v4`, `deepseek-pro` | `deepseek/deepseek-v4-pro` |
178
+ | `deepseek-v4-flash`, `deepseek-flash` | `deepseek/deepseek-v4-flash` |
179
+ | `glm-5.2`, `glm5.2` | `zai-org/GLM-5.2` |
180
+ | `glm-5.2-fast`, `glm5.2-fast` | `zai-org/GLM-5.2-Fast` |
181
+ | `glm-5.1` | `zai-org/GLM-5.1` |
182
+ | `glm-5` | `zai-org/GLM-5` |
183
+ | `minimax-m3`, `minimax3` | `MiniMaxAI/MiniMax-M3` |
184
+ | `minimax-m2.7`, `minimax2.7` | `MiniMaxAI/MiniMax-M2.7` |
185
+ | `minimax-m2.5`, `minimax2.5` | `MiniMaxAI/MiniMax-M2.5` |
186
+ | `kimi-k3`, `kimi3` | `moonshotai/Kimi-K3` |
187
+ | `kimi-k2.7-code`, `kimi-code` | `moonshotai/Kimi-K2.7-Code` |
188
+ | `kimi-k2.7-highspeed`, `kimi-highspeed` | `moonshotai/Kimi-K2.7-Code-Highspeed` |
189
+ | `kimi-k2.6`, `kimi2.6` | `moonshotai/Kimi-K2.6` |
190
+ | `kimi-k2.5`, `kimi2.5` | `moonshotai/Kimi-K2.5` |
191
+ | `qwen3.7-max`, `qwen-3.7-max` | `Qwen/Qwen3.7-Max` |
192
+ | `qwen3.7-plus`, `qwen-3.7-plus` | `Qwen/Qwen3.7-Plus` |
193
+ | `qwen3.6-max`, `qwen-3.6-max` | `Qwen/Qwen3.6-Max-Preview` |
194
+ | `qwen3.6-plus`, `qwen-3.6-plus` | `Qwen/Qwen3.6-Plus` |
195
+ | `step-3.7-flash`, `step3.7` | `stepfun/Step-3.7-Flash` |
196
+ | `step3.5`, `step-3.5-flash` | `stepfun/Step-3.5-Flash` |
197
+ | `mimo-v2.5-pro`, `mimo-pro` | `xiaomi/mimo-v2.5-pro` |
198
+ | `mimo-v2.5`, `mimo2.5` | `xiaomi/mimo-v2.5` |
199
+ | `grok-4.5`, `grok4.5` | `xai/grok-4.5` |
200
+ | `nemotron`, `nemotron-3-ultra` | `nvidia/nemotron-3-ultra-550b-a55b` |
201
+ | `inkling` | `thinkingmachines/inkling` |
202
+ | `hy3` | `tencent/Hy3` |
298
203
 
299
204
  Any model ID is passed through as-is — the proxy does not validate against a fixed list.
300
205
 
206
+ ### Reasoning effort
207
+
208
+ Some models support a `reasoning_effort` (`low` | `medium` | `high` | `xhigh` | `max`), and
209
+ each accepts a different subset. The proxy sends the closest valid level for the model
210
+ (e.g. `deepseek-v4-pro` supports only `high`/`max`, so `low` is clipped up to `high` and
211
+ `max` is reachable). Models without a discrete effort set ignore the value. Pass the
212
+ effort via OpenAI's `reasoning_effort`, or Anthropic's `thinking.budget_tokens`
213
+ (larger budget → higher effort).
214
+
301
215
  ## License
302
216
 
303
217
  MIT
package/dist/config.d.ts CHANGED
@@ -5,6 +5,7 @@ export interface Config {
5
5
  ccApiBase: string;
6
6
  ccVersion: string;
7
7
  logLevel: string;
8
+ corsOrigin: string;
8
9
  }
9
10
  /**
10
11
  * Hardcoded CLI version fallback. The real CLI ships frequent releases, so
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAM3C;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBpE;AAqBD,wBAAgB,UAAU,IAAI,MAAM,CAWnC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAM3C;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBpE;AAqBD,wBAAgB,UAAU,IAAI,MAAM,CAcnC"}
package/dist/config.js CHANGED
@@ -62,6 +62,9 @@ export function loadConfig() {
62
62
  const ccApiBase = process.env.CC_API_BASE || "https://api.commandcode.ai";
63
63
  const ccVersion = process.env.CC_CLI_VERSION || cachedVersion || DEFAULT_CC_VERSION;
64
64
  const logLevel = process.env.LOG_LEVEL || "info";
65
- return { host, port, apiKey, ccApiBase, ccVersion, logLevel };
65
+ // `*` is fine for a localhost proxy; restrict (e.g. to an origin or leave
66
+ // empty to disable) before exposing the proxy on a network.
67
+ const corsOrigin = process.env.CORS_ORIGIN ?? "*";
68
+ return { host, port, apiKey, ccApiBase, ccVersion, logLevel, corsOrigin };
66
69
  }
67
70
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/models.json CHANGED
@@ -2,18 +2,30 @@
2
2
  "builtin": [
3
3
  "deepseek/deepseek-v4-pro",
4
4
  "deepseek/deepseek-v4-flash",
5
- "MiniMaxAI/MiniMax-M2.7",
6
- "MiniMaxAI/MiniMax-M2.5",
5
+ "zai-org/GLM-5.2",
6
+ "zai-org/GLM-5.2-Fast",
7
7
  "zai-org/GLM-5.1",
8
8
  "zai-org/GLM-5",
9
+ "MiniMaxAI/MiniMax-M3",
10
+ "MiniMaxAI/MiniMax-M2.7",
11
+ "MiniMaxAI/MiniMax-M2.5",
12
+ "moonshotai/Kimi-K3",
13
+ "moonshotai/Kimi-K2.7-Code",
14
+ "moonshotai/Kimi-K2.7-Code-Highspeed",
9
15
  "moonshotai/Kimi-K2.6",
10
16
  "moonshotai/Kimi-K2.5",
17
+ "Qwen/Qwen3.7-Max",
18
+ "Qwen/Qwen3.7-Plus",
11
19
  "Qwen/Qwen3.6-Max-Preview",
12
20
  "Qwen/Qwen3.6-Plus",
21
+ "stepfun/Step-3.7-Flash",
13
22
  "stepfun/Step-3.5-Flash",
23
+ "xiaomi/mimo-v2.5-pro",
14
24
  "xiaomi/mimo-v2.5",
15
- "Qwen/Qwen3.7-Max",
16
- "Qwen/Qwen3.7-Plus"
25
+ "xai/grok-4.5",
26
+ "nvidia/nemotron-3-ultra-550b-a55b",
27
+ "thinkingmachines/inkling",
28
+ "tencent/Hy3"
17
29
  ],
18
30
  "shortAliases": {
19
31
  "deepseek-v4-pro": "deepseek/deepseek-v4-pro",
@@ -21,54 +33,113 @@
21
33
  "deepseek-pro": "deepseek/deepseek-v4-pro",
22
34
  "deepseek-v4-flash": "deepseek/deepseek-v4-flash",
23
35
  "deepseek-flash": "deepseek/deepseek-v4-flash",
24
- "kimi-k2.6": "moonshotai/Kimi-K2.6",
25
- "kimi-k2.5": "moonshotai/Kimi-K2.5",
26
- "kimi2.6": "moonshotai/Kimi-K2.6",
27
- "kimi2.5": "moonshotai/Kimi-K2.5",
36
+ "glm-5.2": "zai-org/GLM-5.2",
37
+ "glm5.2": "zai-org/GLM-5.2",
38
+ "glm-5.2-fast": "zai-org/GLM-5.2-Fast",
39
+ "glm5.2-fast": "zai-org/GLM-5.2-Fast",
28
40
  "glm-5.1": "zai-org/GLM-5.1",
29
41
  "glm-5": "zai-org/GLM-5",
42
+ "minimax-m3": "MiniMaxAI/MiniMax-M3",
43
+ "minimax3": "MiniMaxAI/MiniMax-M3",
30
44
  "minimax-m2.7": "MiniMaxAI/MiniMax-M2.7",
31
45
  "minimax2.7": "MiniMaxAI/MiniMax-M2.7",
32
46
  "minimax-m2.5": "MiniMaxAI/MiniMax-M2.5",
33
47
  "minimax2.5": "MiniMaxAI/MiniMax-M2.5",
48
+ "kimi-k3": "moonshotai/Kimi-K3",
49
+ "kimi3": "moonshotai/Kimi-K3",
50
+ "kimi-k2.7-code": "moonshotai/Kimi-K2.7-Code",
51
+ "kimi2.7-code": "moonshotai/Kimi-K2.7-Code",
52
+ "kimi-code": "moonshotai/Kimi-K2.7-Code",
53
+ "kimi-k2.7-highspeed": "moonshotai/Kimi-K2.7-Code-Highspeed",
54
+ "kimi-highspeed": "moonshotai/Kimi-K2.7-Code-Highspeed",
55
+ "kimi-k2.6": "moonshotai/Kimi-K2.6",
56
+ "kimi2.6": "moonshotai/Kimi-K2.6",
57
+ "kimi-k2.5": "moonshotai/Kimi-K2.5",
58
+ "kimi2.5": "moonshotai/Kimi-K2.5",
59
+ "qwen3.7-max": "Qwen/Qwen3.7-Max",
60
+ "qwen-3.7-max": "Qwen/Qwen3.7-Max",
61
+ "qwen3.7-plus": "Qwen/Qwen3.7-Plus",
62
+ "qwen-3.7-plus": "Qwen/Qwen3.7-Plus",
34
63
  "qwen-3.6-max": "Qwen/Qwen3.6-Max-Preview",
35
64
  "qwen3.6-max": "Qwen/Qwen3.6-Max-Preview",
36
65
  "qwen-3.6-plus": "Qwen/Qwen3.6-Plus",
37
66
  "qwen3.6-plus": "Qwen/Qwen3.6-Plus",
67
+ "step-3.7-flash": "stepfun/Step-3.7-Flash",
68
+ "step3.7": "stepfun/Step-3.7-Flash",
38
69
  "step-3.5-flash": "stepfun/Step-3.5-Flash",
39
- "step3.5": "stepfun/Step-3.5-Flash"
70
+ "step3.5": "stepfun/Step-3.5-Flash",
71
+ "mimo-v2.5-pro": "xiaomi/mimo-v2.5-pro",
72
+ "mimo-pro": "xiaomi/mimo-v2.5-pro",
73
+ "mimo-v2.5": "xiaomi/mimo-v2.5",
74
+ "mimo2.5": "xiaomi/mimo-v2.5",
75
+ "grok-4.5": "xai/grok-4.5",
76
+ "grok4.5": "xai/grok-4.5",
77
+ "nemotron": "nvidia/nemotron-3-ultra-550b-a55b",
78
+ "nemotron-3-ultra": "nvidia/nemotron-3-ultra-550b-a55b",
79
+ "inkling": "thinkingmachines/inkling",
80
+ "hy3": "tencent/Hy3"
40
81
  },
41
82
  "contextWindows": {
42
83
  "deepseek/deepseek-v4-pro": 1048576,
43
84
  "deepseek/deepseek-v4-flash": 1048576,
44
- "MiniMaxAI/MiniMax-M2.7": 204800,
45
- "MiniMaxAI/MiniMax-M2.5": 204800,
85
+ "zai-org/GLM-5.2": 1048576,
86
+ "zai-org/GLM-5.2-Fast": 1048576,
46
87
  "zai-org/GLM-5.1": 200000,
47
88
  "zai-org/GLM-5": 200000,
48
- "moonshotai/Kimi-K2.6": 262144,
49
- "moonshotai/Kimi-K2.5": 262144,
89
+ "MiniMaxAI/MiniMax-M3": 1048576,
90
+ "MiniMaxAI/MiniMax-M2.7": 204800,
91
+ "MiniMaxAI/MiniMax-M2.5": 200000,
92
+ "moonshotai/Kimi-K3": 1048576,
93
+ "moonshotai/Kimi-K2.7-Code": 256000,
94
+ "moonshotai/Kimi-K2.7-Code-Highspeed": 262000,
95
+ "moonshotai/Kimi-K2.6": 256000,
96
+ "moonshotai/Kimi-K2.5": 256000,
97
+ "Qwen/Qwen3.7-Max": 1048576,
98
+ "Qwen/Qwen3.7-Plus": 1048576,
50
99
  "Qwen/Qwen3.6-Max-Preview": 262144,
51
100
  "Qwen/Qwen3.6-Plus": 1048576,
52
- "stepfun/Step-3.5-Flash": 262144,
101
+ "stepfun/Step-3.7-Flash": 256000,
102
+ "stepfun/Step-3.5-Flash": 1048576,
103
+ "xiaomi/mimo-v2.5-pro": 1048576,
53
104
  "xiaomi/mimo-v2.5": 1048576,
54
- "Qwen/Qwen3.7-Max": 1048576,
55
- "Qwen/Qwen3.7-Plus": 1048576
105
+ "xai/grok-4.5": 500000,
106
+ "nvidia/nemotron-3-ultra-550b-a55b": 1048576,
107
+ "thinkingmachines/inkling": 256000,
108
+ "tencent/Hy3": 262144
56
109
  },
57
110
  "modelNames": {
58
111
  "deepseek/deepseek-v4-pro": "DeepSeek V4 Pro",
59
112
  "deepseek/deepseek-v4-flash": "DeepSeek V4 Flash",
60
- "MiniMaxAI/MiniMax-M2.7": "MiniMax M2.7",
61
- "MiniMaxAI/MiniMax-M2.5": "MiniMax M2.5",
113
+ "zai-org/GLM-5.2": "GLM-5.2",
114
+ "zai-org/GLM-5.2-Fast": "GLM-5.2 Fast",
62
115
  "zai-org/GLM-5.1": "GLM-5.1",
63
116
  "zai-org/GLM-5": "GLM-5",
117
+ "MiniMaxAI/MiniMax-M3": "MiniMax M3",
118
+ "MiniMaxAI/MiniMax-M2.7": "MiniMax M2.7",
119
+ "MiniMaxAI/MiniMax-M2.5": "MiniMax M2.5",
120
+ "moonshotai/Kimi-K3": "Kimi K3",
121
+ "moonshotai/Kimi-K2.7-Code": "Kimi K2.7 Code",
122
+ "moonshotai/Kimi-K2.7-Code-Highspeed": "Kimi K2.7 Code Highspeed",
64
123
  "moonshotai/Kimi-K2.6": "Kimi K2.6",
65
124
  "moonshotai/Kimi-K2.5": "Kimi K2.5",
125
+ "Qwen/Qwen3.7-Max": "Qwen 3.7 Max",
126
+ "Qwen/Qwen3.7-Plus": "Qwen 3.7 Plus",
66
127
  "Qwen/Qwen3.6-Max-Preview": "Qwen 3.6 Max Preview",
67
128
  "Qwen/Qwen3.6-Plus": "Qwen 3.6 Plus",
129
+ "stepfun/Step-3.7-Flash": "Step 3.7 Flash",
68
130
  "stepfun/Step-3.5-Flash": "Step 3.5 Flash",
131
+ "xiaomi/mimo-v2.5-pro": "MiMo V2.5 Pro",
69
132
  "xiaomi/mimo-v2.5": "MiMo V2.5",
70
- "Qwen/Qwen3.7-Max": "Qwen 3.7 Max",
71
- "Qwen/Qwen3.7-Plus": "Qwen 3.7 Plus"
133
+ "xai/grok-4.5": "Grok 4.5",
134
+ "nvidia/nemotron-3-ultra-550b-a55b": "Nemotron 3 Ultra",
135
+ "thinkingmachines/inkling": "Inkling",
136
+ "tencent/Hy3": "Hy3"
137
+ },
138
+ "reasoningEfforts": {
139
+ "deepseek/deepseek-v4-pro": ["high", "max"],
140
+ "deepseek/deepseek-v4-flash": ["high", "max"],
141
+ "zai-org/GLM-5.2": ["high", "max"],
142
+ "xai/grok-4.5": ["low", "medium", "high"]
72
143
  },
73
144
  "maxOutputTokens": {
74
145
  "deepseek/deepseek-v4-pro": 393216,
package/dist/proxy.js CHANGED
@@ -78,11 +78,24 @@ server.listen(config.port, config.host, () => {
78
78
  console.log("");
79
79
  console.log(" Press Ctrl+C to stop\n");
80
80
  });
81
- process.on("SIGINT", () => {
82
- console.log("\n Shutting down...");
83
- server.close(() => process.exit(0));
81
+ // Never let an unexpected async error crash the proxy silently — log and keep
82
+ // serving. (Route handlers already catch their own errors; this is a backstop.)
83
+ process.on("unhandledRejection", (reason) => {
84
+ logger.error("[fatal] Unhandled promise rejection:", reason);
84
85
  });
85
- process.on("SIGTERM", () => {
86
- server.close(() => process.exit(0));
86
+ process.on("uncaughtException", (err) => {
87
+ logger.error("[fatal] Uncaught exception:", err);
87
88
  });
89
+ const shutdown = (signal) => {
90
+ logger.info(`Received ${signal}, shutting down...`);
91
+ // Don't hang forever waiting on a stuck streaming connection.
92
+ const force = setTimeout(() => {
93
+ logger.warn("Forcing shutdown after 10s timeout");
94
+ process.exit(1);
95
+ }, 10_000);
96
+ force.unref();
97
+ server.close(() => process.exit(0));
98
+ };
99
+ process.on("SIGINT", () => shutdown("SIGINT"));
100
+ process.on("SIGTERM", () => shutdown("SIGTERM"));
88
101
  //# sourceMappingURL=proxy.js.map
package/dist/proxy.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}