@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.
- package/README.md +4 -4
- package/gui/dist/assets/{index-BNESwCzn.js → index-eBA05kYB.js} +1 -1
- package/gui/dist/index.html +1 -1
- package/package.json +3 -3
- package/src/adapters/cursor/discovery.ts +22 -0
- package/src/adapters/cursor/images.ts +704 -0
- package/src/adapters/cursor/live-transport.ts +26 -5
- package/src/adapters/cursor/protobuf-request.ts +35 -5
- package/src/adapters/cursor/request-builder.ts +29 -14
- package/src/adapters/cursor/types.ts +8 -1
- package/src/codex/features.ts +58 -0
- package/src/generated/compatibility-version.json +17 -13
- package/src/lib/bun-stream-caps.ts +7 -4
- package/src/providers/command-code-efforts.ts +7 -0
- package/src/providers/quota.ts +98 -25
- package/src/providers/registry.ts +90 -10
|
@@ -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
|
|
998
|
-
//
|
|
999
|
-
//
|
|
1000
|
-
|
|
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: {
|
|
1296
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|