@link-assistant/hive-mind 2.18.0 → 2.19.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,408 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Bundled model catalogue for hive-mind.
5
+ *
6
+ * The alias maps, defaults and capability lists that ship with an installation,
7
+ * with no behaviour attached: every function that maps, validates or describes a
8
+ * model lives in ./index.mjs, which re-exports this module so the public surface
9
+ * is unchanged.
10
+ *
11
+ * Split out of ./index.mjs when the new-model additions of issue #2202 pushed it
12
+ * over the 1350-line early-warning threshold of
13
+ * scripts/check-file-line-limits.sh, following the extraction precedent of issue
14
+ * #2198. Keeping the catalogue in a leaf module also gives the live catalogue
15
+ * (issue #2202) one obvious thing to merge against: this file is the "bundled
16
+ * with the installation" half of that merge.
17
+ *
18
+ * @see https://github.com/link-assistant/hive-mind/issues/1473
19
+ * @see https://github.com/link-assistant/hive-mind/issues/2202
20
+ */
21
+
22
+ import { FORMAL_AI_MODEL_ALIAS, FORMAL_AI_PROVIDER_MODEL_ID } from '../formal-ai-model.lib.mjs';
23
+
24
+ const formalAiNativeModelAliases = {
25
+ [FORMAL_AI_MODEL_ALIAS]: FORMAL_AI_MODEL_ALIAS,
26
+ [FORMAL_AI_PROVIDER_MODEL_ID]: FORMAL_AI_MODEL_ALIAS,
27
+ };
28
+
29
+ const formalAiProviderModelAliases = {
30
+ [FORMAL_AI_MODEL_ALIAS]: FORMAL_AI_PROVIDER_MODEL_ID,
31
+ [FORMAL_AI_PROVIDER_MODEL_ID]: FORMAL_AI_PROVIDER_MODEL_ID,
32
+ };
33
+ // Claude models (Anthropic API)
34
+ // Updated for Opus 4.5/4.6/4.7/4.8/5, Sonnet 4.6/5, and Fable 5/5.1 / Mythos 5/5.1 support
35
+ // (Issue #1221, Issue #1238, Issue #1329, Issue #1433, Issue #1620, Issue #1832, Issue #1875, Issue #2003, Issue #2096, Issue #2202)
36
+ export const claudeModels = {
37
+ ...formalAiNativeModelAliases,
38
+ sonnet: 'claude-sonnet-5', // Sonnet 5 (Issue #2003)
39
+ opus: 'claude-opus-5', // Opus 5 (default, Issue #2096)
40
+ haiku: 'claude-haiku-4-5-20251001', // Haiku 4.5
41
+ 'haiku-3-5': 'claude-3-5-haiku-20241022', // Haiku 3.5
42
+ 'haiku-3': 'claude-3-haiku-20240307', // Haiku 3
43
+ opusplan: 'opusplan', // Special mode: Opus for planning, Sonnet for execution (Issue #1223)
44
+ // Claude Fable 5.1 — the current Mythos-class flagship; Fable 5 moved to the
45
+ // legacy list when 5.1 shipped, so the bare `fable` alias follows the vendor
46
+ // (same precedent as `opus` → Opus 5 in Issue #2096) while `fable-5` stays
47
+ // pinned for anyone who asked for that exact generation (Issue #2202)
48
+ fable: 'claude-fable-5-1', // Fable 5.1 alias (Issue #2202)
49
+ 'fable-5-1': 'claude-fable-5-1', // Fable 5.1 short alias (Issue #2202)
50
+ 'claude-fable-5-1': 'claude-fable-5-1', // Fable 5.1 full ID (Issue #2202)
51
+ // Claude Fable 5 — Anthropic's most capable widely released (Mythos-class) model, GA 2026-06-09 (Issue #1875)
52
+ 'fable-5': 'claude-fable-5', // Fable 5 short alias
53
+ 'claude-fable-5': 'claude-fable-5', // Fable 5 full ID
54
+ // Claude Mythos 5.1 — Fable 5.1's capabilities without safety classifiers; invite only (Project Glasswing) (Issue #2202)
55
+ 'mythos-5-1': 'claude-mythos-5-1', // Mythos 5.1 short alias (Issue #2202)
56
+ 'claude-mythos-5-1': 'claude-mythos-5-1', // Mythos 5.1 full ID (Issue #2202)
57
+ // Claude Mythos 5 — shares Fable 5's capabilities without safety classifiers; limited availability (Project Glasswing) (Issue #1875)
58
+ 'mythos-5': 'claude-mythos-5', // Mythos 5 short alias
59
+ 'claude-mythos-5': 'claude-mythos-5', // Mythos 5 full ID
60
+ // Shorter version aliases (Issue #1221, Issue #1329 - PR comment feedback)
61
+ 'sonnet-5': 'claude-sonnet-5', // Sonnet 5 short alias (Issue #2003)
62
+ 'sonnet-4-6': 'claude-sonnet-4-6', // Sonnet 4.6 short alias (Issue #1329)
63
+ 'opus-5': 'claude-opus-5', // Opus 5 short alias (Issue #2096)
64
+ 'opus-4-8': 'claude-opus-4-8', // Opus 4.8 short alias (Issue #1832)
65
+ 'opus-4-7': 'claude-opus-4-7', // Opus 4.7 short alias (backward compatibility)
66
+ 'opus-4-6': 'claude-opus-4-6', // Opus 4.6 short alias (backward compatibility)
67
+ 'opus-4-5': 'claude-opus-4-5-20251101', // Opus 4.5 short alias
68
+ 'sonnet-4-5': 'claude-sonnet-4-5-20250929', // Sonnet 4.5 short alias (backward compatibility)
69
+ 'haiku-4-5': 'claude-haiku-4-5-20251001', // Haiku 4.5 short alias
70
+ // Version aliases for backward compatibility (Issue #1221, Issue #1329, Issue #1620, Issue #1832, Issue #2096)
71
+ 'claude-opus-5': 'claude-opus-5', // Opus 5 (Issue #2096)
72
+ 'claude-opus-4-8': 'claude-opus-4-8', // Opus 4.8 (Issue #1832)
73
+ 'claude-opus-4-7': 'claude-opus-4-7', // Opus 4.7 (backward compatibility)
74
+ 'claude-sonnet-5': 'claude-sonnet-5', // Sonnet 5 (Issue #2003)
75
+ 'claude-sonnet-4-6': 'claude-sonnet-4-6', // Sonnet 4.6 (Issue #1329)
76
+ 'claude-opus-4-6': 'claude-opus-4-6', // Opus 4.6 (backward compatibility)
77
+ 'claude-opus-4-5': 'claude-opus-4-5-20251101', // Opus 4.5
78
+ 'claude-sonnet-4-5': 'claude-sonnet-4-5-20250929', // Sonnet 4.5 (backward compatibility)
79
+ 'claude-haiku-4-5': 'claude-haiku-4-5-20251001', // Haiku 4.5
80
+ };
81
+
82
+ // Agent models (OpenCode API and Kilo Gateway via agent CLI)
83
+ // Issue #1300: Updated free models to match agent PR #191
84
+ // Issue #1543: Added qwen3.6-plus-free (former default) and nemotron-3-super-free per agent PR #234
85
+ // Issue #1563: qwen3.6-plus-free free promotion ended (April 2026), nemotron-3-super-free is now default per agent PR #243
86
+ export const agentModels = {
87
+ ...formalAiProviderModelAliases,
88
+ // OpenCode Zen free models (current)
89
+ grok: 'opencode/grok-code',
90
+ 'grok-code': 'opencode/grok-code',
91
+ 'grok-code-fast-1': 'opencode/grok-code',
92
+ 'big-pickle': 'opencode/big-pickle',
93
+ 'gpt-5-nano': 'opencode/gpt-5-nano',
94
+ 'minimax-m2.5-free': 'opencode/minimax-m2.5-free', // Upgraded from M2.1 (Issue #1391)
95
+ 'nemotron-3-super-free': 'opencode/nemotron-3-super-free', // Default: NVIDIA hybrid Mamba-Transformer (Issue #1563)
96
+ // Kilo Gateway free models (Issue #1282, updated in #1300)
97
+ // Short names for Kilo-exclusive models (Issue #1300)
98
+ 'glm-5-free': 'kilo/glm-5-free', // Kilo-exclusive
99
+ 'glm-4.5-air-free': 'kilo/glm-4.5-air-free', // Kilo-exclusive: agent-centric model
100
+ 'deepseek-r1-free': 'kilo/deepseek-r1-free', // Kilo-exclusive: reasoning model
101
+ 'giga-potato-free': 'kilo/giga-potato-free', // Kilo-exclusive
102
+ 'trinity-large-preview': 'kilo/trinity-large-preview', // Kilo-exclusive
103
+ // Full names with kilo/ prefix
104
+ 'kilo/glm-5-free': 'kilo/glm-5-free',
105
+ 'kilo/glm-4.5-air-free': 'kilo/glm-4.5-air-free',
106
+ 'kilo/minimax-m2.5-free': 'kilo/minimax-m2.5-free', // Also on OpenCode Zen
107
+ 'kilo/deepseek-r1-free': 'kilo/deepseek-r1-free',
108
+ 'kilo/giga-potato-free': 'kilo/giga-potato-free',
109
+ 'kilo/trinity-large-preview': 'kilo/trinity-large-preview',
110
+ // Deprecated free models (kept for backward compatibility)
111
+ 'qwen3.6-plus-free': 'opencode/qwen3.6-plus-free', // Deprecated: free promotion ended April 2026 (Issue #1563)
112
+ 'kimi-k2.5-free': 'opencode/kimi-k2.5-free', // Deprecated: not supported (Issue #1391)
113
+ 'glm-4.7-free': 'opencode/glm-4.7-free', // Deprecated: no longer free
114
+ 'minimax-m2.1-free': 'opencode/minimax-m2.1-free', // Deprecated: replaced by m2.5
115
+ 'kilo/glm-4.7-free': 'kilo/glm-4.7-free', // Deprecated: replaced by glm-4.5-air-free
116
+ 'kilo/kimi-k2.5-free': 'kilo/kimi-k2.5-free', // Deprecated: not recommended
117
+ 'kilo/minimax-m2.1-free': 'kilo/minimax-m2.1-free', // Deprecated: replaced by m2.5
118
+ // Premium models
119
+ sonnet: 'anthropic/claude-3-5-sonnet',
120
+ haiku: 'anthropic/claude-3-5-haiku',
121
+ opus: 'anthropic/claude-3-opus',
122
+ 'gemini-3-pro': 'google/gemini-3-pro',
123
+ };
124
+
125
+ // OpenCode models (OpenCode API)
126
+ export const opencodeModels = {
127
+ ...formalAiProviderModelAliases,
128
+ gpt4: 'openai/gpt-4',
129
+ gpt4o: 'openai/gpt-4o',
130
+ claude: 'anthropic/claude-3-5-sonnet',
131
+ sonnet: 'anthropic/claude-3-5-sonnet',
132
+ opus: 'anthropic/claude-3-opus',
133
+ gemini: 'google/gemini-pro',
134
+ grok: 'opencode/grok-code',
135
+ 'grok-code': 'opencode/grok-code',
136
+ 'grok-code-fast-1': 'opencode/grok-code',
137
+ };
138
+
139
+ // Codex models (OpenAI API)
140
+ export const codexModels = {
141
+ ...formalAiNativeModelAliases,
142
+ // GPT-6 Astra — the first GPT-6 model, limited preview from 2026-09-03 (Issue #2202)
143
+ 'gpt-6-astra': 'gpt-6-astra',
144
+ gpt5: 'gpt-5',
145
+ 'gpt-5': 'gpt-5',
146
+ 'gpt-5.5': 'gpt-5.5',
147
+ 'gpt-5.5-mini': 'gpt-5.5-mini',
148
+ 'gpt-5.5-nano': 'gpt-5.5-nano',
149
+ 'gpt-5.6-sol': 'gpt-5.6-sol',
150
+ 'gpt-5.6-terra': 'gpt-5.6-terra',
151
+ 'gpt-5.6-luna': 'gpt-5.6-luna',
152
+ 'gpt-5.6-cyber': 'gpt-5.6-cyber', // Daybreak-program security model (Issue #2202)
153
+ 'gpt-5.4': 'gpt-5.4',
154
+ 'gpt-5.4-mini': 'gpt-5.4-mini',
155
+ 'gpt-5.4-nano': 'gpt-5.4-nano',
156
+ 'gpt-5.2': 'gpt-5.2',
157
+ 'gpt-5.2-codex': 'gpt-5.2-codex',
158
+ 'gpt-5.3-codex': 'gpt-5.3-codex',
159
+ 'gpt-5.3-codex-spark': 'gpt-5.3-codex-spark',
160
+ 'gpt-5.1-codex-max': 'gpt-5.1-codex-max',
161
+ // Daybreak aliases already advertised by the installed Codex CLI (Issue #2202)
162
+ 'gpt-daybreak-blue-latest': 'gpt-daybreak-blue-latest',
163
+ 'gpt-daybreak-red-latest': 'gpt-daybreak-red-latest',
164
+ 'openai.gpt-5.5': 'openai.gpt-5.5',
165
+ 'openai.gpt-5.4': 'openai.gpt-5.4',
166
+ 'openai.gpt-5.6-sol': 'openai.gpt-5.6-sol',
167
+ 'openai.gpt-5.6-terra': 'openai.gpt-5.6-terra',
168
+ 'openai.gpt-5.6-luna': 'openai.gpt-5.6-luna',
169
+ 'codex-auto-review': 'codex-auto-review',
170
+ 'o3-mini': 'o3-mini',
171
+ gpt4: 'gpt-4',
172
+ 'gpt-4': 'gpt-4',
173
+ gpt4o: 'gpt-4o',
174
+ 'gpt-4o': 'gpt-4o',
175
+ };
176
+
177
+ const CODEX_GENERATION_ALIAS_PATTERN = /^gpt-(\d+(?:\.\d+)?)-(sol|terra|luna)$/;
178
+ const OPENAI_MODEL_PREFIX_PATTERN = /^openai([/.])/;
179
+
180
+ /**
181
+ * Resolve sol/terra/luna to the newest generation that contains the complete
182
+ * alias family. A complete family prevents a partially rolled-out catalog from
183
+ * moving only some aliases to a newer generation.
184
+ */
185
+ export const getLatestCodexGenerationAliases = (models = codexModels) => {
186
+ const generations = new Map();
187
+
188
+ for (const modelId of Object.values(models)) {
189
+ const bareModelId = modelId.replace(OPENAI_MODEL_PREFIX_PATTERN, '');
190
+ const match = bareModelId.match(CODEX_GENERATION_ALIAS_PATTERN);
191
+ if (!match) continue;
192
+
193
+ const [, generation, alias] = match;
194
+ if (!generations.has(generation)) generations.set(generation, {});
195
+ generations.get(generation)[alias] = bareModelId;
196
+ }
197
+
198
+ const latestCompleteGeneration = [...generations.entries()].filter(([, aliases]) => ['sol', 'terra', 'luna'].every(alias => aliases[alias])).sort(([left], [right]) => right.localeCompare(left, undefined, { numeric: true }))[0];
199
+
200
+ return latestCompleteGeneration?.[1] || {};
201
+ };
202
+ const getCodexModelVariants = () => {
203
+ const bareModels = [...new Set(Object.values(codexModels).map(modelId => modelId.replace(OPENAI_MODEL_PREFIX_PATTERN, '')))];
204
+ const aliases = getLatestCodexGenerationAliases();
205
+ const variants = { ...codexModels, ...aliases };
206
+
207
+ for (const [name, modelId] of Object.entries({ ...Object.fromEntries(bareModels.map(modelId => [modelId, modelId])), ...aliases })) {
208
+ variants[`openai/${name}`] = `openai/${modelId}`;
209
+ variants[`openai.${name}`] = `openai.${modelId}`;
210
+ }
211
+
212
+ return variants;
213
+ };
214
+
215
+ export const CODEX_MODEL_VARIANTS = getCodexModelVariants();
216
+
217
+ // Qwen Code models
218
+ export const qwenModels = {
219
+ ...formalAiNativeModelAliases,
220
+ qwen: 'qwen3-coder-plus',
221
+ 'qwen-coder': 'qwen3-coder-plus',
222
+ qwen3: 'qwen3-coder-plus',
223
+ 'qwen3-coder': 'qwen3-coder',
224
+ 'qwen3-coder-plus': 'qwen3-coder-plus',
225
+ 'qwen3-coder-flash': 'qwen3-coder-flash',
226
+ 'qwen3.6-plus': 'qwen3.6-plus',
227
+ 'qwen3.6-coder-plus': 'qwen3.6-coder-plus',
228
+ };
229
+
230
+ // Gemini models (Google Gemini CLI)
231
+ // Keep aliases aligned with the Gemini CLI model aliases documented in
232
+ // docs/cli/cli-reference.md: auto, pro, flash, and flash-lite.
233
+ export const geminiModels = {
234
+ ...formalAiNativeModelAliases,
235
+ auto: 'auto',
236
+ gemini: 'gemini-2.5-flash',
237
+ flash: 'gemini-2.5-flash',
238
+ '2.5-flash': 'gemini-2.5-flash',
239
+ pro: 'gemini-2.5-pro',
240
+ '2.5-pro': 'gemini-2.5-pro',
241
+ lite: 'gemini-2.5-flash-lite',
242
+ '2.5-lite': 'gemini-2.5-flash-lite',
243
+ 'flash-lite': 'gemini-2.5-flash-lite',
244
+ '3-flash': 'gemini-3-flash-preview',
245
+ '3-pro': 'gemini-3-pro-preview',
246
+ 'gemini-flash': 'gemini-2.5-flash',
247
+ 'gemini-pro': 'gemini-2.5-pro',
248
+ 'gemini-2.5-flash': 'gemini-2.5-flash',
249
+ 'gemini-2.5-pro': 'gemini-2.5-pro',
250
+ 'gemini-2.5-flash-lite': 'gemini-2.5-flash-lite',
251
+ 'gemini-3-flash-preview': 'gemini-3-flash-preview',
252
+ 'gemini-3-pro-preview': 'gemini-3-pro-preview',
253
+ };
254
+
255
+ // Default model for each tool (Issue #1473: centralized to avoid scattered hardcoded defaults)
256
+ export const defaultModels = {
257
+ claude: 'opus', // Issue #2033: Opus is the preferred default for Claude; sonnet remains available explicitly. Opus now maps to Opus 5 (Issue #2096)
258
+ agent: 'nemotron-3-super-free', // Issue #1563: changed from qwen3.6-plus-free (free promotion ended) per agent PR #243
259
+ opencode: 'grok-code-fast-1',
260
+ codex: 'gpt-5.6-sol', // Issue #2027: GPT-5.6 Sol is the released Codex flagship; runtime falls back to gpt-5.5 when Sol is not in the local catalog
261
+ qwen: 'qwen3-coder-plus',
262
+ gemini: 'flash',
263
+ };
264
+
265
+ // Models that support 1M token context window via [1m] suffix (Issue #1221, Issue #1238, Issue #1329, Issue #1832)
266
+ // See: https://code.claude.com/docs/en/model-config
267
+ export const MODELS_SUPPORTING_1M_CONTEXT = [
268
+ 'claude-fable-5-1', // Fable 5.1 — 1M context by default (Issue #2202)
269
+ 'claude-mythos-5-1', // Mythos 5.1 — 1M context by default (Issue #2202)
270
+ 'fable-5-1', // Fable 5.1 short alias (Issue #2202)
271
+ 'mythos-5-1', // Mythos 5.1 short alias (Issue #2202)
272
+ 'claude-fable-5', // Fable 5 — 1M context by default (Issue #1875)
273
+ 'claude-mythos-5', // Mythos 5 — 1M context by default (Issue #1875)
274
+ 'fable', // Fable alias — now resolves to Fable 5.1 (Issue #2202)
275
+ 'fable-5', // Fable 5 short alias (Issue #1875)
276
+ 'mythos-5', // Mythos 5 short alias (Issue #1875)
277
+ 'claude-opus-4-8', // Opus 4.8 (Issue #1832)
278
+ 'claude-opus-4-7', // Opus 4.7 (Issue #1620)
279
+ 'claude-opus-4-6',
280
+ 'claude-opus-4-5-20251101',
281
+ 'claude-sonnet-5', // Sonnet 5 — 1M context (Issue #2003)
282
+ 'claude-sonnet-4-6', // Sonnet 4.6 (Issue #1329)
283
+ 'claude-sonnet-4-5-20250929',
284
+ 'claude-sonnet-4-5',
285
+ 'claude-opus-5', // Opus 5 — 1M context (Issue #2096)
286
+ 'sonnet', // Now maps to Sonnet 5 (Issue #2003)
287
+ 'sonnet-5', // Short alias (Issue #2003)
288
+ 'sonnet-4-6', // Short alias (Issue #1329)
289
+ 'opus', // Now maps to Opus 5 (Issue #2096)
290
+ 'opus-5', // Short alias (Issue #2096)
291
+ 'opus-4-8', // Short alias (Issue #1832)
292
+ 'opus-4-7', // Short alias (Issue #1620)
293
+ 'opus-4-6', // Short alias (Issue #1221 - PR comment feedback)
294
+ 'opus-4-5', // Short alias (Issue #1238)
295
+ 'sonnet-4-5', // Short alias (Issue #1221 - PR comment feedback)
296
+ ];
297
+
298
+ // Free model to base model mapping for pricing lookup (Issue #1250, Issue #1473)
299
+ // Free models like "kimi-k2.5-free" should use pricing from base model "kimi-k2.5"
300
+ export const freeToBaseModelMap = {
301
+ 'kimi-k2.5-free': 'kimi-k2.5',
302
+ 'glm-4.7-free': 'glm-4.7',
303
+ 'minimax-m2.1-free': 'minimax-m2.1',
304
+ 'minimax-m2.5-free': 'minimax-m2.5',
305
+ 'qwen3.6-plus-free': 'qwen3.6-plus', // Issue #1543
306
+ 'nemotron-3-super-free': 'nemotron-3-super', // Issue #1543
307
+ 'glm-5-free': 'glm-5',
308
+ 'glm-4.5-air-free': 'glm-4.5-air',
309
+ 'deepseek-r1-free': 'deepseek-r1',
310
+ 'giga-potato-free': 'giga-potato',
311
+ 'trinity-large-preview-free': 'trinity-large-preview',
312
+ };
313
+
314
+ // ─── VALIDATION-EXTENDED MODEL MAPS ──────────────────────────────────────────
315
+ // These extend the base maps with full model ID identity entries for validation
316
+ // (e.g., 'claude-sonnet-4-5-20250929' → 'claude-sonnet-4-5-20250929')
317
+ // so that full model IDs are also accepted as valid inputs
318
+ export const CLAUDE_MODELS = {
319
+ ...claudeModels,
320
+ 'claude-fable-5-1': 'claude-fable-5-1', // Fable 5.1 full ID (Issue #2202)
321
+ 'claude-mythos-5-1': 'claude-mythos-5-1', // Mythos 5.1 full ID (Issue #2202)
322
+ 'claude-fable-5': 'claude-fable-5', // Fable 5 full ID (Issue #1875)
323
+ 'claude-mythos-5': 'claude-mythos-5', // Mythos 5 full ID (Issue #1875)
324
+ 'claude-opus-5': 'claude-opus-5', // Opus 5 full ID (Issue #2096)
325
+ 'claude-opus-4-8': 'claude-opus-4-8', // Opus 4.8 full ID (Issue #1832)
326
+ 'claude-opus-4-7': 'claude-opus-4-7', // Opus 4.7 full ID (Issue #1620)
327
+ 'claude-sonnet-4-5-20250929': 'claude-sonnet-4-5-20250929',
328
+ 'claude-opus-4-5-20251101': 'claude-opus-4-5-20251101',
329
+ 'claude-haiku-4-5-20251001': 'claude-haiku-4-5-20251001',
330
+ 'claude-3-5-haiku-20241022': 'claude-3-5-haiku-20241022',
331
+ 'claude-3-haiku-20240307': 'claude-3-haiku-20240307',
332
+ };
333
+
334
+ export const OPENCODE_MODELS = {
335
+ ...opencodeModels,
336
+ 'openai/gpt-4': 'openai/gpt-4',
337
+ 'openai/gpt-4o': 'openai/gpt-4o',
338
+ 'anthropic/claude-3-5-sonnet': 'anthropic/claude-3-5-sonnet',
339
+ 'anthropic/claude-3-opus': 'anthropic/claude-3-opus',
340
+ 'google/gemini-pro': 'google/gemini-pro',
341
+ 'opencode/grok-code': 'opencode/grok-code',
342
+ };
343
+
344
+ export const CODEX_MODELS = {
345
+ ...CODEX_MODEL_VARIANTS,
346
+ 'gpt-6-astra': 'gpt-6-astra', // Issue #2202
347
+ 'gpt-5': 'gpt-5',
348
+ 'gpt-5.5': 'gpt-5.5',
349
+ 'gpt-5.5-mini': 'gpt-5.5-mini',
350
+ 'gpt-5.5-nano': 'gpt-5.5-nano',
351
+ 'gpt-5.6-sol': 'gpt-5.6-sol',
352
+ 'gpt-5.6-terra': 'gpt-5.6-terra',
353
+ 'gpt-5.6-luna': 'gpt-5.6-luna',
354
+ 'gpt-5.6-cyber': 'gpt-5.6-cyber', // Issue #2202
355
+ 'gpt-5.4': 'gpt-5.4',
356
+ 'gpt-5.4-mini': 'gpt-5.4-mini',
357
+ 'gpt-5.4-nano': 'gpt-5.4-nano',
358
+ 'gpt-5.2': 'gpt-5.2',
359
+ 'gpt-5.2-codex': 'gpt-5.2-codex',
360
+ 'gpt-5.3-codex': 'gpt-5.3-codex',
361
+ 'gpt-5.3-codex-spark': 'gpt-5.3-codex-spark',
362
+ 'gpt-5.1-codex-max': 'gpt-5.1-codex-max',
363
+ 'gpt-daybreak-blue-latest': 'gpt-daybreak-blue-latest', // Issue #2202
364
+ 'gpt-daybreak-red-latest': 'gpt-daybreak-red-latest', // Issue #2202
365
+ 'openai.gpt-5.5': 'openai.gpt-5.5',
366
+ 'openai.gpt-5.4': 'openai.gpt-5.4',
367
+ 'openai.gpt-5.6-sol': 'openai.gpt-5.6-sol',
368
+ 'openai.gpt-5.6-terra': 'openai.gpt-5.6-terra',
369
+ 'openai.gpt-5.6-luna': 'openai.gpt-5.6-luna',
370
+ 'codex-auto-review': 'codex-auto-review',
371
+ 'gpt-4': 'gpt-4',
372
+ 'gpt-4o': 'gpt-4o',
373
+ };
374
+
375
+ export const QWEN_MODELS = {
376
+ ...qwenModels,
377
+ 'qwen3-coder': 'qwen3-coder',
378
+ 'qwen3-coder-plus': 'qwen3-coder-plus',
379
+ 'qwen3-coder-flash': 'qwen3-coder-flash',
380
+ 'qwen3.6-plus': 'qwen3.6-plus',
381
+ 'qwen3.6-coder-plus': 'qwen3.6-coder-plus',
382
+ };
383
+
384
+ export const GEMINI_MODELS = {
385
+ ...geminiModels,
386
+ 'gemini-2.5-flash': 'gemini-2.5-flash',
387
+ 'gemini-2.5-pro': 'gemini-2.5-pro',
388
+ 'gemini-2.5-flash-lite': 'gemini-2.5-flash-lite',
389
+ 'gemini-3-flash-preview': 'gemini-3-flash-preview',
390
+ 'gemini-3-pro-preview': 'gemini-3-pro-preview',
391
+ };
392
+
393
+ export const AGENT_MODELS = {
394
+ ...agentModels,
395
+ 'opencode/grok-code': 'opencode/grok-code',
396
+ 'opencode/big-pickle': 'opencode/big-pickle',
397
+ 'opencode/gpt-5-nano': 'opencode/gpt-5-nano',
398
+ 'opencode/minimax-m2.5-free': 'opencode/minimax-m2.5-free',
399
+ 'opencode/nemotron-3-super-free': 'opencode/nemotron-3-super-free', // Issue #1563: now default
400
+ 'opencode/qwen3.6-plus-free': 'opencode/qwen3.6-plus-free', // Deprecated: free promotion ended (Issue #1563)
401
+ 'opencode/kimi-k2.5-free': 'opencode/kimi-k2.5-free', // Deprecated
402
+ 'opencode/glm-4.7-free': 'opencode/glm-4.7-free', // Deprecated
403
+ 'opencode/minimax-m2.1-free': 'opencode/minimax-m2.1-free', // Deprecated
404
+ 'anthropic/claude-3-5-sonnet': 'anthropic/claude-3-5-sonnet',
405
+ 'anthropic/claude-3-5-haiku': 'anthropic/claude-3-5-haiku',
406
+ 'anthropic/claude-3-opus': 'anthropic/claude-3-opus',
407
+ 'google/gemini-3-pro': 'google/gemini-3-pro',
408
+ };