Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Refresh the static capability snapshot to `command-code@1.88.1`, which publishes metadata for two models the CLI previously did not describe: `moonshotai/Kimi-K3.1-Pro` finally gains image input, reasoning, and selectable `low`/`high`/`max` efforts instead of the conservative text-only defaults it carried since 0.7.10, and the newly advertised `gpt-6.1-terra` arrives with image input, reasoning, and `low`/`medium`/`high`/`xhigh`/`max` efforts. Neither model publishes a model-specific output limit, so both keep the 65,536-token default. No other model metadata changed.
- Add reviewed display pricing for `gpt-6.1-terra`, verified against the official pricing page on 2026-10-28: $1 input / $5 output / $0.05 cache read / $1.25 cache write per million tokens up to 272K tokens, and $2 input / $7.5 output / $0.1 cache read / $2.5 cache write above that threshold. The reviewed snapshot now covers all 94 advertised models, so the daily catalog job stops reporting a missing price.
- Stop counting Oh My Pi's skill-description pre-passes as agent requests in `test-omp-compat.mjs`. OMP 18.13 compresses skill descriptions into routing hints at start-up by calling the configured model once per skill, which added a second `POST /provider/v1/chat/completions` and failed the request-count assertion against an unmodified `main`. Pre-passes are now counted separately, keyed on their body shape (user messages only — agent turns always carry a system prompt), and keep the ordinary mock response under the `403 upgrade_required` scenario so the fallback stays the only failing path. Test-only change; verified against OMP 18.12.6 and 18.13.2.

## 0.7.10 - 2026-10-23
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.88.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.88.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.

Expand Down
10 changes: 8 additions & 2 deletions src/commandcode-catalog.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const COMMAND_CODE_CLI_VERSION = "1.88.0"
export const COMMAND_CODE_CLI_VERSION = "1.88.1"

export type CommandCodeInputType = "text" | "image"
export type CommandCodeReasoningEffort =
Expand All @@ -11,7 +11,7 @@ export type CommandCodeReasoningEffort =
| "max"

