@linxiraos/pi-catalog 1.2.1 → 1.3.0

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.
Files changed (127) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/README.md +4 -2
  3. package/THIRD-PARTY-NOTICES.txt +55 -5
  4. package/dist/types/build.d.ts +3 -2
  5. package/dist/types/compat/auth-ids.d.ts +2 -2
  6. package/dist/types/compat/axes.d.ts +1 -1
  7. package/dist/types/compat/behavior.d.ts +5 -0
  8. package/dist/types/compat/catalog-endpoint.d.ts +8 -0
  9. package/dist/types/compat/image-tokenization.d.ts +9 -1
  10. package/dist/types/compat/judgment-images.d.ts +25 -0
  11. package/dist/types/compat/provider-ids.d.ts +1 -1
  12. package/dist/types/compat/request-compression.d.ts +23 -0
  13. package/dist/types/compat/request-size.d.ts +12 -3
  14. package/dist/types/compat/thinking-replay.d.ts +9 -0
  15. package/dist/types/compat/types.d.ts +4 -0
  16. package/dist/types/discovery/antigravity.d.ts +7 -0
  17. package/dist/types/model-cache.d.ts +7 -0
  18. package/dist/types/model-manager.d.ts +6 -0
  19. package/dist/types/model-thinking.d.ts +11 -1
  20. package/dist/types/models.d.ts +16 -1
  21. package/dist/types/pricing.d.ts +37 -1
  22. package/dist/types/provider-models/openai-compat.d.ts +18 -46
  23. package/dist/types/types.d.ts +63 -12
  24. package/dist/types/wire/codex.d.ts +2 -0
  25. package/package.json +5 -5
  26. package/src/build.d.ts +3 -2
  27. package/src/build.ts +159 -80
  28. package/src/compat/auth-ids.ts +2 -0
  29. package/src/compat/axes.d.ts +1 -1
  30. package/src/compat/axes.ts +129 -4
  31. package/src/compat/behavior.d.ts +5 -0
  32. package/src/compat/behavior.ts +9 -1
  33. package/src/compat/cascade.ts +4 -1
  34. package/src/compat/catalog-endpoint.ts +43 -0
  35. package/src/compat/image-tokenization.ts +28 -10
  36. package/src/compat/judgment-images.ts +83 -0
  37. package/src/compat/provider-ids.d.ts +1 -1
  38. package/src/compat/provider-ids.ts +1 -0
  39. package/src/compat/request-compression.ts +43 -0
  40. package/src/compat/request-size.ts +20 -5
  41. package/src/compat/resolve.ts +90 -53
  42. package/src/compat/rules/README.md +32 -3
  43. package/src/compat/rules/auth/_order.kdl +1 -1
  44. package/src/compat/rules/auth/google-antigravity.kdl +1 -1
  45. package/src/compat/rules/auth/sambanova.kdl +9 -0
  46. package/src/compat/rules/auth/stencil.kdl +1 -1
  47. package/src/compat/rules/classes/anthropic.kdl +42 -2
  48. package/src/compat/rules/classes/deepseek.kdl +4 -0
  49. package/src/compat/rules/classes/gemini.kdl +46 -2
  50. package/src/compat/rules/classes/meta.kdl +7 -0
  51. package/src/compat/rules/classes/minimax.kdl +11 -1
  52. package/src/compat/rules/classes/openai.kdl +34 -3
  53. package/src/compat/rules/classes/xai.kdl +26 -0
  54. package/src/compat/rules/providers/amazon-bedrock.kdl +1 -0
  55. package/src/compat/rules/providers/anthropic.kdl +23 -0
  56. package/src/compat/rules/providers/azure.kdl +2 -0
  57. package/src/compat/rules/providers/cerebras.kdl +3 -0
  58. package/src/compat/rules/providers/cline-pass.kdl +16 -0
  59. package/src/compat/rules/providers/commandcode.kdl +10 -0
  60. package/src/compat/rules/providers/cursor.kdl +50 -1
  61. package/src/compat/rules/providers/deepinfra.kdl +3 -1
  62. package/src/compat/rules/providers/devin.kdl +117 -6
  63. package/src/compat/rules/providers/factory-droid.kdl +6 -0
  64. package/src/compat/rules/providers/firepass.kdl +15 -0
  65. package/src/compat/rules/providers/fireworks.kdl +26 -0
  66. package/src/compat/rules/providers/github-copilot.kdl +24 -0
  67. package/src/compat/rules/providers/google-antigravity.kdl +37 -0
  68. package/src/compat/rules/providers/google-gemini-cli.kdl +1 -0
  69. package/src/compat/rules/providers/google-vertex.kdl +5 -0
  70. package/src/compat/rules/providers/google.kdl +1 -0
  71. package/src/compat/rules/providers/image-tokenization.kdl +2 -1
  72. package/src/compat/rules/providers/local.kdl +8 -1
  73. package/src/compat/rules/providers/meta.kdl +16 -0
  74. package/src/compat/rules/providers/moonshot.kdl +2 -0
  75. package/src/compat/rules/providers/muse-code.kdl +49 -0
  76. package/src/compat/rules/providers/native-tools.kdl +3 -0
  77. package/src/compat/rules/providers/ollama-cloud.kdl +10 -0
  78. package/src/compat/rules/providers/openai-codex.kdl +29 -5
  79. package/src/compat/rules/providers/openai.kdl +1 -0
  80. package/src/compat/rules/providers/opencode-go.kdl +35 -0
  81. package/src/compat/rules/providers/opencode-zen.kdl +4 -0
  82. package/src/compat/rules/providers/openrouter.kdl +19 -0
  83. package/src/compat/rules/providers/sambanova.kdl +60 -0
  84. package/src/compat/rules/providers/tool-call-names.kdl +37 -0
  85. package/src/compat/rules/providers/typesafe.kdl +11 -0
  86. package/src/compat/rules/providers/umans.kdl +7 -0
  87. package/src/compat/rules/providers/venice.kdl +7 -0
  88. package/src/compat/rules/providers/xai-oauth.kdl +16 -6
  89. package/src/compat/rules/providers/xai.kdl +3 -0
  90. package/src/compat/rules/providers/zai.kdl +5 -0
  91. package/src/compat/rules/runtime/behavior.kdl +128 -8
  92. package/src/compat/rules/taxonomy/_collapse.kdl +11 -0
  93. package/src/compat/rules/taxonomy/gemma.kdl +1 -0
  94. package/src/compat/rules/taxonomy/meta.kdl +7 -0
  95. package/src/compat/rules/taxonomy/openai.kdl +2 -0
  96. package/src/compat/rules.json +1 -1
  97. package/src/compat/thinking-replay.ts +33 -0
  98. package/src/compat/types.d.ts +4 -0
  99. package/src/compat/types.ts +4 -0
  100. package/src/discovery/antigravity.d.ts +7 -0
  101. package/src/discovery/antigravity.ts +13 -0
  102. package/src/discovery/codex.ts +0 -4
  103. package/src/discovery/cursor.ts +28 -20
  104. package/src/discovery/devin.ts +7 -8
  105. package/src/model-cache.d.ts +7 -0
  106. package/src/model-cache.ts +8 -0
  107. package/src/model-manager.d.ts +6 -0
  108. package/src/model-manager.ts +41 -21
  109. package/src/model-thinking.d.ts +80 -0
  110. package/src/model-thinking.ts +13 -1
  111. package/src/model-tokenizer.ts +7 -1
  112. package/src/models.d.ts +16 -1
  113. package/src/models.json +1 -1
  114. package/src/models.ts +26 -12
  115. package/src/pricing.d.ts +37 -1
  116. package/src/pricing.ts +123 -12
  117. package/src/provider-models/bundled-references.ts +5 -2
  118. package/src/provider-models/cache-provider-id.ts +1 -1
  119. package/src/provider-models/descriptors.ts +2 -0
  120. package/src/provider-models/google.ts +7 -1
  121. package/src/provider-models/openai-compat.d.ts +18 -46
  122. package/src/provider-models/openai-compat.ts +188 -104
  123. package/src/provider-models/special.ts +1 -0
  124. package/src/types.d.ts +63 -12
  125. package/src/types.ts +71 -9
  126. package/src/wire/codex.d.ts +2 -0
  127. package/src/wire/codex.ts +17 -0
