opencode-cmd-provider 1.6.2 → 1.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +66 -1
- package/README.md +19 -4
- package/dist/src/catalog/classification.d.ts +7 -0
- package/dist/src/catalog/classification.js +89 -0
- package/dist/src/catalog/facts.d.ts +4 -4
- package/dist/src/catalog/facts.js +24 -4
- package/dist/src/catalog/snapshot.js +6 -0
- package/dist/src/deals/catalog.d.ts +1 -1
- package/dist/src/deals/catalog.js +7 -1
- package/dist/src/provider/reasoning.d.ts +20 -0
- package/dist/src/provider/reasoning.js +35 -30
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,69 @@
|
|
|
1
|
-
|
|
1
|
+
## 1.6.4 - 2026-09-03
|
|
2
|
+
|
|
3
|
+
### Model catalog
|
|
4
|
+
|
|
5
|
+
## Model catalog
|
|
6
|
+
|
|
7
|
+
- **FACTS_LAST_REFRESHED**: `2026-09-02` → `2026-09-03`
|
|
8
|
+
|
|
9
|
+
| Model | Change | Before | After |
|
|
10
|
+
| --------------------------------- | ------- | ------ | ------------------------ |
|
|
11
|
+
| `meta/muse-spark-1.1` | efforts | — | low, medium, high, xhigh |
|
|
12
|
+
| `meta/muse-spark-1.2` | efforts | — | low, medium, high, xhigh |
|
|
13
|
+
| `meta/muse-spark-1.2-contributor` | efforts | — | low, medium, high, xhigh |
|
|
14
|
+
| `meta/muse-spark-1.3` | efforts | — | low, medium, high, xhigh |
|
|
15
|
+
| `meta/muse-spark-1.3-contributor` | efforts | — | low, medium, high, xhigh |
|
|
16
|
+
|
|
17
|
+
### Reasoning classification
|
|
18
|
+
|
|
19
|
+
## Reasoning classification
|
|
20
|
+
|
|
21
|
+
- **CLASSIFICATION_LAST_REFRESHED**: `2026-09-02` → `2026-09-03`
|
|
22
|
+
|
|
23
|
+
| Model | Change | Before | After |
|
|
24
|
+
| --------------------------------- | -------------- | ------------------------- | ---------------------------------------- |
|
|
25
|
+
| `meta/muse-spark-1.1` | classification | reasoning-without-efforts | efforts model (low, medium, high, xhigh) |
|
|
26
|
+
| `meta/muse-spark-1.2` | classification | reasoning-without-efforts | efforts model (low, medium, high, xhigh) |
|
|
27
|
+
| `meta/muse-spark-1.2-contributor` | classification | reasoning-without-efforts | efforts model (low, medium, high, xhigh) |
|
|
28
|
+
| `meta/muse-spark-1.3` | classification | reasoning-without-efforts | efforts model (low, medium, high, xhigh) |
|
|
29
|
+
| `meta/muse-spark-1.3-contributor` | classification | reasoning-without-efforts | efforts model (low, medium, high, xhigh) |
|
|
30
|
+
|
|
31
|
+
## 1.6.3 - 2026-09-02
|
|
32
|
+
|
|
33
|
+
### Model catalog
|
|
34
|
+
|
|
35
|
+
## Model catalog
|
|
36
|
+
|
|
37
|
+
- **FACTS_LAST_REFRESHED**: `2026-09-01` → `2026-09-01`
|
|
38
|
+
|
|
39
|
+
No changes.
|
|
40
|
+
|
|
41
|
+
### Reasoning classification
|
|
42
|
+
|
|
43
|
+
## Reasoning classification
|
|
44
|
+
|
|
45
|
+
- **CLASSIFICATION_LAST_REFRESHED**: `` → `2026-09-02`
|
|
46
|
+
|
|
47
|
+
_first refresh — no classification data on the before side._
|
|
48
|
+
|
|
49
|
+
### Deals intelligence
|
|
50
|
+
|
|
51
|
+
## Deals intelligence
|
|
52
|
+
|
|
53
|
+
- **DEAL_LAST_REFRESHED**: `2026-09-01` → `2026-09-01`
|
|
54
|
+
|
|
55
|
+
No changes.
|
|
56
|
+
|
|
57
|
+
### Full changeset
|
|
58
|
+
|
|
59
|
+
The generated-catalog diff above is only the data layer (the new classification module — first refresh). This PR carries the whole derived-classification implementation (#109–#116): the shared RSC record source (scripts/rsc-source.mjs), the classification generator in the refresh ladder, the derived runtime (src/provider/reasoning.ts), the semantic diff sections + classificationChanged boolean, the meaningful-change drift detection (date-only churn opens no PR), ADR-0006/0007 + glossary + docs, and the auto-release workflow. npm test green on the head commit; per-ticket summary in the commit trail.
|
|
60
|
+
|
|
61
|
+
### Maintainer actions before merge (ADR-0007)
|
|
62
|
+
|
|
63
|
+
1. Add the RELEASE_PUSH_TOKEN secret (fine-grained PAT, this repo only, Contents: Read and write) so the tag push triggers the release pipeline — a default-token push does not start other workflows.
|
|
64
|
+
2. Branch protection is currently off, so the bot push lands freely; when you enable it, add a bypass for the pushing identity (ruleset bypass list).
|
|
65
|
+
|
|
66
|
+
_Opened from `catalog-refresh/2026-09-02` so merging exercises the new merge-to-release path: the auto-release workflow cuts `chore(release): 1.6.3` + tags v1.6.3, and release.yml publishes._
|
|
2
67
|
|
|
3
68
|
## 1.6.2 - 2026-09-01
|
|
4
69
|
|
package/README.md
CHANGED
|
@@ -161,6 +161,11 @@ auto-registered models only.
|
|
|
161
161
|
- Snapshot — `src/catalog/snapshot.ts` (model ids, names, context lengths) plus
|
|
162
162
|
`src/catalog/facts.ts` (reasoning efforts, per-1M-token rates, input
|
|
163
163
|
modalities). Regenerated from the live catalog via `npm run refresh:snapshot`.
|
|
164
|
+
- Classification — `src/catalog/classification.ts` (per-model reasoning
|
|
165
|
+
capability, derived from the `reasoning` flag on the docs' RSC slug
|
|
166
|
+
records; ADR-0006). Regenerated via `npm run refresh:classification`; the
|
|
167
|
+
runtime derives its reasoning metadata from this module, so upstream
|
|
168
|
+
classification changes land as data, never as hand edits.
|
|
164
169
|
- Deals — `src/deals/catalog.ts` (per-model tier, benchmarks, deal
|
|
165
170
|
discounts, `was`/`now` rates, peak/off-peak windows, and GOAT/Pro monthly
|
|
166
171
|
allowances for every model). Extracted from the Command Code docs' RSC
|
|
@@ -173,12 +178,16 @@ auto-registered models only.
|
|
|
173
178
|
Run `npm run refresh` to regenerate everything at once: the snapshot and
|
|
174
179
|
facts come from the live Command Code catalog, the RSC fixtures are
|
|
175
180
|
re-captured from the live docs pages (`npm run refresh:fixtures`), and the
|
|
176
|
-
deals catalog
|
|
177
|
-
and tests stay in lockstep. A daily GitHub
|
|
181
|
+
classification module and deals catalog are regenerated from the fresh
|
|
182
|
+
fixtures — so fixtures, catalogs, and tests stay in lockstep. A daily GitHub
|
|
183
|
+
Actions cron
|
|
178
184
|
(`.github/workflows/catalog-refresh.yml`, 06:00 UTC, also manually
|
|
179
185
|
triggerable via `workflow_dispatch`) runs the same pipeline: when upstream
|
|
180
186
|
moved it opens a `chore: catalog refresh` PR whose body is the human-readable
|
|
181
|
-
diff from `scripts/diff-catalog.mjs
|
|
187
|
+
diff from `scripts/diff-catalog.mjs` — model catalog, reasoning
|
|
188
|
+
classification (flips, new reasoning models, retirements, active overrides),
|
|
189
|
+
and deals sections; when nothing meaningful drifted it exits silently (a
|
|
190
|
+
run whose only change is the refreshed-date stamps opens no PR).
|
|
182
191
|
|
|
183
192
|
Auto-registration adds no network latency to OpenCode startup — the snapshot is
|
|
184
193
|
bundled, and the plugin never contacts the Command Code API to list models. The
|
|
@@ -199,7 +208,13 @@ compatible API endpoints:
|
|
|
199
208
|
|
|
200
209
|
### Reasoning support
|
|
201
210
|
|
|
202
|
-
Reasoning metadata is
|
|
211
|
+
Reasoning metadata is derived from the generated catalogs (ADR-0006): models
|
|
212
|
+
upstream flags as reasoning-capable advertise `reasoning: true`
|
|
213
|
+
automatically — with explicit effort variants when the generated facts list
|
|
214
|
+
effort levels, and without variants otherwise. Supported levels are sent as
|
|
215
|
+
the documented `reasoning_effort` request field; `off`, unsupported levels,
|
|
216
|
+
and newly discovered models without metadata do not add reasoning fields to
|
|
217
|
+
the request. No prompt instructions are injected.
|
|
203
218
|
|
|
204
219
|
Reasoning blocks from completed assistant turns are not replayed to Command Code in later requests; only the user-visible text and completed tool calls are sent back as history. This prevents prior private reasoning traces from interfering with reasoning on follow-up turns.
|
|
205
220
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const CLASSIFICATION_SOURCE_URLS: ReadonlyArray<string>;
|
|
2
|
+
export declare const CLASSIFICATION_LAST_REFRESHED = "2026-09-03";
|
|
3
|
+
export declare const CLASSIFICATION_OVERRIDES: Readonly<Record<string, {
|
|
4
|
+
capability: boolean;
|
|
5
|
+
justification: string;
|
|
6
|
+
}>>;
|
|
7
|
+
export declare const MODEL_REASONING_CAPABILITY: Readonly<Record<string, boolean>>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// src/catalog/classification.ts — GENERATED by scripts/refresh-classification.mjs. Do not edit.
|
|
2
|
+
//
|
|
3
|
+
// Per-model reasoning capability, derived from the `reasoning` flag on
|
|
4
|
+
// the Command Code docs' RSC slug records (plans/goat + plans/pro,
|
|
5
|
+
// slug-id aliasing applied, keyed by snapshot id) — the same
|
|
6
|
+
// snapshot-keyed records the Deals catalog consumes. Classification is
|
|
7
|
+
// upstream-managed and derived, never hand-maintained; the only human
|
|
8
|
+
// seam is CLASSIFICATION_OVERRIDES, whose entries each carry a written
|
|
9
|
+
// justification naming the upstream disagreement (see ADR-0006).
|
|
10
|
+
// Regenerate with `npm run refresh` (offline:
|
|
11
|
+
// `npm run refresh:classification -- --fixtures`).
|
|
12
|
+
export const CLASSIFICATION_SOURCE_URLS = [
|
|
13
|
+
"https://commandcode.ai/docs/plans/goat",
|
|
14
|
+
"https://commandcode.ai/docs/plans/pro",
|
|
15
|
+
];
|
|
16
|
+
export const CLASSIFICATION_LAST_REFRESHED = "2026-09-03";
|
|
17
|
+
// Active capability overrides. Empty = upstream data is truth.
|
|
18
|
+
// Every entry requires a written justification naming the upstream
|
|
19
|
+
// disagreement; entries are rendered into the refresh PR body.
|
|
20
|
+
export const CLASSIFICATION_OVERRIDES = {};
|
|
21
|
+
export const MODEL_REASONING_CAPABILITY = {
|
|
22
|
+
"claude-fable-5": true,
|
|
23
|
+
"claude-fable-5-1": true,
|
|
24
|
+
"claude-haiku-4-5-20251001": false,
|
|
25
|
+
"claude-opus-4-7": true,
|
|
26
|
+
"claude-opus-4-8": true,
|
|
27
|
+
"claude-opus-5": true,
|
|
28
|
+
"claude-sonnet-4-6": true,
|
|
29
|
+
"claude-sonnet-5": true,
|
|
30
|
+
"deepseek/deepseek-v4-flash": true,
|
|
31
|
+
"deepseek/deepseek-v4-flash-fast": true,
|
|
32
|
+
"deepseek/deepseek-v4-flash-vision-exp": true,
|
|
33
|
+
"deepseek/deepseek-v4-pro": true,
|
|
34
|
+
"google/gemini-3.1-flash-lite": true,
|
|
35
|
+
"google/gemini-3.5-flash": true,
|
|
36
|
+
"google/gemini-3.5-flash-lite": true,
|
|
37
|
+
"google/gemini-3.6-flash": true,
|
|
38
|
+
"google/gemini-3.7-flash": true,
|
|
39
|
+
"google/gemini-3.8-flash": true,
|
|
40
|
+
"gpt-5.3-codex": true,
|
|
41
|
+
"gpt-5.4": true,
|
|
42
|
+
"gpt-5.4-mini": true,
|
|
43
|
+
"gpt-5.5": true,
|
|
44
|
+
"gpt-5.6-luna": true,
|
|
45
|
+
"gpt-5.6-sol": true,
|
|
46
|
+
"gpt-5.6-terra": true,
|
|
47
|
+
"meituan/LongCat-2.0:free": true,
|
|
48
|
+
"meta/muse-spark-1.1": true,
|
|
49
|
+
"meta/muse-spark-1.2": true,
|
|
50
|
+
"meta/muse-spark-1.2-contributor": true,
|
|
51
|
+
"meta/muse-spark-1.3": true,
|
|
52
|
+
"meta/muse-spark-1.3-contributor": true,
|
|
53
|
+
"MiniMaxAI/MiniMax-M2.5": false,
|
|
54
|
+
"MiniMaxAI/MiniMax-M2.7": false,
|
|
55
|
+
"MiniMaxAI/MiniMax-M3": true,
|
|
56
|
+
"moonshotai/Kimi-K2.5": false,
|
|
57
|
+
"moonshotai/Kimi-K2.6": false,
|
|
58
|
+
"moonshotai/Kimi-K2.7-Code": true,
|
|
59
|
+
"moonshotai/Kimi-K2.7-Code-Highspeed": true,
|
|
60
|
+
"moonshotai/Kimi-K3": true,
|
|
61
|
+
"nvidia/nemotron-3-ultra-550b-a55b": true,
|
|
62
|
+
"poolside/laguna-s-2.1-free": true,
|
|
63
|
+
"Qwen/Qwen3.6-Max-Preview": true,
|
|
64
|
+
"Qwen/Qwen3.6-Plus": true,
|
|
65
|
+
"Qwen/Qwen3.7-Flash": true,
|
|
66
|
+
"Qwen/Qwen3.7-Max": true,
|
|
67
|
+
"Qwen/Qwen3.7-Plus": true,
|
|
68
|
+
"Qwen/Qwen3.8-27B": true,
|
|
69
|
+
"Qwen/Qwen3.8-Flash": true,
|
|
70
|
+
"Qwen/Qwen3.8-Max": true,
|
|
71
|
+
"Qwen/Qwen3.8-Max-0902": true,
|
|
72
|
+
"sakana/fugu-ultra": true,
|
|
73
|
+
"stepfun/Step-3.5-Flash": true,
|
|
74
|
+
"stepfun/Step-3.7-Flash": true,
|
|
75
|
+
"tencent/hy3-paid": true,
|
|
76
|
+
"tencent/hy4-preview": true,
|
|
77
|
+
"thinkingmachines/inkling": true,
|
|
78
|
+
"thinkingmachines/inkling-small": true,
|
|
79
|
+
"xai/grok-4.5": true,
|
|
80
|
+
"xai/grok-4.6": true,
|
|
81
|
+
"xiaomi/mimo-v2.5": false,
|
|
82
|
+
"xiaomi/mimo-v2.5-pro": false,
|
|
83
|
+
"z-ai/glm-5.3-flash": true,
|
|
84
|
+
"zai-org/GLM-5": false,
|
|
85
|
+
"zai-org/GLM-5.1": false,
|
|
86
|
+
"zai-org/GLM-5.2": true,
|
|
87
|
+
"zai-org/GLM-5.2-Fast": false,
|
|
88
|
+
"zai-org/GLM-5.3": true,
|
|
89
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export declare const FACTS_SOURCE_URL = "https://unpkg.com/command-code@1.
|
|
2
|
-
export declare const MODALITIES_SOURCE_URL = "https://unpkg.com/command-code@1.
|
|
3
|
-
export declare const FACTS_PACKAGE_VERSION = "1.
|
|
4
|
-
export declare const FACTS_LAST_REFRESHED = "2026-09-
|
|
1
|
+
export declare const FACTS_SOURCE_URL = "https://unpkg.com/command-code@1.46.0/dist/bundled/command-code-knowledge/reference/models.md";
|
|
2
|
+
export declare const MODALITIES_SOURCE_URL = "https://unpkg.com/command-code@1.46.0/dist/cli.mjs";
|
|
3
|
+
export declare const FACTS_PACKAGE_VERSION = "1.46.0";
|
|
4
|
+
export declare const FACTS_LAST_REFRESHED = "2026-09-03";
|
|
5
5
|
export declare const MODEL_EFFORTS: Readonly<Record<string, readonly string[]>>;
|
|
6
6
|
export declare const MODEL_COSTS: Readonly<Record<string, {
|
|
7
7
|
input: number;
|
|
@@ -4,24 +4,27 @@
|
|
|
4
4
|
// command-code npm package's bundled model catalog (models.md), plus input
|
|
5
5
|
// modalities parsed from its CLI bundle (dist/cli.mjs). Regenerate
|
|
6
6
|
// with `npm run refresh:snapshot`.
|
|
7
|
-
export const FACTS_SOURCE_URL = "https://unpkg.com/command-code@1.
|
|
8
|
-
export const MODALITIES_SOURCE_URL = "https://unpkg.com/command-code@1.
|
|
9
|
-
export const FACTS_PACKAGE_VERSION = "1.
|
|
10
|
-
export const FACTS_LAST_REFRESHED = "2026-09-
|
|
7
|
+
export const FACTS_SOURCE_URL = "https://unpkg.com/command-code@1.46.0/dist/bundled/command-code-knowledge/reference/models.md";
|
|
8
|
+
export const MODALITIES_SOURCE_URL = "https://unpkg.com/command-code@1.46.0/dist/cli.mjs";
|
|
9
|
+
export const FACTS_PACKAGE_VERSION = "1.46.0";
|
|
10
|
+
export const FACTS_LAST_REFRESHED = "2026-09-03";
|
|
11
11
|
export const MODEL_EFFORTS = {
|
|
12
12
|
"deepseek/deepseek-v4-pro": ["high", "max"],
|
|
13
13
|
"deepseek/deepseek-v4-flash": ["high", "max"],
|
|
14
14
|
"deepseek/deepseek-v4-flash-vision-exp": ["high", "max"],
|
|
15
15
|
"deepseek/deepseek-v4-flash-fast": ["low", "high", "max"],
|
|
16
|
+
"moonshotai/Kimi-K3": ["low", "high", "max"],
|
|
16
17
|
"z-ai/glm-5.3-flash": ["low", "high", "max"],
|
|
17
18
|
"zai-org/GLM-5.3": ["low", "high", "max"],
|
|
18
19
|
"zai-org/GLM-5.2": ["high", "max"],
|
|
20
|
+
"Qwen/Qwen3.8-Max-0902": ["low", "medium", "xhigh"],
|
|
19
21
|
"Qwen/Qwen3.8-Max": ["low", "medium", "xhigh"],
|
|
20
22
|
"Qwen/Qwen3.8-27B": ["low", "medium", "xhigh"],
|
|
21
23
|
"Qwen/Qwen3.8-Flash": ["low", "medium", "xhigh"],
|
|
22
24
|
"tencent/hy4-preview": ["low", "medium", "high"],
|
|
23
25
|
"claude-sonnet-5": ["low", "medium", "high", "xhigh", "max"],
|
|
24
26
|
"claude-sonnet-4-6": ["low", "medium", "high", "xhigh", "max"],
|
|
27
|
+
"claude-fable-5-1": ["low", "medium", "high", "xhigh", "max"],
|
|
25
28
|
"claude-fable-5": ["low", "medium", "high", "xhigh", "max"],
|
|
26
29
|
"claude-opus-5": ["low", "medium", "high", "xhigh", "max"],
|
|
27
30
|
"claude-opus-4-8": ["low", "medium", "high", "xhigh", "max"],
|
|
@@ -33,12 +36,18 @@ export const MODEL_EFFORTS = {
|
|
|
33
36
|
"gpt-5.4": ["low", "medium", "high", "xhigh"],
|
|
34
37
|
"gpt-5.3-codex": ["low", "medium", "high", "xhigh"],
|
|
35
38
|
"gpt-5.4-mini": ["low", "medium", "high"],
|
|
39
|
+
"google/gemini-3.8-flash": ["low", "medium", "high"],
|
|
36
40
|
"google/gemini-3.7-flash": ["low", "medium", "high"],
|
|
37
41
|
"google/gemini-3.6-flash": ["low", "medium", "high"],
|
|
38
42
|
"google/gemini-3.5-flash": ["low", "medium", "high"],
|
|
39
43
|
"google/gemini-3.5-flash-lite": ["low", "medium", "high"],
|
|
40
44
|
"google/gemini-3.1-flash-lite": ["low", "medium", "high"],
|
|
41
45
|
"sakana/fugu-ultra": ["high", "xhigh"],
|
|
46
|
+
"meta/muse-spark-1.1": ["low", "medium", "high", "xhigh"],
|
|
47
|
+
"meta/muse-spark-1.2": ["low", "medium", "high", "xhigh"],
|
|
48
|
+
"meta/muse-spark-1.2-contributor": ["low", "medium", "high", "xhigh"],
|
|
49
|
+
"meta/muse-spark-1.3": ["low", "medium", "high", "xhigh"],
|
|
50
|
+
"meta/muse-spark-1.3-contributor": ["low", "medium", "high", "xhigh"],
|
|
42
51
|
"xai/grok-4.5": ["low", "medium", "high"],
|
|
43
52
|
"xai/grok-4.6": ["low", "medium", "high", "xhigh"],
|
|
44
53
|
};
|
|
@@ -63,6 +72,7 @@ export const MODEL_COSTS = {
|
|
|
63
72
|
"MiniMaxAI/MiniMax-M2.5": { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0 },
|
|
64
73
|
"xiaomi/mimo-v2.5-pro": { input: 0.435, output: 0.87, cacheRead: 0.0036, cacheWrite: 0 },
|
|
65
74
|
"xiaomi/mimo-v2.5": { input: 0.14, output: 0.28, cacheRead: 0.0028, cacheWrite: 0 },
|
|
75
|
+
"Qwen/Qwen3.8-Max-0902": { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 },
|
|
66
76
|
"Qwen/Qwen3.8-Max": { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 2.5 },
|
|
67
77
|
"Qwen/Qwen3.8-27B": { input: 0.4, output: 3, cacheRead: 0.04, cacheWrite: 0 },
|
|
68
78
|
"Qwen/Qwen3.8-Flash": { input: 0.16, output: 0.47, cacheRead: 0.016, cacheWrite: 0 },
|
|
@@ -71,6 +81,7 @@ export const MODEL_COSTS = {
|
|
|
71
81
|
"Qwen/Qwen3.7-Flash": { input: 0.03, output: 0.13, cacheRead: 0.006, cacheWrite: 0.038 },
|
|
72
82
|
"Qwen/Qwen3.6-Max-Preview": { input: 1.3, output: 7.8, cacheRead: 0.26, cacheWrite: 1.63 },
|
|
73
83
|
"Qwen/Qwen3.6-Plus": { input: 0.5, output: 3, cacheRead: 0.1, cacheWrite: 0 },
|
|
84
|
+
"meituan/LongCat-2.0:free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
74
85
|
"stepfun/Step-3.7-Flash": { input: 0.2, output: 1.15, cacheRead: 0.04, cacheWrite: 0 },
|
|
75
86
|
"stepfun/Step-3.5-Flash": { input: 0.1, output: 0.3, cacheRead: 0.02, cacheWrite: 0 },
|
|
76
87
|
"tencent/hy3-paid": { input: 0.14, output: 0.58, cacheRead: 0.035, cacheWrite: 0 },
|
|
@@ -81,6 +92,7 @@ export const MODEL_COSTS = {
|
|
|
81
92
|
"poolside/laguna-s-2.1-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
82
93
|
"claude-sonnet-5": { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 },
|
|
83
94
|
"claude-sonnet-4-6": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
|
|
95
|
+
"claude-fable-5-1": { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 },
|
|
84
96
|
"claude-fable-5": { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 },
|
|
85
97
|
"claude-opus-5": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
|
|
86
98
|
"claude-opus-4-8": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
|
|
@@ -93,6 +105,7 @@ export const MODEL_COSTS = {
|
|
|
93
105
|
"gpt-5.4": { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 },
|
|
94
106
|
"gpt-5.3-codex": { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 },
|
|
95
107
|
"gpt-5.4-mini": { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 },
|
|
108
|
+
"google/gemini-3.8-flash": { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 },
|
|
96
109
|
"google/gemini-3.7-flash": { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0.08334 },
|
|
97
110
|
"google/gemini-3.6-flash": { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 },
|
|
98
111
|
"google/gemini-3.5-flash": { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 },
|
|
@@ -102,6 +115,8 @@ export const MODEL_COSTS = {
|
|
|
102
115
|
"meta/muse-spark-1.1": { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 },
|
|
103
116
|
"meta/muse-spark-1.2": { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 },
|
|
104
117
|
"meta/muse-spark-1.2-contributor": { input: 0.1, output: 0.2, cacheRead: 0.002, cacheWrite: 0 },
|
|
118
|
+
"meta/muse-spark-1.3": { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 },
|
|
119
|
+
"meta/muse-spark-1.3-contributor": { input: 0.1, output: 0.2, cacheRead: 0.002, cacheWrite: 0 },
|
|
105
120
|
"xai/grok-4.5": { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 },
|
|
106
121
|
"xai/grok-4.6": { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 },
|
|
107
122
|
};
|
|
@@ -113,7 +128,9 @@ export const MODEL_INPUT_MODALITIES = {
|
|
|
113
128
|
"Qwen/Qwen3.8-27B": ["text", "image"],
|
|
114
129
|
"Qwen/Qwen3.8-Flash": ["text", "image"],
|
|
115
130
|
"Qwen/Qwen3.8-Max": ["text", "image"],
|
|
131
|
+
"Qwen/Qwen3.8-Max-0902": ["text", "image"],
|
|
116
132
|
"claude-fable-5": ["text", "image"],
|
|
133
|
+
"claude-fable-5-1": ["text", "image"],
|
|
117
134
|
"claude-haiku-4-5-20251001": ["text", "image"],
|
|
118
135
|
"claude-opus-4-7": ["text", "image"],
|
|
119
136
|
"claude-opus-4-8": ["text", "image"],
|
|
@@ -126,6 +143,7 @@ export const MODEL_INPUT_MODALITIES = {
|
|
|
126
143
|
"google/gemini-3.5-flash-lite": ["text", "image"],
|
|
127
144
|
"google/gemini-3.6-flash": ["text", "image"],
|
|
128
145
|
"google/gemini-3.7-flash": ["text", "image"],
|
|
146
|
+
"google/gemini-3.8-flash": ["text", "image"],
|
|
129
147
|
"gpt-5.3-codex": ["text", "image"],
|
|
130
148
|
"gpt-5.4": ["text", "image"],
|
|
131
149
|
"gpt-5.4-mini": ["text", "image"],
|
|
@@ -136,6 +154,8 @@ export const MODEL_INPUT_MODALITIES = {
|
|
|
136
154
|
"meta/muse-spark-1.1": ["text", "image"],
|
|
137
155
|
"meta/muse-spark-1.2": ["text", "image"],
|
|
138
156
|
"meta/muse-spark-1.2-contributor": ["text", "image"],
|
|
157
|
+
"meta/muse-spark-1.3": ["text", "image"],
|
|
158
|
+
"meta/muse-spark-1.3-contributor": ["text", "image"],
|
|
139
159
|
"moonshotai/Kimi-K2.5": ["text", "image"],
|
|
140
160
|
"moonshotai/Kimi-K2.6": ["text", "image"],
|
|
141
161
|
"moonshotai/Kimi-K2.7-Code": ["text", "image"],
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
export const MODEL_SNAPSHOT = [
|
|
7
7
|
{ id: "claude-sonnet-5", name: "Claude Sonnet 5", contextLength: 1000000 },
|
|
8
8
|
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6", contextLength: 1000000 },
|
|
9
|
+
{ id: "claude-fable-5-1", name: "Claude Fable 5.1", contextLength: 1000000 },
|
|
9
10
|
{ id: "claude-fable-5", name: "Claude Fable 5", contextLength: 1000000 },
|
|
10
11
|
{ id: "claude-opus-5", name: "Claude Opus 5", contextLength: 1000000 },
|
|
11
12
|
{ id: "claude-opus-4-8", name: "Claude Opus 4.8", contextLength: 1000000 },
|
|
@@ -38,6 +39,7 @@ export const MODEL_SNAPSHOT = [
|
|
|
38
39
|
{ id: "MiniMaxAI/MiniMax-M2.5", name: "MiniMax M2.5", contextLength: 200000 },
|
|
39
40
|
{ id: "xiaomi/mimo-v2.5-pro", name: "MiMo V2.5 Pro", contextLength: 1000000 },
|
|
40
41
|
{ id: "xiaomi/mimo-v2.5", name: "MiMo V2.5", contextLength: 1000000 },
|
|
42
|
+
{ id: "Qwen/Qwen3.8-Max-0902", name: "Qwen 3.8 Max 0902", contextLength: 1000000 },
|
|
41
43
|
{ id: "Qwen/Qwen3.8-Max", name: "Qwen 3.8 Max", contextLength: 1000000 },
|
|
42
44
|
{ id: "Qwen/Qwen3.8-27B", name: "Qwen 3.8 27B", contextLength: 262144 },
|
|
43
45
|
{ id: "Qwen/Qwen3.8-Flash", name: "Qwen 3.8 Flash", contextLength: 1000000 },
|
|
@@ -46,10 +48,12 @@ export const MODEL_SNAPSHOT = [
|
|
|
46
48
|
{ id: "Qwen/Qwen3.7-Flash", name: "Qwen 3.7 Flash", contextLength: 1000000 },
|
|
47
49
|
{ id: "Qwen/Qwen3.6-Max-Preview", name: "Qwen 3.6 Max Preview", contextLength: 200000 },
|
|
48
50
|
{ id: "Qwen/Qwen3.6-Plus", name: "Qwen 3.6 Plus", contextLength: 200000 },
|
|
51
|
+
{ id: "meituan/LongCat-2.0:free", name: "LongCat 2.0", contextLength: 1048576 },
|
|
49
52
|
{ id: "stepfun/Step-3.7-Flash", name: "Step 3.7 Flash", contextLength: 256000 },
|
|
50
53
|
{ id: "stepfun/Step-3.5-Flash", name: "Step 3.5 Flash", contextLength: 1000000 },
|
|
51
54
|
{ id: "tencent/hy3-paid", name: "Tencent Hy3", contextLength: 262144 },
|
|
52
55
|
{ id: "tencent/hy4-preview", name: "Tencent Hy4 Preview", contextLength: 1048576 },
|
|
56
|
+
{ id: "google/gemini-3.8-flash", name: "Gemini 3.8 Flash", contextLength: 1000000 },
|
|
53
57
|
{ id: "google/gemini-3.7-flash", name: "Gemini 3.7 Flash", contextLength: 1048576 },
|
|
54
58
|
{ id: "google/gemini-3.6-flash", name: "Gemini 3.6 Flash", contextLength: 1000000 },
|
|
55
59
|
{ id: "google/gemini-3.5-flash", name: "Gemini 3.5 Flash", contextLength: 1000000 },
|
|
@@ -63,6 +67,8 @@ export const MODEL_SNAPSHOT = [
|
|
|
63
67
|
{ id: "meta/muse-spark-1.1", name: "Muse Spark 1.1", contextLength: 1048576 },
|
|
64
68
|
{ id: "meta/muse-spark-1.2", name: "Muse Spark 1.2", contextLength: 1048576 },
|
|
65
69
|
{ id: "meta/muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", contextLength: 1048576 },
|
|
70
|
+
{ id: "meta/muse-spark-1.3", name: "Muse Spark 1.3", contextLength: 1048576 },
|
|
71
|
+
{ id: "meta/muse-spark-1.3-contributor", name: "Muse Spark 1.3 Contributor", contextLength: 1048576 },
|
|
66
72
|
{ id: "xai/grok-4.5", name: "Grok 4.5", contextLength: 500000 },
|
|
67
73
|
{ id: "xai/grok-4.6", name: "Grok 4.6", contextLength: 500000 },
|
|
68
74
|
];
|
|
@@ -51,5 +51,5 @@ export interface ModelDeals {
|
|
|
51
51
|
export declare const MODEL_DEALS: Readonly<Record<string, ModelDeals>>;
|
|
52
52
|
export declare const PLAN_CATALOG: Readonly<Record<PlanId, PlanInfo>>;
|
|
53
53
|
export declare const DEAL_SOURCE_URL = "https://commandcode.ai/docs/resources/pricing-limits";
|
|
54
|
-
export declare const DEAL_LAST_REFRESHED = "2026-09-
|
|
54
|
+
export declare const DEAL_LAST_REFRESHED = "2026-09-03";
|
|
55
55
|
export declare const DEAL_PACKAGE_VERSION = "docs";
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
// without network access at runtime. Regenerate with `npm run refresh:deals`.
|
|
7
7
|
export const MODEL_DEALS = {
|
|
8
8
|
"claude-fable-5": { tier: "premium", benchmark: { "intelligence": 62.1, "tokPerSec": 67.8 }, free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
9
|
+
"claude-fable-5-1": { tier: "premium", free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
9
10
|
"claude-haiku-4-5-20251001": { tier: "premium", benchmark: { "intelligence": 24.1, "tokPerSec": 103.9 }, free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
10
11
|
"claude-opus-4-7": { tier: "premium", benchmark: { "intelligence": 55 }, free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
11
12
|
"claude-opus-4-8": { tier: "premium", benchmark: { "intelligence": 57.3 }, free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
@@ -21,6 +22,7 @@ export const MODEL_DEALS = {
|
|
|
21
22
|
"google/gemini-3.5-flash-lite": { tier: "premium", benchmark: { "intelligence": 37.4, "tokPerSec": 368.8 }, free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
22
23
|
"google/gemini-3.6-flash": { tier: "premium", benchmark: { "intelligence": 51.6, "tokPerSec": 197.3 }, free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
23
24
|
"google/gemini-3.7-flash": { tier: "opensource", benchmark: { "intelligence": 56, "tokPerSec": 365.9 }, free: false, allowance: { "goat": 40, "pro": 50 } },
|
|
25
|
+
"google/gemini-3.8-flash": { tier: "premium", free: false, allowance: { "goat": 40, "pro": 50 } },
|
|
24
26
|
"gpt-5.3-codex": { tier: "premium", benchmark: { "intelligence": 45.5, "tokPerSec": 121.4 }, free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
25
27
|
"gpt-5.4": { tier: "premium", benchmark: { "intelligence": 53.1 }, free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
26
28
|
"gpt-5.4-mini": { tier: "premium", benchmark: { "intelligence": 40.9 }, free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
@@ -28,9 +30,12 @@ export const MODEL_DEALS = {
|
|
|
28
30
|
"gpt-5.6-luna": { tier: "opensource", benchmark: { "intelligence": 52.3, "tokPerSec": 124.1 }, overContext: { "input": 0.4, "output": 1.8, "cacheRead": 0.04, "cacheWrite": 0.5 }, free: false, allowance: { "goat": 20, "pro": 30 } },
|
|
29
31
|
"gpt-5.6-sol": { tier: "opensource", benchmark: { "intelligence": 60.9, "tokPerSec": 69.6 }, overContext: { "input": 10, "output": 45, "cacheRead": 1, "cacheWrite": 12.5 }, free: false, allowance: { "goat": 70, "pro": 80 } },
|
|
30
32
|
"gpt-5.6-terra": { tier: "premium", benchmark: { "intelligence": 56.6, "tokPerSec": 112.8 }, overContext: { "input": 4, "output": 18, "cacheRead": 0.4, "cacheWrite": 5 }, free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
33
|
+
"meituan/LongCat-2.0:free": { tier: "opensource", free: true },
|
|
31
34
|
"meta/muse-spark-1.1": { tier: "premium", benchmark: { "intelligence": 53.2 }, free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
32
35
|
"meta/muse-spark-1.2": { tier: "opensource", benchmark: { "intelligence": 56.8 }, free: false, allowance: { "goat": 20, "pro": 30 } },
|
|
33
36
|
"meta/muse-spark-1.2-contributor": { tier: "opensource", benchmark: { "intelligence": 56.8 }, free: false, allowance: { "goat": 20, "pro": 30 } },
|
|
37
|
+
"meta/muse-spark-1.3": { tier: "premium", free: false, allowance: { "goat": 20, "pro": 30 } },
|
|
38
|
+
"meta/muse-spark-1.3-contributor": { tier: "premium", free: false, allowance: { "goat": 20, "pro": 30 } },
|
|
34
39
|
"MiniMaxAI/MiniMax-M2.5": { tier: "opensource", benchmark: { "intelligence": 34.5 }, free: false, allowance: { "goat": 20, "pro": 30 } },
|
|
35
40
|
"MiniMaxAI/MiniMax-M2.7": { tier: "opensource", benchmark: { "intelligence": 38.9 }, free: false, allowance: { "goat": 20, "pro": 30 } },
|
|
36
41
|
"MiniMaxAI/MiniMax-M3": { tier: "opensource", discount: { "pct": 50 }, was: { "input": 0.6, "output": 2.4, "cacheRead": 0.12 }, now: { "input": 0.3, "output": 1.2, "cacheRead": 0.06 }, benchmark: { "intelligence": 45.4, "tokPerSec": 111.3 }, free: false, allowance: { "goat": 47, "pro": 57 } },
|
|
@@ -49,6 +54,7 @@ export const MODEL_DEALS = {
|
|
|
49
54
|
"Qwen/Qwen3.8-27B": { tier: "opensource", benchmark: { "intelligence": 52, "tokPerSec": 50.5 }, free: false, allowance: { "goat": 70, "pro": 80 } },
|
|
50
55
|
"Qwen/Qwen3.8-Flash": { tier: "opensource", free: false, allowance: { "goat": 20, "pro": 30 } },
|
|
51
56
|
"Qwen/Qwen3.8-Max": { tier: "opensource", benchmark: { "intelligence": 58.1, "tokPerSec": 23.6 }, free: false, allowance: { "goat": 20, "pro": 30 } },
|
|
57
|
+
"Qwen/Qwen3.8-Max-0902": { tier: "opensource", free: false, allowance: { "goat": 20, "pro": 30 } },
|
|
52
58
|
"sakana/fugu-ultra": { tier: "premium", free: false, allowance: { "goat": 20, "pro": 20 } },
|
|
53
59
|
"stepfun/Step-3.5-Flash": { tier: "opensource", benchmark: { "intelligence": 26.5 }, free: false, allowance: { "goat": 20, "pro": 30 } },
|
|
54
60
|
"stepfun/Step-3.7-Flash": { tier: "opensource", benchmark: { "intelligence": 30.9, "tokPerSec": 94.1 }, free: false, allowance: { "goat": 20, "pro": 30 } },
|
|
@@ -77,5 +83,5 @@ export const PLAN_CATALOG = {
|
|
|
77
83
|
provider: { price: 15, credits: 0, window5h: 0, windowWeek: 0, display: "Provider" },
|
|
78
84
|
};
|
|
79
85
|
export const DEAL_SOURCE_URL = "https://commandcode.ai/docs/resources/pricing-limits";
|
|
80
|
-
export const DEAL_LAST_REFRESHED = "2026-09-
|
|
86
|
+
export const DEAL_LAST_REFRESHED = "2026-09-03";
|
|
81
87
|
export const DEAL_PACKAGE_VERSION = "docs";
|
|
@@ -4,10 +4,25 @@
|
|
|
4
4
|
export declare const MODEL_EFFORTS: Readonly<Record<string, readonly CommandCodeReasoningEffort[]>>;
|
|
5
5
|
export type PiThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
6
6
|
type CommandCodeReasoningEffort = Exclude<PiThinkingLevel, "off">;
|
|
7
|
+
/**
|
|
8
|
+
* Derives the reasoning-without-efforts set from a capability map and an
|
|
9
|
+
* efforts table: a model is reasoning-capable without explicit efforts
|
|
10
|
+
* when upstream's capability flag is true AND the facts carry no efforts
|
|
11
|
+
* entry for it. Efforts precedence holds by construction — an efforts
|
|
12
|
+
* model never appears in this set, so the "a model is classified exactly
|
|
13
|
+
* once" invariant is true by construction rather than asserted after
|
|
14
|
+
* regeneration (spec #108 / issue #111). Exported for the derivation
|
|
15
|
+
* checks; the runtime consumes the derived REASONING_MODELS below.
|
|
16
|
+
*/
|
|
17
|
+
export declare function deriveReasoningWithoutEfforts(capability: Readonly<Record<string, boolean>>, efforts: Readonly<Record<string, readonly string[]>>): ReadonlySet<string>;
|
|
7
18
|
/**
|
|
8
19
|
* Models Command Code advertises as reasoning-capable without exposing
|
|
9
20
|
* explicit effort levels (Command Code chooses the reasoning depth). These
|
|
10
21
|
* advertise `reasoning: true` in opencode but never generate `variants`.
|
|
22
|
+
*
|
|
23
|
+
* Derived from the generated classification module + the generated efforts
|
|
24
|
+
* facts — upstream data is the source of truth, so upstream classification
|
|
25
|
+
* changes land on the next catalog refresh with zero human edits.
|
|
11
26
|
*/
|
|
12
27
|
export declare const REASONING_MODELS: ReadonlySet<string>;
|
|
13
28
|
export interface ThinkingMetadata {
|
|
@@ -19,6 +34,11 @@ export interface ThinkingMetadata {
|
|
|
19
34
|
};
|
|
20
35
|
}
|
|
21
36
|
export declare function thinkingMetadataForModel(modelId: string): ThinkingMetadata | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* A model is reasoning-capable when it has an explicit efforts entry OR
|
|
39
|
+
* upstream's capability flag is true. Derived entirely from the generated
|
|
40
|
+
* catalogs — no hand-maintained set remains.
|
|
41
|
+
*/
|
|
22
42
|
export declare function isReasoningModel(modelId: string): boolean;
|
|
23
43
|
/**
|
|
24
44
|
* opencode model `variants` for the Command Code model: one entry per supported
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
// src/provider/reasoning.ts — reasoning-effort metadata tables (PLAN #5 Part A,
|
|
2
|
-
// port of pi's models.ts:67-150). Reasoning metadata
|
|
3
|
-
// generated catalog facts (`src/catalog/facts.ts
|
|
4
|
-
// classification
|
|
2
|
+
// port of pi's models.ts:67-150). Reasoning metadata comes from the
|
|
3
|
+
// generated catalog facts (`src/catalog/facts.ts`, the efforts table) and
|
|
4
|
+
// the generated classification module (`src/catalog/classification.ts`,
|
|
5
|
+
// the per-model capability flag the docs' RSC records carry). There is no
|
|
6
|
+
// hand-maintained reasoning set: classification is **derived** (ADR-0006) —
|
|
7
|
+
// reasoning-without-efforts = capability flag true AND no efforts entry;
|
|
8
|
+
// isReasoningModel = has an efforts entry OR capability flag true.
|
|
9
|
+
// The only human seam is the classification override map baked into the
|
|
10
|
+
// generated module at refresh time.
|
|
5
11
|
import { MODEL_EFFORTS as GENERATED_MODEL_EFFORTS } from "../catalog/facts.js";
|
|
12
|
+
import { MODEL_REASONING_CAPABILITY } from "../catalog/classification.js";
|
|
6
13
|
/**
|
|
7
14
|
* Models omitted here let Command Code choose their reasoning depth.
|
|
8
15
|
*/
|
|
@@ -14,38 +21,31 @@ import { MODEL_EFFORTS as GENERATED_MODEL_EFFORTS } from "../catalog/facts.js";
|
|
|
14
21
|
// column is constrained to those levels; the release gate catches drift). Do
|
|
15
22
|
// NOT "simplify" this back to a direct re-export — it breaks the build.
|
|
16
23
|
export const MODEL_EFFORTS = GENERATED_MODEL_EFFORTS;
|
|
24
|
+
/**
|
|
25
|
+
* Derives the reasoning-without-efforts set from a capability map and an
|
|
26
|
+
* efforts table: a model is reasoning-capable without explicit efforts
|
|
27
|
+
* when upstream's capability flag is true AND the facts carry no efforts
|
|
28
|
+
* entry for it. Efforts precedence holds by construction — an efforts
|
|
29
|
+
* model never appears in this set, so the "a model is classified exactly
|
|
30
|
+
* once" invariant is true by construction rather than asserted after
|
|
31
|
+
* regeneration (spec #108 / issue #111). Exported for the derivation
|
|
32
|
+
* checks; the runtime consumes the derived REASONING_MODELS below.
|
|
33
|
+
*/
|
|
34
|
+
export function deriveReasoningWithoutEfforts(capability, efforts) {
|
|
35
|
+
return new Set(Object.entries(capability)
|
|
36
|
+
.filter(([id, flag]) => flag === true && efforts[id] === undefined)
|
|
37
|
+
.map(([id]) => id));
|
|
38
|
+
}
|
|
17
39
|
/**
|
|
18
40
|
* Models Command Code advertises as reasoning-capable without exposing
|
|
19
41
|
* explicit effort levels (Command Code chooses the reasoning depth). These
|
|
20
42
|
* advertise `reasoning: true` in opencode but never generate `variants`.
|
|
43
|
+
*
|
|
44
|
+
* Derived from the generated classification module + the generated efforts
|
|
45
|
+
* facts — upstream data is the source of truth, so upstream classification
|
|
46
|
+
* changes land on the next catalog refresh with zero human edits.
|
|
21
47
|
*/
|
|
22
|
-
export const REASONING_MODELS =
|
|
23
|
-
"MiniMaxAI/MiniMax-M3",
|
|
24
|
-
"Qwen/Qwen3.6-Max-Preview",
|
|
25
|
-
"Qwen/Qwen3.6-Plus",
|
|
26
|
-
"Qwen/Qwen3.7-Flash",
|
|
27
|
-
"Qwen/Qwen3.7-Max",
|
|
28
|
-
"Qwen/Qwen3.7-Plus",
|
|
29
|
-
"meta/muse-spark-1.1",
|
|
30
|
-
"meta/muse-spark-1.2",
|
|
31
|
-
"meta/muse-spark-1.2-contributor",
|
|
32
|
-
"moonshotai/Kimi-K2.7-Code",
|
|
33
|
-
"moonshotai/Kimi-K2.7-Code-Highspeed",
|
|
34
|
-
"moonshotai/Kimi-K3",
|
|
35
|
-
"nvidia/nemotron-3-ultra-550b-a55b",
|
|
36
|
-
"poolside/laguna-s-2.1-free",
|
|
37
|
-
"stepfun/Step-3.7-Flash",
|
|
38
|
-
"tencent/hy3-paid",
|
|
39
|
-
// tencent/hy4-preview is reasoning-capable with explicit efforts
|
|
40
|
-
// (models.md lists `low, medium, high` since command-code@1.38.0,
|
|
41
|
-
// 2026-08-28) — it belongs in MODEL_EFFORTS, not here. Keeping it here
|
|
42
|
-
// would leave a snapshot model classified in both REASONING_MODELS and
|
|
43
|
-
// MODEL_EFFORTS, which breaks the dedicated
|
|
44
|
-
// `tencent/hy4-preview is an efforts model` pin in
|
|
45
|
-
// tests/catalog-metadata.test.ts.
|
|
46
|
-
"thinkingmachines/inkling",
|
|
47
|
-
"thinkingmachines/inkling-small",
|
|
48
|
-
]);
|
|
48
|
+
export const REASONING_MODELS = deriveReasoningWithoutEfforts(MODEL_REASONING_CAPABILITY, GENERATED_MODEL_EFFORTS);
|
|
49
49
|
const PI_THINKING_LEVELS = [
|
|
50
50
|
"off",
|
|
51
51
|
"minimal",
|
|
@@ -74,6 +74,11 @@ export function thinkingMetadataForModel(modelId) {
|
|
|
74
74
|
},
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* A model is reasoning-capable when it has an explicit efforts entry OR
|
|
79
|
+
* upstream's capability flag is true. Derived entirely from the generated
|
|
80
|
+
* catalogs — no hand-maintained set remains.
|
|
81
|
+
*/
|
|
77
82
|
export function isReasoningModel(modelId) {
|
|
78
83
|
return MODEL_EFFORTS[modelId] !== undefined || REASONING_MODELS.has(modelId);
|
|
79
84
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-cmd-provider",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.4",
|
|
4
4
|
"description": "Command Code provider + plugin for opencode",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -20,9 +20,10 @@
|
|
|
20
20
|
"typecheck": "tsc --noEmit",
|
|
21
21
|
"refresh:snapshot": "node scripts/refresh-snapshot.mjs",
|
|
22
22
|
"refresh:deals": "node scripts/refresh-deals.mjs",
|
|
23
|
-
"refresh": "
|
|
23
|
+
"refresh:classification": "node scripts/refresh-classification.mjs",
|
|
24
|
+
"refresh": "npm run refresh:snapshot && npm run refresh:fixtures && npm run refresh:classification -- --fixtures && npm run refresh:deals -- --fixtures",
|
|
24
25
|
"test": "npm run typecheck && npm run test:unit && npm run test:integration && npm run test:contract && npm run format:check",
|
|
25
|
-
"test:unit": "tsx tests/env.test.ts && tsx tests/auth-key.test.ts && tsx tests/converters.test.ts && tsx tests/stream.test.ts && tsx tests/provider-codecs.test.ts && tsx tests/provider-transport.test.ts && tsx tests/provider-parity.test.ts && tsx tests/provider-upgrade-fallback.test.ts && tsx tests/provider-zdr.test.ts && tsx tests/redact.test.ts && tsx tests/cost.test.ts && tsx tests/retry.test.ts && tsx tests/reasoning.test.ts && tsx tests/modalities.test.ts && tsx tests/snapshot.test.ts && tsx tests/refresh-snapshot.test.ts && tsx tests/oauth.test.ts && tsx tests/auth-mirror.test.ts && tsx tests/parse-facts.test.ts && tsx tests/parse-modalities.test.ts && tsx tests/catalog-metadata.test.ts && tsx tests/plugin-models.test.ts && tsx tests/vendor.test.ts && tsx tests/deals-enrichment.test.ts && tsx tests/deals-coverage.test.ts && tsx tests/plan-summary.test.ts && tsx tests/html-tables.test.ts && tsx tests/parse-docs.test.ts && tsx tests/parse-rsc.test.ts && tsx tests/mock-cc-rsc.test.ts && tsx tests/capture-rsc-fixtures.test.ts && tsx tests/refresh-deals.test.ts && tsx tests/refresh-deals-rsc.test.ts && tsx tests/tier-overrides.test.ts && tsx tests/tui-deals-panel.test.ts && tsx tests/diff-catalog.test.ts && tsx tests/catalog-refresh-extract.test.ts && tsx tests/catalog-refresh-push.test.ts && tsx tests/plugin-install.test.ts",
|
|
26
|
+
"test:unit": "tsx tests/env.test.ts && tsx tests/auth-key.test.ts && tsx tests/converters.test.ts && tsx tests/stream.test.ts && tsx tests/provider-codecs.test.ts && tsx tests/provider-transport.test.ts && tsx tests/provider-parity.test.ts && tsx tests/provider-upgrade-fallback.test.ts && tsx tests/provider-zdr.test.ts && tsx tests/redact.test.ts && tsx tests/cost.test.ts && tsx tests/retry.test.ts && tsx tests/reasoning.test.ts && tsx tests/modalities.test.ts && tsx tests/snapshot.test.ts && tsx tests/refresh-snapshot.test.ts && tsx tests/oauth.test.ts && tsx tests/auth-mirror.test.ts && tsx tests/parse-facts.test.ts && tsx tests/parse-modalities.test.ts && tsx tests/catalog-metadata.test.ts && tsx tests/plugin-models.test.ts && tsx tests/vendor.test.ts && tsx tests/deals-enrichment.test.ts && tsx tests/deals-coverage.test.ts && tsx tests/plan-summary.test.ts && tsx tests/html-tables.test.ts && tsx tests/parse-docs.test.ts && tsx tests/parse-rsc.test.ts && tsx tests/rsc-source.test.ts && tsx tests/classification-overrides.test.ts && tsx tests/refresh-classification.test.ts && tsx tests/classification.test.ts && tsx tests/no-upstream-value-pins.test.ts && tsx tests/mock-cc-rsc.test.ts && tsx tests/capture-rsc-fixtures.test.ts && tsx tests/refresh-deals.test.ts && tsx tests/refresh-deals-rsc.test.ts && tsx tests/tier-overrides.test.ts && tsx tests/tui-deals-panel.test.ts && tsx tests/diff-catalog.test.ts && tsx tests/catalog-refresh-extract.test.ts && tsx tests/catalog-refresh-drift.test.ts && tsx tests/catalog-refresh-push.test.ts && tsx tests/auto-release.test.ts && tsx tests/replay-verification.test.ts && tsx tests/plugin-install.test.ts",
|
|
26
27
|
"test:integration": "tsx tests/integration-do-stream.test.ts && tsx tests/integration-do-generate.test.ts",
|
|
27
28
|
"test:contract": "tsx tests/contract.test.ts",
|
|
28
29
|
"test:e2e": "node tests/e2e-opencode.mjs",
|