From 5ac0dbeedda836f598190939a96ade5381b88e91 Mon Sep 17 00:00:00 2001 From: Thomas Byr Date: Fri, 28 Aug 2026 16:38:25 +0200 Subject: [PATCH] feat(models): add Qwen 3.8 Flash and GLM 5.3 Flash Synchronize the static model catalog with command-code@1.36.0, which adds Qwen/Qwen3.8-Flash (reasoning efforts low, medium, xhigh) and z-ai/glm-5.3-flash (low, high, max), the free minimax/minimax-m3-free model, and the glm-5.3-flash output limit, and drops the retired stealth/ox-alpha. --- README.md | 2 +- src/commandcode-catalog.ts | 17 +++++++++++------ tests/test-models.ts | 28 +++++++++++++++++++++++----- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 7256c32..a39510c 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,7 @@ The following environment variables are intended for tests, local mocks, and com ## Image input -The provider advertises image input only for models marked with the `image` input modality in the official Command Code CLI model catalog. The capability snapshot currently follows `command-code@1.32.2`; unknown models default to text-only until their upstream metadata is reviewed. A daily GitHub Actions job synchronizes the CLI version, image capabilities, reasoning flags, reasoning efforts, and model-specific output limits with the latest published CLI package and opens or updates a reviewable pull request when they change. Pricing remains manually reviewed because temporary promotions and long-context tiers require explicit review. +The provider advertises image input only for models marked with the `image` input modality in the official Command Code CLI model catalog. The capability snapshot currently follows `command-code@1.36.0`; unknown models default to text-only until their upstream metadata is reviewed. A daily GitHub Actions job synchronizes the CLI version, image capabilities, reasoning flags, reasoning efforts, and model-specific output limits with the latest published CLI package and opens or updates a reviewable pull request when they change. Pricing remains manually reviewed because temporary promotions and long-context tiers require explicit review. For vision-capable models, Pi's native provider adapters forward image blocks from user messages and tool results using the documented OpenAI or Anthropic message schema. Unknown and text-only models remain marked text-only in Pi. diff --git a/src/commandcode-catalog.ts b/src/commandcode-catalog.ts index 6840f5f..a136a8b 100644 --- a/src/commandcode-catalog.ts +++ b/src/commandcode-catalog.ts @@ -1,10 +1,10 @@ -export const COMMAND_CODE_CLI_VERSION = "1.32.2" +export const COMMAND_CODE_CLI_VERSION = "1.36.0" export type CommandCodeInputType = "text" | "image" export type CommandCodeReasoningEffort = "minimal" | "low" | "medium" | "high" | "xhigh" | "max" /** - * Generated from command-code@1.32.2 by `npm run sync:commandcode-catalog`. + * Generated from command-code@1.36.0 by `npm run sync:commandcode-catalog`. * Do not edit manually. */ export const MODEL_INPUT_MODALITIES: Readonly> = { @@ -31,6 +31,7 @@ export const MODEL_INPUT_MODALITIES: Readonly> = { @@ -76,6 +78,7 @@ export const MODEL_REASONING: Readonly> = { "meta/muse-spark-1.1": true, "meta/muse-spark-1.2": true, "meta/muse-spark-1.2-contributor": true, + "minimax/minimax-m3-free": true, "MiniMaxAI/MiniMax-M3": true, "moonshotai/Kimi-K2.7-Code": true, "moonshotai/Kimi-K2.7-Code-Highspeed": true, @@ -88,9 +91,9 @@ export const MODEL_REASONING: Readonly> = { "Qwen/Qwen3.7-Max": true, "Qwen/Qwen3.7-Plus": true, "Qwen/Qwen3.8-27B": true, + "Qwen/Qwen3.8-Flash": true, "Qwen/Qwen3.8-Max": true, "sakana/fugu-ultra": true, - "stealth/ox-alpha": true, "stepfun/Step-3.5-Flash": true, "stepfun/Step-3.7-Flash": true, "tencent/hy3-paid": true, @@ -98,6 +101,7 @@ export const MODEL_REASONING: Readonly> = { "thinkingmachines/inkling-small": true, "xai/grok-4.5": true, "xai/grok-4.6": true, + "z-ai/glm-5.3-flash": true, "zai-org/GLM-5.2": true, "zai-org/GLM-5.3": true, } @@ -125,11 +129,12 @@ export const MODEL_EFFORTS: Readonly> = { "poolside/laguna-s-2.1-free": 32_768, "Qwen/Qwen3.8-27B": 32_768, - "stealth/ox-alpha": 131_072, + "z-ai/glm-5.3-flash": 131_072, } diff --git a/tests/test-models.ts b/tests/test-models.ts index c40d321..5773221 100644 --- a/tests/test-models.ts +++ b/tests/test-models.ts @@ -112,13 +112,15 @@ describe("commandCodeModelsFromApiResponse()", () => { ]) assert.deepEqual(inputModalitiesForModel("Qwen/Qwen3.8-27B"), ["text", "image"]) assert.deepEqual(inputModalitiesForModel("google/gemini-3.7-flash"), ["text", "image"]) - assert.deepEqual(inputModalitiesForModel("stealth/ox-alpha"), ["text", "image"]) + assert.deepEqual(inputModalitiesForModel("Qwen/Qwen3.8-Flash"), ["text", "image"]) + assert.deepEqual(inputModalitiesForModel("z-ai/glm-5.3-flash"), ["text", "image"]) + assert.deepEqual(inputModalitiesForModel("minimax/minimax-m3-free"), ["text", "image"]) assert.deepEqual(inputModalitiesForModel("deepseek/deepseek-v4-pro"), ["text"]) assert.deepEqual(inputModalitiesForModel("zai-org/GLM-5.3"), ["text"]) assert.deepEqual(inputModalitiesForModel("unknown-new-model"), ["text"]) assert.equal(modelSupportsImageInput("gpt-5.6-luna"), true) assert.equal(modelSupportsImageInput("deepseek/deepseek-v4-flash-vision-exp"), true) - assert.equal(modelSupportsImageInput("stealth/ox-alpha"), true) + assert.equal(modelSupportsImageInput("z-ai/glm-5.3-flash"), true) assert.equal(modelSupportsImageInput("deepseek/deepseek-v4-pro"), false) assert.ok(Object.keys(MODEL_INPUT_MODALITIES).length > 0) for (const modalities of Object.values(MODEL_INPUT_MODALITIES)) { @@ -149,7 +151,7 @@ describe("commandCodeModelsFromApiResponse()", () => { }, }) assert.equal(models[2]?.reasoning, false) - assert.equal(Object.keys(MODEL_REASONING).length, 48) + assert.equal(Object.keys(MODEL_REASONING).length, 50) }) it("uses model-specific output limits from the CLI catalog", () => { @@ -157,7 +159,7 @@ describe("commandCodeModelsFromApiResponse()", () => { object: "list", data: [ { ...API_RESPONSE.data[0], id: "Qwen/Qwen3.8-27B", context_length: 262_144 }, - { ...API_RESPONSE.data[0], id: "stealth/ox-alpha", context_length: 1_048_576 }, + { ...API_RESPONSE.data[0], id: "z-ai/glm-5.3-flash", context_length: 1_048_576 }, { ...API_RESPONSE.data[0], id: "poolside/laguna-s-2.1-free", @@ -170,7 +172,7 @@ describe("commandCodeModelsFromApiResponse()", () => { models.map(({ id, maxTokens }) => ({ id, maxTokens })), [ { id: "Qwen/Qwen3.8-27B", maxTokens: 32_768 }, - { id: "stealth/ox-alpha", maxTokens: 131_072 }, + { id: "z-ai/glm-5.3-flash", maxTokens: 131_072 }, { id: "poolside/laguna-s-2.1-free", maxTokens: 32_768 }, ], ) @@ -217,6 +219,22 @@ describe("commandCodeModelsFromApiResponse()", () => { xhigh: null, max: "max", }) + assert.deepEqual(thinkingLevelMapForEfforts(MODEL_EFFORTS["Qwen/Qwen3.8-Flash"]), { + minimal: null, + low: "low", + medium: "medium", + high: null, + xhigh: "xhigh", + max: null, + }) + assert.deepEqual(thinkingLevelMapForEfforts(MODEL_EFFORTS["z-ai/glm-5.3-flash"]), { + minimal: null, + low: "low", + medium: null, + high: "high", + xhigh: null, + max: "max", + }) assert.deepEqual(thinkingMetadataForModel("new-model-without-metadata"), undefined) })