opencode-cmd-provider 1.6.0 → 1.6.2

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 CHANGED
@@ -1,5 +1,96 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.6.2 - 2026-09-01
4
+
5
+ Patch release. Make the daily catalog-refresh cron self-sustainable against
6
+ upstream data changes (refs issue #89) and ship the 2026-09-01 catalog
7
+ refresh.
8
+
9
+ - **Self-sustainable cron tests** — the daily catalog-refresh cron has been
10
+ failing every day since 2026-08-28 because its shape-pinning tests pinned
11
+ upstream-managed data (deal pcts, benchmark throughput, plan allowances,
12
+ effort-classification lists). Any legitimate upstream change — a deal
13
+ expiring, a benchmark value moving, a free variant being retired — failed
14
+ `npm test` and blocked the refresh PR until a human updated the pins.
15
+ This release separates **shape** from **value** in those tests, so the
16
+ cron can land upstream changes without manual intervention:
17
+ - `tests/refresh-deals.test.ts`: the five real-RSC `modelDealEntry`
18
+ value pins (Gemini 3.7 Flash, Qwen 3.6 Plus, MiniMax M3, DeepSeek V4
19
+ Flash, Laguna) are replaced with nine synthetic-record tests that own
20
+ every value they assert. A companion test exercises the "deal ended"
21
+ case the cron hit on 2026-08-31. The end-to-end real-RSC smoke test
22
+ still runs the parser over every per-plan slug record to catch
23
+ shape/contract regressions, but no longer pins values.
24
+ - `tests/refresh-deals-rsc.test.ts`: the "emitted catalog has parity
25
+ with the shipped catalog" test asserts structural fields (discount
26
+ exists, benchmark exists, allowance has both goat/pro keys,
27
+ peakOffPeak exists) instead of exact MiniMax / Kimi values. Value
28
+ semantics now live in the synthetic `modelDealEntry` tests.
29
+ - `tests/catalog-metadata.test.ts`: `EFFORTS_MODELS` is now derived
30
+ from the auto-generated `MODEL_EFFORTS` (the npm package's
31
+ `models.md` is the source of truth for which models expose effort
32
+ levels), so a new efforts model — like `deepseek/deepseek-v4-flash-fast`
33
+ added 2026-08-31 — lands in `MODEL_EFFORTS` on the next refresh and
34
+ the reasoning-classification test follows automatically. The
35
+ "exactly once" gate becomes a "no model is in both `MODEL_EFFORTS`
36
+ and `REASONING_MODELS`" invariant (a real misclassification signal)
37
+ plus an advisory check that `isReasoningModel` agrees with the
38
+ union and respects `NON_REASONING_MODELS`.
39
+ - `tests/plugin-models.test.ts`: the "free variants get a `(free)`
40
+ suffix" test pins on `poolside/laguna-s-2.1-free` (still in the
41
+ snapshot) instead of the MiniMax name-collision pair retired
42
+ from upstream.
43
+ - `src/provider/reasoning.ts`: drop `minimax/minimax-m3-free` from
44
+ `REASONING_MODELS` — the variant was retired from upstream's
45
+ `models.md` alongside the free model itself, so the entry was stale.
46
+ - **Catalog refresh — 2026-09-01** — snapshot + capability facts +
47
+ RSC fixtures refreshed to current upstream values (see PR #105).
48
+ - **Issue #89** — the broader question of how to lock down shape-pinning
49
+ value pins remains open; this release is the cron-side half of that
50
+ fix. The deals-value-pin half is still tracked in #89.
51
+
52
+ ## 1.6.1 - 2026-08-29
53
+
54
+ Patch release. Catalog refresh to `command-code@1.38.1`, one catalog
55
+ classification re-pin, and two CI fixes for the daily catalog-refresh cron.
56
+
57
+ - **Catalog refresh** — snapshot + capability facts + RSC fixtures refreshed
58
+ to `command-code@1.38.1` (was 1.37.0). Net: 30 → 31 effort entries;
59
+ `tencent/hy4-preview` is the new row (Efforts column now lists
60
+ `low, medium, high`, was empty in 1.37.0). The 62 cost rows are unchanged.
61
+ The deals catalog is unaffected (the new model already had its RSC
62
+ availability + deal info in 1.37.0 fixtures). A follow-up 2026-08-29 cron
63
+ re-captured the RSC fixtures and refreshed `src/catalog/facts.ts` to
64
+ upstream's new values.
65
+ - **Catalog classification** — `tencent/hy4-preview` re-pinned to
66
+ `EFFORTS_MODELS` in `src/catalog/facts.ts`; the prior
67
+ `REASONING_MODELS` classification was a labelling error in 1.6.0 (upstream
68
+ advertises it as an effort-controlled model, not a reasoning model). The
69
+ matching unit-test pin was updated in lockstep.
70
+ - **CI: catalog-refresh heredoc** — `realpath` the relative `.ts` path
71
+ before the `npx tsx -e` heredoc in `.github/workflows/catalog-refresh.yml`.
72
+ The `after` loop passed a bare-relative path (e.g. `src/catalog/snapshot.ts`)
73
+ to the heredoc, which Node's ESM resolver parsed as a package name and
74
+ rejected with `ERR_MODULE_NOT_FOUND`. The `before` loop was unaffected
75
+ because it used `/tmp/...` absolute paths. Locked down with
76
+ `tests/catalog-refresh-extract.test.ts`.
77
+ - **CI: catalog-refresh push** — force-push the `catalog-refresh/${date}`
78
+ branch in `.github/workflows/catalog-refresh.yml`. Two consecutive cron
79
+ runs on the same day land sibling commits on `main`'s HEAD; `git push -u`
80
+ then rejects as non-fast-forward, leaving the cron stuck. `-fu` handles
81
+ both the partial-failure rerun and the fresh-branch case; the branch is
82
+ owned only by this workflow, so there's no clobber risk. The
83
+ `Open PR` step's `gh pr list --head X` already copes correctly with a
84
+ force-pushed tip. Locked down with
85
+ `tests/catalog-refresh-push.test.ts`.
86
+ - **Test fix for the push test** — `tests/catalog-refresh-push.test.ts`'s
87
+ verification `git ls-remote` previously ran from the outer project
88
+ CWD, so it resolved `origin` to GitHub rather than the test's local
89
+ bare remote. It passed only on the day the matching
90
+ `catalog-refresh/${date}` branch happened to exist on GitHub. Now
91
+ passes `-C repo.work` so the `origin` resolution is scoped to the
92
+ test fixture.
93
+
3
94
  ## 1.6.0 - 2026-08-28
4
95
 
5
96
  ### Deals pipeline: RSC-primary + daily catalog refresh cron
@@ -1,7 +1,7 @@
1
- export declare const FACTS_SOURCE_URL = "https://unpkg.com/command-code@1.37.0/dist/bundled/command-code-knowledge/reference/models.md";
2
- export declare const MODALITIES_SOURCE_URL = "https://unpkg.com/command-code@1.37.0/dist/cli.mjs";
3
- export declare const FACTS_PACKAGE_VERSION = "1.37.0";
4
- export declare const FACTS_LAST_REFRESHED = "2026-08-28";
1
+ export declare const FACTS_SOURCE_URL = "https://unpkg.com/command-code@1.39.2/dist/bundled/command-code-knowledge/reference/models.md";
2
+ export declare const MODALITIES_SOURCE_URL = "https://unpkg.com/command-code@1.39.2/dist/cli.mjs";
3
+ export declare const FACTS_PACKAGE_VERSION = "1.39.2";
4
+ export declare const FACTS_LAST_REFRESHED = "2026-09-01";
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,20 +4,22 @@
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.37.0/dist/bundled/command-code-knowledge/reference/models.md";
8
- export const MODALITIES_SOURCE_URL = "https://unpkg.com/command-code@1.37.0/dist/cli.mjs";
9
- export const FACTS_PACKAGE_VERSION = "1.37.0";
10
- export const FACTS_LAST_REFRESHED = "2026-08-28";
7
+ export const FACTS_SOURCE_URL = "https://unpkg.com/command-code@1.39.2/dist/bundled/command-code-knowledge/reference/models.md";
8
+ export const MODALITIES_SOURCE_URL = "https://unpkg.com/command-code@1.39.2/dist/cli.mjs";
9
+ export const FACTS_PACKAGE_VERSION = "1.39.2";
10
+ export const FACTS_LAST_REFRESHED = "2026-09-01";
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
+ "deepseek/deepseek-v4-flash-fast": ["low", "high", "max"],
15
16
  "z-ai/glm-5.3-flash": ["low", "high", "max"],
16
17
  "zai-org/GLM-5.3": ["low", "high", "max"],
17
18
  "zai-org/GLM-5.2": ["high", "max"],
18
19
  "Qwen/Qwen3.8-Max": ["low", "medium", "xhigh"],
19
20
  "Qwen/Qwen3.8-27B": ["low", "medium", "xhigh"],
20
21
  "Qwen/Qwen3.8-Flash": ["low", "medium", "xhigh"],
22
+ "tencent/hy4-preview": ["low", "medium", "high"],
21
23
  "claude-sonnet-5": ["low", "medium", "high", "xhigh", "max"],
22
24
  "claude-sonnet-4-6": ["low", "medium", "high", "xhigh", "max"],
23
25
  "claude-fable-5": ["low", "medium", "high", "xhigh", "max"],
@@ -44,6 +46,7 @@ export const MODEL_COSTS = {
44
46
  "deepseek/deepseek-v4-pro": { input: 0.66, output: 1.98, cacheRead: 0.022, cacheWrite: 0 },
45
47
  "deepseek/deepseek-v4-flash": { input: 0.22, output: 0.66, cacheRead: 0.007, cacheWrite: 0 },
46
48
  "deepseek/deepseek-v4-flash-vision-exp": { input: 0.22, output: 0.66, cacheRead: 0.007, cacheWrite: 0 },
49
+ "deepseek/deepseek-v4-flash-fast": { input: 0.28, output: 0.56, cacheRead: 0.07, cacheWrite: 0 },
47
50
  "moonshotai/Kimi-K3": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 },
48
51
  "moonshotai/Kimi-K2.7-Code": { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 },
49
52
  "moonshotai/Kimi-K2.7-Code-Highspeed": { input: 1.9, output: 8, cacheRead: 0.38, cacheWrite: 0 },
@@ -57,8 +60,6 @@ export const MODEL_COSTS = {
57
60
  "zai-org/GLM-5": { input: 1, output: 3.2, cacheRead: 0.2, cacheWrite: 0 },
58
61
  "MiniMaxAI/MiniMax-M3": { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 },
59
62
  "MiniMaxAI/MiniMax-M2.7": { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 },
60
- "minimax/minimax-m3-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
61
- "minimax/minimax-m2.7-free": { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
62
63
  "MiniMaxAI/MiniMax-M2.5": { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0 },
63
64
  "xiaomi/mimo-v2.5-pro": { input: 0.435, output: 0.87, cacheRead: 0.0036, cacheWrite: 0 },
64
65
  "xiaomi/mimo-v2.5": { input: 0.14, output: 0.28, cacheRead: 0.0028, cacheWrite: 0 },
@@ -92,7 +93,7 @@ export const MODEL_COSTS = {
92
93
  "gpt-5.4": { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 },
93
94
  "gpt-5.3-codex": { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 },
94
95
  "gpt-5.4-mini": { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 },
95
- "google/gemini-3.7-flash": { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0.04167 },
96
+ "google/gemini-3.7-flash": { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0.08334 },
96
97
  "google/gemini-3.6-flash": { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 },
97
98
  "google/gemini-3.5-flash": { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 },
98
99
  "google/gemini-3.5-flash-lite": { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 },
@@ -135,7 +136,6 @@ export const MODEL_INPUT_MODALITIES = {
135
136
  "meta/muse-spark-1.1": ["text", "image"],
136
137
  "meta/muse-spark-1.2": ["text", "image"],
137
138
  "meta/muse-spark-1.2-contributor": ["text", "image"],
138
- "minimax/minimax-m3-free": ["text", "image"],
139
139
  "moonshotai/Kimi-K2.5": ["text", "image"],
140
140
  "moonshotai/Kimi-K2.6": ["text", "image"],
141
141
  "moonshotai/Kimi-K2.7-Code": ["text", "image"],
@@ -21,6 +21,7 @@ export const MODEL_SNAPSHOT = [
21
21
  { id: "deepseek/deepseek-v4-pro", name: "DeepSeek V4 Pro (latest)", contextLength: 1000000 },
22
22
  { id: "deepseek/deepseek-v4-flash", name: "DeepSeek V4 Flash (latest)", contextLength: 1000000 },
23
23
  { id: "deepseek/deepseek-v4-flash-vision-exp", name: "DeepSeek V4 Flash Vision (exp)", contextLength: 1000000 },
24
+ { id: "deepseek/deepseek-v4-flash-fast", name: "DeepSeek V4 Flash Fast", contextLength: 1000000 },
24
25
  { id: "moonshotai/Kimi-K3", name: "Kimi K3", contextLength: 1000000 },
25
26
  { id: "moonshotai/Kimi-K2.7-Code", name: "Kimi K2.7 Code", contextLength: 256000 },
26
27
  { id: "moonshotai/Kimi-K2.7-Code-Highspeed", name: "Kimi K2.7 Code HighSpeed", contextLength: 262000 },
@@ -34,8 +35,6 @@ export const MODEL_SNAPSHOT = [
34
35
  { id: "zai-org/GLM-5", name: "GLM-5", contextLength: 200000 },
35
36
  { id: "MiniMaxAI/MiniMax-M3", name: "MiniMax M3", contextLength: 1000000 },
36
37
  { id: "MiniMaxAI/MiniMax-M2.7", name: "MiniMax M2.7", contextLength: 200000 },
37
- { id: "minimax/minimax-m3-free", name: "MiniMax M3", contextLength: 1000000 },
38
- { id: "minimax/minimax-m2.7-free", name: "MiniMax M2.7", contextLength: 197000 },
39
38
  { id: "MiniMaxAI/MiniMax-M2.5", name: "MiniMax M2.5", contextLength: 200000 },
40
39
  { id: "xiaomi/mimo-v2.5-pro", name: "MiMo V2.5 Pro", contextLength: 1000000 },
41
40
  { id: "xiaomi/mimo-v2.5", name: "MiMo V2.5", contextLength: 1000000 },
@@ -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-08-28";
54
+ export declare const DEAL_LAST_REFRESHED = "2026-09-01";
55
55
  export declare const DEAL_PACKAGE_VERSION = "docs";
@@ -13,13 +13,14 @@ export const MODEL_DEALS = {
13
13
  "claude-sonnet-4-6": { tier: "premium", benchmark: { "intelligence": 48.4 }, free: false, allowance: { "goat": 20, "pro": 20 } },
14
14
  "claude-sonnet-5": { tier: "premium", benchmark: { "intelligence": 55.3, "tokPerSec": 89.6 }, free: false, allowance: { "goat": 20, "pro": 20 } },
15
15
  "deepseek/deepseek-v4-flash": { tier: "opensource", benchmark: { "intelligence": 51.8, "tokPerSec": 129 }, peakOffPeak: { "peak": { "input": 0.44, "output": 1.32, "cacheRead": 0.014, "cacheWrite": 0 }, "offPeak": { "input": 0.22, "output": 0.66, "cacheRead": 0.007, "cacheWrite": 0 }, "windows": "01–04 & 06–10 UTC" }, free: false, allowance: { "goat": 60, "pro": 70 } },
16
+ "deepseek/deepseek-v4-flash-fast": { tier: "opensource", free: false, allowance: { "goat": 20, "pro": 30 } },
16
17
  "deepseek/deepseek-v4-flash-vision-exp": { tier: "opensource", peakOffPeak: { "peak": { "input": 0.44, "output": 1.32, "cacheRead": 0.014, "cacheWrite": 0 }, "offPeak": { "input": 0.22, "output": 0.66, "cacheRead": 0.007, "cacheWrite": 0 }, "windows": "01–04 & 06–10 UTC" }, free: false, allowance: { "goat": 20, "pro": 30 } },
17
18
  "deepseek/deepseek-v4-pro": { tier: "opensource", benchmark: { "intelligence": 53.2, "tokPerSec": 61 }, peakOffPeak: { "peak": { "input": 1.32, "output": 3.96, "cacheRead": 0.044, "cacheWrite": 0 }, "offPeak": { "input": 0.66, "output": 1.98, "cacheRead": 0.022, "cacheWrite": 0 }, "windows": "01–04 & 06–10 UTC" }, free: false, allowance: { "goat": 20, "pro": 30 } },
18
19
  "google/gemini-3.1-flash-lite": { tier: "premium", benchmark: { "intelligence": 25.6 }, free: false, allowance: { "goat": 20, "pro": 20 } },
19
20
  "google/gemini-3.5-flash": { tier: "premium", benchmark: { "intelligence": 52 }, free: false, allowance: { "goat": 20, "pro": 20 } },
20
21
  "google/gemini-3.5-flash-lite": { tier: "premium", benchmark: { "intelligence": 37.4, "tokPerSec": 368.8 }, free: false, allowance: { "goat": 20, "pro": 20 } },
21
22
  "google/gemini-3.6-flash": { tier: "premium", benchmark: { "intelligence": 51.6, "tokPerSec": 197.3 }, free: false, allowance: { "goat": 20, "pro": 20 } },
22
- "google/gemini-3.7-flash": { tier: "opensource", discount: { "pct": 50, "endsAt": "2026-12-31" }, was: { "input": 1.5, "output": 7.5, "cacheRead": 0.15 }, now: { "input": 0.75, "output": 3.75, "cacheRead": 0.075 }, benchmark: { "intelligence": 56, "tokPerSec": 365.9 }, free: false, allowance: { "goat": 20, "pro": 30 } },
23
+ "google/gemini-3.7-flash": { tier: "opensource", benchmark: { "intelligence": 56, "tokPerSec": 365.9 }, free: false, allowance: { "goat": 40, "pro": 50 } },
23
24
  "gpt-5.3-codex": { tier: "premium", benchmark: { "intelligence": 45.5, "tokPerSec": 121.4 }, free: false, allowance: { "goat": 20, "pro": 20 } },
24
25
  "gpt-5.4": { tier: "premium", benchmark: { "intelligence": 53.1 }, free: false, allowance: { "goat": 20, "pro": 20 } },
25
26
  "gpt-5.4-mini": { tier: "premium", benchmark: { "intelligence": 40.9 }, free: false, allowance: { "goat": 20, "pro": 20 } },
@@ -30,8 +31,6 @@ export const MODEL_DEALS = {
30
31
  "meta/muse-spark-1.1": { tier: "premium", benchmark: { "intelligence": 53.2 }, free: false, allowance: { "goat": 20, "pro": 20 } },
31
32
  "meta/muse-spark-1.2": { tier: "opensource", benchmark: { "intelligence": 56.8 }, free: false, allowance: { "goat": 20, "pro": 30 } },
32
33
  "meta/muse-spark-1.2-contributor": { tier: "opensource", benchmark: { "intelligence": 56.8 }, free: false, allowance: { "goat": 20, "pro": 30 } },
33
- "minimax/minimax-m2.7-free": { tier: "opensource", free: true, benchmark: { "intelligence": 38.9 } },
34
- "minimax/minimax-m3-free": { tier: "opensource", free: true, benchmark: { "intelligence": 45.4 } },
35
34
  "MiniMaxAI/MiniMax-M2.5": { tier: "opensource", benchmark: { "intelligence": 34.5 }, free: false, allowance: { "goat": 20, "pro": 30 } },
36
35
  "MiniMaxAI/MiniMax-M2.7": { tier: "opensource", benchmark: { "intelligence": 38.9 }, free: false, allowance: { "goat": 20, "pro": 30 } },
37
36
  "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 } },
@@ -78,5 +77,5 @@ export const PLAN_CATALOG = {
78
77
  provider: { price: 15, credits: 0, window5h: 0, windowWeek: 0, display: "Provider" },
79
78
  };
80
79
  export const DEAL_SOURCE_URL = "https://commandcode.ai/docs/resources/pricing-limits";
81
- export const DEAL_LAST_REFRESHED = "2026-08-28";
80
+ export const DEAL_LAST_REFRESHED = "2026-09-01";
82
81
  export const DEAL_PACKAGE_VERSION = "docs";
@@ -29,7 +29,6 @@ export const REASONING_MODELS = new Set([
29
29
  "meta/muse-spark-1.1",
30
30
  "meta/muse-spark-1.2",
31
31
  "meta/muse-spark-1.2-contributor",
32
- "minimax/minimax-m3-free",
33
32
  "moonshotai/Kimi-K2.7-Code",
34
33
  "moonshotai/Kimi-K2.7-Code-Highspeed",
35
34
  "moonshotai/Kimi-K3",
@@ -37,8 +36,13 @@ export const REASONING_MODELS = new Set([
37
36
  "poolside/laguna-s-2.1-free",
38
37
  "stepfun/Step-3.7-Flash",
39
38
  "tencent/hy3-paid",
40
- // Live RSC caps.reasoning=true, models.md has no Efforts entry (2026-08-28).
41
- "tencent/hy4-preview",
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.
42
46
  "thinkingmachines/inkling",
43
47
  "thinkingmachines/inkling-small",
44
48
  ]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-cmd-provider",
3
- "version": "1.6.0",
3
+ "version": "1.6.2",
4
4
  "description": "Command Code provider + plugin for opencode",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "refresh:deals": "node scripts/refresh-deals.mjs",
23
23
  "refresh": "npm run refresh:snapshot && npm run refresh:fixtures && npm run refresh:deals -- --fixtures",
24
24
  "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/plugin-install.test.ts",
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
26
  "test:integration": "tsx tests/integration-do-stream.test.ts && tsx tests/integration-do-generate.test.ts",
27
27
  "test:contract": "tsx tests/contract.test.ts",
28
28
  "test:e2e": "node tests/e2e-opencode.mjs",