@@ -4,11 +4,27 @@ provider "openai-codex" {
4
4
  default-model "gpt-5.5"
5
5
  env "OPENAI_CODEX_OAUTH_TOKEN"
6
6
  dynamic-models-authoritative #true
7
+ // Codex `/models` `display_name` is a title-cased slug (`GPT-6.1-Sol`,
8
+ // `GPT-5.6-Luna`) while the generator names bundled rows from the shared
9
+ // reference (`GPT-6.1 Sol`); without this the composer chip flips spelling
10
+ // once live discovery lands.
11
+ keep-bundled-names #true
7
12
  kind-apis {
8
13
  image "openai-codex-responses"
9
14
  }
10
15
  web-search "codex"
11
16
 
17
+ // Policy budgets: the Codex backend documents no request-size or image
18
+ // limit, and requests with several thousand images fail mid-stream at
19
+ // random. Inline images keep Anthropic's 24 MB; the official endpoint's
20
+ // image count stays well below those failures. A custom baseUrl keeps 200.
21
+ inline-image-byte-budget 24000000
22
+ image-count-budget 200
23
+ official-image-count-budget 2000
24
+ // The backend decodes zstd request bodies, as the official client sends.
25
+ // Its rejection body is undocumented, so any 400/415 re-checks uncompressed.
26
+ request-encodings "zstd"
27
+
12
28
  seed api="openai-codex-responses" base-url="https://chatgpt.com/backend-api" bundle="always" {
13
29
  // Label only: the Codex backend ignores `tool.model` and runs gpt-image-2-codex.
14
30
  model "gpt-image-2" name="GPT Image 2" {
@@ -91,10 +107,12 @@ provider "openai-codex" {
91
107
  }
92
108
  }
93
109
  // GPT-6.1 Sol keeps GPT-6 Sol's $2/$10 list price but halves cached input
94
- // to $0.10 (OpenAI API docs, 2026-09-29). Like Astra, Codex reports a 272K
95
- // default and an 872K maximum while OpenAI documents 922K max input (1.05M
96
- // total); the curated maximum applies only with extended context on, and a
97
- // higher live maximum still wins.
110
+ // to $0.10 (OpenAI API docs, 2026-09-29). OpenAI raised the Codex/Work
111
+ // default window from 272K to 500K at no extra charge (2026-10-11,
112
+ // https://x.com/thsottiaux/status/2109430343346581527). Codex reports an
113
+ // 872K maximum while OpenAI documents 922K max input (1.05M total); the
114
+ // curated maximum applies only with extended context on, and a higher live
115
+ // maximum still wins.
98
116
  models "gpt-6.1-sol" "gpt-6.1-sol-wm" {
99
117
  cost-patch {
100
118
  input 2.0
@@ -103,7 +121,7 @@ provider "openai-codex" {
103
121
  cache-write 0
104
122
  }
105
123
  limits-patch {
106
- context-window 272000
124
+ context-window 500000
107
125
  }
108
126
  max-context-window 922000
109
127
  }
@@ -209,3 +227,9 @@ provider "openai-codex" {
209
227
  context-window-floor 1000000
210
228
  }
211
229
  }
230
+
231
+ // The Codex backend rejects every sampling control (`temperature`, `top_p`,
232
+ // penalties, stop sequences), whichever model it serves (#3117).
233
+ on-api "openai-codex-responses" {
234
+ supports-sampling-params #false
235
+ }
@@ -3,6 +3,7 @@
3
3
  provider "openai" {
4
4
  default-model "gpt-5.5"
5
5
  env "OPENAI_API_KEY"
6
+ image-count-budget 200
6
7
  kind-apis {
7
8
  embedding "openai-embeddings"
8
9
  image "openai-responses"
@@ -4,6 +4,10 @@ provider "opencode-go" {
4
4
  default-model "kimi-k2.7-code"
5
5
  env "OPENCODE_API_KEY"
6
6
  dynamic-models-authoritative #true
7
+ // Replaces the provider check that disabled forced tool choice on Responses.
8
+ on-api "openai-responses" {
9
+ supports-forced-tool-choice #false
10
+ }
7
11
 
8
12
  // The Flash lanes accept images despite their IDs lacking a vision suffix;
9
13
  // verified against the gateway (unguessable pixel-rendered text read back
@@ -15,6 +19,37 @@ provider "opencode-go" {
15
19
  input-modalities "text" "image"
16
20
  strip-image-input #false
17
21
  }
22
+ // residue: the ids-only Go roster lists this bare V4.1 Flash alias with no
23
+ // price, limits or reasoning flag, and neither models.dev nor the bundle has
24
+ // a row to hydrate it from (#15357). Mirror the gateway's own
25
+ // `deepseek-v4.1-flash` row; `cost-fallback` yields to any price discovery
26
+ // reports later.
27
+ models "deepseek-flash" {
28
+ thinking-upgrade-neutral #true
29
+ cost-fallback {
30
+ input 0.15
31
+ output 0.6
32
+ cache-read 0.003
33
+ cache-write 0.0
34
+ }
35
+ limits-patch {
36
+ context-window 1000000
37
+ max-tokens 384000
38
+ }
39
+ }
40
+ // Live Go discovery lists Argon without capabilities; its native Gemini
41
+ // endpoint requires a thinking level and accepts LOW, MEDIUM, or HIGH.
42
+ models "gemini-4-argon-contributor" {
43
+ thinking-upgrade-neutral #true
44
+ thinking-mode "google-level"
45
+ thinking-efforts "low" "medium" "high"
46
+ thinking-requires-effort #true
47
+ input-modalities "text" "image"
48
+ limits-patch {
49
+ context-window 1048576
50
+ max-tokens 65536
51
+ }
52
+ }
18
53
  // Replaces the OpenCode reasoning-model whenThinking fallback object.
19
54
  when-thinking {
20
55
  requires-reasoning-content-for-tool-calls #true
@@ -4,6 +4,10 @@ provider "opencode-zen" {
4
4
  default-model "claude-opus-5"
5
5
  env "OPENCODE_API_KEY"
6
6
  dynamic-models-authoritative #true
7
+ // Replaces the provider check that disabled forced tool choice on Responses.
8
+ on-api "openai-responses" {
9
+ supports-forced-tool-choice #false
10
+ }
7
11
 
8
12
  // Replaces the OpenCode reasoning-model whenThinking fallback object.
9
13
  // Applies to every completions-routed reasoning model, discovered ids
@@ -13,6 +13,7 @@ provider "openrouter" {
13
13
  stt "openai-transcriptions"
14
14
  }
15
15
  web-search "openrouter"
16
+ image-count-budget 90
16
17
 
17
18
  // TypeSafe's Jev answers only through the Decisions API (`/api/alpha/decisions`,
18
19
  // System One wire shape); the default `/models` roster omits `text->decisions`
@@ -118,6 +119,17 @@ provider "openrouter" {
118
119
  models "~typesafe/*" "typesafe/*" {
119
120
  kind "judge"
120
121
  }
122
+ models "~typesafe/jev-latest" "typesafe/jev-1.13" "typesafe/jev-1.14" {
123
+ input-modalities "text" "image"
124
+ judgment-image-input {
125
+ mime-types "image/png,image/jpeg"
126
+ max-bytes 16777216
127
+ min-pixels 78400
128
+ max-pixels 2458624
129
+ min-side 280
130
+ max-side 1568
131
+ }
132
+ }
121
133
  models "cohere/rerank-v3.5" {
122
134
  kind "rerank"
123
135
  }
@@ -150,6 +162,13 @@ provider "openrouter" {
150
162
  allows-synthetic-reasoning-content-for-tool-calls #false
151
163
  }
152
164
  }
165
+ // OpenRouter forwards these hosted Muse SKUs to Meta's backend, which
166
+ // accepts only tool_choice "auto" and 400s on "none" (see providers/meta.kdl).
167
+ // Other Muse models, including muse-spark-open, retain discovered tool_choice.
168
+ models "meta/muse-spark-1.1" "meta/muse-spark-1.2" "meta/muse-spark-1.2-contributor" \
169
+ "meta/muse-spark-1.3" "meta/muse-spark-1.3-contributor" "meta/muse-wonder" {
170
+ supports-tool-choice #false
171
+ }
153
172
  class "minimax" {
154
173
  family "m3" {
155
174
  thinking-efforts "minimal" "low" "medium" "high"
@@ -0,0 +1,60 @@
1
+ // Provider-wire compat for "sambanova". SambaNova Cloud is an OpenAI-compatible
2
+ // gateway whose roster changes often (preview models come and go on short
3
+ // notice), so the live `/v1/models` roster is authoritative. Its rows carry
4
+ // pricing and limits but no capability metadata; the selectors below own
5
+ // reasoning, thinking wire format, and image input.
6
+
7
+ provider "sambanova" {
8
+ default-model "gpt-oss-120b"
9
+ env "SAMBANOVA_API_KEY"
10
+ discovery label="SambaNova"
11
+
12
+ dynamic-models-authoritative #true
13
+ skip-cross-provider-reference-fills #true
14
+
15
+ // `/v1/models` requires a key. This row keeps the provider visible in
16
+ // `/model` before login; the first live roster replaces it. Rate card from
17
+ // https://cloud.sambanova.ai/pricing.
18
+ seed api="openai-completions" base-url="https://api.sambanova.ai/v1" bundle="fallback" {
19
+ model "gpt-oss-120b" name="GPT OSS 120B" {
20
+ reasoning #true
21
+ input "text"
22
+ cost input=0.22 output=0.59 cache-read=0 cache-write=0
23
+ limits context=131072
24
+ }
25
+ }
26
+
27
+ // `/chat/completions` documents `reasoning_effort` as low/medium/high
28
+ // (https://docs.sambanova.ai/docs/api-reference/chat-completions/create-chat-based-completion).
29
+ thinking-mode "effort"
30
+ thinking-format "openai"
31
+ class "gpt-oss" {
32
+ thinking-efforts "low" "medium" "high"
33
+ thinking-upgrade-neutral #true
34
+ }
35
+ class "minimax" {
36
+ family "m3" {
37
+ thinking-efforts "low" "medium" "high"
38
+ thinking-upgrade-neutral #true
39
+ }
40
+ }
41
+ // DeepSeek V3.x and Gemma 4 think only when the request sets
42
+ // `chat_template_kwargs.enable_thinking`; it is off by default and no
43
+ // effort reaches the template, so the ladder is one on-rung beside off
44
+ // (https://docs.sambanova.ai/docs/en/features/text-generation).
45
+ class "deepseek" {
46
+ revision ">=3.1 <4" {
47
+ thinking-format "qwen-chat-template"
48
+ thinking-efforts "high"
49
+ thinking-upgrade-neutral #true
50
+ }
51
+ }
52
+ class "gemma" {
53
+ revision ">=4" {
54
+ thinking-format "qwen-chat-template"
55
+ thinking-efforts "high"
56
+ thinking-upgrade-neutral #true
57
+ input-modalities "text" "image"
58
+ }
59
+ }
60
+ }
@@ -0,0 +1,37 @@
1
+ // Tool names in replayed history must meet the target wire's declaration limits.
2
+ // Anthropic tool definitions: https://platform.claude.com/docs/en/agents-and-tools/tool-use/define-tools
3
+ on-api "anthropic-messages" "openai-responses" "azure-openai-responses" "openai-codex-responses" {
4
+ tool-call-name-charset "ascii"
5
+ tool-call-name-max-length 128
6
+ }
7
+
8
+ // Bedrock ToolUseBlockStart.name: https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolUseBlockStart.html
9
+ on-api "bedrock-converse-stream" {
10
+ tool-call-name-charset "ascii"
11
+ tool-call-name-max-length 64
12
+ }
13
+
14
+ // Chat Completions uses the shorter tool-name bound; OpenRouter can select it
15
+ // at request time. Factory Droid encodes caller names into this shape.
16
+ on-api "openai-completions" "openrouter" "factory-droid-agent" {
17
+ tool-call-name-charset "ascii"
18
+ tool-call-name-max-length 64
19
+ }
20
+
21
+ // Google FunctionDeclaration.name: https://googleapis.github.io/js-genai/release_docs/interfaces/types.FunctionDeclaration.html
22
+ on-api "google-generative-ai" {
23
+ tool-call-name-charset "google"
24
+ tool-call-name-max-length 128
25
+ }
26
+
27
+ // Vertex uses the Google FunctionDeclaration shape, independently of the public Gemini API.
28
+ on-api "google-vertex" {
29
+ tool-call-name-charset "google"
30
+ tool-call-name-max-length 128
31
+ }
32
+
33
+ // Code Assist's Gemini CLI proxy gets the conservative 64-character wire bound.
34
+ on-api "google-gemini-cli" {
35
+ tool-call-name-charset "google"
36
+ tool-call-name-max-length 64
37
+ }
@@ -14,6 +14,17 @@ provider "typesafe" {
14
14
  supports-tools #false
15
15
  }
16
16
  }
17
+ models "jev-latest" "jev-preview" "jev-1.13.0" "jev-1.14.0" {
18
+ input-modalities "text" "image"
19
+ judgment-image-input {
20
+ mime-types "image/png,image/jpeg"
21
+ max-bytes 16777216
22
+ min-pixels 78400
23
+ max-pixels 2458624
24
+ min-side 280
25
+ max-side 1568
26
+ }
27
+ }
17
28
 
18
29
  models "*" {
19
30
  kind "judge"
@@ -5,9 +5,16 @@ provider "umans" {
5
5
  env "UMANS_AI_CODING_PLAN_API_KEY"
6
6
  dynamic-models-authoritative #true
7
7
  discovery label="Umans AI Coding Plan" allow-unauthenticated=#true
8
+ image-count-budget 10
8
9
 
9
10
  // Replaces resolve.ts's Umans provider baseline for Anthropic built-in tool names.
10
11
  escape-builtin-tool-names #true
12
+ // Replaces the GLM 5.2+ Anthropic budget-plus-effort default.
13
+ class "glm" {
14
+ revision ">=5.2" {
15
+ thinking-mode "anthropic-budget-effort"
16
+ }
17
+ }
11
18
  // residue: taxonomy ranks and exact globs do not isolate these models.
12
19
  models "umans-coder" "umans-kimi-k2.7" {
13
20
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
@@ -47,4 +47,11 @@ provider "venice" {
47
47
  models "qwen3-235b" {
48
48
  thinking-format "qwen"
49
49
  }
50
+ // Kimi K2.7 Code's documented recommended output budget; Venice discovery
51
+ // reports the context-sized `max_completion_tokens` instead.
52
+ class "kimi" {
53
+ family "k2.7-code" {
54
+ max-tokens-ceiling 32768
55
+ }
56
+ }
50
57
  }
@@ -9,11 +9,19 @@ provider "xai-oauth" {
9
9
  tts "xai-tts"
10
10
  }
11
11
  web-search "xai"
12
+ // api.x.ai rejects a body over 50 MiB and counts images only against the
13
+ // context window; 60 images at the 500 KiB resize target stay near 41 MB.
14
+ image-count-budget 60
15
+ // Public xAI prices are API-equivalent estimates for stats; SuperGrok
16
+ // requests stay subscription-backed, so the estimated long-context tier
17
+ // must not cap the runtime context window.
18
+ long-context-window-uncapped #true
12
19
 
13
20
  // Source of truth for the xai-oauth chat picker. Declaration order is headline order.
14
21
  // Context windows from hermes-agent/agent/model_metadata.py:205-220
15
- // ("Values sourced from models.dev (2026-04)"). grok-build is xAI's
16
- // coding-fine-tuned chat model; 512K context per user spec (2026-05-17).
22
+ // ("Values sourced from models.dev (2026-04)") unless a row says otherwise.
23
+ // grok-build is xAI's coding-fine-tuned chat model; 512K context per user
24
+ // spec (2026-05-17).
17
25
  //
18
26
  // xai-oauth's /v1/models exposes no per-request output limit on the OAuth
19
27
  // (Grok Build / SuperGrok) surface, so maxTokens mirrors contextWindow. The
@@ -65,25 +73,27 @@ provider "xai-oauth" {
65
73
  cost input=0 output=0 cache-read=0 cache-write=0
66
74
  limits context=500000 max-tokens=500000
67
75
  }
68
- // Text-only per the bundled catalog.
76
+ // grok-4.20-*-0309: api.x.ai rejects prompts over 1M tokens on this surface
77
+ // ([input_too_large] "... > 1000000 tokens", all three ids, 2026-10-12).
78
+ // Multi-agent is text-only per the bundled catalog.
69
79
  model "grok-4.20-multi-agent-0309" name="Grok 4.20 (Multi-Agent)" {
70
80
  reasoning #true
71
81
  input "text"
72
82
  cost input=0 output=0 cache-read=0 cache-write=0
73
- limits context=2000000 max-tokens=2000000
83
+ limits context=1000000 max-tokens=1000000
74
84
  }
75
85
  model "grok-4.20-0309-reasoning" name="Grok 4.20 (Reasoning)" {
76
86
  reasoning #true
77
87
  input "text" "image"
78
88
  cost input=0 output=0 cache-read=0 cache-write=0
79
- limits context=2000000 max-tokens=2000000
89
+ limits context=1000000 max-tokens=1000000
80
90
  supports-reasoning-effort #false
81
91
  }
82
92
  model "grok-4.20-0309-non-reasoning" name="Grok 4.20 (Non-Reasoning)" {
83
93
  reasoning #false
84
94
  input "text" "image"
85
95
  cost input=0 output=0 cache-read=0 cache-write=0
86
- limits context=2000000 max-tokens=2000000
96
+ limits context=1000000 max-tokens=1000000
87
97
  }
88
98
  // Cursor's "Composer 2.5 Fast" exposed via SuperGrok: non-reasoning,
89
99
  // text-only, 200K context (mirrors Cursor's composer-* catalog entries).
@@ -8,6 +8,9 @@ provider "xai" {
8
8
  tts "xai-tts"
9
9
  }
10
10
  web-search "xai"
11
+ // api.x.ai rejects a body over 50 MiB and counts images only against the
12
+ // context window; 60 images at the 500 KiB resize target stay near 41 MB.
13
+ image-count-budget 60
11
14
 
12
15
  seed api="xai-tts" base-url="https://api.x.ai/v1" bundle="always" {
13
16
  model "grok-tts" name="Grok TTS" {
@@ -36,6 +36,11 @@ provider "zai" {
36
36
  // Replaces resolve.ts's ZAI provider baseline for Anthropic tool-result IDs.
37
37
  requires-tool-result-id #true
38
38
  class "glm" {
39
+ // Replaces the GLM 5.2+ Anthropic budget-plus-effort default; the lower
40
+ // priority yields to the family modes below on equal-rank overlaps.
41
+ revision ">=5.2" priority=-1 {
42
+ thinking-mode "anthropic-budget-effort"
43
+ }
39
44
  family "flash" {
40
45
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
41
46
  thinking-mode "budget"
@@ -173,14 +173,21 @@ behavior {
173
173
  // serve; the dedicated tool surfaces route them instead.
174
174
  exclude-models provider="xai-oauth" exact="grok-imagine-image-quality" exact="grok-imagine-image-2.0" \
175
175
  prefix="grok-imagine-video" prefix="grok-stt-" prefix="grok-voice-"
176
+ // Antigravity still advertises the Gemini 3.5 Flash wire ids, but every
177
+ // request to them answers with a retirement notice instead of a reply.
178
+ // `gemini-3-flash` is the family's recycled alias and routes to the same ids.
179
+ exclude-models provider="google-antigravity" exact="gemini-3.5-flash" exact="gemini-3-flash"
176
180
  // Meta's /v1/models lists image generation and transcription SKUs beside
177
- // the Muse Spark chat models.
178
- exclude-models provider="meta" prefix="muse-image-" prefix="muse-voice-"
179
- exclude-models provider="muse-code" prefix="muse-image-" prefix="muse-voice-"
181
+ // the Muse Spark chat models, and SAM segmentation beside them.
182
+ exclude-models provider="meta" prefix="muse-image-" prefix="muse-voice-" prefix="sam-"
183
+ exclude-models provider="muse-code" prefix="muse-image-" prefix="muse-voice-" prefix="sam-"
180
184
  // NanoGPT's roster interleaves non-text SKUs by name token.
181
185
  exclude-models provider="nanogpt" substring="embedding" substring="image" substring="vision" \
182
186
  substring="audio" substring="speech" substring="transcribe" substring="moderation" \
183
187
  substring="realtime" substring="whisper" substring="tts"
188
+ // SambaNova's /v1/models may include embedding and audio SKUs.
189
+ exclude-models provider="sambanova" substring="embedding" substring="whisper" substring="audio" \
190
+ substring="e5-mistral" substring="clip"
184
191
  // AIML API's roster interleaves media/embedding SKUs; bounded tokens keep
185
192
  // chat ids from false-matching on plain substrings.
186
193
  exclude-models provider="aimlapi" token="audio" token="embed" token="embedding" token="embeddings" \
@@ -219,9 +226,10 @@ behavior {
219
226
  // effort ladder that lists `/responses` therefore rides Responses, so
220
227
  // thinking-off actually disables reasoning instead of clamping to the
221
228
  // lowest effort. Ladder ids without `/responses` (deepseek-v4-flash-fast,
222
- // gemini-3.7-flash, Qwen3.8-Flash, Qwen3.8-Max-0902, hy4-preview,
223
- // space-bunny-alpha), the Qwen3.8 ids (chat already disables them through
224
- // `enable_thinking: false`), and non-reasoning ids stay on chat completions.
229
+ // gemini-3.7-flash, glm-5.3-flash since 2026-10-14, Qwen3.8-Flash,
230
+ // Qwen3.8-Max-0902, hy4-preview, space-bunny-alpha), the Qwen3.8 ids (chat
231
+ // already disables them through `enable_thinking: false`), and
232
+ // non-reasoning ids stay on chat completions.
225
233
  api-routes provider="commandcode" default="openai-completions" {
226
234
  route "anthropic-messages" prefix="claude-"
227
235
  route "openai-responses" exact="gpt-5.3-codex" exact="gpt-5.4" exact="gpt-5.4-mini" exact="gpt-5.5" \
@@ -230,7 +238,7 @@ behavior {
230
238
  exact="deepseek/deepseek-v4-flash" exact="deepseek/deepseek-v4-flash-vision-exp" \
231
239
  exact="deepseek/deepseek-v4-pro" exact="deepseek/deepseek-v4.1-flash" \
232
240
  exact="deepseek/deepseek-v4.1-flash-fast" exact="moonshotai/Kimi-K3" \
233
- exact="z-ai/glm-5.3-flash" exact="z-ai/glm-5.3-flashx" exact="zai-org/GLM-5.2" \
241
+ exact="z-ai/glm-5.3-flashx" exact="zai-org/GLM-5.2" \
234
242
  exact="zai-org/GLM-5.3" exact="google/gemini-3.1-flash-lite" exact="google/gemini-3.5-flash" \
235
243
  exact="google/gemini-3.5-flash-lite" exact="google/gemini-3.6-flash" \
236
244
  exact="google/gemini-3.8-flash" exact="MiniMaxAI/MiniMax-M3" exact="stepfun/Step-5-Preview" \
@@ -255,6 +263,8 @@ behavior {
255
263
  // at /responses (#10610, #12030). The Muse prefix covers gateway-first
256
264
  // revisions; exact ids stay as cache-migration identity.
257
265
  api-routes provider="opencode-zen" {
266
+ // Paid Argon is served only on Zen's native Google endpoint (#15977).
267
+ route "google-generative-ai" exact="gemini-4-argon"
258
268
  route "anthropic-messages" exact="union-alpha"
259
269
  route "openai-responses" prefix="muse-spark-" exact="muse-spark-1.3-contributor-free" exact="gpt-6-astra"
260
270
  route "openai-completions" exact="minimax-m3" exact="minimax-m3-free"
@@ -263,6 +273,7 @@ behavior {
263
273
  // responses pins are gateway-verified (deepseek-v4-flash 2026-08-08;
264
274
  // muse-spark per opencode.ai/docs/go/#endpoints, #8957, #10610).
265
275
  api-routes provider="opencode-go" {
276
+ route "google-generative-ai" exact="gemini-4-argon-contributor"
266
277
  route "anthropic-messages" exact="union-alpha"
267
278
  route "openai-responses" prefix="muse-spark-" exact="deepseek-v4-flash" exact="muse-spark-1.2" \
268
279
  exact="muse-spark-1.2-contributor" exact="muse-spark-1.3" exact="muse-spark-1.3-contributor"
@@ -345,7 +356,6 @@ behavior {
345
356
  // Google); price rows at their first-party equivalents, Vertex before
346
357
  // Anthropic for Claude ids. Aliases map ids whose peer ships differently.
347
358
  pricing-peer provider="google-antigravity" peers="google" "google-vertex" "anthropic" {
348
- alias "gemini-3-flash" peer-id="gemini-3-flash-preview"
349
359
  alias "gemini-3-pro" peer-id="gemini-3-pro-preview"
350
360
  alias "gemini-3.1-pro" peer-id="gemini-3.1-pro-preview"
351
361
  alias "claude-opus-4-5" peer-id="claude-opus-4-5@20251101"
@@ -372,4 +382,114 @@ behavior {
372
382
  }
373
383
  hosted-default provider="zai-search" model="glm-4.7"
374
384
  hosted-default provider="synthetic-search" model="auto"
385
+ // Built-in default model selector chains per agent role, most preferred
386
+ // first; the coding agent reads them through `roleDefaultModels()`.
387
+ role-defaults "smol" {
388
+ model "claude-haiku-5-5"
389
+ model "claude-haiku-5.5"
390
+ model "haiku-5-5"
391
+ model "haiku-5.5"
392
+ model "google-antigravity/gemini-3.8-flash"
393
+ model "gemini-3.8-flash"
394
+ model "gemini-3-8-flash"
395
+ model "gemini-3.7-flash"
396
+ model "gemini-3-7-flash"
397
+ model "gemini-3.6-flash"
398
+ model "gemini-3-6-flash"
399
+ model "gemini-3.5-flash"
400
+ model "gemini-3-5-flash"
401
+ model "openai-codex/gpt-5.3-codex-spark"
402
+ model "gpt-5.3-codex-spark"
403
+ model "5.3-spark"
404
+ model "spark"
405
+ model "zai/glm-5.3-flash"
406
+ model "glm-5.3-flash"
407
+ model "gemini-3.1-flash-lite"
408
+ model "gemini-3-1-flash-lite"
409
+ model "flash-lite"
410
+ model "cerebras/gpt-oss-120b"
411
+ model "gpt-oss-120b"
412
+ model "oss-120b"
413
+ model "cerebras/zai-glm-4.7"
414
+ model "cerebras/zai-glm-4.6"
415
+ model "cerebras/zai-glm"
416
+ model "claude-haiku-4-5"
417
+ model "claude-haiku-4.5"
418
+ model "haiku-4-5"
419
+ model "haiku-4.5"
420
+ model "haiku"
421
+ model "openai-codex/gpt-5.6-luna"
422
+ model "gpt-5.6-luna"
423
+ model "openai-codex/gpt-5.4-mini"
424
+ model "gpt-5.4-mini"
425
+ model "-mini"
426
+ }
427
+ role-defaults "slow" {
428
+ model "openai-codex/gpt-5.6-sol"
429
+ model "gpt-5.6-sol"
430
+ model "anthropic/claude-fable-5-1"
431
+ model "claude-fable-5-1"
432
+ model "claude-fable-5.1"
433
+ model "fable-5.1"
434
+ model "fable-5-1"
435
+ model "anthropic/claude-fable-5"
436
+ model "claude-fable-5"
437
+ model "fable-5"
438
+ model "kimi-code/k3"
439
+ model "kimi-k3"
440
+ model "moonshotai/kimi-k3"
441
+ model "k3"
442
+ model "zai/glm-5.3"
443
+ model "glm-5.3"
444
+ model "anthropic/claude-opus-5-5"
445
+ model "claude-opus-5-5"
446
+ model "opus-5-5"
447
+ model "anthropic/claude-opus-5"
448
+ model "claude-opus-5"
449
+ model "opus-5"
450
+ model "openai-codex/gpt-5.5"
451
+ model "gpt-5.5"
452
+ model "claude-opus-4-8"
453
+ model "claude-opus-4.8"
454
+ model "opus-4-8"
455
+ model "opus-4.8"
456
+ }
457
+ role-defaults "image" {
458
+ model "openai/gpt-image-2"
459
+ model "openai-codex/gpt-image-2"
460
+ model "google-antigravity/gemini-3-pro-image"
461
+ model "xai/grok-imagine-image"
462
+ model "xai-oauth/grok-imagine-image"
463
+ model "openrouter/google/gemini-3-pro-image"
464
+ model "google/gemini-3-pro-image"
465
+ model "deepinfra/black-forest-labs/FLUX-2-pro"
466
+ }
467
+ role-defaults "web" {
468
+ model "web/parallel"
469
+ model "web/hosted"
470
+ model "web/exa"
471
+ model "web/firecrawl"
472
+ model "web/searxng"
473
+ model "web/startpage"
474
+ model "web/duckduckgo"
475
+ model "web/ecosia"
476
+ model "web/google"
477
+ model "web/mojeek"
478
+ model "web/public"
479
+ }
480
+ role-defaults "speech" {
481
+ model "local/kokoro"
482
+ model "xai/grok-tts"
483
+ model "xai-oauth/grok-tts"
484
+ }
485
+ role-defaults "dictation" {
486
+ model "local/parakeet-tdt-0.6b-v3"
487
+ }
488
+ role-defaults "judge" {
489
+ model "typesafe/jev-latest"
490
+ model "openrouter/~typesafe/jev-latest"
491
+ model "@tiny"
492
+ model "@smol"
493
+ model "@default"
494
+ }
375
495
  }
@@ -46,6 +46,17 @@ collapse {
46
46
  efforts "minimal" "low" "medium" "high"
47
47
  requires-effort #true
48
48
  }
49
+ // Gemini 4 Argon ships as `-low`/`-medium`/`-high` thinking-level SKUs,
50
+ // matching the three levels Google documents for the model (no minimal).
51
+ variant-family "google-antigravity" "gemini-4-argon" name="Gemini 4 Argon" {
52
+ members "gemini-4-argon-low" "gemini-4-argon-medium" "gemini-4-argon-high"
53
+ route "low" "gemini-4-argon-low"
54
+ route "medium" "gemini-4-argon-medium"
55
+ route "high" "gemini-4-argon-high"
56
+ mode "google-level"
57
+ efforts "low" "medium" "high"
58
+ requires-effort #true
59
+ }
49
60
  variant-family "google-antigravity" "gemini-3.5-flash" name="Gemini 3.5 Flash" {
50
61
  members "gemini-3.5-flash-extra-low" "gemini-3.5-flash-low" "gemini-3-flash-agent"
51
62
  route "off" "gemini-3.5-flash-extra-low"
@@ -1,3 +1,4 @@
1
1
  class "gemma" {
2
2
  bounded "gemma"
3
+ revision prefix="gemma-"
3
4
  }
@@ -1,10 +1,17 @@
1
1
  class "meta" {
2
2
  bounded "muse-spark"
3
+ bounded "muse-wonder"
3
4
  bounded "llama"
5
+ // SambaNova serves the bare `Meta-Llama-*` spelling with no namespace
6
+ // segment, which `bounded "llama"` never sees (prefix-anchored) and
7
+ // `namespace "meta-llama"` cannot match.
8
+ bounded "meta-llama"
4
9
  namespace "meta-llama"
5
10
 
6
11
  family "llama" glob="*llama*"
7
12
  family "muse-spark" glob="*muse-spark*"
13
+ family "muse-wonder" glob="*muse-wonder*"
8
14
 
9
15
  revision prefix="muse-spark-"
16
+ revision prefix="muse-wonder-"
10
17
  }
@@ -16,6 +16,8 @@ class "openai" {
16
16
 
17
17
  family "gpt" glob="gpt-*"
18
18
  family "chatgpt" glob="chatgpt-*"
19
+ family "gpt-image" glob="gpt-image-*"
20
+ family "gpt-image" glob="chatgpt-image-*"
19
21
  family "o-series" glob="o1"
20
22
  family "o-series" glob="o1-*"
21
23
  family "o-series" glob="o1.*"