@jeffreyjyz/opencode-command-code 0.3.1 → 0.3.3

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/dist/catalog.d.ts CHANGED
@@ -12,8 +12,10 @@ export interface CatalogEntry {
12
12
  efforts: readonly string[] | null;
13
13
  cost: ModelCost;
14
14
  modalities: readonly InputModality[];
15
+ /** Cheapest plan that serves the model; plans.md names this the access rule. */
16
+ minPlan: string | null;
15
17
  }
16
- export declare const CATALOG_VERSION: "1.65.0";
18
+ export declare const CATALOG_VERSION: "1.65.2";
17
19
  /** Every model the CLI table carried, keyed by the API's model id. */
18
20
  export declare const MODEL_CATALOG: Readonly<Record<string, CatalogEntry>>;
19
21
  /** Text-only default for any id this table does not list. */
@@ -21,6 +23,7 @@ export declare const TEXT_ONLY: readonly InputModality[];
21
23
  export declare function inputModalities(id: string): readonly InputModality[];
22
24
  export declare function supportsImage(id: string): boolean;
23
25
  export declare function modelCost(id: string): ModelCost | undefined;
26
+ export declare function minPlan(id: string): string | null;
24
27
  /** Reasoning-capable when it advertises explicit effort levels. */
25
28
  export declare function isReasoningModel(id: string): boolean;
26
29
  /** opencode effort variants for ctrl+t cycling. */
