@velum-labs/routekit-registry 0.9.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.
@@ -0,0 +1,629 @@
1
+ // GENERATED FILE - DO NOT EDIT. Source of truth: spec/registry/*.json. Regenerate with `node scripts/generate-registry.mjs`.
2
+ export const REGISTRY = {
3
+ "providers": {
4
+ "openai": {
5
+ "baseUrl": "https://api.openai.com",
6
+ "keyEnv": "OPENAI_API_KEY",
7
+ "baseUrlEnv": "OPENAI_BASE_URL",
8
+ "apiCompatibility": "openai-chat-completions",
9
+ "wire": {
10
+ "protocol": "openai",
11
+ "basePath": "/v1"
12
+ },
13
+ "keyProbe": {
14
+ "path": "/v1/models",
15
+ "auth": "bearer",
16
+ "invalidStatuses": [
17
+ 401,
18
+ 403
19
+ ]
20
+ },
21
+ "discovery": {
22
+ "path": "/v1/models",
23
+ "auth": "bearer",
24
+ "responseShape": "openai"
25
+ }
26
+ },
27
+ "anthropic": {
28
+ "baseUrl": "https://api.anthropic.com",
29
+ "keyEnv": "ANTHROPIC_API_KEY",
30
+ "authTokenEnv": "ANTHROPIC_AUTH_TOKEN",
31
+ "baseUrlEnv": "ANTHROPIC_BASE_URL",
32
+ "apiCompatibility": "custom",
33
+ "wire": {
34
+ "protocol": "anthropic",
35
+ "basePath": "/v1"
36
+ },
37
+ "keyProbe": {
38
+ "path": "/v1/models",
39
+ "auth": "x-api-key",
40
+ "extraHeaders": {
41
+ "anthropic-version": "2023-06-01"
42
+ },
43
+ "invalidStatuses": [
44
+ 401,
45
+ 403
46
+ ]
47
+ },
48
+ "discovery": {
49
+ "path": "/v1/models",
50
+ "auth": "x-api-key",
51
+ "extraHeaders": {
52
+ "anthropic-version": "2023-06-01"
53
+ },
54
+ "responseShape": "anthropic"
55
+ }
56
+ },
57
+ "google": {
58
+ "baseUrl": "https://generativelanguage.googleapis.com",
59
+ "keyEnv": "GEMINI_API_KEY",
60
+ "apiCompatibility": "custom",
61
+ "wire": {
62
+ "protocol": "google",
63
+ "basePath": "/v1beta"
64
+ },
65
+ "keyProbe": {
66
+ "path": "/v1beta/models",
67
+ "auth": "x-goog-api-key",
68
+ "invalidStatuses": [
69
+ 400,
70
+ 401,
71
+ 403
72
+ ]
73
+ },
74
+ "discovery": {
75
+ "path": "/v1beta/models",
76
+ "auth": "x-goog-api-key",
77
+ "responseShape": "google"
78
+ }
79
+ },
80
+ "openrouter": {
81
+ "baseUrl": "https://openrouter.ai/api",
82
+ "keyEnv": "OPENROUTER_API_KEY",
83
+ "apiCompatibility": "openai-chat-completions",
84
+ "wire": {
85
+ "protocol": "openai",
86
+ "basePath": "/v1"
87
+ },
88
+ "attributionHeaders": {
89
+ "HTTP-Referer": "https://github.com/velum-labs/handoffkit",
90
+ "X-Title": "RouteKit"
91
+ },
92
+ "keyProbe": {
93
+ "path": "/v1/key",
94
+ "auth": "bearer",
95
+ "invalidStatuses": [
96
+ 401,
97
+ 403
98
+ ]
99
+ },
100
+ "discovery": {
101
+ "path": "/v1/models",
102
+ "auth": "bearer",
103
+ "extraHeaders": {
104
+ "HTTP-Referer": "https://github.com/velum-labs/handoffkit",
105
+ "X-Title": "RouteKit"
106
+ },
107
+ "responseShape": "openai",
108
+ "pickerDefaultSource": "curated"
109
+ }
110
+ },
111
+ "cliproxy": {
112
+ "$comment": "CLIProxyAPI (github.com/router-for-me/CLIProxyAPI): a local OpenAI-compatible proxy fronting OAuth subscription accounts (Codex, Claude Code, Gemini/Antigravity, Grok, Kimi) with multi-account rotation. Personal/local use only.",
113
+ "baseUrl": "http://127.0.0.1:8317",
114
+ "keyEnv": "ROUTEKIT_CLIPROXY_API_KEY",
115
+ "baseUrlEnv": "ROUTEKIT_CLIPROXY_BASE_URL",
116
+ "apiCompatibility": "openai-chat-completions",
117
+ "wire": {
118
+ "protocol": "openai",
119
+ "basePath": "/v1"
120
+ },
121
+ "keyProbe": {
122
+ "path": "/v1/models",
123
+ "auth": "bearer",
124
+ "invalidStatuses": [
125
+ 401,
126
+ 403
127
+ ]
128
+ },
129
+ "discovery": {
130
+ "path": "/v1/models",
131
+ "auth": "bearer",
132
+ "responseShape": "openai"
133
+ }
134
+ },
135
+ "codex": {
136
+ "baseUrl": "https://chatgpt.com/backend-api/codex",
137
+ "apiCompatibility": "openai-responses",
138
+ "credentialEnvNames": [
139
+ "CODEX_API_KEY",
140
+ "OPENAI_API_KEY"
141
+ ],
142
+ "wire": {
143
+ "protocol": "codex",
144
+ "basePath": ""
145
+ },
146
+ "discovery": {
147
+ "path": "/models",
148
+ "auth": "bearer",
149
+ "responseShape": "codex"
150
+ }
151
+ },
152
+ "ai-gateway": {
153
+ "baseUrl": "https://ai-gateway.vercel.sh",
154
+ "keyEnv": "AI_GATEWAY_API_KEY",
155
+ "baseUrlEnv": "AI_GATEWAY_BASE_URL"
156
+ },
157
+ "openai-compatible": {
158
+ "baseUrl": "http://127.0.0.1",
159
+ "apiCompatibility": "openai-chat-completions"
160
+ },
161
+ "mlx-lm": {
162
+ "apiCompatibility": "mlx-lm-server"
163
+ },
164
+ "mlx": {},
165
+ "custom": {
166
+ "apiCompatibility": "custom"
167
+ }
168
+ },
169
+ "subscriptions": {
170
+ "claude-code": {
171
+ "provider": "anthropic",
172
+ "credentialsPath": "~/.claude/.credentials.json",
173
+ "configPath": "~/.claude/settings.json",
174
+ "accountsDirectory": "~/.routekit/subscriptions/claude-code",
175
+ "keychainService": "Claude Code-credentials",
176
+ "defaultModel": "claude-sonnet-4-5",
177
+ "oauthBetaHeader": "oauth-2025-04-20",
178
+ "spoofSystemPrompt": "You are Claude Code, Anthropic's official CLI for Claude.",
179
+ "wire": {
180
+ "protocol": "anthropic",
181
+ "basePath": "/v1"
182
+ },
183
+ "discovery": {
184
+ "path": "/v1/models",
185
+ "responseShape": "anthropic",
186
+ "extraHeaders": {
187
+ "anthropic-version": "2023-06-01"
188
+ }
189
+ },
190
+ "oauth": {
191
+ "tokenEndpoint": "https://console.anthropic.com/v1/oauth/token",
192
+ "clientId": "9d1c250a-e61b-44d9-88ed-5944d1962f5e",
193
+ "usageEndpoint": "https://api.anthropic.com/api/oauth/usage",
194
+ "profileEndpoint": "https://api.anthropic.com/api/oauth/profile"
195
+ },
196
+ "rateLimit": {
197
+ "headerPrefix": "anthropic-ratelimit-unified",
198
+ "retryAfterHeader": "retry-after"
199
+ },
200
+ "admin": {
201
+ "keyEnv": "ANTHROPIC_ADMIN_KEY",
202
+ "usageEndpoint": "https://api.anthropic.com/v1/organizations/usage_report/messages",
203
+ "costEndpoint": "https://api.anthropic.com/v1/organizations/cost_report"
204
+ }
205
+ },
206
+ "codex": {
207
+ "provider": "codex",
208
+ "credentialsPath": "~/.codex/auth.json",
209
+ "accountsDirectory": "~/.routekit/subscriptions/codex",
210
+ "configPath": "~/.codex/config.toml",
211
+ "modelsCachePath": "~/.codex/models_cache.json",
212
+ "authFileName": "auth.json",
213
+ "defaultModel": "gpt-5.5",
214
+ "defaultInstructions": "You are a helpful assistant.",
215
+ "wire": {
216
+ "protocol": "codex",
217
+ "basePath": ""
218
+ },
219
+ "discovery": {
220
+ "path": "/models",
221
+ "responseShape": "codex",
222
+ "clientVersion": "0.145.0",
223
+ "cacheFallback": true,
224
+ "extraHeaders": {
225
+ "OpenAI-Beta": "responses=v1",
226
+ "originator": "routekit"
227
+ }
228
+ },
229
+ "defaultHeaders": {
230
+ "OpenAI-Beta": "responses=v1",
231
+ "originator": "routekit"
232
+ },
233
+ "requestDefaults": {
234
+ "stream": true,
235
+ "store": false,
236
+ "omitSampling": true
237
+ },
238
+ "oauth": {
239
+ "tokenEndpoint": "https://auth.openai.com/oauth/token",
240
+ "clientId": "app_EMoamEEZ73f0CkXaXp7hrann",
241
+ "usageEndpoint": "https://chatgpt.com/backend-api/wham/usage",
242
+ "usagePathFallback": "/api/codex/usage"
243
+ },
244
+ "rateLimit": {
245
+ "headerPrefix": "x-codex",
246
+ "activeLimitHeader": "x-codex-active-limit",
247
+ "retryAfterHeader": "retry-after"
248
+ },
249
+ "admin": {
250
+ "keyEnv": "OPENAI_ADMIN_KEY",
251
+ "usageEndpoint": "https://api.openai.com/v1/organization/usage/completions",
252
+ "costEndpoint": "https://api.openai.com/v1/organization/costs"
253
+ },
254
+ "overrideEnv": {
255
+ "responsesBaseUrl": [
256
+ "CODEX_RESPONSES_BASE_URL"
257
+ ],
258
+ "responsesApiKey": [
259
+ "CODEX_API_KEY",
260
+ "OPENAI_API_KEY"
261
+ ],
262
+ "openaiCompatibleBaseUrl": [
263
+ "OPENAI_BASE_URL"
264
+ ],
265
+ "openaiCompatibleApiKey": [
266
+ "OPENAI_API_KEY"
267
+ ]
268
+ }
269
+ }
270
+ },
271
+ "connectors": {
272
+ "claude-code": {
273
+ "connector": "native",
274
+ "aliases": [
275
+ "claude"
276
+ ]
277
+ },
278
+ "codex": {
279
+ "connector": "native"
280
+ },
281
+ "gemini": {
282
+ "connector": "cliproxy",
283
+ "cliproxyLoginFlag": "-antigravity-login",
284
+ "cliproxyAuthTypes": [
285
+ "antigravity",
286
+ "gemini",
287
+ "gemini-cli"
288
+ ],
289
+ "localOnly": true,
290
+ "aliases": [
291
+ "antigravity"
292
+ ]
293
+ },
294
+ "grok": {
295
+ "connector": "cliproxy",
296
+ "cliproxyLoginFlag": "-xai-login",
297
+ "cliproxyAuthTypes": [
298
+ "xai",
299
+ "grok"
300
+ ],
301
+ "localOnly": true,
302
+ "aliases": [
303
+ "xai"
304
+ ]
305
+ },
306
+ "kimi": {
307
+ "connector": "cliproxy",
308
+ "cliproxyLoginFlag": "-kimi-login",
309
+ "cliproxyAuthTypes": [
310
+ "kimi"
311
+ ],
312
+ "localOnly": true
313
+ }
314
+ },
315
+ "modelCatalog": {
316
+ "defaultReasoningModel": "mlx-community/Qwen3-1.7B-4bit",
317
+ "defaultModelByAuthChoice": {
318
+ "claude-code": "claude-sonnet-4-5",
319
+ "anthropic": "claude-sonnet-4-5",
320
+ "codex": "gpt-5.5",
321
+ "openai": "gpt-5.5",
322
+ "google": "gemini-2.5-flash",
323
+ "openrouter": "anthropic/claude-sonnet-4.5",
324
+ "cliproxy": "gemini-3.1-pro-preview",
325
+ "local": "mlx-community/Qwen3-1.7B-4bit"
326
+ },
327
+ "curated": {
328
+ "claude-code": [
329
+ "claude-sonnet-4-5",
330
+ "claude-opus-4-8",
331
+ "claude-haiku-4-5",
332
+ "claude-sonnet-4-6"
333
+ ],
334
+ "anthropic": [
335
+ "claude-sonnet-4-5",
336
+ "claude-opus-4-8",
337
+ "claude-haiku-4-5",
338
+ "claude-sonnet-4-6",
339
+ "claude-3-7-sonnet-latest"
340
+ ],
341
+ "codex": [
342
+ "gpt-5.5",
343
+ "gpt-5.5-codex",
344
+ "gpt-5.3-codex",
345
+ "gpt-5.1-codex"
346
+ ],
347
+ "openai": [
348
+ "gpt-5.5",
349
+ "gpt-5.1",
350
+ "gpt-5",
351
+ "o4-mini",
352
+ "gpt-4.1",
353
+ "gpt-4.1-mini"
354
+ ],
355
+ "google": [
356
+ "gemini-2.5-flash",
357
+ "gemini-2.5-pro",
358
+ "gemini-2.0-flash"
359
+ ],
360
+ "openrouter": [
361
+ "anthropic/claude-sonnet-4.5",
362
+ "openai/gpt-5.5",
363
+ "google/gemini-2.5-pro",
364
+ "moonshotai/kimi-k2",
365
+ "deepseek/deepseek-chat",
366
+ "qwen/qwen3-coder",
367
+ "x-ai/grok-4",
368
+ "meta-llama/llama-3.3-70b-instruct"
369
+ ],
370
+ "cliproxy": [
371
+ "gemini-3.1-pro-preview",
372
+ "gpt-5.5",
373
+ "gpt-5.5-codex",
374
+ "claude-sonnet-4-5",
375
+ "grok-4.3",
376
+ "kimi-k2.5",
377
+ "qwen3-coder"
378
+ ]
379
+ },
380
+ "smokeModels": {
381
+ "codex": "gpt-5.5-codex",
382
+ "claude": "claude-sonnet-4-6"
383
+ }
384
+ },
385
+ "modelCapabilities": {
386
+ "samplingFamilies": [
387
+ {
388
+ "id": "qwen",
389
+ "requires": [
390
+ "qwen"
391
+ ],
392
+ "overrides": {
393
+ "temperature": 0.55,
394
+ "top_p": 1
395
+ }
396
+ },
397
+ {
398
+ "id": "kimi-k2-thinking",
399
+ "requires": [
400
+ "kimi-k2"
401
+ ],
402
+ "anyOf": [
403
+ "thinking",
404
+ "k2.",
405
+ "k2p",
406
+ "k2-5"
407
+ ],
408
+ "overrides": {
409
+ "temperature": 1
410
+ }
411
+ },
412
+ {
413
+ "id": "kimi-k2",
414
+ "requires": [
415
+ "kimi-k2"
416
+ ],
417
+ "overrides": {
418
+ "temperature": 0.6
419
+ }
420
+ }
421
+ ],
422
+ "chatTemplateFamilies": [
423
+ {
424
+ "id": "qwen-thinking",
425
+ "requires": [
426
+ "qwen"
427
+ ],
428
+ "chatTemplateKwargs": {
429
+ "enable_thinking": true
430
+ }
431
+ }
432
+ ],
433
+ "reasoningRequestFamilies": [
434
+ {
435
+ "id": "openrouter-kimi",
436
+ "provider": "openrouter",
437
+ "requires": [
438
+ "kimi"
439
+ ],
440
+ "reasoning": {
441
+ "enabled": true,
442
+ "exclude": false
443
+ }
444
+ }
445
+ ],
446
+ "providerRequestShapes": {
447
+ "openai": {
448
+ "maxTokensParam": "max_completion_tokens",
449
+ "omitSampling": true,
450
+ "streamIncludeUsage": true
451
+ },
452
+ "anthropic": {
453
+ "omitSampling": true
454
+ }
455
+ }
456
+ },
457
+ "pricing": {
458
+ "models": {
459
+ "claude-haiku": {
460
+ "inputPer1mTokens": 1,
461
+ "outputPer1mTokens": 5
462
+ },
463
+ "claude-opus": {
464
+ "inputPer1mTokens": 15,
465
+ "outputPer1mTokens": 75
466
+ },
467
+ "claude-sonnet": {
468
+ "inputPer1mTokens": 3,
469
+ "outputPer1mTokens": 15
470
+ },
471
+ "claude-sonnet-4-6": {
472
+ "inputPer1mTokens": 3,
473
+ "outputPer1mTokens": 15
474
+ },
475
+ "gemini-2.5-flash": {
476
+ "inputPer1mTokens": 0.3,
477
+ "outputPer1mTokens": 2.5
478
+ },
479
+ "gemini-2.5-pro": {
480
+ "inputPer1mTokens": 1.25,
481
+ "outputPer1mTokens": 10
482
+ },
483
+ "gpt-4.1": {
484
+ "inputPer1mTokens": 2,
485
+ "outputPer1mTokens": 8
486
+ },
487
+ "gpt-4o": {
488
+ "inputPer1mTokens": 2.5,
489
+ "outputPer1mTokens": 10
490
+ },
491
+ "gpt-5": {
492
+ "inputPer1mTokens": 1.25,
493
+ "outputPer1mTokens": 10
494
+ },
495
+ "gpt-5.5": {
496
+ "inputPer1mTokens": 1.25,
497
+ "outputPer1mTokens": 10
498
+ },
499
+ "o3": {
500
+ "inputPer1mTokens": 2,
501
+ "outputPer1mTokens": 8
502
+ }
503
+ },
504
+ "aliases": {
505
+ "anthropic/claude-sonnet-4.5": "claude-sonnet",
506
+ "claude-haiku-4-5": "claude-haiku",
507
+ "claude-opus-4-8": "claude-opus",
508
+ "claude-sonnet-4-5": "claude-sonnet",
509
+ "gpt-4.1-mini": "gpt-4.1",
510
+ "gpt-5.1": "gpt-5",
511
+ "gpt-5.1-codex": "gpt-5",
512
+ "gpt-5.3-codex": "gpt-5",
513
+ "gpt-5.5-2026-05": "gpt-5.5",
514
+ "gpt-5.5-codex": "gpt-5.5",
515
+ "openai/gpt-5.5": "gpt-5.5"
516
+ },
517
+ "manualOverrides": {}
518
+ },
519
+ "localCatalog": {
520
+ "gatewayDefaultModel": "prism-ml/Ternary-Bonsai-4B-mlx-2bit",
521
+ "probeModel": "mlx-community/Qwen3-1.7B-4bit",
522
+ "preferred": [
523
+ {
524
+ "id": "qwen",
525
+ "repo": "mlx-community/Qwen3-1.7B-4bit"
526
+ },
527
+ {
528
+ "id": "gemma",
529
+ "repo": "mlx-community/gemma-3-1b-it-4bit"
530
+ },
531
+ {
532
+ "id": "llama",
533
+ "repo": "mlx-community/Llama-3.2-1B-Instruct-4bit"
534
+ }
535
+ ],
536
+ "entries": [
537
+ {
538
+ "repo": "mlx-community/Llama-3.2-1B-Instruct-4bit",
539
+ "label": "Llama 3.2 1B Instruct",
540
+ "params": "1B",
541
+ "quant": "4bit",
542
+ "sizeGB": 0.7,
543
+ "minRamGB": 4,
544
+ "blurb": "tiny and fast; great for low-memory machines and quick panels",
545
+ "role": "general"
546
+ },
547
+ {
548
+ "repo": "mlx-community/gemma-3-1b-it-4bit",
549
+ "label": "Gemma 3 1B Instruct",
550
+ "params": "1B",
551
+ "quant": "4bit",
552
+ "sizeGB": 0.8,
553
+ "minRamGB": 4,
554
+ "blurb": "small Google model; a strong, diverse panel voice",
555
+ "role": "general"
556
+ },
557
+ {
558
+ "repo": "mlx-community/Qwen3-1.7B-4bit",
559
+ "label": "Qwen3 1.7B",
560
+ "params": "1.7B",
561
+ "quant": "4bit",
562
+ "sizeGB": 1,
563
+ "minRamGB": 6,
564
+ "blurb": "capable small all-rounder; a good default panel member",
565
+ "role": "general"
566
+ },
567
+ {
568
+ "repo": "mlx-community/Llama-3.2-3B-Instruct-4bit",
569
+ "label": "Llama 3.2 3B Instruct",
570
+ "params": "3B",
571
+ "quant": "4bit",
572
+ "sizeGB": 1.8,
573
+ "minRamGB": 8,
574
+ "blurb": "noticeably stronger than 1B while still light",
575
+ "role": "general"
576
+ },
577
+ {
578
+ "repo": "mlx-community/Qwen3-4B-4bit",
579
+ "label": "Qwen3 4B",
580
+ "params": "4B",
581
+ "quant": "4bit",
582
+ "sizeGB": 2.3,
583
+ "minRamGB": 10,
584
+ "blurb": "well-rounded mid-size model; good quality-to-size ratio",
585
+ "role": "general"
586
+ },
587
+ {
588
+ "repo": "mlx-community/Qwen2.5-Coder-7B-Instruct-4bit",
589
+ "label": "Qwen2.5 Coder 7B",
590
+ "params": "7B",
591
+ "quant": "4bit",
592
+ "sizeGB": 4.2,
593
+ "minRamGB": 16,
594
+ "blurb": "code-specialized; a strong local coding panelist",
595
+ "role": "coder"
596
+ },
597
+ {
598
+ "repo": "mlx-community/Qwen3-8B-4bit",
599
+ "label": "Qwen3 8B",
600
+ "params": "8B",
601
+ "quant": "4bit",
602
+ "sizeGB": 4.5,
603
+ "minRamGB": 16,
604
+ "blurb": "high-quality general model for 16GB+ machines",
605
+ "role": "general"
606
+ },
607
+ {
608
+ "repo": "mlx-community/Qwen3-14B-4bit",
609
+ "label": "Qwen3 14B",
610
+ "params": "14B",
611
+ "quant": "4bit",
612
+ "sizeGB": 8,
613
+ "minRamGB": 24,
614
+ "blurb": "frontier-ish local quality; needs a roomy machine",
615
+ "role": "general"
616
+ },
617
+ {
618
+ "repo": "mlx-community/Qwen2.5-Coder-32B-Instruct-4bit",
619
+ "label": "Qwen2.5 Coder 32B",
620
+ "params": "32B",
621
+ "quant": "4bit",
622
+ "sizeGB": 18,
623
+ "minRamGB": 36,
624
+ "blurb": "the strongest local coder here; for 36GB+ Macs",
625
+ "role": "coder"
626
+ }
627
+ ]
628
+ }
629
+ };