@bitkyc08/opencodex 2.29.0 → 2.30.0-preview.20260821

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.
@@ -10,6 +10,7 @@ import {
10
10
  MOONSHOT_BASE_URL_CHOICES, MOONSHOT_INTL_BASE_URL,
11
11
  } from "./base-url-choices";
12
12
  import {
13
+ CURSOR_NO_VISION_MODELS,
13
14
  CURSOR_STATIC_MODELS,
14
15
  cursorModelContextWindows,
15
16
  cursorModelIds,
@@ -452,7 +453,23 @@ const THINKING_BUDGET_MODELS = [
452
453
  ];
453
454
  const OPENCODE_GO_THINKING_BUDGET_MODELS = ["qwen3.5-plus", "qwen3.6-plus", "qwen3.7-max", "qwen3.7-plus"];
454
455
  const DEEPSEEK_THINKING_MODELS = ["deepseek-v4-pro", "deepseek-v4-flash"];
456
+ /*
457
+ * DeepSeek's experimental vision preview (released 2026-08-21, api-docs.deepseek.com):
458
+ * text+image input on the V4 Flash base. DeepSeek positions it as a preview id;
459
+ * the expectation is that vision merges into `deepseek-v4-flash` proper later,
460
+ * at which point this id retires the same way deepseek-chat/reasoner did.
461
+ */
462
+ const DEEPSEEK_VISION_PREVIEW_MODEL = "deepseek-v4-flash-vision-exp";
455
463
  const OPENCODE_FREE_DEEPSEEK_MODELS = ["deepseek-v4-flash-free"];
464
+ /*
465
+ * OpenCode Zen's free slug for the OpenRouter stealth model "Ox Alpha"
466
+ * (openrouter.ai/stealth/ox-alpha): 1,048,576-token context, multimodal
467
+ * (text+image+video upstream; Zen serves text+image), mandatory reasoning,
468
+ * free during the stealth window. Zen displays it as "Ox Alpha Free" under
469
+ * this exact id (opencode.ai/docs/zen, verified 2026-08-21).
470
+ */
471
+ const OPENCODE_OX_ALPHA_FREE_MODEL = "x-preview-f-free";
472
+ const OX_ALPHA_CONTEXT_WINDOW = 1_048_576;
456
473
  /*
457
474
  * Zen free models that reject `image_url` upstream (#1043, and the reproducible
458
475
  * half of #1024).
@@ -994,11 +1011,10 @@ export const PROVIDER_REGISTRY: readonly ProviderRegistryEntry[] = [
994
1011
  // no-effort fallback to `kimi-k3-max` would never be reached. Mirrors the other K3
995
1012
  // routes (kimi, kimi-code, opencode-go).
996
1013
  modelDefaultReasoningEfforts: { "kimi-k3": "max" },
997
- // Cursor's wire protocol never forwards image parts (request-builder emits an unsupported-
998
- // content marker), so the vision sidecar covers ALL cursor models regardless of what the
999
- // upstream model could natively do. Live-discovered models outside the static list fall back
1000
- // to the same marker until they appear here.
1001
- noVisionModels: cursorModelIds(CURSOR_STATIC_MODELS),
1014
+ // Blind Cursor models (Auto routers, Composer, GLM-5.2, GLM-5.3) go through the vision sidecar;
1015
+ // multimodal hosts (Claude/Gemini/GPT/Kimi/Grok) take native SelectedImage. The catalog
1016
+ // still advertises image for noVision members so Codex can attach (sidecar option B).
1017
+ noVisionModels: [...CURSOR_NO_VISION_MODELS],
1002
1018
  },
1003
1019
  {
1004
1020
  id: "xai",
@@ -1101,6 +1117,17 @@ export const PROVIDER_REGISTRY: readonly ProviderRegistryEntry[] = [
1101
1117
  // Unknown/new live models deliberately do not advertise a reasoning picker.
1102
1118
  reasoningEfforts: [],
1103
1119
  modelReasoningEfforts: COMMAND_CODE_MODEL_REASONING_EFFORTS,
1120
+ // Ox Alpha (stealth preview, changelog v1.31.0): free 1M multimodal reasoning
1121
+ // model on every plan. DeepSeek vision preview id is preemptive metadata —
1122
+ // it is expected to merge into deepseek-v4-flash later.
1123
+ modelContextWindows: {
1124
+ "stealth/ox-alpha": OX_ALPHA_CONTEXT_WINDOW,
1125
+ [`deepseek/${DEEPSEEK_VISION_PREVIEW_MODEL}`]: 1_048_576,
1126
+ },
1127
+ modelInputModalities: {
1128
+ "stealth/ox-alpha": ["text", "image"],
1129
+ [`deepseek/${DEEPSEEK_VISION_PREVIEW_MODEL}`]: ["text", "image"],
1130
+ },
1104
1131
  defaultMaxOutputTokens: 64_000,
1105
1132
  // The proprietary generate wire has no verified per-request serialization flag.
1106
1133
  parallelToolCalls: false,
@@ -1292,8 +1319,20 @@ export const PROVIDER_REGISTRY: readonly ProviderRegistryEntry[] = [
1292
1319
  - 장점, 단점 및 영향: Luna reaches `/responses` from every inbound surface without changing siblings; a future upstream endpoint change requires an evidence-backed registry update.
1293
1320
  */
1294
1321
  modelWireDefaults: { "gpt-5.6-luna": "openai-responses" },
1295
- modelContextWindows: { "kimi-k3": KIMI_K3_STANDARD_CONTEXT_WINDOW },
1296
- modelInputModalities: { "kimi-k3": ["text", "image"] },
1322
+ modelContextWindows: {
1323
+ "kimi-k3": KIMI_K3_STANDARD_CONTEXT_WINDOW,
1324
+ // Ox Alpha (stealth 1M multimodal) and the DeepSeek vision preview are
1325
+ // metadata-only here: the Go roster is discovered live, so these apply
1326
+ // the moment the gateway starts serving the ids.
1327
+ [OPENCODE_OX_ALPHA_FREE_MODEL]: OX_ALPHA_CONTEXT_WINDOW,
1328
+ [DEEPSEEK_VISION_PREVIEW_MODEL]: 1_048_576,
1329
+ },
1330
+ modelInputModalities: {
1331
+ "kimi-k3": ["text", "image"],
1332
+ [OPENCODE_OX_ALPHA_FREE_MODEL]: ["text", "image"],
1333
+ // Experimental DeepSeek vision preview — expected to merge into deepseek-v4-flash later.
1334
+ [DEEPSEEK_VISION_PREVIEW_MODEL]: ["text", "image"],
1335
+ },
1297
1336
  modelReasoningEfforts: {
1298
1337
  "glm-5.3": ZAI_GLM_53_REASONING_EFFORTS,
1299
1338
  "glm-5.2": ZAI_GLM_52_REASONING_EFFORTS,
@@ -1396,11 +1435,16 @@ export const PROVIDER_REGISTRY: readonly ProviderRegistryEntry[] = [
1396
1435
  featured: true,
1397
1436
  dashboardUrl: "https://openrouter.ai/keys",
1398
1437
  jawcodeBundle: "openrouter",
1399
- models: ["anthropic/claude-sonnet-5", ...OPENROUTER_GPT56_MODELS],
1438
+ // stealth/ox-alpha: free stealth-window frontier model (launched 2026-08-20).
1439
+ // /api/v1/models reports 1,048,576 context, 131,072 max output, text+image+video
1440
+ // input, $0 pricing, mandatory reasoning. Single provider slug: `stealth`.
1441
+ models: ["anthropic/claude-sonnet-5", "stealth/ox-alpha", ...OPENROUTER_GPT56_MODELS],
1400
1442
  modelContextWindows: {
1401
1443
  "anthropic/claude-sonnet-5": 1_000_000,
1444
+ "stealth/ox-alpha": OX_ALPHA_CONTEXT_WINDOW,
1402
1445
  ...OPENROUTER_GPT56_CONTEXT_WINDOWS,
1403
1446
  },
1447
+ modelInputModalities: { "stealth/ox-alpha": ["text", "image"] },
1404
1448
  // OpenRouter documents priority support for OpenAI endpoints, but not Anthropic. Keep the
1405
1449
  // provider unclassified and opt in only the exact OpenAI-backed slugs we ship. These facts
1406
1450
  // belong only to the canonical destination; a same-named custom gateway is unknown to us.
@@ -1551,11 +1595,14 @@ export const PROVIDER_REGISTRY: readonly ProviderRegistryEntry[] = [
1551
1595
  // keep validating and routing (they previously mapped to v4-flash; devlog
1552
1596
  // _fin/260710_provider_hardening/002_research_cn.md). The current offerings are
1553
1597
  // the V4 ids — defaultModel and the model-specific wiring above use them.
1554
- models: ["deepseek-chat", "deepseek-reasoner", ...DEEPSEEK_THINKING_MODELS],
1598
+ // deepseek-v4-flash-vision-exp: experimental vision preview (2026-08-21)
1599
+ // expected to merge into deepseek-v4-flash later; see DEEPSEEK_VISION_PREVIEW_MODEL.
1600
+ models: ["deepseek-chat", "deepseek-reasoner", ...DEEPSEEK_THINKING_MODELS, DEEPSEEK_VISION_PREVIEW_MODEL],
1555
1601
  defaultModel: "deepseek-v4-flash",
1556
1602
  // Official DeepSeek Codex setup (codex-deepseek-setup.sh) advertises 1,048,576
1557
1603
  // for both V4 models; the older 1,000,000 figure was a rounded approximation.
1558
- modelContextWindows: { "deepseek-v4-flash": 1_048_576, "deepseek-v4-pro": 1_048_576 },
1604
+ modelContextWindows: { "deepseek-v4-flash": 1_048_576, "deepseek-v4-pro": 1_048_576, [DEEPSEEK_VISION_PREVIEW_MODEL]: 1_048_576 },
1605
+ modelInputModalities: { [DEEPSEEK_VISION_PREVIEW_MODEL]: ["text", "image"] },
1559
1606
  // DeepSeek documents both V4 models as native Responses API models adapted for Codex
1560
1607
  // (model table marks Responses API ✓ for flash and pro; the /responses reference lists
1561
1608
  // both ids as accepted `model` values — verified 2026-08-13 with the V4 Pro GA,
@@ -1808,6 +1855,17 @@ export const PROVIDER_REGISTRY: readonly ProviderRegistryEntry[] = [
1808
1855
  // slash ids — so a Codex-facing slug like `commandcode/deepseek-deepseek-v4-pro`
1809
1856
  // is sent upstream verbatim and rejected with `unsupported_model`.
1810
1857
  modelReasoningEfforts: COMMAND_CODE_MODEL_REASONING_EFFORTS,
1858
+ // Ox Alpha (stealth preview, Command Code changelog v1.31.0) ships with a
1859
+ // 1.05M-token multimodal context; the DeepSeek vision preview id is
1860
+ // preemptive for when the catalog serves it (merges into v4-flash later).
1861
+ modelContextWindows: {
1862
+ "stealth/ox-alpha": OX_ALPHA_CONTEXT_WINDOW,
1863
+ [`deepseek/${DEEPSEEK_VISION_PREVIEW_MODEL}`]: 1_048_576,
1864
+ },
1865
+ modelInputModalities: {
1866
+ "stealth/ox-alpha": ["text", "image"],
1867
+ [`deepseek/${DEEPSEEK_VISION_PREVIEW_MODEL}`]: ["text", "image"],
1868
+ },
1811
1869
  modelDiscovery: {
1812
1870
  path: "models",
1813
1871
  maxResponseBytes: 256 * 1024,
@@ -2452,6 +2510,16 @@ export const PROVIDER_REGISTRY: readonly ProviderRegistryEntry[] = [
2452
2510
  [...DEEPSEEK_THINKING_MODELS, ...OPENCODE_FREE_DEEPSEEK_MODELS].map(id => [id, deepseekReasoningMapFor(id)]),
2453
2511
  ),
2454
2512
  preserveReasoningContentModels: [...DEEPSEEK_THINKING_MODELS, ...OPENCODE_FREE_DEEPSEEK_MODELS],
2513
+ // Same Zen gateway as opencode-free: Ox Alpha Free (1M multimodal stealth model)
2514
+ // and the DeepSeek vision preview (merges into deepseek-v4-flash later).
2515
+ modelContextWindows: {
2516
+ [OPENCODE_OX_ALPHA_FREE_MODEL]: OX_ALPHA_CONTEXT_WINDOW,
2517
+ [DEEPSEEK_VISION_PREVIEW_MODEL]: 1_048_576,
2518
+ },
2519
+ modelInputModalities: {
2520
+ [OPENCODE_OX_ALPHA_FREE_MODEL]: ["text", "image"],
2521
+ [DEEPSEEK_VISION_PREVIEW_MODEL]: ["text", "image"],
2522
+ },
2455
2523
  noVisionModels: [...OPENCODE_ZEN_TEXT_ONLY_MODELS, ...DEEPSEEK_THINKING_MODELS],
2456
2524
  },
2457
2525
  { id: "vercel-ai-gateway", label: "Vercel AI Gateway", baseUrl: "https://ai-gateway.vercel.sh/v1", adapter: "openai-chat", authKind: "key", dashboardUrl: "https://vercel.com/dashboard" },
@@ -2482,6 +2550,18 @@ export const PROVIDER_REGISTRY: readonly ProviderRegistryEntry[] = [
2482
2550
  modelReasoningEfforts: Object.fromEntries(OPENCODE_FREE_DEEPSEEK_MODELS.map(id => [id, deepseekThinkingEffortsFor(id)])),
2483
2551
  modelReasoningEffortMap: Object.fromEntries(OPENCODE_FREE_DEEPSEEK_MODELS.map(id => [id, deepseekReasoningMapFor(id)])),
2484
2552
  preserveReasoningContentModels: OPENCODE_FREE_DEEPSEEK_MODELS,
2553
+ // Ox Alpha Free (`x-preview-f-free`): the OpenRouter stealth model on Zen's
2554
+ // free tier — 1,048,576 context, text+image input. Deliberately NOT in the
2555
+ // text-only list below. The DeepSeek vision preview id is preemptive
2556
+ // metadata for when Zen starts serving it (merges into v4-flash later).
2557
+ modelContextWindows: {
2558
+ [OPENCODE_OX_ALPHA_FREE_MODEL]: OX_ALPHA_CONTEXT_WINDOW,
2559
+ [DEEPSEEK_VISION_PREVIEW_MODEL]: 1_048_576,
2560
+ },
2561
+ modelInputModalities: {
2562
+ [OPENCODE_OX_ALPHA_FREE_MODEL]: ["text", "image"],
2563
+ [DEEPSEEK_VISION_PREVIEW_MODEL]: ["text", "image"],
2564
+ },
2485
2565
  // Same Zen roster behind the same base URL, so it carries the same measured
2486
2566
  // text-only list rather than only its DeepSeek member (#1043).
2487
2567
  noVisionModels: OPENCODE_ZEN_TEXT_ONLY_MODELS,