@cat-factory/kernel 0.299.1 → 0.301.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.
@@ -1 +1 @@
1
- {"version":3,"file":"cache-policy.d.ts","sourceRoot":"","sources":["../../src/domain/cache-policy.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,WAAW,GAInB,aAAa,GAEb,oBAAoB,GAEpB,MAAM,CAAA;AAEV,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAWjE;AAED,uFAAuF;AACvF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE/D"}
1
+ {"version":3,"file":"cache-policy.d.ts","sourceRoot":"","sources":["../../src/domain/cache-policy.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,WAAW,GAInB,aAAa,GAEb,oBAAoB,GAEpB,MAAM,CAAA;AAEV,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAejE;AAED,uFAAuF;AACvF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE/D"}
@@ -15,6 +15,10 @@ export function providerCachePolicy(provider) {
15
15
  case 'openai':
16
16
  case 'deepseek':
17
17
  case 'qwen':
18
+ // xAI caches prompt prefixes automatically and bills the hits at its own published
19
+ // cached-input rate, with no per-request opt-in, so it belongs with the auto-prefix
20
+ // group rather than Anthropic's explicit `cache_control` breakpoints.
21
+ case 'xai':
18
22
  return 'auto-prefix';
19
23
  case 'anthropic':
20
24
  return 'explicit-anthropic';
@@ -1 +1 @@
1
- {"version":3,"file":"cache-policy.js","sourceRoot":"","sources":["../../src/domain/cache-policy.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,qFAAqF;AACrF,oFAAoF;AACpF,oFAAoF;AACpF,oFAAoF;AACpF,oFAAoF;AACpF,EAAE;AACF,sFAAsF;AACtF,mFAAmF;AACnF,uFAAuF;AACvF,kFAAkF;AAYlF,wFAAwF;AACxF,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,aAAa,CAAA;QACtB,KAAK,WAAW;YACd,OAAO,oBAAoB,CAAA;QAC7B;YACE,OAAO,MAAM,CAAA;IACjB,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAA;AACjD,CAAC"}
1
+ {"version":3,"file":"cache-policy.js","sourceRoot":"","sources":["../../src/domain/cache-policy.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,qFAAqF;AACrF,oFAAoF;AACpF,oFAAoF;AACpF,oFAAoF;AACpF,oFAAoF;AACpF,EAAE;AACF,sFAAsF;AACtF,mFAAmF;AACnF,uFAAuF;AACvF,kFAAkF;AAYlF,wFAAwF;AACxF,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,mFAAmF;QACnF,oFAAoF;QACpF,sEAAsE;QACtE,KAAK,KAAK;YACR,OAAO,aAAa,CAAA;QACtB,KAAK,WAAW;YACd,OAAO,oBAAoB,CAAA;QAC7B;YACE,OAAO,MAAM,CAAA;IACjB,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAA;AACjD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SelectableModel } from './models.js';
2
+ export declare const MODEL_CATALOG: SelectableModel[];
3
+ //# sourceMappingURL=model-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/domain/model-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAiClD,eAAO,MAAM,aAAa,EAAE,eAAe,EAkkB1C,CAAA"}
@@ -0,0 +1,587 @@
1
+ // The curated catalog of LLM models a user can pick for a single block: DATA ONLY.
2
+ //
3
+ // Split out of `models.ts`, which owns the vocabulary this array is typed against
4
+ // (`SelectableModel` and the per-flavour variant shapes) and every rule that READS it
5
+ // (flavour precedence, family policy, subscription/harness resolution). The two grow for
6
+ // unrelated reasons: this file changes whenever a vendor ships a model, that one whenever
7
+ // the resolution rules change. Keeping them apart means a routine catalog addition cannot
8
+ // push the resolution logic over its size budget, and a reviewer of either sees only the
9
+ // concern they came for.
10
+ //
11
+ // `models.ts` re-exports `MODEL_CATALOG`, so every existing import site is unchanged and
12
+ // there is one public name for the catalog rather than two.
13
+ //
14
+ // The import above is TYPE-ONLY and erases at compile time, so the file pair carries no
15
+ // runtime import cycle.
16
+ //
17
+ // Each model declares one flavour per route it can be reached on (see `MODEL_FLAVORS`): an
18
+ // always-available Cloudflare Workers AI variant (via the `AI` binding); a `direct` variant
19
+ // for models that offer their own API; a `bedrock` variant for models an AWS account can
20
+ // call on Bedrock; an `openrouter` variant reaching the same model through the OpenRouter
21
+ // gateway; and a `subscription` variant. `effectiveVariant` resolves the flavour actually in
22
+ // use per workspace by walking `DEFAULT_PROVIDER_PREFERENCE`, so connecting an OpenRouter key
23
+ // (with no native direct key) transparently routes the model through OpenRouter while a
24
+ // native direct key still wins. This makes "go direct / go gateway" a zero-config upgrade
25
+ // with an automatic Cloudflare fallback.
26
+ //
27
+ // A flavour is declared only once the route is VERIFIED to serve that exact model: a
28
+ // declared-but-absent route is picked by `effectiveVariant` and then fails at dispatch, and
29
+ // mapping an entry onto a NEIGHBOURING version (GLM-5.2 onto Bedrock's GLM-5, Kimi K2.6 onto
30
+ // Bedrock's K2.5) silently runs a different model than the picker names.
31
+ export const MODEL_CATALOG = [
32
+ {
33
+ id: 'cloudflare-llama',
34
+ family: 'llama',
35
+ label: 'Llama 4 Scout',
36
+ description: "Meta's 17B-active MoE with a 131K window and tool calling — Cloudflare Workers AI's " +
37
+ 'open-weights default.',
38
+ cloudflare: {
39
+ provider: 'workers-ai',
40
+ model: '@cf/meta/llama-4-scout-17b-16e-instruct',
41
+ contextTokens: 131_072,
42
+ acceptsImages: true,
43
+ },
44
+ },
45
+ {
46
+ id: 'qwen',
47
+ family: 'qwen',
48
+ label: 'Qwen3.7',
49
+ description: "Alibaba's Qwen — Qwen3-30B on Cloudflare, flagship Qwen3.7-Max (1M context) when " +
50
+ 'direct or through OpenRouter.',
51
+ cloudflare: {
52
+ provider: 'workers-ai',
53
+ model: '@cf/qwen/qwen3-30b-a3b-fp8',
54
+ contextTokens: 32_768,
55
+ },
56
+ direct: {
57
+ ref: { provider: 'qwen', model: 'qwen3.7-max', contextTokens: 1_000_000 },
58
+ keyEnv: 'QWEN_API_KEY',
59
+ providerLabel: 'DashScope',
60
+ },
61
+ openrouter: {
62
+ ref: { provider: 'openrouter', model: 'qwen/qwen3.7-max', contextTokens: 1_000_000 },
63
+ keyEnv: 'OPENROUTER_API_KEY',
64
+ providerLabel: 'OpenRouter',
65
+ },
66
+ },
67
+ {
68
+ id: 'gpt-oss-120b',
69
+ family: 'openai',
70
+ label: 'GPT-OSS 120B',
71
+ description: "OpenAI's open-weights 120B reasoning model with tool calling and a 128K window — the " +
72
+ 'strongest general-purpose model on Cloudflare that carries no vendor subscription.',
73
+ cloudflare: {
74
+ provider: 'workers-ai',
75
+ model: '@cf/openai/gpt-oss-120b',
76
+ contextTokens: 128_000,
77
+ },
78
+ bedrock: { baseModelId: 'openai.gpt-oss-120b', contextTokens: 131_072 },
79
+ openrouter: {
80
+ ref: { provider: 'openrouter', model: 'openai/gpt-oss-120b', contextTokens: 131_072 },
81
+ keyEnv: 'OPENROUTER_API_KEY',
82
+ providerLabel: 'OpenRouter',
83
+ },
84
+ },
85
+ {
86
+ id: 'kimi-k2.7',
87
+ family: 'kimi',
88
+ label: 'Kimi K2.7',
89
+ description: "Moonshot AI's latest 1T-param agentic-coding model (structured outputs), 256K context — " +
90
+ 'on Cloudflare or pay-as-you-go through OpenRouter (billed at Moonshot rates).',
91
+ cloudflare: {
92
+ provider: 'workers-ai',
93
+ model: '@cf/moonshotai/kimi-k2.7-code',
94
+ contextTokens: 262_144,
95
+ },
96
+ openrouter: {
97
+ ref: { provider: 'openrouter', model: 'moonshotai/kimi-k2.7-code', contextTokens: 262_144 },
98
+ keyEnv: 'OPENROUTER_API_KEY',
99
+ providerLabel: 'OpenRouter',
100
+ },
101
+ },
102
+ {
103
+ id: 'kimi',
104
+ family: 'kimi',
105
+ label: 'Kimi K2.6',
106
+ description: "Moonshot AI's frontier-scale agentic model with a 256K context, on Cloudflare or " +
107
+ 'direct via a Moonshot key / Kimi (Moonshot) subscription.',
108
+ cloudflare: {
109
+ provider: 'workers-ai',
110
+ model: '@cf/moonshotai/kimi-k2.6',
111
+ contextTokens: 262_144,
112
+ },
113
+ direct: {
114
+ ref: { provider: 'moonshot', model: 'kimi-k2.6', contextTokens: 262_144 },
115
+ keyEnv: 'MOONSHOT_API_KEY',
116
+ providerLabel: 'Moonshot',
117
+ },
118
+ // Run via Claude Code against Moonshot's Anthropic-compatible endpoint on a
119
+ // Kimi coding-plan subscription (same 256K window, flat-rate quota).
120
+ subscription: {
121
+ ref: {
122
+ provider: 'moonshot',
123
+ model: 'kimi-k2.6',
124
+ harness: 'claude-code',
125
+ contextTokens: 262_144,
126
+ },
127
+ vendor: 'kimi',
128
+ },
129
+ },
130
+ {
131
+ id: 'kimi-k3',
132
+ family: 'kimi',
133
+ label: 'Kimi K3',
134
+ description: "Moonshot AI's 2.8T-param flagship — 1M-token context, always-on reasoning — direct via " +
135
+ 'a Moonshot key or pay-as-you-go through OpenRouter. Not served on Workers AI.',
136
+ direct: {
137
+ ref: { provider: 'moonshot', model: 'kimi-k3', contextTokens: 1_048_576 },
138
+ keyEnv: 'MOONSHOT_API_KEY',
139
+ providerLabel: 'Moonshot',
140
+ },
141
+ openrouter: {
142
+ ref: { provider: 'openrouter', model: 'moonshotai/kimi-k3', contextTokens: 1_048_576 },
143
+ keyEnv: 'OPENROUTER_API_KEY',
144
+ providerLabel: 'OpenRouter',
145
+ },
146
+ },
147
+ {
148
+ id: 'deepseek',
149
+ family: 'deepseek',
150
+ label: 'DeepSeek V4 Flash',
151
+ description: "DeepSeek's cost-efficient 1M-context V4 model when direct, through OpenRouter or on a " +
152
+ 'DeepSeek coding-plan subscription; falls back to the 80K R1 Qwen-32B distill on Cloudflare.',
153
+ cloudflare: {
154
+ provider: 'workers-ai',
155
+ model: '@cf/deepseek-ai/deepseek-r1-distill-qwen-32b',
156
+ contextTokens: 80_000,
157
+ },
158
+ direct: {
159
+ ref: { provider: 'deepseek', model: 'deepseek-v4-flash', contextTokens: 1_048_576 },
160
+ keyEnv: 'DEEPSEEK_API_KEY',
161
+ providerLabel: 'DeepSeek',
162
+ },
163
+ openrouter: {
164
+ ref: {
165
+ provider: 'openrouter',
166
+ model: 'deepseek/deepseek-v4-flash',
167
+ contextTokens: 1_048_576,
168
+ },
169
+ keyEnv: 'OPENROUTER_API_KEY',
170
+ providerLabel: 'OpenRouter',
171
+ },
172
+ // Run via Claude Code against DeepSeek's Anthropic-compatible endpoint on a
173
+ // DeepSeek coding-plan subscription (full context, flat-rate quota).
174
+ subscription: {
175
+ ref: {
176
+ provider: 'deepseek',
177
+ model: 'deepseek-v4-flash',
178
+ harness: 'claude-code',
179
+ contextTokens: 1_048_576,
180
+ },
181
+ vendor: 'deepseek',
182
+ },
183
+ },
184
+ {
185
+ id: 'deepseek-v4-pro',
186
+ family: 'deepseek',
187
+ label: 'DeepSeek V4 Pro',
188
+ description: "DeepSeek's flagship V4 Pro agentic-coding model: 131K context on Cloudflare, or the " +
189
+ 'full 1M window direct via a DeepSeek key or through OpenRouter.',
190
+ // A Cloudflare AI-catalog model: a `<provider>/<model>` slug (not a native `@cf/...`
191
+ // id) Cloudflare serves on its unified-billing run catalog via a partner (Fireworks),
192
+ // reached with the account's own Workers AI binding/token — no AI Gateway, no BYOK.
193
+ // The Worker runs it through `binding.run` directly (see WorkersAiLlmUpstream).
194
+ cloudflare: {
195
+ provider: 'workers-ai',
196
+ model: 'deepseek/deepseek-v4-pro',
197
+ contextTokens: 131_072,
198
+ },
199
+ direct: {
200
+ ref: { provider: 'deepseek', model: 'deepseek-v4-pro', contextTokens: 1_048_576 },
201
+ keyEnv: 'DEEPSEEK_API_KEY',
202
+ providerLabel: 'DeepSeek',
203
+ },
204
+ openrouter: {
205
+ ref: { provider: 'openrouter', model: 'deepseek/deepseek-v4-pro', contextTokens: 1_048_576 },
206
+ keyEnv: 'OPENROUTER_API_KEY',
207
+ providerLabel: 'OpenRouter',
208
+ },
209
+ },
210
+ {
211
+ id: 'glm-5.3',
212
+ family: 'glm',
213
+ label: 'GLM-5.3',
214
+ description: "Z.ai's newest agentic-coding model, on the same base as GLM-5.2 with scaled-up " +
215
+ 'post-training. Subscription-only here: it runs on a GLM (Z.ai) coding-plan token, ' +
216
+ 'which is the only route serving it today.',
217
+ // Z.ai shipped GLM-5.3 on 2026-08-14 to its own API and to every existing GLM Coding
218
+ // Plan subscriber, and states the weights follow in roughly two weeks after safety
219
+ // hardening. That timing is why this entry declares NO other flavour: Workers AI and
220
+ // OpenRouter both serve GLM from the open weights, so neither can carry 5.3 until the
221
+ // release lands, and Bedrock's Z.ai line stops at GLM-5. A flavour declared before its
222
+ // route exists would be picked by `effectiveVariant` and fail at dispatch, so each one
223
+ // is added when the route is verified rather than when it is expected.
224
+ //
225
+ // Context is the 1M window GLM-5.2 carries on the same base model; Z.ai has not yet
226
+ // published a 5.3 model card, so nothing narrower is asserted here.
227
+ subscription: {
228
+ ref: { provider: 'zai', model: 'glm-5.3', harness: 'claude-code', contextTokens: 1_000_000 },
229
+ vendor: 'glm',
230
+ },
231
+ },
232
+ {
233
+ id: 'glm',
234
+ family: 'glm',
235
+ label: 'GLM-5.2',
236
+ description: "Z.ai's agentic-coding model: 256K context on Cloudflare, or the full 1M-token " +
237
+ 'window via a GLM (Z.ai) subscription.',
238
+ cloudflare: { provider: 'workers-ai', model: '@cf/zai-org/glm-5.2', contextTokens: 262_144 },
239
+ openrouter: {
240
+ ref: { provider: 'openrouter', model: 'z-ai/glm-5.2', contextTokens: 1_048_576 },
241
+ keyEnv: 'OPENROUTER_API_KEY',
242
+ providerLabel: 'OpenRouter',
243
+ },
244
+ // Run via Claude Code against Z.ai's Anthropic-compatible endpoint on a GLM
245
+ // coding-plan subscription (full 1M context, flat-rate quota).
246
+ subscription: {
247
+ ref: { provider: 'zai', model: 'glm-5.2', harness: 'claude-code', contextTokens: 1_000_000 },
248
+ vendor: 'glm',
249
+ },
250
+ },
251
+ {
252
+ id: 'glm-flash',
253
+ family: 'glm',
254
+ label: 'GLM-4.7 Flash',
255
+ description: "Z.ai's cheap, fast tool-calling model with a 131K window — the low-cost tier for light " +
256
+ 'inline steps (estimation, triage, fragment selection).',
257
+ cloudflare: {
258
+ provider: 'workers-ai',
259
+ model: '@cf/zai-org/glm-4.7-flash',
260
+ contextTokens: 131_072,
261
+ },
262
+ // Bedrock serves this exact model as `zai.glm-4.7-flash` (us-east-1 / us-west-2 and
263
+ // expanding). No `contextTokens`: AWS publishes no window for it, and the field means
264
+ // "known at Bedrock" rather than "copied from another route", so it stays absent and
265
+ // the ref falls back to the entry's default rather than asserting Cloudflare's 131K
266
+ // or OpenRouter's 202K for a serving stack that is neither.
267
+ bedrock: { baseModelId: 'zai.glm-4.7-flash' },
268
+ openrouter: {
269
+ ref: { provider: 'openrouter', model: 'z-ai/glm-4.7-flash', contextTokens: 202_752 },
270
+ keyEnv: 'OPENROUTER_API_KEY',
271
+ providerLabel: 'OpenRouter',
272
+ },
273
+ },
274
+ // Subscription-only models: run in the Claude Code / Codex harness with a pooled
275
+ // subscription token (Claude Pro/Max, ChatGPT Plus/Pro), direct to the vendor.
276
+ {
277
+ id: 'claude-fable',
278
+ family: 'claude',
279
+ label: 'Claude Fable 5',
280
+ description: "Anthropic's most capable model — run via Claude Code on your Claude subscription, " +
281
+ 'or pay-as-you-go through OpenRouter (billed at Anthropic rates).',
282
+ openrouter: {
283
+ ref: {
284
+ provider: 'openrouter',
285
+ model: 'anthropic/claude-fable-5',
286
+ contextTokens: 1_000_000,
287
+ acceptsImages: true,
288
+ },
289
+ keyEnv: 'OPENROUTER_API_KEY',
290
+ providerLabel: 'OpenRouter',
291
+ },
292
+ subscription: {
293
+ ref: {
294
+ provider: 'anthropic',
295
+ model: 'claude-fable-5',
296
+ harness: 'claude-code',
297
+ contextTokens: 1_000_000,
298
+ acceptsImages: true,
299
+ },
300
+ vendor: 'claude',
301
+ },
302
+ },
303
+ {
304
+ id: 'claude-opus',
305
+ family: 'claude',
306
+ label: 'Claude Opus 5',
307
+ description: "Anthropic's flagship agentic-coding model — a step change over Opus 4.8 at the " +
308
+ 'same price, run via Claude Code on your Claude subscription, or pay-as-you-go ' +
309
+ 'through OpenRouter (billed at Anthropic rates).',
310
+ openrouter: {
311
+ ref: {
312
+ provider: 'openrouter',
313
+ model: 'anthropic/claude-opus-5',
314
+ contextTokens: 1_000_000,
315
+ acceptsImages: true,
316
+ },
317
+ keyEnv: 'OPENROUTER_API_KEY',
318
+ providerLabel: 'OpenRouter',
319
+ },
320
+ subscription: {
321
+ ref: {
322
+ provider: 'anthropic',
323
+ model: 'claude-opus-5',
324
+ harness: 'claude-code',
325
+ contextTokens: 1_000_000,
326
+ acceptsImages: true,
327
+ },
328
+ vendor: 'claude',
329
+ },
330
+ },
331
+ {
332
+ id: 'claude-sonnet',
333
+ family: 'claude',
334
+ label: 'Claude Sonnet 5',
335
+ description: "Anthropic's balanced speed/intelligence model with a 1M-token context, run via Claude " +
336
+ 'Code. Subscription-only here; the pay-as-you-go route is the dynamic OpenRouter catalog.',
337
+ subscription: {
338
+ ref: {
339
+ provider: 'anthropic',
340
+ model: 'claude-sonnet-5',
341
+ harness: 'claude-code',
342
+ contextTokens: 1_000_000,
343
+ acceptsImages: true,
344
+ },
345
+ vendor: 'claude',
346
+ },
347
+ },
348
+ {
349
+ id: 'claude-opus-4-8',
350
+ family: 'claude',
351
+ label: 'Claude Opus 4.8 (Bedrock)',
352
+ description: "Anthropic's previous-generation flagship, on AWS Bedrock in your own account and " +
353
+ 'Region: the residency-guaranteed route for Claude work. Bedrock lags Anthropic; ' +
354
+ 'Opus 5 is subscription/OpenRouter only.',
355
+ // Bedrock-ONLY on purpose. This is a different MODEL from `claude-opus`, not another
356
+ // route to it, so it is its own entry: folding a `bedrock` flavour onto `claude-opus`
357
+ // would silently run 4.8 for a block pinned to 5. No `contextTokens`: Bedrock's window
358
+ // for this model is per-account and we have none verified, and an invented number would
359
+ // cap the proxy's output budget against a limit nobody measured.
360
+ bedrock: { baseModelId: 'anthropic.claude-opus-4-8', acceptsImages: true },
361
+ },
362
+ // The GPT-5.6 tiers are what Codex actually serves today: `sol` (flagship), `terra`
363
+ // (balanced everyday) and `luna` (cheapest). The model id IS the Codex `--model` slug —
364
+ // the `-codex` suffixed family ended at GPT-5.3, so a `gpt-5.5-codex`-shaped id makes the
365
+ // CLI fail with `Unknown model`. GPT-5.5 stays as the previous-generation frontier tier.
366
+ {
367
+ id: 'gpt-5.6-sol',
368
+ family: 'openai',
369
+ label: 'GPT-5.6 Sol',
370
+ description: "OpenAI's flagship for complex coding and research — run via Codex on your ChatGPT " +
371
+ 'subscription, or pay-as-you-go through OpenRouter (billed at OpenAI rates).',
372
+ openrouter: {
373
+ ref: {
374
+ provider: 'openrouter',
375
+ model: 'openai/gpt-5.6-sol',
376
+ contextTokens: 1_050_000,
377
+ acceptsImages: true,
378
+ },
379
+ keyEnv: 'OPENROUTER_API_KEY',
380
+ providerLabel: 'OpenRouter',
381
+ },
382
+ subscription: {
383
+ ref: {
384
+ provider: 'openai',
385
+ model: 'gpt-5.6-sol',
386
+ harness: 'codex',
387
+ contextTokens: 1_050_000,
388
+ acceptsImages: true,
389
+ },
390
+ vendor: 'codex',
391
+ },
392
+ },
393
+ {
394
+ id: 'gpt-5.6-terra',
395
+ family: 'openai',
396
+ label: 'GPT-5.6 Terra',
397
+ description: "OpenAI's balanced everyday model — GPT-5.5-class capability at a fraction of the cost. " +
398
+ 'The migration target for GPT-5.4, which Codex retires on 31 Aug 2026.',
399
+ openrouter: {
400
+ ref: {
401
+ provider: 'openrouter',
402
+ model: 'openai/gpt-5.6-terra',
403
+ contextTokens: 1_050_000,
404
+ acceptsImages: true,
405
+ },
406
+ keyEnv: 'OPENROUTER_API_KEY',
407
+ providerLabel: 'OpenRouter',
408
+ },
409
+ subscription: {
410
+ ref: {
411
+ provider: 'openai',
412
+ model: 'gpt-5.6-terra',
413
+ harness: 'codex',
414
+ contextTokens: 1_050_000,
415
+ acceptsImages: true,
416
+ },
417
+ vendor: 'codex',
418
+ },
419
+ },
420
+ {
421
+ id: 'gpt-5.6-luna',
422
+ family: 'openai',
423
+ label: 'GPT-5.6 Luna',
424
+ description: "OpenAI's fastest, cheapest GPT-5.6 tier — for clear, repeatable tasks. The migration " +
425
+ 'target for GPT-5.4 mini.',
426
+ openrouter: {
427
+ ref: {
428
+ provider: 'openrouter',
429
+ model: 'openai/gpt-5.6-luna',
430
+ contextTokens: 1_050_000,
431
+ acceptsImages: true,
432
+ },
433
+ keyEnv: 'OPENROUTER_API_KEY',
434
+ providerLabel: 'OpenRouter',
435
+ },
436
+ subscription: {
437
+ ref: {
438
+ provider: 'openai',
439
+ model: 'gpt-5.6-luna',
440
+ harness: 'codex',
441
+ contextTokens: 1_050_000,
442
+ acceptsImages: true,
443
+ },
444
+ vendor: 'codex',
445
+ },
446
+ },
447
+ {
448
+ id: 'gpt-5.5',
449
+ family: 'openai',
450
+ label: 'GPT-5.5',
451
+ description: "OpenAI's previous-generation frontier model, still served by Codex — run on your " +
452
+ 'ChatGPT subscription, pay-as-you-go through OpenRouter (billed at OpenAI rates), or ' +
453
+ 'on AWS Bedrock. The newest OpenAI generation Bedrock serves: the GPT-5.6 tiers are ' +
454
+ 'Codex/OpenRouter only.',
455
+ bedrock: { baseModelId: 'openai.gpt-5.5', contextTokens: 1_050_000, acceptsImages: true },
456
+ openrouter: {
457
+ ref: {
458
+ provider: 'openrouter',
459
+ model: 'openai/gpt-5.5',
460
+ contextTokens: 1_050_000,
461
+ acceptsImages: true,
462
+ },
463
+ keyEnv: 'OPENROUTER_API_KEY',
464
+ providerLabel: 'OpenRouter',
465
+ },
466
+ subscription: {
467
+ ref: {
468
+ provider: 'openai',
469
+ model: 'gpt-5.5',
470
+ harness: 'codex',
471
+ contextTokens: 1_050_000,
472
+ acceptsImages: true,
473
+ },
474
+ vendor: 'codex',
475
+ },
476
+ },
477
+ // Gemini has no Cloudflare/native-direct flavour in this deployment, so it is reached
478
+ // through the OpenRouter gateway (billed at Google's rates, no markup). It becomes
479
+ // selectable once an OpenRouter API key is connected for the workspace/user.
480
+ // Other vendors' OpenRouter routes are folded into their native catalog entries (see
481
+ // `openrouter` flavour on deepseek/gpt-5.5/claude-opus); any model not curated here is
482
+ // reachable via the dynamic per-workspace OpenRouter catalog (`openRouterSelectableModels`).
483
+ {
484
+ id: 'gemini',
485
+ family: 'gemini',
486
+ label: 'Gemini 3.1 Pro',
487
+ description: "Google's flagship Gemini Pro via OpenRouter — 1M-token context, billed at Google rates. " +
488
+ 'Still the newest Pro: 3.5 Pro has slipped repeatedly and the 3.x Pro line stops here.',
489
+ openrouter: {
490
+ ref: {
491
+ // The `-preview` suffix is NOT staleness: 3.1 Pro is GA and Google kept the suffix
492
+ // in the API id, so this IS the generally-available flagship. Do not "fix" it to
493
+ // `google/gemini-3.1-pro` — that slug does not exist, and pinning it would recreate
494
+ // the dead-id failure this catalog was just swept for. (2.5 Pro is the misleading
495
+ // precedent: it has both a GA and a `-preview` slug, 3.1 Pro only the latter.)
496
+ // `google/gemini-pro-latest` is likewise deliberately unused — a floating alias
497
+ // would swap the model under a pinned block with no version change to review.
498
+ provider: 'openrouter',
499
+ model: 'google/gemini-3.1-pro-preview',
500
+ contextTokens: 1_048_576,
501
+ acceptsImages: true,
502
+ },
503
+ keyEnv: 'OPENROUTER_API_KEY',
504
+ providerLabel: 'OpenRouter',
505
+ },
506
+ },
507
+ {
508
+ id: 'gemini-3.7-flash',
509
+ family: 'gemini',
510
+ label: 'Gemini 3.7 Flash',
511
+ description: "Google's newest workhorse: 1M-token context, 64K output, and a large coding and " +
512
+ 'agentic step over 3.6 Flash at the same list price. Via OpenRouter, billed at ' +
513
+ 'Google rates.',
514
+ openrouter: {
515
+ ref: {
516
+ provider: 'openrouter',
517
+ model: 'google/gemini-3.7-flash',
518
+ contextTokens: 1_048_576,
519
+ acceptsImages: true,
520
+ },
521
+ keyEnv: 'OPENROUTER_API_KEY',
522
+ providerLabel: 'OpenRouter',
523
+ },
524
+ },
525
+ {
526
+ id: 'gemini-flash',
527
+ family: 'gemini',
528
+ label: 'Gemini 3.6 Flash',
529
+ description: "Google's newest model and its positioned workhorse — 1M-token context at a fraction of " +
530
+ 'Pro pricing. Via OpenRouter, billed at Google rates.',
531
+ openrouter: {
532
+ ref: {
533
+ provider: 'openrouter',
534
+ model: 'google/gemini-3.6-flash',
535
+ contextTokens: 1_048_576,
536
+ acceptsImages: true,
537
+ },
538
+ keyEnv: 'OPENROUTER_API_KEY',
539
+ providerLabel: 'OpenRouter',
540
+ },
541
+ },
542
+ {
543
+ id: 'grok',
544
+ family: 'grok',
545
+ label: 'Grok 4.6',
546
+ description: "xAI's frontier model for long-running agents and agentic coding: a 500K window with " +
547
+ 'image input, direct via an xAI key or pay-as-you-go through OpenRouter.',
548
+ direct: {
549
+ ref: {
550
+ provider: 'xai',
551
+ model: 'grok-4.6',
552
+ contextTokens: 500_000,
553
+ acceptsImages: true,
554
+ },
555
+ keyEnv: 'XAI_API_KEY',
556
+ providerLabel: 'xAI',
557
+ },
558
+ openrouter: {
559
+ ref: {
560
+ provider: 'openrouter',
561
+ model: 'x-ai/grok-4.6',
562
+ contextTokens: 500_000,
563
+ acceptsImages: true,
564
+ },
565
+ keyEnv: 'OPENROUTER_API_KEY',
566
+ providerLabel: 'OpenRouter',
567
+ },
568
+ // No `bedrock` arm: AWS's xAI line stops at Grok 4.3, a different model. No `cloudflare`
569
+ // arm either, so this entry has no always-available floor and goes unavailable when
570
+ // neither key is set, which is the honest reading of a closed-weights vendor.
571
+ },
572
+ // LiteLLM — an operator-hosted OpenAI-compatible gateway. Model names are defined by the
573
+ // operator's LiteLLM `config.yaml` (`model_name`), so this generic entry assumes a
574
+ // `gpt-4o` route; rename the model (or pin via AGENT_DEFAULT_MODEL) to match your
575
+ // gateway. Selectable once a LiteLLM API key is connected AND LITELLM_BASE_URL is set.
576
+ {
577
+ id: 'litellm-default',
578
+ label: 'LiteLLM (gateway default)',
579
+ description: "Your LiteLLM gateway's `gpt-4o` route — rename to match your config.yaml.",
580
+ direct: {
581
+ ref: { provider: 'litellm', model: 'gpt-4o', contextTokens: 128_000 },
582
+ keyEnv: 'LITELLM_API_KEY',
583
+ providerLabel: 'LiteLLM',
584
+ },
585
+ },
586
+ ];
587
+ //# sourceMappingURL=model-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../../src/domain/model-catalog.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,EAAE;AACF,kFAAkF;AAClF,sFAAsF;AACtF,yFAAyF;AACzF,0FAA0F;AAC1F,0FAA0F;AAC1F,yFAAyF;AACzF,yBAAyB;AACzB,EAAE;AACF,yFAAyF;AACzF,4DAA4D;AAC5D,EAAE;AACF,wFAAwF;AACxF,wBAAwB;AACxB,EAAE;AACF,2FAA2F;AAC3F,4FAA4F;AAC5F,yFAAyF;AACzF,0FAA0F;AAC1F,6FAA6F;AAC7F,8FAA8F;AAC9F,wFAAwF;AACxF,0FAA0F;AAC1F,yCAAyC;AACzC,EAAE;AACF,qFAAqF;AACrF,4FAA4F;AAC5F,6FAA6F;AAC7F,yEAAyE;AAEzE,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C;QACE,EAAE,EAAE,kBAAkB;QACtB,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,sFAAsF;YACtF,uBAAuB;QACzB,UAAU,EAAE;YACV,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,yCAAyC;YAChD,aAAa,EAAE,OAAO;YACtB,aAAa,EAAE,IAAI;SACpB;KACF;IACD;QACE,EAAE,EAAE,MAAM;QACV,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,mFAAmF;YACnF,+BAA+B;QACjC,UAAU,EAAE;YACV,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,4BAA4B;YACnC,aAAa,EAAE,MAAM;SACtB;QACD,MAAM,EAAE;YACN,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE;YACzE,MAAM,EAAE,cAAc;YACtB,aAAa,EAAE,WAAW;SAC3B;QACD,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,SAAS,EAAE;YACpF,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;KACF;IACD;QACE,EAAE,EAAE,cAAc;QAClB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,uFAAuF;YACvF,oFAAoF;QACtF,UAAU,EAAE;YACV,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,yBAAyB;YAChC,aAAa,EAAE,OAAO;SACvB;QACD,OAAO,EAAE,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,EAAE,OAAO,EAAE;QACvE,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,OAAO,EAAE;YACrF,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;KACF;IACD;QACE,EAAE,EAAE,WAAW;QACf,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,0FAA0F;YAC1F,+EAA+E;QACjF,UAAU,EAAE;YACV,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,+BAA+B;YACtC,aAAa,EAAE,OAAO;SACvB;QACD,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,2BAA2B,EAAE,aAAa,EAAE,OAAO,EAAE;YAC3F,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;KACF;IACD;QACE,EAAE,EAAE,MAAM;QACV,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,mFAAmF;YACnF,2DAA2D;QAC7D,UAAU,EAAE;YACV,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,0BAA0B;YACjC,aAAa,EAAE,OAAO;SACvB;QACD,MAAM,EAAE;YACN,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE;YACzE,MAAM,EAAE,kBAAkB;YAC1B,aAAa,EAAE,UAAU;SAC1B;QACD,4EAA4E;QAC5E,qEAAqE;QACrE,YAAY,EAAE;YACZ,GAAG,EAAE;gBACH,QAAQ,EAAE,UAAU;gBACpB,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,aAAa;gBACtB,aAAa,EAAE,OAAO;aACvB;YACD,MAAM,EAAE,MAAM;SACf;KACF;IACD;QACE,EAAE,EAAE,SAAS;QACb,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,yFAAyF;YACzF,+EAA+E;QACjF,MAAM,EAAE;YACN,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE;YACzE,MAAM,EAAE,kBAAkB;YAC1B,aAAa,EAAE,UAAU;SAC1B;QACD,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,SAAS,EAAE;YACtF,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;KACF;IACD;QACE,EAAE,EAAE,UAAU;QACd,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,wFAAwF;YACxF,6FAA6F;QAC/F,UAAU,EAAE;YACV,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,8CAA8C;YACrD,aAAa,EAAE,MAAM;SACtB;QACD,MAAM,EAAE;YACN,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,SAAS,EAAE;YACnF,MAAM,EAAE,kBAAkB;YAC1B,aAAa,EAAE,UAAU;SAC1B;QACD,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,4BAA4B;gBACnC,aAAa,EAAE,SAAS;aACzB;YACD,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;QACD,4EAA4E;QAC5E,qEAAqE;QACrE,YAAY,EAAE;YACZ,GAAG,EAAE;gBACH,QAAQ,EAAE,UAAU;gBACpB,KAAK,EAAE,mBAAmB;gBAC1B,OAAO,EAAE,aAAa;gBACtB,aAAa,EAAE,SAAS;aACzB;YACD,MAAM,EAAE,UAAU;SACnB;KACF;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,sFAAsF;YACtF,iEAAiE;QACnE,qFAAqF;QACrF,sFAAsF;QACtF,oFAAoF;QACpF,gFAAgF;QAChF,UAAU,EAAE;YACV,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,0BAA0B;YACjC,aAAa,EAAE,OAAO;SACvB;QACD,MAAM,EAAE;YACN,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,SAAS,EAAE;YACjF,MAAM,EAAE,kBAAkB;YAC1B,aAAa,EAAE,UAAU;SAC1B;QACD,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,0BAA0B,EAAE,aAAa,EAAE,SAAS,EAAE;YAC5F,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;KACF;IACD;QACE,EAAE,EAAE,SAAS;QACb,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,iFAAiF;YACjF,oFAAoF;YACpF,2CAA2C;QAC7C,qFAAqF;QACrF,mFAAmF;QACnF,qFAAqF;QACrF,sFAAsF;QACtF,uFAAuF;QACvF,uFAAuF;QACvF,uEAAuE;QACvE,EAAE;QACF,oFAAoF;QACpF,oEAAoE;QACpE,YAAY,EAAE;YACZ,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE;YAC5F,MAAM,EAAE,KAAK;SACd;KACF;IACD;QACE,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,gFAAgF;YAChF,uCAAuC;QACzC,UAAU,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,OAAO,EAAE;QAC5F,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE;YAChF,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;QACD,4EAA4E;QAC5E,+DAA+D;QAC/D,YAAY,EAAE;YACZ,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE;YAC5F,MAAM,EAAE,KAAK;SACd;KACF;IACD;QACE,EAAE,EAAE,WAAW;QACf,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,yFAAyF;YACzF,wDAAwD;QAC1D,UAAU,EAAE;YACV,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,2BAA2B;YAClC,aAAa,EAAE,OAAO;SACvB;QACD,oFAAoF;QACpF,sFAAsF;QACtF,qFAAqF;QACrF,oFAAoF;QACpF,4DAA4D;QAC5D,OAAO,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE;QAC7C,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,OAAO,EAAE;YACpF,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;KACF;IACD,iFAAiF;IACjF,+EAA+E;IAC/E;QACE,EAAE,EAAE,cAAc;QAClB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,oFAAoF;YACpF,kEAAkE;QACpE,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,0BAA0B;gBACjC,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;QACD,YAAY,EAAE;YACZ,GAAG,EAAE;gBACH,QAAQ,EAAE,WAAW;gBACrB,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,aAAa;gBACtB,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,QAAQ;SACjB;KACF;IACD;QACE,EAAE,EAAE,aAAa;QACjB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,iFAAiF;YACjF,gFAAgF;YAChF,iDAAiD;QACnD,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,yBAAyB;gBAChC,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;QACD,YAAY,EAAE;YACZ,GAAG,EAAE;gBACH,QAAQ,EAAE,WAAW;gBACrB,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,aAAa;gBACtB,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,QAAQ;SACjB;KACF;IACD;QACE,EAAE,EAAE,eAAe;QACnB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,wFAAwF;YACxF,0FAA0F;QAC5F,YAAY,EAAE;YACZ,GAAG,EAAE;gBACH,QAAQ,EAAE,WAAW;gBACrB,KAAK,EAAE,iBAAiB;gBACxB,OAAO,EAAE,aAAa;gBACtB,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,QAAQ;SACjB;KACF;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,mFAAmF;YACnF,kFAAkF;YAClF,yCAAyC;QAC3C,qFAAqF;QACrF,sFAAsF;QACtF,uFAAuF;QACvF,wFAAwF;QACxF,iEAAiE;QACjE,OAAO,EAAE,EAAE,WAAW,EAAE,2BAA2B,EAAE,aAAa,EAAE,IAAI,EAAE;KAC3E;IACD,oFAAoF;IACpF,wFAAwF;IACxF,0FAA0F;IAC1F,yFAAyF;IACzF;QACE,EAAE,EAAE,aAAa;QACjB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,oFAAoF;YACpF,6EAA6E;QAC/E,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,oBAAoB;gBAC3B,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;QACD,YAAY,EAAE;YACZ,GAAG,EAAE;gBACH,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,OAAO;gBAChB,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,OAAO;SAChB;KACF;IACD;QACE,EAAE,EAAE,eAAe;QACnB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,yFAAyF;YACzF,uEAAuE;QACzE,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,sBAAsB;gBAC7B,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;QACD,YAAY,EAAE;YACZ,GAAG,EAAE;gBACH,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,OAAO;gBAChB,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,OAAO;SAChB;KACF;IACD;QACE,EAAE,EAAE,cAAc;QAClB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,uFAAuF;YACvF,0BAA0B;QAC5B,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,qBAAqB;gBAC5B,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;QACD,YAAY,EAAE;YACZ,GAAG,EAAE;gBACH,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,cAAc;gBACrB,OAAO,EAAE,OAAO;gBAChB,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,OAAO;SAChB;KACF;IACD;QACE,EAAE,EAAE,SAAS;QACb,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,mFAAmF;YACnF,sFAAsF;YACtF,qFAAqF;YACrF,wBAAwB;QAC1B,OAAO,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE;QACzF,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,gBAAgB;gBACvB,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;QACD,YAAY,EAAE;YACZ,GAAG,EAAE;gBACH,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,OAAO;gBAChB,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,OAAO;SAChB;KACF;IACD,sFAAsF;IACtF,mFAAmF;IACnF,6EAA6E;IAC7E,qFAAqF;IACrF,uFAAuF;IACvF,6FAA6F;IAC7F;QACE,EAAE,EAAE,QAAQ;QACZ,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,0FAA0F;YAC1F,uFAAuF;QACzF,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,mFAAmF;gBACnF,iFAAiF;gBACjF,oFAAoF;gBACpF,kFAAkF;gBAClF,+EAA+E;gBAC/E,gFAAgF;gBAChF,8EAA8E;gBAC9E,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,+BAA+B;gBACtC,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;KACF;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,kFAAkF;YAClF,gFAAgF;YAChF,eAAe;QACjB,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,yBAAyB;gBAChC,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;KACF;IACD;QACE,EAAE,EAAE,cAAc;QAClB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,yFAAyF;YACzF,sDAAsD;QACxD,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,yBAAyB;gBAChC,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;KACF;IACD;QACE,EAAE,EAAE,MAAM;QACV,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,sFAAsF;YACtF,yEAAyE;QAC3E,MAAM,EAAE;YACN,GAAG,EAAE;gBACH,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,UAAU;gBACjB,aAAa,EAAE,OAAO;gBACtB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,aAAa;YACrB,aAAa,EAAE,KAAK;SACrB;QACD,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,eAAe;gBACtB,aAAa,EAAE,OAAO;gBACtB,aAAa,EAAE,IAAI;aACpB;YACD,MAAM,EAAE,oBAAoB;YAC5B,aAAa,EAAE,YAAY;SAC5B;QACD,yFAAyF;QACzF,oFAAoF;QACpF,8EAA8E;KAC/E;IACD,yFAAyF;IACzF,mFAAmF;IACnF,kFAAkF;IAClF,uFAAuF;IACvF;QACE,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,2EAA2E;QACxF,MAAM,EAAE;YACN,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE;YACrE,MAAM,EAAE,iBAAiB;YACzB,aAAa,EAAE,SAAS;SACzB;KACF;CACF,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { type ModelCost, type ModelFamily, type ModelFamilyPolicy, type ModelFlavor, type ModelOption, type OpenRouterModelMeta, type SubscriptionVendor, orderedModelFlavorPreference } from '@cat-factory/contracts';
2
2
  import type { HarnessKind, ModelRef } from '../ports/model-provider.js';
3
+ import { MODEL_CATALOG } from './model-catalog.js';
3
4
  import { type LocalModelDeclarations } from './local-model-declarations.js';
4
5
  /**
5
6
  * Every route a catalog model can resolve to, as an ordered tuple. `satisfies` pins the
@@ -140,7 +141,7 @@ export interface SelectableModel {
140
141
  */
141
142
  subscription?: SubscriptionVariant;
142
143
  }
143
- export declare const MODEL_CATALOG: SelectableModel[];
144
+ export { MODEL_CATALOG };
144
145
  /** Look up a catalog model by id, or `undefined` for an unknown/empty id. */
145
146
  export declare function getSelectableModel(id: string | undefined | null): SelectableModel | undefined;
146
147
  /**