@oh-my-pi/pi-catalog 18.11.2 → 18.12.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 (57) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/types/compat/behavior.d.ts +5 -0
  3. package/dist/types/compat/catalog-endpoint.d.ts +8 -0
  4. package/dist/types/compat/judgment-images.d.ts +25 -0
  5. package/dist/types/compat/request-compression.d.ts +21 -0
  6. package/dist/types/compat/request-size.d.ts +2 -1
  7. package/dist/types/compat/types.d.ts +2 -0
  8. package/dist/types/model-cache.d.ts +7 -0
  9. package/dist/types/provider-models/openai-compat.d.ts +0 -46
  10. package/dist/types/types.d.ts +14 -1
  11. package/package.json +4 -4
  12. package/src/build.ts +13 -0
  13. package/src/compat/axes.ts +51 -1
  14. package/src/compat/behavior.ts +9 -1
  15. package/src/compat/catalog-endpoint.ts +43 -0
  16. package/src/compat/judgment-images.ts +83 -0
  17. package/src/compat/request-compression.ts +41 -0
  18. package/src/compat/request-size.ts +3 -1
  19. package/src/compat/resolve.ts +34 -49
  20. package/src/compat/rules/README.md +17 -1
  21. package/src/compat/rules/auth/google-antigravity.kdl +1 -1
  22. package/src/compat/rules/classes/anthropic.kdl +2 -3
  23. package/src/compat/rules/classes/deepseek.kdl +4 -0
  24. package/src/compat/rules/classes/minimax.kdl +10 -0
  25. package/src/compat/rules/classes/openai.kdl +8 -0
  26. package/src/compat/rules/providers/anthropic.kdl +4 -0
  27. package/src/compat/rules/providers/azure.kdl +2 -0
  28. package/src/compat/rules/providers/cerebras.kdl +3 -0
  29. package/src/compat/rules/providers/cline-pass.kdl +16 -0
  30. package/src/compat/rules/providers/commandcode.kdl +10 -0
  31. package/src/compat/rules/providers/deepinfra.kdl +3 -1
  32. package/src/compat/rules/providers/devin.kdl +7 -1
  33. package/src/compat/rules/providers/factory-droid.kdl +6 -0
  34. package/src/compat/rules/providers/firepass.kdl +15 -0
  35. package/src/compat/rules/providers/fireworks.kdl +26 -0
  36. package/src/compat/rules/providers/github-copilot.kdl +24 -0
  37. package/src/compat/rules/providers/google-antigravity.kdl +11 -0
  38. package/src/compat/rules/providers/moonshot.kdl +2 -0
  39. package/src/compat/rules/providers/ollama-cloud.kdl +3 -0
  40. package/src/compat/rules/providers/openai-codex.kdl +9 -0
  41. package/src/compat/rules/providers/opencode-go.kdl +4 -0
  42. package/src/compat/rules/providers/opencode-zen.kdl +4 -0
  43. package/src/compat/rules/providers/openrouter.kdl +15 -0
  44. package/src/compat/rules/providers/tool-call-names.kdl +37 -0
  45. package/src/compat/rules/providers/typesafe.kdl +8 -0
  46. package/src/compat/rules/providers/umans.kdl +6 -0
  47. package/src/compat/rules/providers/venice.kdl +7 -0
  48. package/src/compat/rules/providers/xai-oauth.kdl +4 -0
  49. package/src/compat/rules/providers/zai.kdl +5 -0
  50. package/src/compat/rules/runtime/behavior.kdl +115 -4
  51. package/src/compat/rules.json +1 -1
  52. package/src/compat/types.ts +2 -0
  53. package/src/model-cache.ts +8 -0
  54. package/src/model-manager.ts +29 -20
  55. package/src/models.json +1 -1
  56. package/src/provider-models/openai-compat.ts +8 -90
  57. package/src/types.ts +14 -0
@@ -121,6 +121,14 @@ provider "openrouter" {
121
121
  }
122
122
  models "~typesafe/jev-latest" "typesafe/jev-1.13" "typesafe/jev-1.14" {
123
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
+ }
124
132
  }
125
133
  models "cohere/rerank-v3.5" {
126
134
  kind "rerank"
@@ -154,6 +162,13 @@ provider "openrouter" {
154
162
  allows-synthetic-reasoning-content-for-tool-calls #false
155
163
  }
156
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
+ }
157
172
  class "minimax" {
158
173
  family "m3" {
159
174
  thinking-efforts "minimal" "low" "medium" "high"
@@ -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
+ }
@@ -16,6 +16,14 @@ provider "typesafe" {
16
16
  }
17
17
  models "jev-latest" "jev-preview" "jev-1.13.0" "jev-1.14.0" {
18
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
+ }
19
27
  }
20
28
 
21
29
  models "*" {
@@ -9,6 +9,12 @@ provider "umans" {
9
9
 
10
10
  // Replaces resolve.ts's Umans provider baseline for Anthropic built-in tool names.
11
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
+ }
12
18
  // residue: taxonomy ranks and exact globs do not isolate these models.
13
19
  models "umans-coder" "umans-kimi-k2.7" {
14
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
  }
@@ -12,6 +12,10 @@ provider "xai-oauth" {
12
12
  // api.x.ai rejects a body over 50 MiB and counts images only against the
13
13
  // context window; 60 images at the 500 KiB resize target stay near 41 MB.
14
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
15
19
 
16
20
  // Source of truth for the xai-oauth chat picker. Declaration order is headline order.
17
21
  // Context windows from hermes-agent/agent/model_metadata.py:205-220
@@ -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"
@@ -226,9 +226,10 @@ behavior {
226
226
  // effort ladder that lists `/responses` therefore rides Responses, so
227
227
  // thinking-off actually disables reasoning instead of clamping to the
228
228
  // lowest effort. Ladder ids without `/responses` (deepseek-v4-flash-fast,
229
- // gemini-3.7-flash, Qwen3.8-Flash, Qwen3.8-Max-0902, hy4-preview,
230
- // space-bunny-alpha), the Qwen3.8 ids (chat already disables them through
231
- // `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.
232
233
  api-routes provider="commandcode" default="openai-completions" {
233
234
  route "anthropic-messages" prefix="claude-"
234
235
  route "openai-responses" exact="gpt-5.3-codex" exact="gpt-5.4" exact="gpt-5.4-mini" exact="gpt-5.5" \
@@ -237,7 +238,7 @@ behavior {
237
238
  exact="deepseek/deepseek-v4-flash" exact="deepseek/deepseek-v4-flash-vision-exp" \
238
239
  exact="deepseek/deepseek-v4-pro" exact="deepseek/deepseek-v4.1-flash" \
239
240
  exact="deepseek/deepseek-v4.1-flash-fast" exact="moonshotai/Kimi-K3" \
240
- 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" \
241
242
  exact="zai-org/GLM-5.3" exact="google/gemini-3.1-flash-lite" exact="google/gemini-3.5-flash" \
242
243
  exact="google/gemini-3.5-flash-lite" exact="google/gemini-3.6-flash" \
243
244
  exact="google/gemini-3.8-flash" exact="MiniMaxAI/MiniMax-M3" exact="stepfun/Step-5-Preview" \
@@ -381,4 +382,114 @@ behavior {
381
382
  }
382
383
  hosted-default provider="zai-search" model="glm-4.7"
383
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
+ }
384
495
  }