From af847212669438754f3bf3141182d33e398ff4fd Mon Sep 17 00:00:00 2001 From: Daniil Koryto Date: Wed, 29 Apr 2026 10:47:46 +0300 Subject: [PATCH] feat: add Kimi K2.6 model --- AGENTS.md | 5 +++-- CHANGELOG.md | 1 + README.md | 1 + src/constants/models.ts | 9 ++++++++- src/install/prompts.ts | 2 +- test/merge-settings.test.ts | 2 +- test/models.test.ts | 24 ++++++++++++++++++++++++ 7 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 test/models.test.ts diff --git a/AGENTS.md b/AGENTS.md index 09080e4..ede5b06 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -74,8 +74,9 @@ These decisions are part of the repo contract. Changing them is not a small refa Current honest limitation: -- the curated registry currently contains exactly one supported model: - `qwen3-235b` -> `qwen/qwen3-235b-a22b-instruct-2507-fp8` +- the curated registry currently contains these supported models: + - `qwen3-235b` -> `qwen/qwen3-235b-a22b-instruct-2507-fp8` + - `kimi-k2.6` -> `moonshotai/Kimi-K2.6` (default) ## What the Repo Does and Does Not Do diff --git a/CHANGELOG.md b/CHANGELOG.md index 0802d77..5962e1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [Unreleased] +- Added `moonshotai/Kimi-K2.6` to the curated GonkaGate model registry under the `kimi-k2.6` model key and made it the default model. - Raised the minimum supported Node.js runtime for this package to Node 22.14+ so it matches current OpenClaw install support expectations. - CI and publish workflows now both run on Node 22.14.0, and runtime documentation no longer advertises Node 18 support. - Upgraded `@inquirer/prompts`, `commander`, and `write-file-atomic` to current releases that are now appropriate for a Node 22.14+ baseline. diff --git a/README.md b/README.md index 4e5cd0a..62d92eb 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ This command checks: Current curated registry in this package: - `qwen3-235b` -> `qwen/qwen3-235b-a22b-instruct-2507-fp8` +- `kimi-k2.6` -> `moonshotai/Kimi-K2.6` (default) ## What It Does diff --git a/src/constants/models.ts b/src/constants/models.ts index 8676b89..6d78d8d 100644 --- a/src/constants/models.ts +++ b/src/constants/models.ts @@ -13,7 +13,14 @@ const curatedModelRegistry = [ key: "qwen3-235b", displayName: "Qwen 3 235B Instruct", modelId: "qwen/qwen3-235b-a22b-instruct-2507-fp8", - description: "Best default for complex reasoning on GonkaGate.", + description: "Qwen reasoning model on GonkaGate.", + isDefault: false + }, + { + key: "kimi-k2.6", + displayName: "Kimi K2.6", + modelId: "moonshotai/Kimi-K2.6", + description: "Recommended default for long-horizon coding and agentic workflows on GonkaGate.", isDefault: true } ] as const satisfies readonly SupportedModelDefinition[]; diff --git a/src/install/prompts.ts b/src/install/prompts.ts index d5a508e..950f30c 100644 --- a/src/install/prompts.ts +++ b/src/install/prompts.ts @@ -52,7 +52,7 @@ export function buildModelPromptConfig( value: model.key, name: model.displayName, short: model.key, - description: model.description ? `${model.description} Model ID: ${model.modelId}` : `Model ID: ${model.modelId}` + description: `${model.description ? `${model.description} ` : ""}Model ID: ${model.modelId}` })), pageSize: Math.min(models.length, 8), loop: false, diff --git a/test/merge-settings.test.ts b/test/merge-settings.test.ts index f31b906..2a4e889 100644 --- a/test/merge-settings.test.ts +++ b/test/merge-settings.test.ts @@ -158,7 +158,7 @@ test("mergeSettingsWithGonkaGate preserves unrelated agents.defaults.model keys" assert.deepEqual((merged.agents as Record).defaults, { model: { fallback: "openai/legacy-model", - primary: "openai/qwen/qwen3-235b-a22b-instruct-2507-fp8", + primary: toPrimaryModelRef(DEFAULT_MODEL), temperature: 0.2 } }); diff --git a/test/models.test.ts b/test/models.test.ts new file mode 100644 index 0000000..e005605 --- /dev/null +++ b/test/models.test.ts @@ -0,0 +1,24 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { + DEFAULT_MODEL, + DEFAULT_MODEL_KEY, + getSupportedModelByKey, + requireSupportedModel, + SUPPORTED_MODEL_KEYS, + toPrimaryModelRef +} from "../src/constants/models.js"; + +test("curated registry includes Kimi K2.6 as the default model", () => { + assert.equal(DEFAULT_MODEL_KEY, "kimi-k2.6"); + assert.equal(DEFAULT_MODEL.modelId, "moonshotai/Kimi-K2.6"); + assert.deepEqual(SUPPORTED_MODEL_KEYS, ["qwen3-235b", "kimi-k2.6"]); + + const kimi = requireSupportedModel("kimi-k2.6"); + + assert.equal(kimi.displayName, "Kimi K2.6"); + assert.equal(kimi.modelId, "moonshotai/Kimi-K2.6"); + assert.equal(toPrimaryModelRef(kimi), "openai/moonshotai/Kimi-K2.6"); + assert.equal(DEFAULT_MODEL, kimi); + assert.equal(getSupportedModelByKey("missing-model"), undefined); +});