package/dist/index.js CHANGED
@@ -2592,87 +2592,87 @@ async function resolveKey(getAuth) {
2592
2592
 
2593
2593
  // src/catalog.ts
2594
2594
  var MODEL_CATALOG = {
2595
- "claude-fable-5": { name: "Claude Fable 5", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, modalities: ["text", "image"] },
2596
- "claude-fable-5-1": { name: "Claude Fable 5.1", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, modalities: ["text", "image"] },
2597
- "claude-haiku-4-5-20251001": { name: "Claude Haiku 4.5", context: 200000, efforts: null, cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, modalities: ["text", "image"] },
2598
- "claude-opus-4-7": { name: "Claude Opus 4.7", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, modalities: ["text", "image"] },
2599
- "claude-opus-4-8": { name: "Claude Opus 4.8", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, modalities: ["text", "image"] },
2600
- "claude-opus-5": { name: "Claude Opus 5", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, modalities: ["text", "image"] },
2601
- "claude-opus-5-5": { name: "Claude Opus 5.5", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, modalities: ["text", "image"] },
2602
- "claude-sonnet-4-6": { name: "Claude Sonnet 4.6", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, modalities: ["text", "image"] },
2603
- "claude-sonnet-5": { name: "Claude Sonnet 5", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, modalities: ["text", "image"] },
2604
- "deepseek/deepseek-v4-flash": { name: "DeepSeek V4 Flash (latest)", context: 1e6, efforts: ["high", "max"], cost: { input: 0.15, output: 0.6, cacheRead: 0.003, cacheWrite: 0 }, modalities: ["text"] },
2605
- "deepseek/deepseek-v4-flash-fast": { name: "DeepSeek V4 Flash Fast", context: 1e6, efforts: ["low", "high", "max"], cost: { input: 0.28, output: 0.56, cacheRead: 0.07, cacheWrite: 0 }, modalities: ["text"] },
2606
- "deepseek/deepseek-v4-flash-vision-exp": { name: "DeepSeek V4 Flash Vision (exp)", context: 1e6, efforts: ["high", "max"], cost: { input: 0.15, output: 0.6, cacheRead: 0.003, cacheWrite: 0 }, modalities: ["text", "image"] },
2607
- "deepseek/deepseek-v4-pro": { name: "DeepSeek V4 Pro (latest)", context: 1e6, efforts: ["high", "max"], cost: { input: 0.66, output: 1.98, cacheRead: 0.022, cacheWrite: 0 }, modalities: ["text"] },
2608
- "deepseek/deepseek-v4.1-flash": { name: "DeepSeek V4.1 Flash", context: 1e6, efforts: ["low", "high", "max"], cost: { input: 0.15, output: 0.6, cacheRead: 0.003, cacheWrite: 0 }, modalities: ["text", "image"] },
2609
- "google/gemini-3.1-flash-lite": { name: "Gemini 3.1 Flash Lite", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 0.25, output: 1.5, cacheRead: 0.03, cacheWrite: 0 }, modalities: ["text", "image"] },
2610
- "google/gemini-3.5-flash": { name: "Gemini 3.5 Flash", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, modalities: ["text", "image"] },
2611
- "google/gemini-3.5-flash-lite": { name: "Gemini 3.5 Flash Lite", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, modalities: ["text", "image"] },
2612
- "google/gemini-3.6-flash": { name: "Gemini 3.6 Flash", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, modalities: ["text", "image"] },
2613
- "google/gemini-3.7-flash": { name: "Gemini 3.7 Flash", context: 1050000, efforts: ["low", "medium", "high"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0.08334 }, modalities: ["text", "image"] },
2614
- "google/gemini-3.8-flash": { name: "Gemini 3.8 Flash", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, modalities: ["text", "image"] },
2615
- "gpt-5.3-codex": { name: "GPT-5.3 Codex", context: 400000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, modalities: ["text", "image"] },
2616
- "gpt-5.4": { name: "GPT-5.4", context: 400000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 }, modalities: ["text", "image"] },
2617
- "gpt-5.4-mini": { name: "GPT-5.4 Mini", context: 400000, efforts: ["low", "medium", "high"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, modalities: ["text", "image"] },
2618
- "gpt-5.5": { name: "GPT-5.5", context: 400000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, modalities: ["text", "image"] },
2619
- "gpt-5.6-luna": { name: "GPT-5.6 Luna", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25 }, modalities: ["text", "image"] },
2620
- "gpt-5.6-sol": { name: "GPT-5.6 Sol", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 6.25 }, modalities: ["text", "image"] },
2621
- "gpt-5.6-terra": { name: "GPT-5.6 Terra", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5 }, modalities: ["text", "image"] },
2622
- "gpt-6-astra": { name: "GPT-6 Astra", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, modalities: ["text", "image"] },
2623
- "gpt-6-luna": { name: "GPT-6 Luna", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125 }, modalities: ["text", "image"] },
2624
- "gpt-6-sol": { name: "GPT-6 Sol", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, modalities: ["text", "image"] },
2625
- "inclusionai/ling-3.0-flash-sante:free": { name: "Ling 3.0 Flash Sante", context: 262000, efforts: null, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, modalities: ["text"] },
2626
- "meituan/LongCat-2.0": { name: "LongCat 2.0", context: 1050000, efforts: null, cost: { input: 0.3, output: 1.2, cacheRead: 0.006, cacheWrite: 0 }, modalities: ["text"] },
2627
- "meta/muse-spark-1.1": { name: "Muse Spark 1.1", context: 1050000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, modalities: ["text", "image"] },
2628
- "meta/muse-spark-1.2": { name: "Muse Spark 1.2", context: 1050000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, modalities: ["text", "image"] },
2629
- "meta/muse-spark-1.2-contributor": { name: "Muse Spark 1.2 Contributor", context: 1050000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 0.1, output: 0.2, cacheRead: 0.002, cacheWrite: 0 }, modalities: ["text", "image"] },
2630
- "meta/muse-spark-1.3": { name: "Muse Spark 1.3", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, modalities: ["text", "image"] },
2631
- "meta/muse-spark-1.3-contributor": { name: "Muse Spark 1.3 Contributor", context: 1050000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 0.1, output: 0.2, cacheRead: 0.002, cacheWrite: 0 }, modalities: ["text", "image"] },
2632
- "MiniMaxAI/MiniMax-M2.5": { name: "MiniMax M2.5", context: 200000, efforts: null, cost: { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0 }, modalities: ["text"] },
2633
- "MiniMaxAI/MiniMax-M2.7": { name: "MiniMax M2.7", context: 0, efforts: null, cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, modalities: ["text"] },
2634
- "MiniMaxAI/MiniMax-M3": { name: "MiniMax M3", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, modalities: ["text", "image"] },
2635
- "moonshotai/Kimi-K2.5": { name: "Kimi K2.5", context: 256000, efforts: null, cost: { input: 0.6, output: 3, cacheRead: 0.1, cacheWrite: 0 }, modalities: ["text", "image"] },
2636
- "moonshotai/Kimi-K2.6": { name: "Kimi K2.6", context: 256000, efforts: null, cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, modalities: ["text", "image"] },
2637
- "moonshotai/Kimi-K2.7-Code": { name: "Kimi K2.7 Code", context: 256000, efforts: null, cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, modalities: ["text", "image"] },
2638
- "moonshotai/Kimi-K2.7-Code-Highspeed": { name: "Kimi K2.7 Code HighSpeed", context: 262000, efforts: null, cost: { input: 1.9, output: 8, cacheRead: 0.38, cacheWrite: 0 }, modalities: ["text", "image"] },
2639
- "moonshotai/Kimi-K3": { name: "Kimi K3", context: 1e6, efforts: ["low", "high", "max"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, modalities: ["text", "image"] },
2640
- "nvidia/nemotron-3-ultra-550b-a55b": { name: "Nemotron 3 Ultra", context: 1e6, efforts: null, cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }, modalities: ["text"] },
2641
- "poolside/laguna-s-2.1-free": { name: "Laguna S 2.1", context: 256000, efforts: null, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, modalities: ["text"] },
2642
- "Qwen/Qwen3.6-Max-Preview": { name: "Qwen 3.6 Max Preview", context: 0, efforts: null, cost: { input: 1.3, output: 7.8, cacheRead: 0.26, cacheWrite: 1.63 }, modalities: ["text"] },
2643
- "Qwen/Qwen3.6-Plus": { name: "Qwen 3.6 Plus", context: 0, efforts: null, cost: { input: 0.5, output: 3, cacheRead: 0.1, cacheWrite: 0 }, modalities: ["text", "image"] },
2644
- "Qwen/Qwen3.7-Flash": { name: "Qwen 3.7 Flash", context: 1e6, efforts: null, cost: { input: 0.03, output: 0.13, cacheRead: 0.006, cacheWrite: 0.038 }, modalities: ["text", "image"] },
2645
- "Qwen/Qwen3.7-Max": { name: "Qwen 3.7 Max", context: 1e6, efforts: null, cost: { input: 2.5, output: 7.5, cacheRead: 0.5, cacheWrite: 3.13 }, modalities: ["text"] },
2646
- "Qwen/Qwen3.7-Plus": { name: "Qwen 3.7 Plus", context: 1e6, efforts: null, cost: { input: 0.4, output: 1.6, cacheRead: 0.08, cacheWrite: 0.5 }, modalities: ["text", "image"] },
2647
- "Qwen/Qwen3.8-27B": { name: "Qwen 3.8 27B", context: 262000, efforts: ["low", "medium", "xhigh"], cost: { input: 0.4, output: 3, cacheRead: 0.04, cacheWrite: 0 }, modalities: ["text", "image"] },
2648
- "Qwen/Qwen3.8-Flash": { name: "Qwen 3.8 Flash", context: 1e6, efforts: ["low", "medium", "xhigh"], cost: { input: 0.16, output: 0.47, cacheRead: 0.016, cacheWrite: 0 }, modalities: ["text", "image"] },
2649
- "Qwen/Qwen3.8-Max": { name: "Qwen 3.8 Max", context: 1e6, efforts: ["low", "medium", "xhigh"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 2.5 }, modalities: ["text", "image"] },
2650
- "Qwen/Qwen3.8-Max-0902": { name: "Qwen 3.8 Max 0902", context: 1e6, efforts: ["low", "medium", "xhigh"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, modalities: ["text", "image"] },
2651
- "Qwen/Qwen3.8-Omni-Flash": { name: "Qwen 3.8 Omni Flash", context: 1e6, efforts: ["low", "medium", "xhigh"], cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0 }, modalities: ["text", "image"] },
2652
- "sakana/fugu-ultra": { name: "Fugu Ultra", context: 1e6, efforts: ["high", "xhigh"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, modalities: ["text", "image"] },
2653
- "stealth/space-bunny-alpha": { name: "Space Bunny Alpha", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, modalities: ["text", "image"] },
2654
- "stepfun/Step-3.5-Flash": { name: "Step 3.5 Flash", context: 1e6, efforts: null, cost: { input: 0.1, output: 0.3, cacheRead: 0.02, cacheWrite: 0 }, modalities: ["text"] },
2655
- "stepfun/Step-3.7-Flash": { name: "Step 3.7 Flash", context: 256000, efforts: null, cost: { input: 0.2, output: 1.15, cacheRead: 0.04, cacheWrite: 0 }, modalities: ["text", "image"] },
2656
- "stepfun/Step-5-Preview": { name: "Step 5 Preview", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 1, output: 2.7, cacheRead: 0.05, cacheWrite: 0 }, modalities: ["text", "image"] },
2657
- "tencent/hy3-paid": { name: "Tencent Hy3", context: 262000, efforts: null, cost: { input: 0.14, output: 0.58, cacheRead: 0.035, cacheWrite: 0 }, modalities: ["text"] },
2658
- "tencent/hy4-preview": { name: "Tencent Hy4 Preview", context: 1050000, efforts: ["low", "medium", "high"], cost: { input: 0.834, output: 2.501, cacheRead: 0.042, cacheWrite: 0 }, modalities: ["text"] },
2659
- "thinkingmachines/inkling": { name: "Inkling", context: 256000, efforts: null, cost: { input: 1, output: 4.05, cacheRead: 0.17, cacheWrite: 0 }, modalities: ["text", "image"] },
2660
- "thinkingmachines/inkling-small": { name: "Inkling Small", context: 1e6, efforts: null, cost: { input: 0.5, output: 1.2, cacheRead: 0.1, cacheWrite: 0 }, modalities: ["text", "image"] },
2661
- "xai/grok-4.5": { name: "Grok 4.5", context: 500000, efforts: ["low", "medium", "high"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 }, modalities: ["text", "image"] },
2662
- "xai/grok-4.6": { name: "Grok 4.6", context: 500000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 }, modalities: ["text", "image"] },
2663
- "xai/grok-4.7": { name: "Grok 4.7", context: 500000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 1.2, output: 3.6, cacheRead: 0.3, cacheWrite: 0 }, modalities: ["text", "image"] },
2664
- "xiaomi/mimo-v2.5": { name: "MiMo V2.5", context: 1e6, efforts: null, cost: { input: 0.14, output: 0.28, cacheRead: 0.0028, cacheWrite: 0 }, modalities: ["text", "image"] },
2665
- "xiaomi/mimo-v2.5-pro": { name: "MiMo V2.5 Pro", context: 1e6, efforts: null, cost: { input: 0.435, output: 0.87, cacheRead: 0.0036, cacheWrite: 0 }, modalities: ["text"] },
2666
- "xiaomi/mimo-v2.6-flash": { name: "MiMo V2.6 Flash", context: 1050000, efforts: null, cost: { input: 0.14, output: 0.28, cacheRead: 0.0028, cacheWrite: 0 }, modalities: ["text", "image"] },
2667
- "xiaomi/mimo-v2.6-pro": { name: "MiMo V2.6 Pro", context: 1050000, efforts: null, cost: { input: 0.435, output: 0.87, cacheRead: 0.0036, cacheWrite: 0 }, modalities: ["text", "image"] },
2668
- "xiaomi/mimo-v2.6-pro-ultraspeed": { name: "MiMo V2.6 Pro UltraSpeed", context: 1050000, efforts: null, cost: { input: 4.35, output: 8.7, cacheRead: 0.036, cacheWrite: 0 }, modalities: ["text", "image"] },
2669
- "z-ai/glm-5.3-flash": { name: "GLM-5.3 Flash", context: 1050000, efforts: ["low", "high", "max"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, modalities: ["text", "image"] },
2670
- "z-ai/glm-5.3-flashx": { name: "GLM-5.3 FlashX", context: 1e6, efforts: ["low", "high", "max"], cost: { input: 0.37, output: 1.25, cacheRead: 0.075, cacheWrite: 0 }, modalities: ["text", "image"] },
2671
- "zai-org/GLM-5": { name: "GLM-5", context: 200000, efforts: null, cost: { input: 1, output: 3.2, cacheRead: 0.2, cacheWrite: 0 }, modalities: ["text"] },
2672
- "zai-org/GLM-5.1": { name: "GLM-5.1", context: 0, efforts: null, cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, modalities: ["text"] },
2673
- "zai-org/GLM-5.2": { name: "GLM-5.2", context: 1e6, efforts: ["high", "max"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, modalities: ["text"] },
2674
- "zai-org/GLM-5.2-Fast": { name: "GLM-5.2 Fast", context: 1e6, efforts: null, cost: { input: 3, output: 10.25, cacheRead: 0.5, cacheWrite: 0 }, modalities: ["text"] },
2675
- "zai-org/GLM-5.3": { name: "GLM-5.3", context: 1e6, efforts: ["low", "high", "max"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, modalities: ["text"] }
2595
+ "claude-fable-5": { name: "Claude Fable 5", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, modalities: ["text", "image"], minPlan: "Max" },
2596
+ "claude-fable-5-1": { name: "Claude Fable 5.1", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, modalities: ["text", "image"], minPlan: "Max" },
2597
+ "claude-haiku-4-5-20251001": { name: "Claude Haiku 4.5", context: 200000, efforts: null, cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, modalities: ["text", "image"], minPlan: "Pro" },
2598
+ "claude-opus-4-7": { name: "Claude Opus 4.7", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, modalities: ["text", "image"], minPlan: "Max" },
2599
+ "claude-opus-4-8": { name: "Claude Opus 4.8", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, modalities: ["text", "image"], minPlan: "Max" },
2600
+ "claude-opus-5": { name: "Claude Opus 5", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, modalities: ["text", "image"], minPlan: "Max" },
2601
+ "claude-opus-5-5": { name: "Claude Opus 5.5", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, modalities: ["text", "image"], minPlan: "Max" },
2602
+ "claude-sonnet-4-6": { name: "Claude Sonnet 4.6", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, modalities: ["text", "image"], minPlan: "Pro" },
2603
+ "claude-sonnet-5": { name: "Claude Sonnet 5", context: 1e6, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, modalities: ["text", "image"], minPlan: "Pro" },
2604
+ "deepseek/deepseek-v4-flash": { name: "DeepSeek V4 Flash (latest)", context: 1e6, efforts: ["high", "max"], cost: { input: 0.15, output: 0.6, cacheRead: 0.003, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2605
+ "deepseek/deepseek-v4-flash-fast": { name: "DeepSeek V4 Flash Fast", context: 1e6, efforts: ["low", "high", "max"], cost: { input: 0.28, output: 0.56, cacheRead: 0.07, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2606
+ "deepseek/deepseek-v4-flash-vision-exp": { name: "DeepSeek V4 Flash Vision (exp)", context: 1e6, efforts: ["high", "max"], cost: { input: 0.15, output: 0.6, cacheRead: 0.003, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2607
+ "deepseek/deepseek-v4-pro": { name: "DeepSeek V4 Pro (latest)", context: 1e6, efforts: ["high", "max"], cost: { input: 0.66, output: 1.98, cacheRead: 0.022, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2608
+ "deepseek/deepseek-v4.1-flash": { name: "DeepSeek V4.1 Flash", context: 1e6, efforts: ["low", "high", "max"], cost: { input: 0.15, output: 0.6, cacheRead: 0.003, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2609
+ "google/gemini-3.1-flash-lite": { name: "Gemini 3.1 Flash Lite", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 0.25, output: 1.5, cacheRead: 0.03, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Pro" },
2610
+ "google/gemini-3.5-flash": { name: "Gemini 3.5 Flash", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Pro" },
2611
+ "google/gemini-3.5-flash-lite": { name: "Gemini 3.5 Flash Lite", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Pro" },
2612
+ "google/gemini-3.6-flash": { name: "Gemini 3.6 Flash", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Pro" },
2613
+ "google/gemini-3.7-flash": { name: "Gemini 3.7 Flash", context: 1050000, efforts: ["low", "medium", "high"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0.08334 }, modalities: ["text", "image"], minPlan: "GOAT" },
2614
+ "google/gemini-3.8-flash": { name: "Gemini 3.8 Flash", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "GOAT" },
2615
+ "gpt-5.3-codex": { name: "GPT-5.3 Codex", context: 400000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Pro" },
2616
+ "gpt-5.4": { name: "GPT-5.4", context: 400000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Pro" },
2617
+ "gpt-5.4-mini": { name: "GPT-5.4 Mini", context: 400000, efforts: ["low", "medium", "high"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Pro" },
2618
+ "gpt-5.5": { name: "GPT-5.5", context: 400000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Pro" },
2619
+ "gpt-5.6-luna": { name: "GPT-5.6 Luna", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25 }, modalities: ["text", "image"], minPlan: "Go" },
2620
+ "gpt-5.6-sol": { name: "GPT-5.6 Sol", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 6.25 }, modalities: ["text", "image"], minPlan: "GOAT" },
2621
+ "gpt-5.6-terra": { name: "GPT-5.6 Terra", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5 }, modalities: ["text", "image"], minPlan: "Pro" },
2622
+ "gpt-6-astra": { name: "GPT-6 Astra", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, modalities: ["text", "image"], minPlan: "Max" },
2623
+ "gpt-6-luna": { name: "GPT-6 Luna", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125 }, modalities: ["text", "image"], minPlan: "Go" },
2624
+ "gpt-6-sol": { name: "GPT-6 Sol", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, modalities: ["text", "image"], minPlan: "Pro" },
2625
+ "inclusionai/ling-3.0-flash-sante:free": { name: "Ling 3.0 Flash Sante", context: 262000, efforts: null, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2626
+ "meituan/LongCat-2.0": { name: "LongCat 2.0", context: 1050000, efforts: null, cost: { input: 0.3, output: 1.2, cacheRead: 0.006, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2627
+ "meta/muse-spark-1.1": { name: "Muse Spark 1.1", context: 1050000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Pro" },
2628
+ "meta/muse-spark-1.2": { name: "Muse Spark 1.2", context: 1050000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "GOAT" },
2629
+ "meta/muse-spark-1.2-contributor": { name: "Muse Spark 1.2 Contributor", context: 1050000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 0.1, output: 0.2, cacheRead: 0.002, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2630
+ "meta/muse-spark-1.3": { name: "Muse Spark 1.3", context: 1050000, efforts: ["low", "medium", "high", "xhigh", "max"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "GOAT" },
2631
+ "meta/muse-spark-1.3-contributor": { name: "Muse Spark 1.3 Contributor", context: 1050000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 0.1, output: 0.2, cacheRead: 0.002, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2632
+ "MiniMaxAI/MiniMax-M2.5": { name: "MiniMax M2.5", context: 200000, efforts: null, cost: { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2633
+ "MiniMaxAI/MiniMax-M2.7": { name: "MiniMax M2.7", context: 0, efforts: null, cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2634
+ "MiniMaxAI/MiniMax-M3": { name: "MiniMax M3", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2635
+ "moonshotai/Kimi-K2.5": { name: "Kimi K2.5", context: 256000, efforts: null, cost: { input: 0.6, output: 3, cacheRead: 0.1, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2636
+ "moonshotai/Kimi-K2.6": { name: "Kimi K2.6", context: 256000, efforts: null, cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2637
+ "moonshotai/Kimi-K2.7-Code": { name: "Kimi K2.7 Code", context: 256000, efforts: null, cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2638
+ "moonshotai/Kimi-K2.7-Code-Highspeed": { name: "Kimi K2.7 Code HighSpeed", context: 262000, efforts: null, cost: { input: 1.9, output: 8, cacheRead: 0.38, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2639
+ "moonshotai/Kimi-K3": { name: "Kimi K3", context: 1e6, efforts: ["low", "high", "max"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2640
+ "nvidia/nemotron-3-ultra-550b-a55b": { name: "Nemotron 3 Ultra", context: 1e6, efforts: null, cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2641
+ "poolside/laguna-s-2.1-free": { name: "Laguna S 2.1", context: 256000, efforts: null, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2642
+ "Qwen/Qwen3.6-Max-Preview": { name: "Qwen 3.6 Max Preview", context: 0, efforts: null, cost: { input: 1.3, output: 7.8, cacheRead: 0.26, cacheWrite: 1.63 }, modalities: ["text"], minPlan: "Go" },
2643
+ "Qwen/Qwen3.6-Plus": { name: "Qwen 3.6 Plus", context: 0, efforts: null, cost: { input: 0.5, output: 3, cacheRead: 0.1, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2644
+ "Qwen/Qwen3.7-Flash": { name: "Qwen 3.7 Flash", context: 1e6, efforts: null, cost: { input: 0.03, output: 0.13, cacheRead: 0.006, cacheWrite: 0.038 }, modalities: ["text", "image"], minPlan: "Go" },
2645
+ "Qwen/Qwen3.7-Max": { name: "Qwen 3.7 Max", context: 1e6, efforts: null, cost: { input: 2.5, output: 7.5, cacheRead: 0.5, cacheWrite: 3.13 }, modalities: ["text"], minPlan: "Go" },
2646
+ "Qwen/Qwen3.7-Plus": { name: "Qwen 3.7 Plus", context: 1e6, efforts: null, cost: { input: 0.4, output: 1.6, cacheRead: 0.08, cacheWrite: 0.5 }, modalities: ["text", "image"], minPlan: "Go" },
2647
+ "Qwen/Qwen3.8-27B": { name: "Qwen 3.8 27B", context: 262000, efforts: ["low", "medium", "xhigh"], cost: { input: 0.4, output: 3, cacheRead: 0.04, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2648
+ "Qwen/Qwen3.8-Flash": { name: "Qwen 3.8 Flash", context: 1e6, efforts: ["low", "medium", "xhigh"], cost: { input: 0.16, output: 0.47, cacheRead: 0.016, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2649
+ "Qwen/Qwen3.8-Max": { name: "Qwen 3.8 Max", context: 1e6, efforts: ["low", "medium", "xhigh"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 2.5 }, modalities: ["text", "image"], minPlan: "Go" },
2650
+ "Qwen/Qwen3.8-Max-0902": { name: "Qwen 3.8 Max 0902", context: 1e6, efforts: ["low", "medium", "xhigh"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2651
+ "Qwen/Qwen3.8-Omni-Flash": { name: "Qwen 3.8 Omni Flash", context: 1e6, efforts: ["low", "medium", "xhigh"], cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2652
+ "sakana/fugu-ultra": { name: "Fugu Ultra", context: 1e6, efforts: ["high", "xhigh"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Max" },
2653
+ "stealth/space-bunny-alpha": { name: "Space Bunny Alpha", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2654
+ "stepfun/Step-3.5-Flash": { name: "Step 3.5 Flash", context: 262000, efforts: null, cost: { input: 0.09, output: 0.3, cacheRead: 0.02, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2655
+ "stepfun/Step-3.7-Flash": { name: "Step 3.7 Flash", context: 256000, efforts: null, cost: { input: 0.2, output: 1.15, cacheRead: 0.04, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2656
+ "stepfun/Step-5-Preview": { name: "Step 5 Preview", context: 1e6, efforts: ["low", "medium", "high"], cost: { input: 1, output: 2.7, cacheRead: 0.05, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2657
+ "tencent/hy3-paid": { name: "Tencent Hy3", context: 262000, efforts: null, cost: { input: 0.14, output: 0.58, cacheRead: 0.035, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2658
+ "tencent/hy4-preview": { name: "Tencent Hy4 Preview", context: 1050000, efforts: ["low", "medium", "high"], cost: { input: 0.834, output: 2.501, cacheRead: 0.042, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2659
+ "thinkingmachines/inkling": { name: "Inkling", context: 256000, efforts: null, cost: { input: 1, output: 4.05, cacheRead: 0.17, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2660
+ "thinkingmachines/inkling-small": { name: "Inkling Small", context: 1e6, efforts: null, cost: { input: 0.5, output: 1.2, cacheRead: 0.1, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2661
+ "xai/grok-4.5": { name: "Grok 4.5", context: 500000, efforts: ["low", "medium", "high"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2662
+ "xai/grok-4.6": { name: "Grok 4.6", context: 500000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "GOAT" },
2663
+ "xai/grok-4.7": { name: "Grok 4.7", context: 500000, efforts: ["low", "medium", "high", "xhigh"], cost: { input: 1.2, output: 3.6, cacheRead: 0.3, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "GOAT" },
2664
+ "xiaomi/mimo-v2.5": { name: "MiMo V2.5", context: 1e6, efforts: null, cost: { input: 0.14, output: 0.28, cacheRead: 0.0028, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2665
+ "xiaomi/mimo-v2.5-pro": { name: "MiMo V2.5 Pro", context: 1e6, efforts: null, cost: { input: 0.435, output: 0.87, cacheRead: 0.0036, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2666
+ "xiaomi/mimo-v2.6-flash": { name: "MiMo V2.6 Flash", context: 1050000, efforts: null, cost: { input: 0.14, output: 0.28, cacheRead: 0.0028, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2667
+ "xiaomi/mimo-v2.6-pro": { name: "MiMo V2.6 Pro", context: 1050000, efforts: null, cost: { input: 0.435, output: 0.87, cacheRead: 0.0036, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2668
+ "xiaomi/mimo-v2.6-pro-ultraspeed": { name: "MiMo V2.6 Pro UltraSpeed", context: 1050000, efforts: null, cost: { input: 4.35, output: 8.7, cacheRead: 0.036, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "GOAT" },
2669
+ "z-ai/glm-5.3-flash": { name: "GLM-5.3 Flash", context: 1050000, efforts: ["low", "high", "max"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2670
+ "z-ai/glm-5.3-flashx": { name: "GLM-5.3 FlashX", context: 1e6, efforts: ["low", "high", "max"], cost: { input: 0.37, output: 1.25, cacheRead: 0.075, cacheWrite: 0 }, modalities: ["text", "image"], minPlan: "Go" },
2671
+ "zai-org/GLM-5": { name: "GLM-5", context: 200000, efforts: null, cost: { input: 1, output: 3.2, cacheRead: 0.2, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2672
+ "zai-org/GLM-5.1": { name: "GLM-5.1", context: 0, efforts: null, cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2673
+ "zai-org/GLM-5.2": { name: "GLM-5.2", context: 1e6, efforts: ["high", "max"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2674
+ "zai-org/GLM-5.2-Fast": { name: "GLM-5.2 Fast", context: 1e6, efforts: null, cost: { input: 3, output: 10.25, cacheRead: 0.5, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" },
2675
+ "zai-org/GLM-5.3": { name: "GLM-5.3", context: 1e6, efforts: ["low", "high", "max"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, modalities: ["text"], minPlan: "Go" }
2676
2676
  };
2677
2677
  var TEXT_ONLY = ["text"];
2678
2678
  function inputModalities(id) {
@@ -2692,7 +2692,7 @@ function reasoningVariants(id) {
2692
2692
  }
2693
2693
  // ../core/gating.json
2694
2694
  var gating_default = {
2695
- extractedAt: "2026-09-12T06:01:01.385Z",
2695
+ extractedAt: "2026-09-25T14:21:58.775Z",
2696
2696
  cliVersion: "1.38.2",
2697
2697
  categories: {
2698
2698
  "claude-sonnet-5": "premium",
@@ -3702,6 +3702,58 @@ function createCommandCode(options = {}, images = () => false) {
3702
3702
  return { languageModel: model };
3703
3703
  }
3704
3704
 
3705
+ // src/modelsCache.ts
3706
+ import { mkdir, readFile as readFile2, writeFile } from "fs/promises";
3707
+ import { homedir as homedir2 } from "os";
3708
+ import { join } from "path";
3709
+ function cachePath() {
3710
+ const base = process.env.XDG_CACHE_HOME ?? join(homedir2(), ".cache");
3711
+ return join(base, "command-code", "models.json");
3712
+ }
3713
+ async function readModelsCache() {
3714
+ try {
3715
+ const parsed = JSON.parse(await readFile2(cachePath(), "utf8"));
3716
+ if (!Array.isArray(parsed.claude) || !Array.isArray(parsed.open))
3717
+ return;
3718
+ return parsed;
3719
+ } catch {
3720
+ return;
3721
+ }
3722
+ }
3723
+ async function writeModelsCache(cache) {
3724
+ try {
3725
+ const path = cachePath();
3726
+ await mkdir(join(path, ".."), { recursive: true });
3727
+ await writeFile(path, JSON.stringify(cache));
3728
+ } catch {}
3729
+ }
3730
+ function idsDiffer(a, b) {
3731
+ if (a.length !== b.length)
3732
+ return true;
3733
+ const left = new Set(a.map((m) => m.id));
3734
+ return b.some((m) => !left.has(m.id));
3735
+ }
3736
+
3737
+ // src/startupLog.ts
3738
+ import { mkdir as mkdir2, appendFile } from "fs/promises";
3739
+ import { homedir as homedir3 } from "os";
3740
+ import { join as join2 } from "path";
3741
+ function setupTimingLine(t) {
3742
+ return `setup: key=${t.key}ms register=${t.register}ms connection=${t.connection}ms refresh=${t.refresh}ms models=${t.models}`;
3743
+ }
3744
+ function startupLogPath() {
3745
+ const base = process.env.XDG_CACHE_HOME ?? join2(homedir3(), ".cache");
3746
+ return join2(base, "command-code", "startup.log");
3747
+ }
3748
+ async function writeStartupLine(line) {
3749
+ try {
3750
+ const path = startupLogPath();
3751
+ await mkdir2(join2(path, ".."), { recursive: true });
3752
+ await appendFile(path, `[${new Date().toISOString()}] ${line}
3753
+ `);
3754
+ } catch {}
3755
+ }
3756
+
3705
3757
  // src/v2.ts
3706
3758
  var PLUGIN_ID = "command-code";
3707
3759
  var PROVIDER_BASE = "https://api.commandcode.ai/provider/v1";
@@ -3819,6 +3871,11 @@ var commandCodeV2 = {
3819
3871
  }, { providerID: lane.id });
3820
3872
  }
3821
3873
  const seed = staticSeedModels();
3874
+ const cached = await readModelsCache();
3875
+ if (cached) {
3876
+ seed["command-code-anthropic"] = mergeModels(seed["command-code-anthropic"], cached.claude.map((m) => toV2Model(m, LANES[0])));
3877
+ seed["command-code-openai"] = mergeModels(seed["command-code-openai"], cached.open.map((m) => toV2Model(m, LANES[1])));
3878
+ }
3822
3879
  await ctx.provider.transform((editor) => {
3823
3880
  for (const lane of LANES) {
3824
3881
  editor.update(lane.id, (provider) => {
@@ -3881,6 +3938,15 @@ var commandCodeV2 = {
3881
3938
  }
3882
3939
  const controller = new AbortController;
3883
3940
  let refreshing = false;
3941
+ let appliedClaude = cached?.claude ?? [];
3942
+ let appliedOpen = cached?.open ?? [];
3943
+ const logTimings = (refreshMs, modelCount) => void writeStartupLine(setupTimingLine({
3944
+ key: keyMs,
3945
+ register: registerMs,
3946
+ connection: connectionMs,
3947
+ refresh: refreshMs,
3948
+ models: modelCount
3949
+ }));
3884
3950
  const refresh = async () => {
3885
3951
  if (refreshing || controller.signal.aborted)
3886
3952
  return;
@@ -3893,21 +3959,30 @@ var commandCodeV2 = {
3893
3959
  const split = await loadModels(key);
3894
3960
  if (controller.signal.aborted)
3895
3961
  return;
3962
+ writeModelsCache({ fetchedAt: Date.now(), claude: split.claude, open: split.open });
3963
+ const modelCount = split.claude.length + split.open.length;
3964
+ if (!idsDiffer(split.claude, appliedClaude) && !idsDiffer(split.open, appliedOpen)) {
3965
+ logTimings(Date.now() - refreshStart, modelCount);
3966
+ return;
3967
+ }
3896
3968
  await ctx.provider.transform((editor) => {
3897
3969
  editor.models.set("command-code-anthropic", mergeModels(seed["command-code-anthropic"], split.claude.map((m) => toV2Model(m, LANES[0]))));
3898
3970
  editor.models.set("command-code-openai", mergeModels(seed["command-code-openai"], split.open.map((m) => toV2Model(m, LANES[1]))));
3899
3971
  });
3900
- console.log(`[command-code] setup: key=${keyMs}ms register=${registerMs}ms connection=${connectionMs}ms refresh=${Date.now() - refreshStart}ms models=${split.claude.length + split.open.length}`);
3972
+ appliedClaude = split.claude;
3973
+ appliedOpen = split.open;
3974
+ logTimings(Date.now() - refreshStart, modelCount);
3901
3975
  } catch (e) {
3902
3976
  console.warn("[command-code] live model list unavailable, keeping the snapshot:", e);
3903
3977
  } finally {
3904
3978
  refreshing = false;
3905
3979
  }
3906
3980
  };
3907
- refresh();
3981
+ const firstRefresh = setTimeout(() => void refresh(), 3000);
3908
3982
  const timer = setInterval(() => void refresh(), 30 * 60 * 1000);
3909
3983
  return () => {
3910
3984
  controller.abort();
3985
+ clearTimeout(firstRefresh);
3911
3986
  clearInterval(timer);
3912
3987
  };
3913
3988
  }
@@ -3915,7 +3990,7 @@ var commandCodeV2 = {
3915
3990
  // package.json
3916
3991
  var package_default = {
3917
3992
  name: "@jeffreyjyz/opencode-command-code",
3918
- version: "0.3.1",
3993
+ version: "0.3.3",
3919
3994
  description: "Command Code provider + usage dashboard for opencode: two providers (Anthropic wire for Claude, OpenAI wire for everything else) against api.commandcode.ai, live model list, plan gating, /cmd-usage. Requires the cmduse CLI for usage rendering.",
3920
3995
  type: "module",
3921
3996
  main: "dist/index.js",
@@ -0,0 +1,18 @@
1
+ export interface CachedModel {
2
+ id: string;
3
+ name: string;
4
+ contextLength: number;
5
+ }
6
+ export interface ModelsCache {
7
+ fetchedAt: number;
8
+ claude: CachedModel[];
9
+ open: CachedModel[];
10
+ }
11
+ /** Never throws: a missing or corrupt cache is simply "no cache". */
12
+ export declare function readModelsCache(): Promise<ModelsCache | undefined>;
13
+ /** Best-effort write; diagnostics must never break setup. */
14
+ export declare function writeModelsCache(cache: ModelsCache): Promise<void>;
15
+ /** True when two lists differ by ids (the only thing a picker shows). */
16
+ export declare function idsDiffer(a: readonly CachedModel[], b: readonly CachedModel[]): boolean;
17
+ /** Path for tests and diagnostics. */
18
+ export declare function modelsCachePath(): string;
@@ -4,6 +4,8 @@ export interface ModelMeta {
4
4
  key: string;
5
5
  name: string;
6
6
  tier?: Category;
7
+ /** Cheapest plan that serves the model, from the generated catalog. */
8
+ minPlan?: string | null;
7
9
  allowance?: number;
8
10
  rates?: {
9
11
  input: number;
@@ -0,0 +1,18 @@
1
+ export interface SetupTimings {
2
+ /** Resolving the local key (env + ~/.commandcode/auth.json). */
3
+ key: number;
4
+ /** Provider + snapshot + aisdk hooks registered (this gates /model). */
5
+ register: number;
6
+ /** Integration connection lookup. */
7
+ connection: number;
8
+ /** Live model list fetch + merge. */
9
+ refresh: number;
10
+ /** Models returned by the live list, across lanes. */
11
+ models: number;
12
+ }
13
+ /** The line format, pinned by a test so tooling can parse it. */
14
+ export declare function setupTimingLine(t: SetupTimings): string;
15
+ /** `$XDG_CACHE_HOME/command-code/startup.log`, alongside the sidebar's catalog cache. */
16
+ export declare function startupLogPath(): string;
17
+ /** Append one line; never throws. */
18
+ export declare function writeStartupLine(line: string): Promise<void>;