Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
cf762b1
Merge pull request #2551 from lidge-jun/dev
lidge-jun Aug 25, 2026
678517f
release: v2.33.0-preview.20260825
lidge-jun Aug 25, 2026
4a5a749
merge dev into preview for the v2.34.0-preview.20260827 release
lidge-jun Aug 27, 2026
62dfc6c
Merge pull request #2757 from lidge-jun/codex/promote-preview-2340
lidge-jun Aug 27, 2026
809a06b
release: v2.34.0-preview.20260827
lidge-jun Aug 27, 2026
6667e34
merge dev into preview for the v2.35.0-preview release
Aug 28, 2026
e0e3234
Merge pull request #2825 from lidge-jun/codex/promote-preview-2350
lidge-jun Aug 28, 2026
dc1feaf
release: v2.36.0-preview.20260829
lidge-jun Aug 28, 2026
9f577ad
Merge pull request #2831 from lidge-jun/codex/release-preview-23600829
lidge-jun Aug 28, 2026
0df2ae4
merge preview into the promotion branch for v2.36.0-preview.20260830
lidge-jun Aug 30, 2026
dc3dd5b
Merge pull request #3001 from lidge-jun/codex/promote-preview-23600830
lidge-jun Aug 30, 2026
1e6497b
merge dev into the promotion branch for v2.38.0-preview.20260831
lidge-jun Aug 31, 2026
f86c975
merge dev into the promotion branch for v2.38.0-preview.20260831 (pic…
lidge-jun Aug 31, 2026
93704b4
Merge pull request #3072 from lidge-jun/codex/promote-preview-23800831
lidge-jun Aug 31, 2026
230cb19
Merge remote-tracking branch 'origin/dev' into codex/promote-preview-…
lidge-jun Sep 1, 2026
75f3895
merge dev into preview for v2.39.0-preview.20260901
lidge-jun Sep 1, 2026
84b48d6
merge dev into preview for v2.40.0-preview.20260902
Sep 2, 2026
7fd141f
Merge pull request #3260 from lidge-jun/codex/promote-preview-24000902
lidge-jun Sep 2, 2026
3224168
fix(release): pass the bump job's permissions through the reusable-wo…
lidge-jun Sep 2, 2026
49812c9
Merge pull request #3264 from lidge-jun/codex/promote-preview-relfix
lidge-jun Sep 2, 2026
798611e
merge dev into preview for v2.41.0-preview.20260903
Sep 3, 2026
d7de528
Merge pull request #3341 from lidge-jun/codex/promote-preview-2410-v2
lidge-jun Sep 3, 2026
1017867
Merge commit '1f00ff52b' into codex/promote-preview-2410-v3
Sep 3, 2026
491ffcf
Merge pull request #3347 from lidge-jun/codex/promote-preview-2410-v3
lidge-jun Sep 3, 2026
f2ed110
Merge commit '78c630a93' into codex/promote-preview-2410-v4
Sep 3, 2026
b064b8f
merge dev into preview for v2.42.0-preview.20260903
Sep 3, 2026
c779ae7
Merge pull request #3356 from lidge-jun/codex/promote-preview-2410-v4
lidge-jun Sep 3, 2026
bd85a6c
Merge pull request #3426 from lidge-jun/codex/promote-preview-2420-ba…
lidge-jun Sep 4, 2026
3959e6d
chore(release): promote main v2.42.0 onto preview and open 2.43.0-pre…
lidge-jun Sep 4, 2026
0748cf5
Merge pull request #3435 from lidge-jun/codex/promote-preview-2430
lidge-jun Sep 4, 2026
5c2d634
chore(release): promote verified dev candidate to 2.43.0 preview
invalid-email-address Sep 5, 2026
53c784c
Merge pull request #3677 from lidge-jun/codex/promote-preview-243-01a…
lidge-jun Sep 5, 2026
06ec553
Merge pull request #3678 from lidge-jun/codex/promote-main-243-01a07240
lidge-jun Sep 5, 2026
e609ada
chore(release): promote validated 2.44.0 candidate to preview
invalid-email-address Sep 6, 2026
f58fab8
Merge pull request #3784 from lidge-jun/codex/release-244-preview-07c0
lidge-jun Sep 6, 2026
116c2ac
Merge commit '44ea9576e27c6be8be7f13a86e32bb349368c54d' into codex/re…
invalid-email-address Sep 6, 2026
07b48da
Merge pull request #3785 from lidge-jun/codex/release-244-main-07c0
lidge-jun Sep 6, 2026
8b031f8
chore(release): promote validated 2.45.0-preview.20260907 to preview …
invalid-email-address Sep 6, 2026
bcdf559
chore(release): promote validated 2.45.0 to main [skip ci]
invalid-email-address Sep 6, 2026
15d0e8b
chore(release): promote 2.45.0-preview.20260907 (#3814)
lidge-jun Sep 6, 2026
b0900e5
chore(release): promote 2.45.0 to main (#3813)
lidge-jun Sep 6, 2026
3970601
chore(release): prepare 2.46.0 stable promotion
invalid-email-address Sep 7, 2026
6ccfe7e
chore(release): prepare 2.46.0-preview.20260907 promotion
invalid-email-address Sep 7, 2026
bba6322
Merge pull request #3851 from lidge-jun/codex/release-246-main
lidge-jun Sep 7, 2026
9ef2aaf
Merge pull request #3852 from lidge-jun/codex/release-246-preview
lidge-jun Sep 7, 2026
3d53e5f
release: prepare 2.47.0 from audited regression candidate
invalid-email-address Sep 7, 2026
63fb304
release: prepare 2.47.0-preview.20260908 from audited regression cand…
invalid-email-address Sep 7, 2026
665ef82
Merge commit '48ab3e1e66cfa6e0c873de2fafa4540ac61d6c7d' into codex/re…
invalid-email-address Sep 7, 2026
eda8754
Merge commit '48ab3e1e66cfa6e0c873de2fafa4540ac61d6c7d' into codex/re…
invalid-email-address Sep 7, 2026
d2ec06b
Merge commit '57252193b' into codex/release-247-preview
invalid-email-address Sep 7, 2026
f9e3515
Merge commit '57252193b' into codex/release-247-main
invalid-email-address Sep 7, 2026
7ef13dd
release: promote 2.47.0-preview.20260908 to preview (#3928)
lidge-jun Sep 7, 2026
6f71931
release: promote 2.47.0 to main (#3929)
lidge-jun Sep 7, 2026
09d1f04
Merge commit 'd0737cff3' into codex/release-247-preview-final
invalid-email-address Sep 7, 2026
9a60256
Merge commit 'd0737cff3' into codex/release-247-main-final
invalid-email-address Sep 7, 2026
8ad5ca0
Merge commit 'f48c322c0' into codex/release-247-preview-final
invalid-email-address Sep 7, 2026
9e9b1d3
Merge commit 'f48c322c0' into codex/release-247-main-final
invalid-email-address Sep 7, 2026
80b1f52
Merge commit '0d7652ad1' into codex/release-247-preview-final
invalid-email-address Sep 7, 2026
947bae9
Merge commit '0d7652ad1' into codex/release-247-main-final
invalid-email-address Sep 7, 2026
3bef206
release: apply final roster correction to preview (#3932)
lidge-jun Sep 7, 2026
f7f890f
release: apply final roster correction to main (#3933)
lidge-jun Sep 7, 2026
a5aaed6
release: promote 2.48.0 to preview
invalid-email-address Sep 8, 2026
544ebee
release: promote 2.48.0 to main
invalid-email-address Sep 8, 2026
954b99d
release: set preview channel version 2.48.0-preview.20260908
invalid-email-address Sep 8, 2026
d24ff57
release: set main channel version 2.48.0
invalid-email-address Sep 8, 2026
c71474e
Merge pull request #4010 from lidge-jun/codex/release-248-preview
lidge-jun Sep 8, 2026
9a27e86
Merge pull request #4011 from lidge-jun/codex/release-248-main
lidge-jun Sep 8, 2026
ad18c27
release: promote verified 2.49.0 product tree to preview
lidge-jun Sep 9, 2026
62849df
release: promote verified 2.49.0 product tree to main
lidge-jun Sep 9, 2026
a433d39
Merge pull request #4116 from lidge-jun/codex/release-249-preview-01a…
lidge-jun Sep 9, 2026
2f3f736
Merge pull request #4117 from lidge-jun/codex/release-249-main-01a08498
lidge-jun Sep 9, 2026
3a3de88
release: promote verified 2.50.0 product tree to main
lidge-jun Sep 10, 2026
2d4d7a2
Merge pull request #4195 from lidge-jun/codex/release-250-main-01a08a81
lidge-jun Sep 10, 2026
cf456e8
release: promote verified 2.51.0 product tree to main
lidge-jun Sep 11, 2026
c1af925
release: promote verified 2.52.0-preview.20260911 product tree to pre…
lidge-jun Sep 11, 2026
c155cc7
Merge pull request #4271 from lidge-jun/codex/release-251-main
lidge-jun Sep 11, 2026
69207f1
Merge pull request #4273 from lidge-jun/codex/release-252-preview
lidge-jun Sep 11, 2026
8d7e24e
release: promote verified 2.52.0-preview.20260912 product tree to pre…
lidge-jun Sep 12, 2026
9d4e45a
Merge pull request #4399 from lidge-jun/codex/release-2520-preview-20…
lidge-jun Sep 12, 2026
3608119
release: promote verified 2.52.0-preview.20260912 product tree to pre…
lidge-jun Sep 12, 2026
adb39cb
Merge pull request #4406 from lidge-jun/codex/release-2520-preview-20…
lidge-jun Sep 12, 2026
95c4875
release: promote verified 2.52.0 product tree to main
lidge-jun Sep 12, 2026
4d37c35
Merge pull request #4407 from lidge-jun/codex/release-2520-main
lidge-jun Sep 12, 2026
b06e54c
release: promote verified 2.53.0-preview.20260913 product tree to pre…
lidge-jun Sep 13, 2026
90ff8aa
Merge pull request #4504 from lidge-jun/codex/release-2530-preview-20…
lidge-jun Sep 13, 2026
641b05a
release: promote verified 2.53.0 product tree to main
lidge-jun Sep 13, 2026
aa05b3e
Merge pull request #4507 from lidge-jun/codex/release-2530-main
lidge-jun Sep 13, 2026
8e532c5
release: promote verified 2.54.0 product tree to main
lidge-jun Sep 13, 2026
f8d5fd9
release: promote verified 2.54.0-preview.20260914 product tree to pre…
lidge-jun Sep 13, 2026
9f7397e
Merge pull request #4540 from lidge-jun/codex/release-2540-main
lidge-jun Sep 13, 2026
4d633cb
Merge pull request #4541 from lidge-jun/codex/release-2540-preview-20…
lidge-jun Sep 13, 2026
02044b2
chore(release): promote 2.55.0-preview.20260914 to preview
lidge-jun Sep 14, 2026
704857f
release: promote the verified 2.55.0-preview.20260914 product tree to…
lidge-jun Sep 14, 2026
7bdd1b2
Merge pull request #4617 from lidge-jun/codex/260914-preview-2550
lidge-jun Sep 14, 2026
58c15b8
chore(release): promote the verified 2.55.0 product tree to main
lidge-jun Sep 14, 2026
f978400
release: promote the verified 2.55.0 product tree to main
lidge-jun Sep 14, 2026
1cc89cf
Merge pull request #4619 from lidge-jun/codex/260914-main-2550
lidge-jun Sep 14, 2026
e4a8539
Merge pull request #4694 from lidge-jun/codex/260915-main-2560-v2
lidge-jun Sep 15, 2026
44de45d
Merge pull request #4829 from lidge-jun/release/2.57.0
lidge-jun Sep 16, 2026
6fe4cd0
Merge pull request #4915 from lidge-jun/release/2.58.0
lidge-jun Sep 17, 2026
134c92a
Merge pull request #5074 from lidge-jun/release/2.59.0
lidge-jun Sep 18, 2026
7c625fc
Merge pull request #5249 from lidge-jun/release/2.60.0
lidge-jun Sep 20, 2026
92ec6b3
fix(kimi): update Kimi coding registry for K2.8 (adjustable thinking,…
yuanyuan2026 Sep 21, 2026
7955627
Merge remote-tracking branch 'origin/dev' into feature-20260921-kimi-k28
yuanyuan2026 Sep 21, 2026
f208fb5
fix(kimi): retire k2.x ids from the coding picker and migrate saved c…
yuanyuan2026 Sep 21, 2026
84fa972
docs(kimi): document the K2.8 coding refresh in the providers guide
yuanyuan2026 Sep 21, 2026
608d7a2
fix(kimi): repair saved K2 coding metadata
lidge-jun Sep 21, 2026
f4f3914
Merge remote-tracking branch 'origin/dev' into codex/pr-5403-upgrade-…
lidge-jun Sep 21, 2026
1bce6f6
fix(kimi): drop the stale no-reasoning classification even when only …
yuanyuan2026 Sep 21, 2026
922f98d
Merge remote-tracking branch 'origin/dev' into codex/pr-5403-upgrade-…
lidge-jun Sep 21, 2026
4a3044e
fix(kimi): preserve explicit reasoning overrides
lidge-jun Sep 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/guides/providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ ocx logout <provider>
| --- | --- | --- | --- |
| `xai` | `openai-chat` | `https://cli-chat-proxy.grok.com/v1` | OAuth uses the separate Grok CLI subscription gateway. The API-key override uses `https://api.x.ai/v1` and may inject Priority Processing. Live-first Grok catalog; `grok-4.5` is the fallback default. |
| `anthropic` | `anthropic` | `https://api.anthropic.com` | Claude models; live model list fetched from `/v1/models`. |
| `kimi` | `openai-chat` | `https://api.kimi.com/coding/v1` | Kimi K2.7/K2.6/K2.5 coding models. |
| `kimi` | `openai-chat` | `https://api.kimi.com/coding/v1` | Kimi Code Plan coding models. Defaults to the stable `kimi-for-coding` alias (currently K2.8 Preview): 1M-token context window, adjustable `low`/`high`/`max` thinking (default `max`), text + image input. Retired `kimi-k2.x` selections are migrated to the alias on upgrade. |
| `nous` | `openai-chat` | `https://inference-api.nousresearch.com/v1` | Nous Research subscription gateway (same backend Hermes Agent uses). Device-grant login against `portal.nousresearch.com`; the access token is the per-request inference JWT. Mixed paid + `:free` model catalog (`tencent/hy3:free`, `stepfun/step-3.7-flash:free`, ...) discovered live from the signed-in account. Refresh tokens are single-use and rotated on every refresh. |
| `kiro` | `kiro` | `https://runtime.us-east-1.kiro.dev` | Initial login imports the installed, signed-in `kiro-cli` session (on Unix, install with `curl -fsSL https://cli.kiro.dev/install` &#124; `bash`; on Windows PowerShell, use `irm 'https://cli.kiro.dev/install.ps1'` &#124; `iex`; then run `kiro-cli login`). **Add account** logs `kiro-cli` out, starts a fresh browser login that switches the account used by `kiro-cli`, and stores account-scoped profile metadata. Existing OpenCodex accounts are preserved, and cancellation or failure restores the previous `kiro-cli` session. |
| `google-antigravity` | `google` | `https://daily-cloudcode-pa.googleapis.com` | Google OAuth over the Cloud Code Assist wire. Live discovery uses CCA's authenticated `v1internal:fetchAvailableModels` endpoint and publishes the agent models available to the signed-in account; the maintained catalog remains the fallback. |
Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/zh-cn/guides/providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ ocx logout <provider>
| --- | --- | --- | --- |
| `xai` | `openai-chat` | `https://cli-chat-proxy.grok.com/v1` | OAuth 使用独立的 Grok CLI 订阅网关。API 密钥覆盖模式使用 `https://api.x.ai/v1`,并可能注入 Priority Processing。优先使用实时 Grok 目录;回退默认模型为 `grok-4.5`。 |
| `anthropic` | `anthropic` | `https://api.anthropic.com` | Claude 模型;实时模型列表从 `/v1/models` 获取。 |
| `kimi` | `openai-chat` | `https://api.kimi.com/coding/v1` | Kimi K2.7/K2.6/K2.5 编程模型。 |
| `kimi` | `openai-chat` | `https://api.kimi.com/coding/v1` | Kimi Code Plan 编程模型。默认使用稳定的 `kimi-for-coding` 别名(当前指向 K2.8 Preview):100 万 token 上下文、可调 `low`/`high`/`max` 思考档(默认 `max`)、支持文本 + 图片输入。已下架的 `kimi-k2.x` 选择会在升级时自动迁移到该别名。 |
| `nous` | `openai-chat` | `https://inference-api.nousresearch.com/v1` | Nous Research 订阅网关(与 Hermes Agent 使用同一后端)。通过设备授权登录 `portal.nousresearch.com`;access 令牌是每个请求的 inference JWT。付费 + `:free` 模型混合目录(`tencent/hy3:free`、`stepfun/step-3.7-flash:free` 等)会从已登录账户实时发现。Refresh 令牌是单次使用,每次刷新都会轮换。 |
| `kiro` | `kiro` | `https://runtime.us-east-1.kiro.dev` | 首次登录会导入已安装并已登录的 Kiro CLI 会话(Unix 使用 `curl -fsSL https://cli.kiro.dev/install` &#124; `bash`;Windows PowerShell 使用 `irm 'https://cli.kiro.dev/install.ps1'` &#124; `iex`;然后运行 `kiro-cli login`)。**添加账户**会先退出 `kiro-cli`,再启动新的浏览器登录,从而切换 `kiro-cli` 自身使用的账户,并保存账户范围的配置文件元数据。现有 OpenCodex 账户会保留;如果取消或失败,则恢复之前的 `kiro-cli` 会话。 |
| `google-antigravity` | `google` | `https://daily-cloudcode-pa.googleapis.com` | 通过 Cloud Code Assist 协议使用 Google OAuth。实时发现调用已认证的 CCA `v1internal:fetchAvailableModels` 端点,并仅发布当前登录账户可用的 agent 模型;维护中的目录仍作为回退。 |
Expand Down
112 changes: 111 additions & 1 deletion src/providers/model-rename-migration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,52 @@ export interface ModelRename {
* but lose the reasoning picker entirely.
*/
dropReasoningEffortMap?: boolean;
/**
* Remove both the retired id and its replacement from `noReasoningModels`.
*
* Use this only when the rename also marks a capability change: carrying the old
* no-reasoning classification onto a newly adjustable alias would keep the picker
* disabled after the model id itself was repaired.
*/
dropNoReasoningModels?: boolean;
/** Refresh exact registry defaults already saved under the replacement id. */
targetSeedRefresh?: {
contextWindow?: { from: number; to: number };
reasoning?: {
fromEfforts: readonly string[];
toEfforts: readonly string[];
defaultEffort: string;
effortMap: Readonly<Record<string, string>>;
};
};
}

const KIMI_K28_ALIAS = "kimi-for-coding";
const KIMI_RETIRED_CODING_IDS = [
"kimi-k2.7-code",
"kimi-k2.7-code-highspeed",
"kimi-k2.6",
"kimi-k2.5",
] as const;
const KIMI_K28_TARGET_SEED_REFRESH: NonNullable<ModelRename["targetSeedRefresh"]> = {
contextWindow: { from: 262_144, to: 1_048_576 },
reasoning: {
fromEfforts: [],
toEfforts: ["low", "high", "max"],
defaultEffort: "max",
effortMap: { none: "none", low: "low", medium: "high", high: "high", xhigh: "max", max: "max" },
},
};

function kimiCodingRenames(provider: "kimi" | "kimi-code", endpoint: string): ModelRename[] {
return KIMI_RETIRED_CODING_IDS.map(from => ({
provider,
from,
to: KIMI_K28_ALIAS,
reason: `Moonshot retired the k2.x coding ids from the ${endpoint}; kimi-for-coding is the stable alias the endpoint still serves`,
dropNoReasoningModels: true,
targetSeedRefresh: KIMI_K28_TARGET_SEED_REFRESH,
}));
}

/**
Expand All @@ -65,6 +111,14 @@ export const MODEL_RENAMES: readonly ModelRename[] = [
to: "qwen3.8-max",
reason: "Alibaba shipped Qwen3.8-Max as stable and documents the preview endpoint as liable to be taken offline once preview concludes",
},
// Kimi coding renames. Moonshot retired the k2.x ids from the subscription/coding
// endpoint when K2.8 Preview shipped (live /coding/v1/models lists only
// kimi-for-coding[-highspeed], k3, k3-256k); kimi-for-coding is the stable alias the
// endpoint still serves and currently routes to K2.8 Preview. The registry picker no
// longer seeds the retired ids, so a saved defaultModel naming one is a dead selection
// rather than a merely outdated one.
...kimiCodingRenames("kimi", "subscription endpoint after K2.8 Preview shipped"),
...kimiCodingRenames("kimi-code", "coding endpoint after K2.8 Preview shipped"),
// Antigravity Flash generations. Google takes the previous Flash model off Cloud Code
// Assist almost immediately when the next ships, so a saved 3.6 (or older 3.5) id is a
// dead selection rather than a merely outdated one. Routing already redirects these ids
Expand Down Expand Up @@ -133,6 +187,18 @@ function renameInList(value: unknown, from: string, to: string): string[] | null
return next;
}

function dropRenamedIdsFromList(
value: unknown,
from: string,
to: string,
dropStaleTarget: boolean,
): string[] | null {
if (!Array.isArray(value)) return null;
const hasRetired = value.includes(from);
if (!hasRetired && !(dropStaleTarget && value.includes(to))) return null;
return value.filter(entry => typeof entry === "string" && entry !== from && entry !== to);
}

function renameInRecord(value: unknown, from: string, to: string): Record<string, unknown> | null {
if (!value || typeof value !== "object" || Array.isArray(value)) return null;
const record = value as Record<string, unknown>;
Expand Down Expand Up @@ -160,6 +226,42 @@ function dropFromRecord(value: unknown, from: string): Record<string, unknown> |
return next;
}

function sameStringArray(value: unknown, expected: readonly string[]): boolean {
return Array.isArray(value)
&& value.length === expected.length
&& value.every((entry, index) => entry === expected[index]);
}

function targetReasoningMatchesStaleSeed(row: Record<string, unknown>, rename: ModelRename): boolean {
const reasoning = rename.targetSeedRefresh?.reasoning;
const efforts = row.modelReasoningEfforts as Record<string, unknown> | undefined;
return !!reasoning && !!efforts && sameStringArray(efforts[rename.to], reasoning.fromEfforts);
}

/** Refresh only exact defaults emitted by the previous registry; preserve user overrides. */
function refreshTargetSeed(row: Record<string, unknown>, rename: ModelRename): boolean {
const refresh = rename.targetSeedRefresh;
if (!refresh) return false;
let changed = false;

const windows = row.modelContextWindows as Record<string, unknown> | undefined;
if (windows && refresh.contextWindow && windows[rename.to] === refresh.contextWindow.from) {
windows[rename.to] = refresh.contextWindow.to;
changed = true;
}

const reasoning = refresh.reasoning;
const efforts = row.modelReasoningEfforts as Record<string, unknown> | undefined;
if (!reasoning || !efforts || !sameStringArray(efforts[rename.to], reasoning.fromEfforts)) return changed;
efforts[rename.to] = [...reasoning.toEfforts];

const defaults = (row.modelDefaultReasoningEfforts ??= {}) as Record<string, unknown>;
if (!(rename.to in defaults)) defaults[rename.to] = reasoning.defaultEffort;
const maps = (row.modelReasoningEffortMap ??= {}) as Record<string, unknown>;
if (!(rename.to in maps)) maps[rename.to] = { ...reasoning.effortMap };
return true;
}

/**
* `provider/model` rows in the top-level `disabledModels` list.
*
Expand Down Expand Up @@ -281,7 +383,14 @@ export function projectModelRenames(
let touched = false;
for (const field of MODEL_ID_LISTS) {
if (isRegistryResidue(seed, field, row[field], rename)) continue;
const next = renameInList(row[field], rename.from, rename.to);
const next = rename.dropNoReasoningModels && field === "noReasoningModels"
? dropRenamedIdsFromList(
row[field],
rename.from,
rename.to,
targetReasoningMatchesStaleSeed(row, rename),
)
: renameInList(row[field], rename.from, rename.to);
if (!next) continue;
row[field] = next;
touched = true;
Expand All @@ -300,6 +409,7 @@ export function projectModelRenames(
touched = true;
}
if (renameDisabledModels(config, rename)) touched = true;
if (touched && refreshTargetSeed(row, rename)) touched = true;

if (touched) {
changed = true;
Expand Down
13 changes: 9 additions & 4 deletions src/providers/registry/entries-core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ import {
deepseekThinkingEffortsFor,
deepseekReasoningMapFor,
KIMI_K3_STANDARD_CONTEXT_WINDOW,
KIMI_CODING_MODELS,
KIMI_CODING_LIVE_MODELS,
KIMI_THINKING_MODELS,
KIMI_CODING_NO_REASONING_MODELS,
KIMI_CODING_K3_REASONING_EFFORTS,
Expand Down Expand Up @@ -444,8 +444,14 @@ export const PROVIDER_REGISTRY_CORE: readonly ProviderRegistryEntry[] = [
oauthId: "kimi",
jawcodeBundle: "moonshot",
note: "Log in with your Kimi account",
models: KIMI_CODING_MODELS,
defaultModel: "kimi-k2.7-code",
// 260921: the retired k2.x ids stay out of the picker — live /coding/v1/models lists
// only kimi-for-coding[-highspeed], k3, k3-256k. Saved rows still naming kimi-k2.7-code
// are repaired by MODEL_RENAMES in model-rename-migration.ts.
models: KIMI_CODING_LIVE_MODELS,
// 260921: kimi-k2.7-code was retired from the subscription endpoint (live /models lists
// only kimi-for-coding[-highspeed], k3, k3-256k). The kimi-for-coding alias is the
// stable ID and currently routes to K2.8 Preview.
defaultModel: "kimi-for-coding",
modelContextWindows: KIMI_CODING_MODEL_CONTEXT_WINDOWS,
modelInputModalities: KIMI_CODING_MODEL_INPUT_MODALITIES,
// K3 accepts low/high/max; Codex aliases are normalized by the model-scoped wire map.
Expand Down Expand Up @@ -1258,4 +1264,3 @@ export const PROVIDER_REGISTRY_CORE: readonly ProviderRegistryEntry[] = [
note: "Serverless Inference subscription API. Live discovery exposes only kimi-k2-instruct because Vultr documents it as the sole tool-calling model.",
},
];

10 changes: 7 additions & 3 deletions src/providers/registry/entries-extended.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@ import {
VOLCENGINE_PLAN_TEXT_ONLY_MODELS,
ALIBABA_INTL_TOKEN_PLAN_INPUT_MODALITIES,
KIMI_API_MODELS,
KIMI_CODING_MODELS,
KIMI_THINKING_MODELS,
KIMI_CODING_NO_REASONING_MODELS,
KIMI_API_NO_REASONING_MODELS,
KIMI_CODING_LIVE_MODELS,
KIMI_CODING_REASONING_EFFORTS,
KIMI_CODING_DEFAULT_REASONING_EFFORTS,
KIMI_CODING_REASONING_EFFORT_MAPS,
Expand Down Expand Up @@ -1013,13 +1013,17 @@ export const PROVIDER_REGISTRY_EXTENDED: readonly ProviderRegistryEntry[] = [
},
{
id: "kimi-code", label: "Kimi (coding)", baseUrl: "https://api.kimi.com/coding/v1", adapter: "openai-chat", authKind: "key",
dashboardUrl: "https://platform.moonshot.cn/console/api-keys", defaultModel: "kimi-k2.7-code",
// 260921: kimi-k2.7-code was retired from the coding endpoint; the kimi-for-coding alias
// is the stable ID and currently routes to K2.8 Preview (same as the OAuth preset).
dashboardUrl: "https://platform.moonshot.cn/console/api-keys", defaultModel: "kimi-for-coding",
modelSuffixBracketStrip: true,
// API-key form of the same Kimi Code Plan transport; keep cache affinity identical to OAuth.
promptCacheKey: true,
// Keep Responses tool-result adjacency aligned with the OAuth preset (#4726).
requiresAdjacentResponsesToolResults: true,
models: KIMI_CODING_MODELS,
// 260921: same live-id picker as the OAuth preset — the retired k2.x ids are repaired
// in saved configs by MODEL_RENAMES, not offered on fresh installs.
models: KIMI_CODING_LIVE_MODELS,
modelContextWindows: KIMI_CODING_MODEL_CONTEXT_WINDOWS,
modelInputModalities: KIMI_CODING_MODEL_INPUT_MODALITIES,
noReasoningModels: KIMI_CODING_NO_REASONING_MODELS,
Expand Down
35 changes: 25 additions & 10 deletions src/providers/registry/model-seeds.ts
Original file line number Diff line number Diff line change
Expand Up @@ -642,11 +642,26 @@ export const ALIBABA_TOKEN_PLAN_PRESERVE_REASONING = [
export const KIMI_K3_STANDARD_CONTEXT_WINDOW = 262_144;
export const KIMI_K3_1M_CONTEXT_WINDOW = 1_048_576;
export const KIMI_CODING_K3_MODELS = ["k3", "k3[1m]"];
// 260921 Kimi K2.8: `kimi-for-coding` is the stable subscription alias Moonshot re-points
// at each coding release. Live GET /coding/v1/models lists only kimi-for-coding[-highspeed],
// k3, k3-256k — the k2.x ids are retired from the subscription endpoint. Since K2.8 Preview
// the alias serves an adjustable low/high/max thinking ladder (same wire map as k3) and a
// 1M context ceiling. Verified live 260921: 350K-token request accepted; upstream rejects
// with "model token limit: 1048576" beyond that.
// Evidence: https://www.kimi.com/code/docs/en/kimi-code/models.html
export const KIMI_CODING_K28_MODELS = ["kimi-for-coding"];
Comment thread
yuanyuanlove marked this conversation as resolved.
export const KIMI_CODING_LIVE_MODELS = [...KIMI_CODING_K3_MODELS, ...KIMI_CODING_K28_MODELS];
export const KIMI_CODING_ADJUSTABLE_THINKING_MODELS = [...KIMI_CODING_LIVE_MODELS];
export const KIMI_LEGACY_API_MODELS = ["kimi-k2.7-code", "kimi-k2.7-code-highspeed", "kimi-k2.6", "kimi-k2.5"];
export const KIMI_API_MODELS = ["kimi-k3", ...KIMI_LEGACY_API_MODELS];
export const KIMI_CODING_MODELS = [...KIMI_CODING_K3_MODELS, ...KIMI_LEGACY_API_MODELS, "kimi-for-coding"];
export const KIMI_THINKING_MODELS = KIMI_CODING_MODELS;
export const KIMI_CODING_NO_REASONING_MODELS = KIMI_CODING_MODELS.filter(id => !KIMI_CODING_K3_MODELS.includes(id));
// Every kimi coding preset record - picker, context windows, locked-parameter lists -
// derives from the live ids only. seeding a retired id in a metadata list would re-arm
// the model-rename migration on every boot (#5066): the list holds the retired id but
// not the live alias, so the residue guard cannot skip it. The retired ids survive only
// in KIMI_LEGACY_API_MODELS (moonshot platform API records); model-rename-migration
// repairs saved rows still naming them.
export const KIMI_THINKING_MODELS = KIMI_CODING_LIVE_MODELS;
export const KIMI_CODING_NO_REASONING_MODELS = KIMI_CODING_LIVE_MODELS.filter(id => !KIMI_CODING_ADJUSTABLE_THINKING_MODELS.includes(id));
export const KIMI_API_NO_REASONING_MODELS = KIMI_API_MODELS.filter(id => id !== "kimi-k3");
export const KIMI_CODING_K3_REASONING_EFFORTS = ["low", "high", "max"];
export const KIMI_CODING_K3_REASONING_EFFORT_MAP: Record<string, string> = {
Expand All @@ -658,19 +673,19 @@ export const KIMI_CODING_K3_REASONING_EFFORT_MAP: Record<string, string> = {
max: "max",
};
export const KIMI_CODING_REASONING_EFFORTS = Object.fromEntries(
KIMI_CODING_MODELS.map(id => [id, KIMI_CODING_K3_MODELS.includes(id) ? KIMI_CODING_K3_REASONING_EFFORTS : []]),
KIMI_CODING_LIVE_MODELS.map(id => [id, KIMI_CODING_ADJUSTABLE_THINKING_MODELS.includes(id) ? KIMI_CODING_K3_REASONING_EFFORTS : []]),
);
export const KIMI_CODING_DEFAULT_REASONING_EFFORTS = Object.fromEntries(
KIMI_CODING_K3_MODELS.map(id => [id, "max"]),
KIMI_CODING_ADJUSTABLE_THINKING_MODELS.map(id => [id, "max"]),
);
export const KIMI_CODING_REASONING_EFFORT_MAPS = Object.fromEntries(
KIMI_CODING_K3_MODELS.map(id => [id, KIMI_CODING_K3_REASONING_EFFORT_MAP]),
KIMI_CODING_ADJUSTABLE_THINKING_MODELS.map(id => [id, KIMI_CODING_K3_REASONING_EFFORT_MAP]),
);
export const KIMI_API_REASONING_EFFORTS = Object.fromEntries(
KIMI_API_MODELS.map(id => [id, id === "kimi-k3" ? ["max"] : []]),
);
export const KIMI_LOCKED_PARAMETER_MODELS = KIMI_CODING_MODELS;
export const KIMI_AUTO_TOOL_CHOICE_ONLY_MODELS = ["kimi-k2.7-code", "kimi-k2.7-code-highspeed", "kimi-for-coding"];
export const KIMI_LOCKED_PARAMETER_MODELS = KIMI_CODING_LIVE_MODELS;
export const KIMI_AUTO_TOOL_CHOICE_ONLY_MODELS = ["kimi-for-coding"];
export const KIMI_API_MODEL_CONTEXT_WINDOWS: Record<string, number> = Object.fromEntries(
KIMI_API_MODELS.map(id => [id, id === "kimi-k3" ? KIMI_K3_1M_CONTEXT_WINDOW : 262_144]),
);
Expand Down Expand Up @@ -758,10 +773,10 @@ export const NVIDIA_NIM_NO_VISION_MODELS = [
"poolside/laguna-xs-2.1", "z-ai/glm-5.3", "z-ai/glm-5.2",
];
export const KIMI_CODING_MODEL_CONTEXT_WINDOWS: Record<string, number> = Object.fromEntries(
KIMI_CODING_MODELS.map(id => [id, id === "k3[1m]" ? KIMI_K3_1M_CONTEXT_WINDOW : KIMI_K3_STANDARD_CONTEXT_WINDOW]),
KIMI_CODING_LIVE_MODELS.map(id => [id, (id === "k3[1m]" || KIMI_CODING_K28_MODELS.includes(id)) ? KIMI_K3_1M_CONTEXT_WINDOW : KIMI_K3_STANDARD_CONTEXT_WINDOW]),
);
export const KIMI_CODING_MODEL_INPUT_MODALITIES = Object.fromEntries(
KIMI_CODING_K3_MODELS.map(id => [id, ["text", "image"]]),
KIMI_CODING_ADJUSTABLE_THINKING_MODELS.map(id => [id, ["text", "image"]]),
);
export const NEURALWATT_REASONING_HISTORY_MODELS = [
"glm-5.3", "glm-5.3-short", "glm-5.3-flash",
Expand Down
Loading
Loading