mimo2codex 0.1.3 → 0.1.6

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.
@@ -0,0 +1,25 @@
1
+ import { mimo } from "./mimo.js";
2
+ import { deepseek } from "./deepseek.js";
3
+ export const PROVIDERS = {
4
+ mimo,
5
+ deepseek,
6
+ };
7
+ export const PROVIDER_LIST = [mimo, deepseek];
8
+ export function byShortcut(s) {
9
+ const norm = s.toLowerCase();
10
+ return PROVIDER_LIST.find((p) => p.shortcut === norm || p.id === norm);
11
+ }
12
+ // Find which provider owns a given client-supplied model id (or alias).
13
+ // Used in PR2+ for per-request routing; in PR1 callers fall back to the
14
+ // configured default provider when this returns undefined.
15
+ export function byClientModel(model) {
16
+ for (const p of PROVIDER_LIST) {
17
+ if (p.resolveModel(model))
18
+ return p;
19
+ }
20
+ return undefined;
21
+ }
22
+ export function isProviderId(s) {
23
+ return s === "mimo" || s === "deepseek";
24
+ }
25
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,CAAC,MAAM,SAAS,GAA2C;IAC/D,IAAI;IACJ,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAEnE,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7B,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,wEAAwE;AACxE,wEAAwE;AACxE,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,UAAU,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
package/dist/server.js CHANGED
@@ -1,11 +1,13 @@
1
1
  import { createServer } from "node:http";
2
- import { reqToChat } from "./translate/reqToChat.js";
3
2
  import { respToResponses } from "./translate/respToResponses.js";
4
3
  import { pipeChatStreamToResponses } from "./translate/streamToSse.js";
5
4
  import { iterChatStreamChunks } from "./upstream/chatStream.js";
6
- import { callMimo, UpstreamError } from "./upstream/mimoClient.js";
5
+ import { callOpenAICompat, UpstreamError } from "./upstream/openaiCompatClient.js";
6
+ import { byClientModel, PROVIDER_LIST, PROVIDERS } from "./providers/registry.js";
7
7
  import { makeServerResponseSink } from "./util/sse.js";
8
8
  import { log } from "./util/log.js";
9
+ import { handleAdmin } from "./admin/router.js";
10
+ import { insertLog } from "./db/logs.js";
9
11
  const KEEPALIVE_INTERVAL_MS = 15_000;
