From 0cbb3fce18be2be5f736ea2c0460c68304727414 Mon Sep 17 00:00:00 2001 From: zverev Date: Sat, 17 Oct 2026 23:54:25 +0300 Subject: [PATCH 1/6] chore(models): refresh catalog to 1.84.0 and price Beam Bump the static capability snapshot to command-code@1.84.0, which publishes no model metadata changes, and add reviewed display pricing for the new free reflection/beam:free model. Beam is free only while capacity lasts, with no published expiry, and it has no CLI capability metadata yet, so it keeps the conservative text-only and non-reasoning defaults. Re-verified display prices against the official pricing page on 2026-10-17; the snapshot now covers all 93 advertised models. --- CHANGELOG.md | 1 + README.md | 2 +- src/commandcode-catalog.ts | 4 ++-- src/pricing.ts | 4 +++- tests/fixtures/commandcode-model-ids.json | 3 ++- tests/fixtures/commandcode-pricing.json | 3 ++- tests/test-pricing.ts | 5 +++-- 7 files changed, 14 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ffbf98..f10cdd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Unreleased - Refresh the static capability snapshot to `command-code@1.83.0`: add image input, reasoning, and selectable `low`/`medium`/`high` efforts for `meta/muse-spark-open` and `nvidia/nemotron-3.5-super-vl`; publish reasoning for the free `stealth/cat-jam:free` preview with `low`/`medium`/`high`/`xhigh`/`max` efforts and a 131,072-token output limit. Retire `inclusionai/ling-3.0-flash-sante:free` and drop its reasoning flag, output limit, and display-price entry now that the API no longer advertises it. No prices changed; the reviewed snapshot now covers all 92 advertised models. +- Refresh the static capability snapshot to `command-code@1.84.0`, which publishes no model metadata changes, and add reviewed display pricing for the new free `reflection/beam:free` model, verified against the official pricing page on 2026-10-17. Beam is free only while capacity lasts, with no published expiry, and it has no CLI capability metadata yet, so it keeps the conservative text-only and non-reasoning defaults. The reviewed snapshot now covers all 93 advertised models. ## 0.7.8 - 2026-10-15 diff --git a/README.md b/README.md index 34a32da..678297f 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,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.83.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, also dropping manual effort overrides that upstream has published itself, 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.84.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, also dropping manual effort overrides that upstream has published itself, 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 8c5e08f..635ad15 100644 --- a/src/commandcode-catalog.ts +++ b/src/commandcode-catalog.ts @@ -1,4 +1,4 @@ -export const COMMAND_CODE_CLI_VERSION = "1.83.0" +export const COMMAND_CODE_CLI_VERSION = "1.84.0" export type CommandCodeInputType = "text" | "image" export type CommandCodeReasoningEffort = @@ -11,7 +11,7 @@ export type CommandCodeReasoningEffort = | "max" /** - * Generated from command-code@1.83.0 by `npm run sync:commandcode-catalog`. + * Generated from command-code@1.84.0 by `npm run sync:commandcode-catalog`. * Do not edit manually. */ export const MODEL_INPUT_MODALITIES: Readonly> = { diff --git a/src/pricing.ts b/src/pricing.ts index 24c9f0b..7ac26cd 100644 --- a/src/pricing.ts +++ b/src/pricing.ts @@ -20,7 +20,7 @@ export interface TemporaryPricing { } export const PRICING_SOURCE_URL = "https://commandcode.ai/docs/resources/pricing-limits" -export const PRICING_LAST_VERIFIED = "2026-10-15" +export const PRICING_LAST_VERIFIED = "2026-10-17" export const ZERO_MODEL_COST: CommandCodeModelCost = { input: 0, @@ -43,6 +43,8 @@ export const MODEL_COSTS: Readonly> = { "stealth/cat-jam:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, "poolside/laguna-s-2.1-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, "stealth/glyph-cluster:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, + // Free while capacity lasts; no fixed expiry is published. + "reflection/beam:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, // Open and open-weight models "inclusionai/ling-3.1-flash": { input: 0.3, output: 0.9, cacheRead: 0.06, cacheWrite: 0 }, diff --git a/tests/fixtures/commandcode-model-ids.json b/tests/fixtures/commandcode-model-ids.json index 0f9b907..c9d4ce5 100644 --- a/tests/fixtures/commandcode-model-ids.json +++ b/tests/fixtures/commandcode-model-ids.json @@ -1,5 +1,5 @@ { - "fetchedAt": "2026-10-16T17:58:44.197Z", + "fetchedAt": "2026-10-17T20:46:24.595Z", "source": "https://api.commandcode.ai/provider/v1/models", "modelIds": [ "claude-sonnet-5-5", @@ -81,6 +81,7 @@ "thinkingmachines/inkling-small", "stealth/glyph-cluster:free", "stealth/cat-jam:free", + "reflection/beam:free", "poolside/laguna-s-2.1-free", "inclusionai/ling-3.1-flash", "meta/muse-spark-1.1", diff --git a/tests/fixtures/commandcode-pricing.json b/tests/fixtures/commandcode-pricing.json index 1cecfda..79097e6 100644 --- a/tests/fixtures/commandcode-pricing.json +++ b/tests/fixtures/commandcode-pricing.json @@ -1,5 +1,5 @@ { - "verifiedAt": "2026-10-15", + "verifiedAt": "2026-10-17", "source": "https://commandcode.ai/docs/resources/pricing-limits", "tierPolicy": "Use request-wide input tiers; the highest threshold exceeded by input plus cache tokens applies to the full request.", "tiers": { @@ -24,6 +24,7 @@ "stealth/cat-jam:free": [0, 0, 0, 0], "poolside/laguna-s-2.1-free": [0, 0, 0, 0], "stealth/glyph-cluster:free": [0, 0, 0, 0], + "reflection/beam:free": [0, 0, 0, 0], "inclusionai/ling-3.1-flash": [0.3, 0.9, 0.06, 0], "mistral/mistral-large-4": [1.36, 4.18, 0.14, 0], "tencent/hy3-paid": [0.14, 0.58, 0.035, 0], diff --git a/tests/test-pricing.ts b/tests/test-pricing.ts index cf0b472..52412c4 100644 --- a/tests/test-pricing.ts +++ b/tests/test-pricing.ts @@ -31,6 +31,7 @@ const freeModels = new Set([ "poolside/laguna-s-2.1-free", "stealth/glyph-cluster:free", "stealth/cat-jam:free", + "reflection/beam:free", ]) function assertCost( @@ -54,7 +55,7 @@ function assertCost( describe("MODEL_COSTS pricing overlay", () => { it("covers the current Command Code model catalog snapshot", () => { assert.equal(fixture.source, "https://api.commandcode.ai/provider/v1/models") - assert.match(fixture.fetchedAt, /^2026-10-16T/) + assert.match(fixture.fetchedAt, /^2026-10-17T/) const catalogIds = [...fixture.modelIds].sort() const pricedIds = Object.keys(MODEL_COSTS).sort() @@ -373,7 +374,7 @@ describe("MODEL_COSTS pricing overlay", () => { it("tracks pricing provenance", () => { assert.equal(PRICING_SOURCE_URL, "https://commandcode.ai/docs/resources/pricing-limits") - assert.equal(PRICING_LAST_VERIFIED, "2026-10-15") + assert.equal(PRICING_LAST_VERIFIED, "2026-10-17") }) it("fails once temporary pricing needs review", () => { From 83ea142c6281008cddc3cfdd582284c6fcf5d6a0 Mon Sep 17 00:00:00 2001 From: zverev Date: Sun, 18 Oct 2026 22:09:33 +0300 Subject: [PATCH 2/6] test(models): address Beam pricing review feedback --- CHANGELOG.md | 2 +- tests/test-pricing-check.ts | 26 ++++++++++++++++++++++++++ tests/test-pricing.ts | 7 ++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f10cdd9..b5f6ecb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Refresh the static capability snapshot to `command-code@1.83.0`: add image input, reasoning, and selectable `low`/`medium`/`high` efforts for `meta/muse-spark-open` and `nvidia/nemotron-3.5-super-vl`; publish reasoning for the free `stealth/cat-jam:free` preview with `low`/`medium`/`high`/`xhigh`/`max` efforts and a 131,072-token output limit. Retire `inclusionai/ling-3.0-flash-sante:free` and drop its reasoning flag, output limit, and display-price entry now that the API no longer advertises it. No prices changed; the reviewed snapshot now covers all 92 advertised models. -- Refresh the static capability snapshot to `command-code@1.84.0`, which publishes no model metadata changes, and add reviewed display pricing for the new free `reflection/beam:free` model, verified against the official pricing page on 2026-10-17. Beam is free only while capacity lasts, with no published expiry, and it has no CLI capability metadata yet, so it keeps the conservative text-only and non-reasoning defaults. The reviewed snapshot now covers all 93 advertised models. +- Refresh the static capability snapshot to `command-code@1.84.0`, which publishes no model metadata changes, and add reviewed display pricing for the new free `reflection/beam:free` model, verified against the official pricing page on 2026-10-17. Beam is free only while capacity lasts, with no published expiry, and it has no CLI capability metadata yet, so it keeps the conservative text-only and non-reasoning defaults with a 65,536-token output limit. Reasoning and effort selection will become available after upstream publishes the required CLI metadata and the catalog snapshot is refreshed. The reviewed snapshot now covers all 93 advertised models. ## 0.7.8 - 2026-10-15 diff --git a/tests/test-pricing-check.ts b/tests/test-pricing-check.ts index b611603..930903f 100644 --- a/tests/test-pricing-check.ts +++ b/tests/test-pricing-check.ts @@ -345,6 +345,32 @@ describe("pricing page id matching", () => { ]) }) + it("matches a provider-prefixed :free model and preserves its capacity-limited deal", () => { + const modelId = "reflection/beam:free" + assert.deepEqual(pricingPageIdCandidates(modelId), [modelId, "beam:free"]) + const rows = parsePricingPage( + pageWithRows([ + { + id: "beam:free", + tiers: [{ rates: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 } }], + deal: { + id: "beam-free", + discountPercent: 100, + free: true, + endsWhen: "while capacity lasts", + }, + }, + ]), + ) + const result = checkCommandCodePricing([modelId], rows, { [modelId]: cost(0, 0, 0, 0) }, AT_MS) + assert.deepEqual(result.issues, []) + assert.equal(result.deals.length, 1) + assert.equal(result.deals[0]!.modelId, modelId) + assert.equal(result.deals[0]!.deal.id, "beam-free") + assert.equal(result.deals[0]!.deal.endsWhen, "while capacity lasts") + assert.equal(result.deals[0]!.deal.expires, undefined) + }) + it("flags ambiguous page rows instead of picking the first match", () => { const pageRows = [pageRow("vendor/model", cost(1, 1, 0, 0)), pageRow("model", cost(1, 1, 0, 0))] const result = checkCommandCodePricing( diff --git a/tests/test-pricing.ts b/tests/test-pricing.ts index 52412c4..01cb280 100644 --- a/tests/test-pricing.ts +++ b/tests/test-pricing.ts @@ -55,7 +55,8 @@ function assertCost( describe("MODEL_COSTS pricing overlay", () => { it("covers the current Command Code model catalog snapshot", () => { assert.equal(fixture.source, "https://api.commandcode.ai/provider/v1/models") - assert.match(fixture.fetchedAt, /^2026-10-17T/) + assert.match(fixture.fetchedAt, /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/) + assert.equal(new Date(fixture.fetchedAt).toISOString(), fixture.fetchedAt) const catalogIds = [...fixture.modelIds].sort() const pricedIds = Object.keys(MODEL_COSTS).sort() @@ -96,6 +97,10 @@ describe("MODEL_COSTS pricing overlay", () => { assert.deepEqual(MODEL_COSTS, expected) }) + it("matches reviewed late-October Beam promotion rates", () => { + assertCost("reflection/beam:free", { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }) + }) + it("uses non-zero prices except for models documented as free", () => { for (const [modelId, cost] of Object.entries(MODEL_COSTS)) { assert.ok(cost.input >= 0, `${modelId} input cost should be non-negative`) From 64f72852b87491eb1a97d9f635a75170780e91f6 Mon Sep 17 00:00:00 2001 From: zverev Date: Tue, 20 Oct 2026 10:49:41 +0300 Subject: [PATCH 3/6] chore(models): refresh MiniMax Flash pricing and retire Cat Jam --- CHANGELOG.md | 2 ++ src/pricing.ts | 16 +++++++++---- tests/fixtures/commandcode-model-ids.json | 5 ++-- tests/fixtures/commandcode-pricing.json | 5 ++-- tests/test-pricing.ts | 29 ++++++++++++++++++++--- 5 files changed, 46 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5f6ecb..b26d59f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +- Re-verify display pricing on 2026-10-20: add paid and free `minimax/minimax-m3.1-flash` entries and remove retired `stealth/cat-jam:free` pricing. The free MiniMax promotion ends on 2026-10-21 at 10:45 UTC; require a pricing recheck before that UTC day starts. The API now advertises 94 models. The CLI remains at `1.84.0` without MiniMax M3.1 Flash capability metadata, so both variants retain conservative text-only, non-reasoning defaults until upstream publishes it. + - Refresh the static capability snapshot to `command-code@1.83.0`: add image input, reasoning, and selectable `low`/`medium`/`high` efforts for `meta/muse-spark-open` and `nvidia/nemotron-3.5-super-vl`; publish reasoning for the free `stealth/cat-jam:free` preview with `low`/`medium`/`high`/`xhigh`/`max` efforts and a 131,072-token output limit. Retire `inclusionai/ling-3.0-flash-sante:free` and drop its reasoning flag, output limit, and display-price entry now that the API no longer advertises it. No prices changed; the reviewed snapshot now covers all 92 advertised models. - Refresh the static capability snapshot to `command-code@1.84.0`, which publishes no model metadata changes, and add reviewed display pricing for the new free `reflection/beam:free` model, verified against the official pricing page on 2026-10-17. Beam is free only while capacity lasts, with no published expiry, and it has no CLI capability metadata yet, so it keeps the conservative text-only and non-reasoning defaults with a 65,536-token output limit. Reasoning and effort selection will become available after upstream publishes the required CLI metadata and the catalog snapshot is refreshed. The reviewed snapshot now covers all 93 advertised models. diff --git a/src/pricing.ts b/src/pricing.ts index 7ac26cd..fedcbab 100644 --- a/src/pricing.ts +++ b/src/pricing.ts @@ -20,7 +20,7 @@ export interface TemporaryPricing { } export const PRICING_SOURCE_URL = "https://commandcode.ai/docs/resources/pricing-limits" -export const PRICING_LAST_VERIFIED = "2026-10-17" +export const PRICING_LAST_VERIFIED = "2026-10-20" export const ZERO_MODEL_COST: CommandCodeModelCost = { input: 0, @@ -39,8 +39,8 @@ export const ZERO_MODEL_COST: CommandCodeModelCost = { */ export const MODEL_COSTS: Readonly> = { // Free models - // Free while the stealth preview lasts; no fixed expiry is published. - "stealth/cat-jam:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, + // Free until 2026-10-21T10:45:00Z; recheck before that UTC day starts. + "minimax/minimax-m3.1-flash:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, "poolside/laguna-s-2.1-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, "stealth/glyph-cluster:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, // Free while capacity lasts; no fixed expiry is published. @@ -68,6 +68,7 @@ export const MODEL_COSTS: Readonly> = { "zai-org/GLM-5.2-Fast": { input: 3, output: 10.25, cacheRead: 0.5, cacheWrite: 0 }, "zai-org/GLM-5.1": { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, "zai-org/GLM-5": { input: 1, output: 3.2, cacheRead: 0.2, cacheWrite: 0 }, + "minimax/minimax-m3.1-flash": { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, "MiniMaxAI/MiniMax-M3": { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, "MiniMaxAI/MiniMax-M2.7": { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, "MiniMaxAI/MiniMax-M2.5": { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0 }, @@ -359,4 +360,11 @@ export const MODEL_COSTS: Readonly> = { }, } -export const TEMPORARY_PRICING: readonly TemporaryPricing[] = [] +export const TEMPORARY_PRICING: readonly TemporaryPricing[] = [ + { + models: ["minimax/minimax-m3.1-flash:free"], + expiresOn: "2026-10-20", + description: + "MiniMax M3.1 Flash free promotion ends 2026-10-21T10:45:00Z; recheck before expiry day", + }, +] diff --git a/tests/fixtures/commandcode-model-ids.json b/tests/fixtures/commandcode-model-ids.json index c9d4ce5..1dabb6a 100644 --- a/tests/fixtures/commandcode-model-ids.json +++ b/tests/fixtures/commandcode-model-ids.json @@ -1,5 +1,5 @@ { - "fetchedAt": "2026-10-17T20:46:24.595Z", + "fetchedAt": "2026-10-20T07:46:34.326Z", "source": "https://api.commandcode.ai/provider/v1/models", "modelIds": [ "claude-sonnet-5-5", @@ -42,6 +42,8 @@ "zai-org/GLM-5.2-Fast", "zai-org/GLM-5.1", "zai-org/GLM-5", + "minimax/minimax-m3.1-flash", + "minimax/minimax-m3.1-flash:free", "MiniMaxAI/MiniMax-M3", "MiniMaxAI/MiniMax-M2.7", "MiniMaxAI/MiniMax-M2.5", @@ -80,7 +82,6 @@ "thinkingmachines/inkling", "thinkingmachines/inkling-small", "stealth/glyph-cluster:free", - "stealth/cat-jam:free", "reflection/beam:free", "poolside/laguna-s-2.1-free", "inclusionai/ling-3.1-flash", diff --git a/tests/fixtures/commandcode-pricing.json b/tests/fixtures/commandcode-pricing.json index 79097e6..af6825d 100644 --- a/tests/fixtures/commandcode-pricing.json +++ b/tests/fixtures/commandcode-pricing.json @@ -1,5 +1,5 @@ { - "verifiedAt": "2026-10-17", + "verifiedAt": "2026-10-20", "source": "https://commandcode.ai/docs/resources/pricing-limits", "tierPolicy": "Use request-wide input tiers; the highest threshold exceeded by input plus cache tokens applies to the full request.", "tiers": { @@ -21,7 +21,7 @@ "xai/grok-4.7": [[200000, 4, 12, 1, 0]] }, "costs": { - "stealth/cat-jam:free": [0, 0, 0, 0], + "minimax/minimax-m3.1-flash:free": [0, 0, 0, 0], "poolside/laguna-s-2.1-free": [0, 0, 0, 0], "stealth/glyph-cluster:free": [0, 0, 0, 0], "reflection/beam:free": [0, 0, 0, 0], @@ -41,6 +41,7 @@ "zai-org/GLM-5.2-Fast": [3, 10.25, 0.5, 0], "zai-org/GLM-5.1": [1.4, 4.4, 0.26, 0], "zai-org/GLM-5": [1, 3.2, 0.2, 0], + "minimax/minimax-m3.1-flash": [0.15, 0.6, 0.015, 0], "MiniMaxAI/MiniMax-M3": [0.3, 1.2, 0.06, 0], "MiniMaxAI/MiniMax-M2.7": [0.3, 1.2, 0.06, 0], "MiniMaxAI/MiniMax-M2.5": [0.3, 1.2, 0.03, 0], diff --git a/tests/test-pricing.ts b/tests/test-pricing.ts index 01cb280..eb42318 100644 --- a/tests/test-pricing.ts +++ b/tests/test-pricing.ts @@ -30,7 +30,7 @@ const pricingFixture = JSON.parse(await readFile(pricingFixtureUrl, "utf-8")) as const freeModels = new Set([ "poolside/laguna-s-2.1-free", "stealth/glyph-cluster:free", - "stealth/cat-jam:free", + "minimax/minimax-m3.1-flash:free", "reflection/beam:free", ]) @@ -97,6 +97,29 @@ describe("MODEL_COSTS pricing overlay", () => { assert.deepEqual(MODEL_COSTS, expected) }) + it("matches reviewed MiniMax M3.1 Flash rates and promotion deadline", () => { + assertCost("minimax/minimax-m3.1-flash", { + input: 0.15, + output: 0.6, + cacheRead: 0.015, + cacheWrite: 0, + }) + assertCost("minimax/minimax-m3.1-flash:free", { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + }) + assert.deepEqual(TEMPORARY_PRICING, [ + { + models: ["minimax/minimax-m3.1-flash:free"], + expiresOn: "2026-10-20", + description: + "MiniMax M3.1 Flash free promotion ends 2026-10-21T10:45:00Z; recheck before expiry day", + }, + ]) + }) + it("matches reviewed late-October Beam promotion rates", () => { assertCost("reflection/beam:free", { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }) }) @@ -374,12 +397,12 @@ describe("MODEL_COSTS pricing overlay", () => { cacheRead: 0.15, cacheWrite: 0, }) - assertCost("stealth/cat-jam:free", { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }) + assert.equal(MODEL_COSTS["stealth/cat-jam:free"], undefined) }) it("tracks pricing provenance", () => { assert.equal(PRICING_SOURCE_URL, "https://commandcode.ai/docs/resources/pricing-limits") - assert.equal(PRICING_LAST_VERIFIED, "2026-10-17") + assert.equal(PRICING_LAST_VERIFIED, "2026-10-20") }) it("fails once temporary pricing needs review", () => { From 470523645678e8e2bcee37a24be57adf89065253 Mon Sep 17 00:00:00 2001 From: zverev Date: Thu, 22 Oct 2026 00:13:57 +0300 Subject: [PATCH 4/6] chore(models): refresh catalog to CLI 1.87.0 and Ornith pricing --- CHANGELOG.md | 2 ++ README.md | 2 +- src/commandcode-catalog.ts | 20 ++++++++++++++----- src/pricing.ts | 17 ++++++++++++---- tests/fixtures/commandcode-model-ids.json | 4 +++- tests/fixtures/commandcode-pricing.json | 4 +++- tests/test-models.ts | 24 +++++++++++++++++++++++ tests/test-pricing.ts | 24 ++++++++++++++++++----- 8 files changed, 80 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b26d59f..96011b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +- Refresh the static capability snapshot to `command-code@1.87.0` and re-verify display pricing on 2026-10-21 for all 96 advertised models. MiniMax M3.1 Flash (paid and free) now supports image input, reasoning, and `low`/`medium`/`high`/`xhigh`/`max` efforts. Beam now supports reasoning with the same efforts and a 131,072-token output limit. Add paid and free Ornith 1.5 122B with image input and reasoning, without selectable efforts; paid rates are $0.16 input / $0.64 output / $0.02 cache read per million tokens, with no cache-write charge. Remove retired Cat Jam capability metadata. Extend the free MiniMax promotion to 2026-10-22T10:45:00Z and track the free Ornith promotion until 2026-10-22T06:00:00Z; both date-only guards require review from 2026-10-22 at 00:00 UTC, before either promotion ends. Existing paid rates and Beam's capacity-limited free pricing are unchanged. + - Re-verify display pricing on 2026-10-20: add paid and free `minimax/minimax-m3.1-flash` entries and remove retired `stealth/cat-jam:free` pricing. The free MiniMax promotion ends on 2026-10-21 at 10:45 UTC; require a pricing recheck before that UTC day starts. The API now advertises 94 models. The CLI remains at `1.84.0` without MiniMax M3.1 Flash capability metadata, so both variants retain conservative text-only, non-reasoning defaults until upstream publishes it. - Refresh the static capability snapshot to `command-code@1.83.0`: add image input, reasoning, and selectable `low`/`medium`/`high` efforts for `meta/muse-spark-open` and `nvidia/nemotron-3.5-super-vl`; publish reasoning for the free `stealth/cat-jam:free` preview with `low`/`medium`/`high`/`xhigh`/`max` efforts and a 131,072-token output limit. Retire `inclusionai/ling-3.0-flash-sante:free` and drop its reasoning flag, output limit, and display-price entry now that the API no longer advertises it. No prices changed; the reviewed snapshot now covers all 92 advertised models. diff --git a/README.md b/README.md index 678297f..63402a8 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,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.84.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, also dropping manual effort overrides that upstream has published itself, 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.87.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, also dropping manual effort overrides that upstream has published itself, 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 635ad15..e32345b 100644 --- a/src/commandcode-catalog.ts +++ b/src/commandcode-catalog.ts @@ -1,4 +1,4 @@ -export const COMMAND_CODE_CLI_VERSION = "1.84.0" +export const COMMAND_CODE_CLI_VERSION = "1.87.0" export type CommandCodeInputType = "text" | "image" export type CommandCodeReasoningEffort = @@ -11,7 +11,7 @@ export type CommandCodeReasoningEffort = | "max" /** - * Generated from command-code@1.84.0 by `npm run sync:commandcode-catalog`. + * Generated from command-code@1.87.0 by `npm run sync:commandcode-catalog`. * Do not edit manually. */ export const MODEL_INPUT_MODALITIES: Readonly> = { @@ -54,6 +54,8 @@ export const MODEL_INPUT_MODALITIES: Readonly> = { "meta/muse-spark-1.3-contributor": true, "meta/muse-spark-open": true, "meta/muse-wonder-1.0": true, + "minimax/minimax-m3.1-flash": true, + "minimax/minimax-m3.1-flash:free": true, "MiniMaxAI/MiniMax-M3": true, "mistral/mistral-large-4": true, "moonshotai/Kimi-K2.7-Code": true, @@ -138,6 +144,8 @@ export const MODEL_REASONING: Readonly> = { "moonshotai/Kimi-K3": true, "nvidia/nemotron-3-ultra-550b-a55b": true, "nvidia/nemotron-3.5-super-vl": true, + "ornith/ornith-1.5-122b": true, + "ornith/ornith-1.5-122b:free": true, "poolside/laguna-s-2.1-free": true, "Qwen/Qwen3.6-Max-Preview": true, "Qwen/Qwen3.6-Plus": true, @@ -150,8 +158,8 @@ export const MODEL_REASONING: Readonly> = { "Qwen/Qwen3.8-Max-0902": true, "Qwen/Qwen3.8-Max-Prime": true, "Qwen/Qwen3.8-Omni-Flash": true, + "reflection/beam:free": true, "sakana/fugu-ultra": true, - "stealth/cat-jam:free": true, "stealth/glyph-cluster:free": true, "stepfun/Step-3.5-Flash": true, "stepfun/Step-3.7-Flash": true, @@ -212,6 +220,8 @@ export const MODEL_EFFORTS: Readonly> = { "Qwen/Qwen3.8-27B": 32_768, "Qwen/Qwen3.8-Max-Prime": 131_072, "Qwen/Qwen3.8-Omni-Flash": 131_072, - "stealth/cat-jam:free": 131_072, + "reflection/beam:free": 131_072, "stealth/glyph-cluster:free": 256_000, "z-ai/glm-5.3-flash": 131_072, "z-ai/glm-5.3-flashx": 131_072, diff --git a/src/pricing.ts b/src/pricing.ts index fedcbab..dcd4360 100644 --- a/src/pricing.ts +++ b/src/pricing.ts @@ -20,7 +20,7 @@ export interface TemporaryPricing { } export const PRICING_SOURCE_URL = "https://commandcode.ai/docs/resources/pricing-limits" -export const PRICING_LAST_VERIFIED = "2026-10-20" +export const PRICING_LAST_VERIFIED = "2026-10-21" export const ZERO_MODEL_COST: CommandCodeModelCost = { input: 0, @@ -39,14 +39,17 @@ export const ZERO_MODEL_COST: CommandCodeModelCost = { */ export const MODEL_COSTS: Readonly> = { // Free models - // Free until 2026-10-21T10:45:00Z; recheck before that UTC day starts. + // Free until 2026-10-22T10:45:00Z; recheck before that UTC day starts. "minimax/minimax-m3.1-flash:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, + // Free until 2026-10-22T06:00:00Z; recheck before that UTC day starts. + "ornith/ornith-1.5-122b:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, "poolside/laguna-s-2.1-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, "stealth/glyph-cluster:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, // Free while capacity lasts; no fixed expiry is published. "reflection/beam:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, // Open and open-weight models + "ornith/ornith-1.5-122b": { input: 0.16, output: 0.64, cacheRead: 0.02, cacheWrite: 0 }, "inclusionai/ling-3.1-flash": { input: 0.3, output: 0.9, cacheRead: 0.06, cacheWrite: 0 }, "mistral/mistral-large-4": { input: 1.36, output: 4.18, cacheRead: 0.14, cacheWrite: 0 }, "tencent/hy3-paid": { input: 0.14, output: 0.58, cacheRead: 0.035, cacheWrite: 0 }, @@ -363,8 +366,14 @@ export const MODEL_COSTS: Readonly> = { export const TEMPORARY_PRICING: readonly TemporaryPricing[] = [ { models: ["minimax/minimax-m3.1-flash:free"], - expiresOn: "2026-10-20", + expiresOn: "2026-10-21", description: - "MiniMax M3.1 Flash free promotion ends 2026-10-21T10:45:00Z; recheck before expiry day", + "MiniMax M3.1 Flash free promotion ends 2026-10-22T10:45:00Z; recheck before expiry day", + }, + { + models: ["ornith/ornith-1.5-122b:free"], + expiresOn: "2026-10-21", + description: + "Ornith 1.5 122B free promotion ends 2026-10-22T06:00:00Z; recheck before expiry day", }, ] diff --git a/tests/fixtures/commandcode-model-ids.json b/tests/fixtures/commandcode-model-ids.json index 1dabb6a..18627ce 100644 --- a/tests/fixtures/commandcode-model-ids.json +++ b/tests/fixtures/commandcode-model-ids.json @@ -1,5 +1,5 @@ { - "fetchedAt": "2026-10-20T07:46:34.326Z", + "fetchedAt": "2026-10-21T21:09:15.807Z", "source": "https://api.commandcode.ai/provider/v1/models", "modelIds": [ "claude-sonnet-5-5", @@ -47,6 +47,8 @@ "MiniMaxAI/MiniMax-M3", "MiniMaxAI/MiniMax-M2.7", "MiniMaxAI/MiniMax-M2.5", + "ornith/ornith-1.5-122b", + "ornith/ornith-1.5-122b:free", "xiaomi/mimo-v2.6-pro", "xiaomi/mimo-v2.6-pro-ultraspeed", "xiaomi/mimo-v2.6-flash", diff --git a/tests/fixtures/commandcode-pricing.json b/tests/fixtures/commandcode-pricing.json index af6825d..ef1ee49 100644 --- a/tests/fixtures/commandcode-pricing.json +++ b/tests/fixtures/commandcode-pricing.json @@ -1,5 +1,5 @@ { - "verifiedAt": "2026-10-20", + "verifiedAt": "2026-10-21", "source": "https://commandcode.ai/docs/resources/pricing-limits", "tierPolicy": "Use request-wide input tiers; the highest threshold exceeded by input plus cache tokens applies to the full request.", "tiers": { @@ -22,9 +22,11 @@ }, "costs": { "minimax/minimax-m3.1-flash:free": [0, 0, 0, 0], + "ornith/ornith-1.5-122b:free": [0, 0, 0, 0], "poolside/laguna-s-2.1-free": [0, 0, 0, 0], "stealth/glyph-cluster:free": [0, 0, 0, 0], "reflection/beam:free": [0, 0, 0, 0], + "ornith/ornith-1.5-122b": [0.16, 0.64, 0.02, 0], "inclusionai/ling-3.1-flash": [0.3, 0.9, 0.06, 0], "mistral/mistral-large-4": [1.36, 4.18, 0.14, 0], "tencent/hy3-paid": [0.14, 0.58, 0.035, 0], diff --git a/tests/test-models.ts b/tests/test-models.ts index b1e1390..87ca353 100644 --- a/tests/test-models.ts +++ b/tests/test-models.ts @@ -210,6 +210,30 @@ describe("commandCodeModelsFromApiResponse()", () => { assert.equal(MODEL_MAX_OUTPUT_TOKENS[retired], undefined) }) + it("advertises MiniMax Flash, Beam, and Ornith capabilities from the refreshed CLI", () => { + const efforts = ["low", "medium", "high", "xhigh", "max"] + for (const id of ["minimax/minimax-m3.1-flash", "minimax/minimax-m3.1-flash:free"]) { + assert.deepEqual(inputModalitiesForModel(id), ["text", "image"]) + assert.equal(MODEL_REASONING[id], true) + assert.deepEqual(thinkingMetadataForModel(id)?.thinking?.efforts, efforts) + } + const beam = "reflection/beam:free" + assert.deepEqual(inputModalitiesForModel(beam), ["text"]) + assert.equal(MODEL_REASONING[beam], true) + assert.deepEqual(thinkingMetadataForModel(beam)?.thinking?.efforts, efforts) + assert.equal(MODEL_MAX_OUTPUT_TOKENS[beam], 131_072) + for (const id of ["ornith/ornith-1.5-122b", "ornith/ornith-1.5-122b:free"]) { + assert.deepEqual(inputModalitiesForModel(id), ["text", "image"]) + assert.equal(MODEL_REASONING[id], true) + assert.equal(MODEL_EFFORTS[id], undefined) + } + const retired = "stealth/cat-jam:free" + assert.equal(MODEL_INPUT_MODALITIES[retired], undefined) + assert.equal(MODEL_REASONING[retired], undefined) + assert.equal(MODEL_EFFORTS[retired], undefined) + assert.equal(MODEL_MAX_OUTPUT_TOKENS[retired], undefined) + }) + it("prefers host-resolved input modalities over the catalog snapshot", () => { // A model published upstream after the pinned CLI release is absent from the // generated catalog, so the host's resolved modalities must win. diff --git a/tests/test-pricing.ts b/tests/test-pricing.ts index eb42318..2ccb9ba 100644 --- a/tests/test-pricing.ts +++ b/tests/test-pricing.ts @@ -31,6 +31,7 @@ const freeModels = new Set([ "poolside/laguna-s-2.1-free", "stealth/glyph-cluster:free", "minimax/minimax-m3.1-flash:free", + "ornith/ornith-1.5-122b:free", "reflection/beam:free", ]) @@ -97,7 +98,7 @@ describe("MODEL_COSTS pricing overlay", () => { assert.deepEqual(MODEL_COSTS, expected) }) - it("matches reviewed MiniMax M3.1 Flash rates and promotion deadline", () => { + it("matches reviewed MiniMax M3.1 Flash and Ornith rates and promotion deadlines", () => { assertCost("minimax/minimax-m3.1-flash", { input: 0.15, output: 0.6, @@ -110,12 +111,25 @@ describe("MODEL_COSTS pricing overlay", () => { cacheRead: 0, cacheWrite: 0, }) + assertCost("ornith/ornith-1.5-122b", { + input: 0.16, + output: 0.64, + cacheRead: 0.02, + cacheWrite: 0, + }) + assertCost("ornith/ornith-1.5-122b:free", { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }) assert.deepEqual(TEMPORARY_PRICING, [ { models: ["minimax/minimax-m3.1-flash:free"], - expiresOn: "2026-10-20", + expiresOn: "2026-10-21", + description: + "MiniMax M3.1 Flash free promotion ends 2026-10-22T10:45:00Z; recheck before expiry day", + }, + { + models: ["ornith/ornith-1.5-122b:free"], + expiresOn: "2026-10-21", description: - "MiniMax M3.1 Flash free promotion ends 2026-10-21T10:45:00Z; recheck before expiry day", + "Ornith 1.5 122B free promotion ends 2026-10-22T06:00:00Z; recheck before expiry day", }, ]) }) @@ -402,7 +416,7 @@ describe("MODEL_COSTS pricing overlay", () => { it("tracks pricing provenance", () => { assert.equal(PRICING_SOURCE_URL, "https://commandcode.ai/docs/resources/pricing-limits") - assert.equal(PRICING_LAST_VERIFIED, "2026-10-20") + assert.equal(PRICING_LAST_VERIFIED, "2026-10-21") }) it("fails once temporary pricing needs review", () => { @@ -412,7 +426,7 @@ describe("MODEL_COSTS pricing overlay", () => { assert.ok(pricing.models.length > 0) assert.ok( pricing.expiresOn >= today, - `${pricing.description} for ${pricing.models.join(", ")} expired on ${pricing.expiresOn}; refresh MODEL_COSTS`, + `${pricing.description} for ${pricing.models.join(", ")} needs recheck after ${pricing.expiresOn}; refresh MODEL_COSTS`, ) for (const modelId of pricing.models) { assert.ok(MODEL_COSTS[modelId], `${modelId} should have a temporary price entry`) From 21b0356ad6ff4ca19b7eba23d47b1d904ce27e72 Mon Sep 17 00:00:00 2001 From: zverev Date: Thu, 22 Oct 2026 23:43:42 +0300 Subject: [PATCH 5/6] chore(models): refresh CLI 1.87.1 and retire expired free pricing --- CHANGELOG.md | 4 ++- README.md | 2 +- src/commandcode-catalog.ts | 4 +-- src/pricing.ts | 23 +++-------------- tests/fixtures/commandcode-model-ids.json | 4 +-- tests/fixtures/commandcode-pricing.json | 4 +-- tests/test-pricing.ts | 31 +++++------------------ 7 files changed, 18 insertions(+), 54 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 96011b5..233aa64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,14 @@ ## Unreleased +- Refresh the static capability snapshot to `command-code@1.87.1`, which publishes no model metadata changes, and re-verify display pricing on 2026-10-22 for all 94 advertised models. Both free promotions ended on 2026-10-22 and the API dropped the models, so remove the `minimax/minimax-m3.1-flash:free` and `ornith/ornith-1.5-122b:free` display prices, their temporary-pricing guards, and their fixture entries; `TEMPORARY_PRICING` is empty until the pricing page publishes another dated promotion. Paid MiniMax M3.1 Flash ($0.15 input / $0.60 output / $0.015 cache read) and paid Ornith 1.5 122B ($0.16 input / $0.64 output / $0.02 cache read) rates are unchanged, and Beam's capacity-limited free pricing still has no published expiry. + - Refresh the static capability snapshot to `command-code@1.87.0` and re-verify display pricing on 2026-10-21 for all 96 advertised models. MiniMax M3.1 Flash (paid and free) now supports image input, reasoning, and `low`/`medium`/`high`/`xhigh`/`max` efforts. Beam now supports reasoning with the same efforts and a 131,072-token output limit. Add paid and free Ornith 1.5 122B with image input and reasoning, without selectable efforts; paid rates are $0.16 input / $0.64 output / $0.02 cache read per million tokens, with no cache-write charge. Remove retired Cat Jam capability metadata. Extend the free MiniMax promotion to 2026-10-22T10:45:00Z and track the free Ornith promotion until 2026-10-22T06:00:00Z; both date-only guards require review from 2026-10-22 at 00:00 UTC, before either promotion ends. Existing paid rates and Beam's capacity-limited free pricing are unchanged. - Re-verify display pricing on 2026-10-20: add paid and free `minimax/minimax-m3.1-flash` entries and remove retired `stealth/cat-jam:free` pricing. The free MiniMax promotion ends on 2026-10-21 at 10:45 UTC; require a pricing recheck before that UTC day starts. The API now advertises 94 models. The CLI remains at `1.84.0` without MiniMax M3.1 Flash capability metadata, so both variants retain conservative text-only, non-reasoning defaults until upstream publishes it. -- Refresh the static capability snapshot to `command-code@1.83.0`: add image input, reasoning, and selectable `low`/`medium`/`high` efforts for `meta/muse-spark-open` and `nvidia/nemotron-3.5-super-vl`; publish reasoning for the free `stealth/cat-jam:free` preview with `low`/`medium`/`high`/`xhigh`/`max` efforts and a 131,072-token output limit. Retire `inclusionai/ling-3.0-flash-sante:free` and drop its reasoning flag, output limit, and display-price entry now that the API no longer advertises it. No prices changed; the reviewed snapshot now covers all 92 advertised models. - Refresh the static capability snapshot to `command-code@1.84.0`, which publishes no model metadata changes, and add reviewed display pricing for the new free `reflection/beam:free` model, verified against the official pricing page on 2026-10-17. Beam is free only while capacity lasts, with no published expiry, and it has no CLI capability metadata yet, so it keeps the conservative text-only and non-reasoning defaults with a 65,536-token output limit. Reasoning and effort selection will become available after upstream publishes the required CLI metadata and the catalog snapshot is refreshed. The reviewed snapshot now covers all 93 advertised models. +- Refresh the static capability snapshot to `command-code@1.83.0`: add image input, reasoning, and selectable `low`/`medium`/`high` efforts for `meta/muse-spark-open` and `nvidia/nemotron-3.5-super-vl`; publish reasoning for the free `stealth/cat-jam:free` preview with `low`/`medium`/`high`/`xhigh`/`max` efforts and a 131,072-token output limit. Retire `inclusionai/ling-3.0-flash-sante:free` and drop its reasoning flag, output limit, and display-price entry now that the API no longer advertises it. No prices changed; the reviewed snapshot now covers all 92 advertised models. ## 0.7.8 - 2026-10-15 diff --git a/README.md b/README.md index 63402a8..c57f5b3 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,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.87.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, also dropping manual effort overrides that upstream has published itself, 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.87.1`; 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, also dropping manual effort overrides that upstream has published itself, 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 e32345b..1437abe 100644 --- a/src/commandcode-catalog.ts +++ b/src/commandcode-catalog.ts @@ -1,4 +1,4 @@ -export const COMMAND_CODE_CLI_VERSION = "1.87.0" +export const COMMAND_CODE_CLI_VERSION = "1.87.1" export type CommandCodeInputType = "text" | "image" export type CommandCodeReasoningEffort = @@ -11,7 +11,7 @@ export type CommandCodeReasoningEffort = | "max" /** - * Generated from command-code@1.87.0 by `npm run sync:commandcode-catalog`. + * Generated from command-code@1.87.1 by `npm run sync:commandcode-catalog`. * Do not edit manually. */ export const MODEL_INPUT_MODALITIES: Readonly> = { diff --git a/src/pricing.ts b/src/pricing.ts index dcd4360..0cab7d0 100644 --- a/src/pricing.ts +++ b/src/pricing.ts @@ -20,7 +20,7 @@ export interface TemporaryPricing { } export const PRICING_SOURCE_URL = "https://commandcode.ai/docs/resources/pricing-limits" -export const PRICING_LAST_VERIFIED = "2026-10-21" +export const PRICING_LAST_VERIFIED = "2026-10-22" export const ZERO_MODEL_COST: CommandCodeModelCost = { input: 0, @@ -39,10 +39,6 @@ export const ZERO_MODEL_COST: CommandCodeModelCost = { */ export const MODEL_COSTS: Readonly> = { // Free models - // Free until 2026-10-22T10:45:00Z; recheck before that UTC day starts. - "minimax/minimax-m3.1-flash:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, - // Free until 2026-10-22T06:00:00Z; recheck before that UTC day starts. - "ornith/ornith-1.5-122b:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, "poolside/laguna-s-2.1-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, "stealth/glyph-cluster:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, // Free while capacity lasts; no fixed expiry is published. @@ -363,17 +359,6 @@ export const MODEL_COSTS: Readonly> = { }, } -export const TEMPORARY_PRICING: readonly TemporaryPricing[] = [ - { - models: ["minimax/minimax-m3.1-flash:free"], - expiresOn: "2026-10-21", - description: - "MiniMax M3.1 Flash free promotion ends 2026-10-22T10:45:00Z; recheck before expiry day", - }, - { - models: ["ornith/ornith-1.5-122b:free"], - expiresOn: "2026-10-21", - description: - "Ornith 1.5 122B free promotion ends 2026-10-22T06:00:00Z; recheck before expiry day", - }, -] +// No dated promotions are active. Add an entry here when the pricing page +// publishes a promotion end date, so tests fail when it needs review. +export const TEMPORARY_PRICING: readonly TemporaryPricing[] = [] diff --git a/tests/fixtures/commandcode-model-ids.json b/tests/fixtures/commandcode-model-ids.json index 18627ce..d1d8dd0 100644 --- a/tests/fixtures/commandcode-model-ids.json +++ b/tests/fixtures/commandcode-model-ids.json @@ -1,5 +1,5 @@ { - "fetchedAt": "2026-10-21T21:09:15.807Z", + "fetchedAt": "2026-10-22T20:38:00.785Z", "source": "https://api.commandcode.ai/provider/v1/models", "modelIds": [ "claude-sonnet-5-5", @@ -43,12 +43,10 @@ "zai-org/GLM-5.1", "zai-org/GLM-5", "minimax/minimax-m3.1-flash", - "minimax/minimax-m3.1-flash:free", "MiniMaxAI/MiniMax-M3", "MiniMaxAI/MiniMax-M2.7", "MiniMaxAI/MiniMax-M2.5", "ornith/ornith-1.5-122b", - "ornith/ornith-1.5-122b:free", "xiaomi/mimo-v2.6-pro", "xiaomi/mimo-v2.6-pro-ultraspeed", "xiaomi/mimo-v2.6-flash", diff --git a/tests/fixtures/commandcode-pricing.json b/tests/fixtures/commandcode-pricing.json index ef1ee49..0b5a75b 100644 --- a/tests/fixtures/commandcode-pricing.json +++ b/tests/fixtures/commandcode-pricing.json @@ -1,5 +1,5 @@ { - "verifiedAt": "2026-10-21", + "verifiedAt": "2026-10-22", "source": "https://commandcode.ai/docs/resources/pricing-limits", "tierPolicy": "Use request-wide input tiers; the highest threshold exceeded by input plus cache tokens applies to the full request.", "tiers": { @@ -21,8 +21,6 @@ "xai/grok-4.7": [[200000, 4, 12, 1, 0]] }, "costs": { - "minimax/minimax-m3.1-flash:free": [0, 0, 0, 0], - "ornith/ornith-1.5-122b:free": [0, 0, 0, 0], "poolside/laguna-s-2.1-free": [0, 0, 0, 0], "stealth/glyph-cluster:free": [0, 0, 0, 0], "reflection/beam:free": [0, 0, 0, 0], diff --git a/tests/test-pricing.ts b/tests/test-pricing.ts index 2ccb9ba..37007d6 100644 --- a/tests/test-pricing.ts +++ b/tests/test-pricing.ts @@ -30,8 +30,6 @@ const pricingFixture = JSON.parse(await readFile(pricingFixtureUrl, "utf-8")) as const freeModels = new Set([ "poolside/laguna-s-2.1-free", "stealth/glyph-cluster:free", - "minimax/minimax-m3.1-flash:free", - "ornith/ornith-1.5-122b:free", "reflection/beam:free", ]) @@ -98,40 +96,23 @@ describe("MODEL_COSTS pricing overlay", () => { assert.deepEqual(MODEL_COSTS, expected) }) - it("matches reviewed MiniMax M3.1 Flash and Ornith rates and promotion deadlines", () => { + it("matches reviewed MiniMax M3.1 Flash and Ornith rates after their free promotions ended", () => { assertCost("minimax/minimax-m3.1-flash", { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0, }) - assertCost("minimax/minimax-m3.1-flash:free", { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - }) assertCost("ornith/ornith-1.5-122b", { input: 0.16, output: 0.64, cacheRead: 0.02, cacheWrite: 0, }) - assertCost("ornith/ornith-1.5-122b:free", { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }) - assert.deepEqual(TEMPORARY_PRICING, [ - { - models: ["minimax/minimax-m3.1-flash:free"], - expiresOn: "2026-10-21", - description: - "MiniMax M3.1 Flash free promotion ends 2026-10-22T10:45:00Z; recheck before expiry day", - }, - { - models: ["ornith/ornith-1.5-122b:free"], - expiresOn: "2026-10-21", - description: - "Ornith 1.5 122B free promotion ends 2026-10-22T06:00:00Z; recheck before expiry day", - }, - ]) + // Both free promotions ended on 2026-10-22 and the API dropped the models. + assert.equal(MODEL_COSTS["minimax/minimax-m3.1-flash:free"], undefined) + assert.equal(MODEL_COSTS["ornith/ornith-1.5-122b:free"], undefined) + assert.deepEqual(TEMPORARY_PRICING, []) }) it("matches reviewed late-October Beam promotion rates", () => { @@ -416,7 +397,7 @@ describe("MODEL_COSTS pricing overlay", () => { it("tracks pricing provenance", () => { assert.equal(PRICING_SOURCE_URL, "https://commandcode.ai/docs/resources/pricing-limits") - assert.equal(PRICING_LAST_VERIFIED, "2026-10-21") + assert.equal(PRICING_LAST_VERIFIED, "2026-10-22") }) it("fails once temporary pricing needs review", () => { From 22720fecac192f2414c7f82de128b422a987b5ac Mon Sep 17 00:00:00 2001 From: zverev Date: Thu, 22 Oct 2026 23:48:31 +0300 Subject: [PATCH 6/6] chore(models): sync CLI 1.87.2 retired free model metadata --- CHANGELOG.md | 2 ++ README.md | 2 +- src/commandcode-catalog.ts | 9 ++------- tests/test-models.ts | 20 +++++++++++++------- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 233aa64..60479ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +- Refresh the static capability snapshot to `command-code@1.87.2`, which removes image, reasoning, and effort metadata for the retired free MiniMax M3.1 Flash and Ornith 1.5 122B variants. Paid variants and pricing are unchanged. + - Refresh the static capability snapshot to `command-code@1.87.1`, which publishes no model metadata changes, and re-verify display pricing on 2026-10-22 for all 94 advertised models. Both free promotions ended on 2026-10-22 and the API dropped the models, so remove the `minimax/minimax-m3.1-flash:free` and `ornith/ornith-1.5-122b:free` display prices, their temporary-pricing guards, and their fixture entries; `TEMPORARY_PRICING` is empty until the pricing page publishes another dated promotion. Paid MiniMax M3.1 Flash ($0.15 input / $0.60 output / $0.015 cache read) and paid Ornith 1.5 122B ($0.16 input / $0.64 output / $0.02 cache read) rates are unchanged, and Beam's capacity-limited free pricing still has no published expiry. - Refresh the static capability snapshot to `command-code@1.87.0` and re-verify display pricing on 2026-10-21 for all 96 advertised models. MiniMax M3.1 Flash (paid and free) now supports image input, reasoning, and `low`/`medium`/`high`/`xhigh`/`max` efforts. Beam now supports reasoning with the same efforts and a 131,072-token output limit. Add paid and free Ornith 1.5 122B with image input and reasoning, without selectable efforts; paid rates are $0.16 input / $0.64 output / $0.02 cache read per million tokens, with no cache-write charge. Remove retired Cat Jam capability metadata. Extend the free MiniMax promotion to 2026-10-22T10:45:00Z and track the free Ornith promotion until 2026-10-22T06:00:00Z; both date-only guards require review from 2026-10-22 at 00:00 UTC, before either promotion ends. Existing paid rates and Beam's capacity-limited free pricing are unchanged. diff --git a/README.md b/README.md index c57f5b3..aeaf458 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,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.87.1`; 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, also dropping manual effort overrides that upstream has published itself, 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.87.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, also dropping manual effort overrides that upstream has published itself, 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 1437abe..1b7aa79 100644 --- a/src/commandcode-catalog.ts +++ b/src/commandcode-catalog.ts @@ -1,4 +1,4 @@ -export const COMMAND_CODE_CLI_VERSION = "1.87.1" +export const COMMAND_CODE_CLI_VERSION = "1.87.2" export type CommandCodeInputType = "text" | "image" export type CommandCodeReasoningEffort = @@ -11,7 +11,7 @@ export type CommandCodeReasoningEffort = | "max" /** - * Generated from command-code@1.87.1 by `npm run sync:commandcode-catalog`. + * Generated from command-code@1.87.2 by `npm run sync:commandcode-catalog`. * Do not edit manually. */ export const MODEL_INPUT_MODALITIES: Readonly> = { @@ -55,7 +55,6 @@ export const MODEL_INPUT_MODALITIES: Readonly> = { "meta/muse-spark-open": true, "meta/muse-wonder-1.0": true, "minimax/minimax-m3.1-flash": true, - "minimax/minimax-m3.1-flash:free": true, "MiniMaxAI/MiniMax-M3": true, "mistral/mistral-large-4": true, "moonshotai/Kimi-K2.7-Code": true, @@ -145,7 +142,6 @@ export const MODEL_REASONING: Readonly> = { "nvidia/nemotron-3-ultra-550b-a55b": true, "nvidia/nemotron-3.5-super-vl": true, "ornith/ornith-1.5-122b": true, - "ornith/ornith-1.5-122b:free": true, "poolside/laguna-s-2.1-free": true, "Qwen/Qwen3.6-Max-Preview": true, "Qwen/Qwen3.6-Plus": true, @@ -221,7 +217,6 @@ export const MODEL_EFFORTS: Readonly { it("advertises MiniMax Flash, Beam, and Ornith capabilities from the refreshed CLI", () => { const efforts = ["low", "medium", "high", "xhigh", "max"] - for (const id of ["minimax/minimax-m3.1-flash", "minimax/minimax-m3.1-flash:free"]) { + for (const id of ["minimax/minimax-m3.1-flash"]) { assert.deepEqual(inputModalitiesForModel(id), ["text", "image"]) assert.equal(MODEL_REASONING[id], true) assert.deepEqual(thinkingMetadataForModel(id)?.thinking?.efforts, efforts) @@ -222,16 +222,22 @@ describe("commandCodeModelsFromApiResponse()", () => { assert.equal(MODEL_REASONING[beam], true) assert.deepEqual(thinkingMetadataForModel(beam)?.thinking?.efforts, efforts) assert.equal(MODEL_MAX_OUTPUT_TOKENS[beam], 131_072) - for (const id of ["ornith/ornith-1.5-122b", "ornith/ornith-1.5-122b:free"]) { + for (const id of ["ornith/ornith-1.5-122b"]) { assert.deepEqual(inputModalitiesForModel(id), ["text", "image"]) assert.equal(MODEL_REASONING[id], true) assert.equal(MODEL_EFFORTS[id], undefined) } - const retired = "stealth/cat-jam:free" - assert.equal(MODEL_INPUT_MODALITIES[retired], undefined) - assert.equal(MODEL_REASONING[retired], undefined) - assert.equal(MODEL_EFFORTS[retired], undefined) - assert.equal(MODEL_MAX_OUTPUT_TOKENS[retired], undefined) + for (const retired of [ + "stealth/cat-jam:free", + "minimax/minimax-m3.1-flash:free", + "ornith/ornith-1.5-122b:free", + ]) { + assert.equal(MODEL_INPUT_MODALITIES[retired], undefined) + assert.equal(MODEL_REASONING[retired], undefined) + assert.equal(MODEL_EFFORTS[retired], undefined) + assert.equal(MODEL_MAX_OUTPUT_TOKENS[retired], undefined) + assert.deepEqual(inputModalitiesForModel(retired), ["text"]) + } }) it("prefers host-resolved input modalities over the catalog snapshot", () => {