/**
* Generated from command-code@1.88.0 by `npm run sync:commandcode-catalog`.
* Generated from command-code@1.88.1 by `npm run sync:commandcode-catalog`.
* Do not edit manually.
*/
export const MODEL_INPUT_MODALITIES: Readonly<Record<string, readonly CommandCodeInputType[]>> = {
Expand Down Expand Up @@ -47,6 +47,7 @@ export const MODEL_INPUT_MODALITIES: Readonly<Record<string, readonly CommandCod
"gpt-6-luna": ["text", "image"],
"gpt-6-sol": ["text", "image"],
"gpt-6.1-sol": ["text", "image"],
"gpt-6.1-terra": ["text", "image"],
"meta/muse-spark-1.1": ["text", "image"],
"meta/muse-spark-1.2": ["text", "image"],
"meta/muse-spark-1.2-contributor": ["text", "image"],
Expand All @@ -62,6 +63,7 @@ export const MODEL_INPUT_MODALITIES: Readonly<Record<string, readonly CommandCod
"moonshotai/Kimi-K2.7-Code": ["text", "image"],
"moonshotai/Kimi-K2.7-Code-Highspeed": ["text", "image"],
"moonshotai/Kimi-K3": ["text", "image"],
"moonshotai/Kimi-K3.1-Pro": ["text", "image"],
"nvidia/nemotron-3.5-super-vl": ["text", "image"],
"ornith/ornith-1.5-122b": ["text", "image"],
"Qwen/Qwen3.6-Plus": ["text", "image"],
Expand Down Expand Up @@ -123,6 +125,7 @@ export const MODEL_REASONING: Readonly<Record<string, true>> = {
"gpt-6-luna": true,
"gpt-6-sol": true,
"gpt-6.1-sol": true,
"gpt-6.1-terra": true,
"inclusionai/ling-3.1-flash": true,
"meituan/LongCat-2.0": true,
"meta/muse-spark-1.1": true,
Expand All @@ -138,6 +141,7 @@ export const MODEL_REASONING: Readonly<Record<string, true>> = {
"moonshotai/Kimi-K2.7-Code": true,
"moonshotai/Kimi-K2.7-Code-Highspeed": true,
"moonshotai/Kimi-K3": true,
"moonshotai/Kimi-K3.1-Pro": true,
"nvidia/nemotron-3-ultra-550b-a55b": true,
"nvidia/nemotron-3.5-super-vl": true,
"ornith/ornith-1.5-122b": true,
Expand Down Expand Up @@ -207,6 +211,7 @@ export const MODEL_EFFORTS: Readonly<Record<string, readonly CommandCodeReasonin
"gpt-6-luna": ["low", "medium", "high", "xhigh", "max"],
"gpt-6-sol": ["low", "medium", "high", "xhigh", "max"],
"gpt-6.1-sol": ["low", "medium", "high", "xhigh", "max"],
"gpt-6.1-terra": ["low", "medium", "high", "xhigh", "max"],
"inclusionai/ling-3.1-flash": ["low", "medium", "high"],
"meta/muse-spark-1.1": ["low", "medium", "high", "xhigh"],
"meta/muse-spark-1.2": ["low", "medium", "high", "xhigh"],
Expand All @@ -219,6 +224,7 @@ export const MODEL_EFFORTS: Readonly<Record<string, readonly CommandCodeReasonin
"MiniMaxAI/MiniMax-M3": ["low", "medium", "high"],
"mistral/mistral-large-4": ["low", "medium", "high"],
"moonshotai/Kimi-K3": ["low", "high", "max"],
"moonshotai/Kimi-K3.1-Pro": ["low", "high", "max"],
"nvidia/nemotron-3.5-super-vl": ["low", "medium", "high"],
"Qwen/Qwen3.8-27B": ["low", "medium", "xhigh"],
"Qwen/Qwen3.8-Flash": ["low", "medium", "xhigh"],
Expand Down
9 changes: 8 additions & 1 deletion src/pricing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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-23"
export const PRICING_LAST_VERIFIED = "2026-10-28"

export const ZERO_MODEL_COST: CommandCodeModelCost = {
input: 0,
Expand Down Expand Up @@ -260,6 +260,13 @@ export const MODEL_COSTS: Readonly<Record<string, CommandCodeModelCost>> = {
cacheWrite: 2.5,
tiers: [{ inputTokensAbove: 272_000, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }],
},
"gpt-6.1-terra": {
input: 1,
output: 5,
cacheRead: 0.05,
cacheWrite: 1.25,
tiers: [{ inputTokensAbove: 272_000, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }],
},
"gpt-6-sol": {
input: 2,
output: 10,
Expand Down
3 changes: 2 additions & 1 deletion tests/fixtures/commandcode-model-ids.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"fetchedAt": "2026-10-23T20:45:35.357Z",
"fetchedAt": "2026-10-28T08:21:13.861Z",
"source": "https://api.commandcode.ai/provider/v1/models",
"modelIds": [
"claude-sonnet-5-5",
Expand All @@ -15,6 +15,7 @@
"claude-haiku-4-5-20251001",
"gpt-6-astra",
"gpt-6.1-sol",
"gpt-6.1-terra",
"gpt-6-sol",
"gpt-6-luna",
"gpt-5.6-sol",
Expand Down
4 changes: 3 additions & 1 deletion tests/fixtures/commandcode-pricing.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"verifiedAt": "2026-10-23",
"verifiedAt": "2026-10-28",
"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": {
Expand All @@ -12,6 +12,7 @@
"claude-haiku-5-5": [[100000, 0.5, 2.5, 0.05, 0.625]],
"gpt-6-astra": [[272000, 20, 75, 2, 25]],
"gpt-6.1-sol": [[272000, 4, 15, 0.2, 5]],
"gpt-6.1-terra": [[272000, 2, 7.5, 0.1, 2.5]],
"gpt-6-sol": [[272000, 4, 15, 0.4, 5]],
"gpt-6-luna": [[272000, 0.2, 0.75, 0.02, 0.25]],
"gpt-5.6-sol": [[272000, 10, 45, 1, 12.5]],
Expand Down Expand Up @@ -95,6 +96,7 @@
"claude-haiku-4-5-20251001": [1, 5, 0.1, 1.25],
"gpt-6-astra": [10, 50, 1, 12.5],
"gpt-6.1-sol": [2, 10, 0.1, 2.5],
"gpt-6.1-terra": [1, 5, 0.05, 1.25],
"gpt-6-sol": [2, 10, 0.2, 2.5],
"gpt-6-luna": [0.1, 0.5, 0.01, 0.125],
"gpt-5.6-sol": [5, 30, 0.5, 6.25],
Expand Down
11 changes: 10 additions & 1 deletion tests/test-pricing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,15 @@ describe("MODEL_COSTS pricing overlay", () => {
cacheRead: 0.02,
cacheWrite: 0.25,
})
assertCost("gpt-6.1-terra", {
input: 1,
output: 5,
cacheRead: 0.05,
cacheWrite: 1.25,
})
assert.deepEqual(MODEL_COSTS["gpt-6.1-terra"]?.tiers, [
{ inputTokensAbove: 272_000, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 },
])
assert.deepEqual(MODEL_COSTS["xai/grok-4.6"]?.tiers, [
{
inputTokensAbove: 200_000,
Expand Down Expand Up @@ -397,7 +406,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-23")
assert.equal(PRICING_LAST_VERIFIED, "2026-10-28")
})

it("fails once temporary pricing needs review", () => {
Expand Down
Loading