10
12
  async function readJsonBody(req, maxBytes = 16 * 1024 * 1024) {
11
13
  return await new Promise((resolve, reject) => {
@@ -55,6 +57,57 @@ function errorEnvelope(status, code, message) {
55
57
  },
56
58
  };
57
59
  }
60
+ function recordLog(cfg, entry) {
61
+ if (!cfg.adminEnabled)
62
+ return;
63
+ const ts = Date.now();
64
+ setImmediate(() => {
65
+ try {
66
+ insertLog({ ...entry, ts });
67
+ }
68
+ catch (err) {
69
+ log.warn("chat_logs insert failed", { error: err.message });
70
+ }
71
+ });
72
+ }
73
+ function usageFromChatResponse(u) {
74
+ if (!u)
75
+ return { prompt_tokens: null, completion_tokens: null, total_tokens: null };
76
+ return {
77
+ prompt_tokens: u.prompt_tokens ?? null,
78
+ completion_tokens: u.completion_tokens ?? null,
79
+ total_tokens: u.total_tokens ?? null,
80
+ };
81
+ }
82
+ // Route a request to a provider based on the client-supplied model field:
83
+ // 1. If the model matches an enabled non-default provider's catalog → switch.
84
+ // 2. Otherwise use the configured default provider; the body.model is
85
+ // rewritten to the default provider's defaultModel so we never forward
86
+ // an unknown id (which would 400 at the upstream).
87
+ function selectProvider(clientModel, cfg) {
88
+ const matched = byClientModel(clientModel);
89
+ if (matched && cfg.providers[matched.id]) {
90
+ const resolved = matched.resolveModel(clientModel);
91
+ return {
92
+ provider: matched,
93
+ runtime: cfg.providers[matched.id],
94
+ upstreamModel: resolved?.id ?? matched.defaultModel,
95
+ };
96
+ }
97
+ const provider = PROVIDERS[cfg.defaultProviderId];
98
+ const runtime = cfg.providers[cfg.defaultProviderId];
99
+ if (!runtime) {
100
+ throw new Error(`provider ${cfg.defaultProviderId} has no runtime (missing api key)`);
101
+ }
102
+ // Unknown model → use the default provider's defaultModel so we don't pass
103
+ // a foreign id to the upstream.
104
+ const resolved = provider.resolveModel(clientModel);
105
+ return {
106
+ provider,
107
+ runtime,
108
+ upstreamModel: resolved?.id ?? provider.defaultModel,
109
+ };
110
+ }
58
111
  async function handleResponses(cfg, req, res) {
59
112
  let payload;
60
113
  try {
@@ -76,88 +129,148 @@ async function handleResponses(cfg, req, res) {
76
129
  log.debug("incoming POST /v1/responses raw body", payload);
77
130
  // Health-check probe short-circuit. Tools like cc-switch's "test connection"
78
131
  // send POST /v1/responses with just `{model, stream}` and no input — our
79
- // translation would forward `messages: []` to MiMo, which 400s. Detect the
80
- // probe shape (no input, no instructions) and answer with a synthetic 200
81
- // without burning an upstream call.
132
+ // translation would forward `messages: []` to the upstream, which 400s.
133
+ // Detect the probe shape (no input, no instructions) and answer with a
134
+ // synthetic 200 without burning an upstream call.
82
135
  const hasInput = Array.isArray(payload.input) && payload.input.length > 0;
83
136
  const hasInstructions = typeof payload.instructions === "string" && payload.instructions.length > 0;
84
137
  if (!hasInput && !hasInstructions) {
85
138
  log.debug("matched probe shape — returning synthetic 200 without upstream call");
86
139
  return respondToResponsesProbe(payload, res, !!payload.stream);
87
140
  }
88
- // mimo2codex applies two default-on behaviors that compensate for MiMo's
89
- // weaker agentic-coding training compared to GPT-5 / Claude:
90
- // - parallel_tool_calls: true ← batch tool calls per turn
91
- // - web_search forwarded to MiMo ← model decides when to search
92
- //
93
- // Note on web_search:
94
- // - On token-plan accounts (`tp-*` keys / token-plan-cn host), the Web
95
- // Search Plugin isn't available, so we proactively strip web_search
96
- // before forwarding (cfg.isTokenPlan).
97
- // - On pay-as-you-go accounts (`sk-*`), we keep forwarding. If the user
98
- // hasn't activated the plugin, MiMo returns 400 "webSearchEnabled is
99
- // false" — we surface that with a friendlier hint (see mimoClient.ts)
100
- // so the user activates the plugin and restarts.
101
- //
102
- // Note: we deliberately do NOT set `thinking: {type: "disabled"}` so that
103
- // MiMo keeps generating `reasoning_content`. The user typically wants to
104
- // see the thinking in the Codex terminal (use `--no-reasoning` to hide it).
105
- const chat = reqToChat(payload, {
106
- forceParallelToolCalls: true,
107
- enableWebSearch: !cfg.isTokenPlan,
141
+ const { provider, runtime, upstreamModel } = selectProvider(payload.model, cfg);
142
+ log.debug(`routing to provider=${provider.id}`, {
143
+ baseUrl: runtime.baseUrl,
144
+ clientModel: payload.model,
145
+ upstreamModel,
108
146
  });
147
+ const chat = provider.preprocessResponses(payload, {
148
+ runtime,
149
+ exposeReasoning: cfg.exposeReasoning,
150
+ });
151
+ chat.model = upstreamModel;
109
152
  chat.stream = !!payload.stream;
110
153
  const stream = !!payload.stream;
111
154
  const ac = new AbortController();
112
155
  req.on("close", () => ac.abort());
156
+ const startedAt = Date.now();
157
+ const baseEntry = {
158
+ request_id: null,
159
+ provider_id: provider.id,
160
+ client_model: payload.model,
161
+ upstream_model: upstreamModel,
162
+ endpoint: "/v1/responses",
163
+ stream,
164
+ };
113
165
  if (!stream) {
114
166
  try {
115
- const upstreamRes = await callMimo({ baseUrl: cfg.baseUrl, apiKey: cfg.apiKey, userAgent: cfg.userAgent }, chat, ac.signal);
167
+ const upstreamRes = await callOpenAICompat({
168
+ baseUrl: runtime.baseUrl,
169
+ apiKey: runtime.apiKey,
170
+ userAgent: cfg.userAgent,
171
+ enhanceError: provider.enhanceError.bind(provider),
172
+ }, chat, ac.signal);
116
173
  const chatJson = (await upstreamRes.json());
117
174
  const responses = respToResponses(chatJson, payload, {
118
175
  exposeReasoning: cfg.exposeReasoning,
119
176
  });
120
- return sendJson(res, 200, responses);
177
+ sendJson(res, 200, responses);
178
+ recordLog(cfg, {
179
+ ...baseEntry,
180
+ request_id: chatJson.id ?? null,
181
+ status_code: 200,
182
+ duration_ms: Date.now() - startedAt,
183
+ ...usageFromChatResponse(chatJson.usage),
184
+ error_code: null,
185
+ error_snippet: null,
186
+ });
187
+ return;
121
188
  }
122
189
  catch (err) {
123
190
  if (err instanceof UpstreamError) {
124
- return sendJson(res, err.status, errorEnvelope(err.status, err.code, err.message));
191
+ sendJson(res, err.status, errorEnvelope(err.status, err.code, err.message));
192
+ recordLog(cfg, {
193
+ ...baseEntry,
194
+ status_code: err.status,
195
+ duration_ms: Date.now() - startedAt,
196
+ prompt_tokens: null,
197
+ completion_tokens: null,
198
+ total_tokens: null,
199
+ error_code: err.code,
200
+ error_snippet: err.bodySnippet ?? err.message,
201
+ });
202
+ return;
125
203
  }
126
204
  log.error("non-stream request failed", { error: err.message });
127
- return sendJson(res, 500, errorEnvelope(500, "internal_error", err.message));
205
+ sendJson(res, 500, errorEnvelope(500, "internal_error", err.message));
206
+ recordLog(cfg, {
207
+ ...baseEntry,
208
+ status_code: 500,
209
+ duration_ms: Date.now() - startedAt,
210
+ prompt_tokens: null,
211
+ completion_tokens: null,
212
+ total_tokens: null,
213
+ error_code: "internal_error",
214
+ error_snippet: err.message,
215
+ });
216
+ return;
128
217
  }
129
218
  }
130
- // Streaming path. Strategy: don't open the SSE stream to the client until we
131
- // know the upstream is OK. This way upstream errors map to clean HTTP errors
132
- // instead of half-opened SSE streams that confuse the Codex client.
219
+ // Streaming path.
133
220
  let upstreamRes;
134
221
  try {
135
- upstreamRes = await callMimo({ baseUrl: cfg.baseUrl, apiKey: cfg.apiKey, userAgent: cfg.userAgent }, chat, ac.signal);
222
+ upstreamRes = await callOpenAICompat({
223
+ baseUrl: runtime.baseUrl,
224
+ apiKey: runtime.apiKey,
225
+ userAgent: cfg.userAgent,
226
+ enhanceError: provider.enhanceError.bind(provider),
227
+ }, chat, ac.signal);
136
228
  }
137
229
  catch (err) {
138
230
  if (err instanceof UpstreamError) {
139
- return sendJson(res, err.status, errorEnvelope(err.status, err.code, err.message));
231
+ sendJson(res, err.status, errorEnvelope(err.status, err.code, err.message));
232
+ recordLog(cfg, {
233
+ ...baseEntry,
234
+ status_code: err.status,
235
+ duration_ms: Date.now() - startedAt,
236
+ prompt_tokens: null,
237
+ completion_tokens: null,
238
+ total_tokens: null,
239
+ error_code: err.code,
240
+ error_snippet: err.bodySnippet ?? err.message,
241
+ });
242
+ return;
140
243
  }
141
244
  log.error("stream request failed (pre-stream)", { error: err.message });
142
- return sendJson(res, 500, errorEnvelope(500, "internal_error", err.message));
245
+ sendJson(res, 500, errorEnvelope(500, "internal_error", err.message));
246
+ recordLog(cfg, {
247
+ ...baseEntry,
248
+ status_code: 500,
249
+ duration_ms: Date.now() - startedAt,
250
+ prompt_tokens: null,
251
+ completion_tokens: null,
252
+ total_tokens: null,
253
+ error_code: "internal_error",
254
+ error_snippet: err.message,
255
+ });
256
+ return;
143
257
  }
144
- // Upstream returned 200 — now we can safely open the SSE stream.
145
258
  const sink = makeServerResponseSink(res);
146
259
  const keepalive = setInterval(() => sink.comment("keepalive"), KEEPALIVE_INTERVAL_MS);
147
260
  res.on("close", () => clearInterval(keepalive));
261
+ let streamError = null;
148
262
  try {
149
263
  const chunks = iterChatStreamChunks(upstreamRes);
150
264
  await pipeChatStreamToResponses(sink, { chunks }, payload, { exposeReasoning: cfg.exposeReasoning });
151
265
  }
152
266
  catch (err) {
153
- log.error("stream request failed (mid-stream)", { error: err.message });
154
- // pipeChatStreamToResponses handles its own errors with response.failed,
155
- // so reaching here means something unexpected in our own code.
267
+ streamError = err;
268
+ log.error("stream request failed (mid-stream)", { error: streamError.message });
156
269
  if (!sink.closed()) {
157
270
  sink.write("error", {
158
271
  type: "error",
159
272
  code: "server_error",
160
- message: err.message,
273
+ message: streamError.message,
161
274
  sequence_number: 9999,
162
275
  });
163
276
  sink.end();
@@ -165,11 +278,18 @@ async function handleResponses(cfg, req, res) {
165
278
  }
166
279
  finally {
167
280
  clearInterval(keepalive);
281
+ recordLog(cfg, {
282
+ ...baseEntry,
283
+ status_code: streamError ? 500 : 200,
284
+ duration_ms: Date.now() - startedAt,
285
+ prompt_tokens: null,
286
+ completion_tokens: null,
287
+ total_tokens: null,
288
+ error_code: streamError ? "stream_error" : null,
289
+ error_snippet: streamError ? streamError.message : null,
290
+ });
168
291
  }
169
292
  }
170
- // Build a synthetic Responses object that satisfies probes (cc-switch test
171
- // connection, etc.) without forwarding to MiMo. Status 200 + minimally-shaped
172
- // response is enough for connection-test tools, which only check the status.
173
293
  function respondToResponsesProbe(payload, res, stream) {
174
294
  const id = `resp_probe_${Date.now()}`;
175
295
  const created_at = Math.floor(Date.now() / 1000);
@@ -202,8 +322,6 @@ function respondToResponsesProbe(payload, res, stream) {
202
322
  res.write(`event: response.completed\ndata: ${JSON.stringify({ type: "response.completed", response: completed, sequence_number: 1 })}\n\n`);
203
323
  res.end();
204
324
  }
205
- // Synthetic Chat Completion for probes hitting /v1/chat/completions with empty
206
- // messages. Mirror of respondToResponsesProbe but in OpenAI Chat shape.
207
325
  function respondToChatProbe(payload, res, stream) {
208
326
  const id = `chatcmpl_probe_${Date.now()}`;
209
327
  const created = Math.floor(Date.now() / 1000);
@@ -240,12 +358,6 @@ function respondToChatProbe(payload, res, stream) {
240
358
  res.write(`data: [DONE]\n\n`);
241
359
  res.end();
242
360
  }
243
- // Passthrough for POST /v1/chat/completions. mimo2codex's primary surface is
244
- // the Responses API translation, but plenty of tools (cc-switch's "test
245
- // connection" probe, Cherry Studio, raw OpenAI SDKs) only speak Chat
246
- // Completions. Since MiMo is itself Chat Completions–native, the cleanest
247
- // answer is to forward the body verbatim and stream/return whatever upstream
248
- // gives back. No translation, no state.
249
361
  async function handleChatPassthrough(cfg, req, res) {
250
362
  let payload;
251
363
  try {
@@ -264,23 +376,68 @@ async function handleChatPassthrough(cfg, req, res) {
264
376
  keys: Object.keys(payload),
265
377
  });
266
378
  log.debug("incoming POST /v1/chat/completions raw body", payload);
267
- // Probe short-circuit (mirrors handleResponses): empty messages → synthetic 200.
268
379
  if (!Array.isArray(payload.messages) || payload.messages.length === 0) {
269
380
  log.debug("matched probe shape — returning synthetic 200 without upstream call");
270
381
  return respondToChatProbe(payload, res, !!payload.stream);
271
382
  }
383
+ const { provider, runtime, upstreamModel } = selectProvider(payload.model, cfg);
384
+ log.debug(`routing chat passthrough to provider=${provider.id}`, {
385
+ clientModel: payload.model,
386
+ upstreamModel,
387
+ });
388
+ const body = provider.preprocessChat(payload, {
389
+ runtime,
390
+ exposeReasoning: cfg.exposeReasoning,
391
+ });
392
+ body.model = upstreamModel;
272
393
  const ac = new AbortController();
273
394
  req.on("close", () => ac.abort());
395
+ const startedAt = Date.now();
396
+ const baseEntry = {
397
+ request_id: null,
398
+ provider_id: provider.id,
399
+ client_model: payload.model,
400
+ upstream_model: upstreamModel,
401
+ endpoint: "/v1/chat/completions",
402
+ stream: !!payload.stream,
403
+ };
274
404
  let upstreamRes;
275
405
  try {
276
- upstreamRes = await callMimo({ baseUrl: cfg.baseUrl, apiKey: cfg.apiKey, userAgent: cfg.userAgent }, payload, ac.signal);
406
+ upstreamRes = await callOpenAICompat({
407
+ baseUrl: runtime.baseUrl,
408
+ apiKey: runtime.apiKey,
409
+ userAgent: cfg.userAgent,
410
+ enhanceError: provider.enhanceError.bind(provider),
411
+ }, body, ac.signal);
277
412
  }
278
413
  catch (err) {
279
414
  if (err instanceof UpstreamError) {
280
- return sendJson(res, err.status, errorEnvelope(err.status, err.code, err.message));
415
+ sendJson(res, err.status, errorEnvelope(err.status, err.code, err.message));
416
+ recordLog(cfg, {
417
+ ...baseEntry,
418
+ status_code: err.status,
419
+ duration_ms: Date.now() - startedAt,
420
+ prompt_tokens: null,
421
+ completion_tokens: null,
422
+ total_tokens: null,
423
+ error_code: err.code,
424
+ error_snippet: err.bodySnippet ?? err.message,
425
+ });
426
+ return;
281
427
  }
282
428
  log.error("chat passthrough failed", { error: err.message });
283
- return sendJson(res, 500, errorEnvelope(500, "internal_error", err.message));
429
+ sendJson(res, 500, errorEnvelope(500, "internal_error", err.message));
430
+ recordLog(cfg, {
431
+ ...baseEntry,
432
+ status_code: 500,
433
+ duration_ms: Date.now() - startedAt,
434
+ prompt_tokens: null,
435
+ completion_tokens: null,
436
+ total_tokens: null,
437
+ error_code: "internal_error",
438
+ error_snippet: err.message,
439
+ });
440
+ return;
284
441
  }
285
442
  const contentType = upstreamRes.headers.get("content-type") ?? "application/json";
286
443
  res.statusCode = 200;
@@ -288,9 +445,20 @@ async function handleChatPassthrough(cfg, req, res) {
288
445
  if (payload.stream) {
289
446
  if (!upstreamRes.body) {
290
447
  res.end();
448
+ recordLog(cfg, {
449
+ ...baseEntry,
450
+ status_code: 200,
451
+ duration_ms: Date.now() - startedAt,
452
+ prompt_tokens: null,
453
+ completion_tokens: null,
454
+ total_tokens: null,
455
+ error_code: null,
456
+ error_snippet: null,
457
+ });
291
458
  return;
292
459
  }
293
460
  const reader = upstreamRes.body.getReader();
461
+ let streamError = null;
294
462
  try {
295
463
  // eslint-disable-next-line no-constant-condition
296
464
  while (true) {
@@ -302,35 +470,77 @@ async function handleChatPassthrough(cfg, req, res) {
302
470
  }
303
471
  }
304
472
  catch (err) {
305
- log.error("chat passthrough stream error", { error: err.message });
473
+ streamError = err;
474
+ log.error("chat passthrough stream error", { error: streamError.message });
306
475
  }
307
476
  finally {
308
477
  res.end();
478
+ recordLog(cfg, {
479
+ ...baseEntry,
480
+ status_code: streamError ? 500 : 200,
481
+ duration_ms: Date.now() - startedAt,
482
+ prompt_tokens: null,
483
+ completion_tokens: null,
484
+ total_tokens: null,
485
+ error_code: streamError ? "stream_error" : null,
486
+ error_snippet: streamError ? streamError.message : null,
487
+ });
309
488
  }
310
489
  return;
311
490
  }
312
491
  const text = await upstreamRes.text();
313
492
  res.end(text);
314
- }
315
- function handleModels(res) {
316
- sendJson(res, 200, {
317
- object: "list",
318
- data: [
319
- { id: "mimo-v2.5-pro", object: "model", owned_by: "xiaomi" },
320
- { id: "mimo-v2.5-pro[1m]", object: "model", owned_by: "xiaomi" },
321
- { id: "mimo-v2-flash", object: "model", owned_by: "xiaomi" },
322
- ],
493
+ // Try to extract token usage from the JSON body so logs reflect cost.
494
+ let usage;
495
+ try {
496
+ const parsed = JSON.parse(text);
497
+ usage = parsed.usage;
498
+ }
499
+ catch {
500
+ // ignore
501
+ }
502
+ recordLog(cfg, {
503
+ ...baseEntry,
504
+ status_code: 200,
505
+ duration_ms: Date.now() - startedAt,
506
+ ...usageFromChatResponse(usage),
507
+ error_code: null,
508
+ error_snippet: null,
323
509
  });
324
510
  }
511
+ function handleModels(cfg, res) {
512
+ // Aggregate the catalogs of every provider whose api key is configured. The
513
+ // default provider's catalog comes first so existing tools that pick the top
514
+ // entry keep their previous behavior.
515
+ const ordered = [
516
+ PROVIDERS[cfg.defaultProviderId],
517
+ ...PROVIDER_LIST.filter((p) => p.id !== cfg.defaultProviderId),
518
+ ];
519
+ const data = [];
520
+ for (const p of ordered) {
521
+ if (!cfg.providers[p.id])
522
+ continue;
523
+ const ownedBy = p.id === "mimo" ? "xiaomi" : "deepseek";
524
+ for (const m of p.builtinModels) {
525
+ data.push({ id: m.id, object: "model", owned_by: ownedBy });
526
+ }
527
+ }
528
+ sendJson(res, 200, { object: "list", data });
529
+ }
325
530
  export function startServer(cfg) {
326
531
  const server = createServer((req, res) => {
327
532
  const url = req.url ?? "/";
328
533
  if (req.method === "GET" && (url === "/healthz" || url === "/")) {
329
- sendJson(res, 200, { ok: true, name: "mimo2codex", baseUrl: cfg.baseUrl });
534
+ sendJson(res, 200, {
535
+ ok: true,
536
+ name: "mimo2codex",
537
+ provider: cfg.defaultProviderId,
538
+ baseUrl: cfg.baseUrl,
539
+ });
330
540
  return;
331
541
  }
332
542
  if (req.method === "GET" && url.startsWith("/v1/models")) {
333
- handleModels(res);
543
+ handleModels(cfg, res);
334
544
  return;
335
545
  }
336
546
  if (req.method === "POST" && url.startsWith("/v1/responses")) {
@@ -341,6 +551,10 @@ export function startServer(cfg) {
341
551
  void handleChatPassthrough(cfg, req, res);
342
552
  return;
343
553
  }
554
+ if (cfg.adminEnabled && (url === "/admin" || url.startsWith("/admin/"))) {
555
+ void handleAdmin(cfg, req, res);
556
+ return;
557
+ }
344
558
  sendJson(res, 404, errorEnvelope(404, "not_found", `no route for ${req.method} ${url}`));
345
559
  });
346
560
  server.listen(cfg.port, cfg.host);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}