@oh-my-pi/pi-catalog 18.10.2 → 18.10.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.
Files changed (46) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/types/compat/image-tokenization.d.ts +9 -1
  3. package/dist/types/compat/request-size.d.ts +11 -3
  4. package/dist/types/compat/thinking-replay.d.ts +9 -0
  5. package/dist/types/model-thinking.d.ts +11 -1
  6. package/dist/types/types.d.ts +29 -5
  7. package/dist/types/wire/codex.d.ts +2 -0
  8. package/package.json +4 -4
  9. package/src/build.ts +3 -2
  10. package/src/compat/axes.ts +43 -2
  11. package/src/compat/cascade.ts +4 -1
  12. package/src/compat/image-tokenization.ts +28 -10
  13. package/src/compat/request-size.ts +18 -5
  14. package/src/compat/resolve.ts +31 -5
  15. package/src/compat/rules/README.md +10 -2
  16. package/src/compat/rules/classes/anthropic.kdl +40 -2
  17. package/src/compat/rules/classes/meta.kdl +5 -0
  18. package/src/compat/rules/classes/openai.kdl +26 -3
  19. package/src/compat/rules/classes/xai.kdl +26 -0
  20. package/src/compat/rules/providers/amazon-bedrock.kdl +1 -0
  21. package/src/compat/rules/providers/anthropic.kdl +13 -0
  22. package/src/compat/rules/providers/cursor.kdl +30 -1
  23. package/src/compat/rules/providers/google-antigravity.kdl +26 -0
  24. package/src/compat/rules/providers/google-gemini-cli.kdl +1 -0
  25. package/src/compat/rules/providers/google-vertex.kdl +1 -0
  26. package/src/compat/rules/providers/google.kdl +1 -0
  27. package/src/compat/rules/providers/image-tokenization.kdl +2 -1
  28. package/src/compat/rules/providers/meta.kdl +16 -0
  29. package/src/compat/rules/providers/muse-code.kdl +9 -0
  30. package/src/compat/rules/providers/openai-codex.kdl +8 -0
  31. package/src/compat/rules/providers/openai.kdl +1 -0
  32. package/src/compat/rules/providers/openrouter.kdl +1 -0
  33. package/src/compat/rules/providers/umans.kdl +1 -0
  34. package/src/compat/rules/providers/xai-oauth.kdl +3 -0
  35. package/src/compat/rules/providers/xai.kdl +3 -0
  36. package/src/compat/rules/runtime/behavior.kdl +3 -3
  37. package/src/compat/rules/taxonomy/meta.kdl +3 -0
  38. package/src/compat/rules.json +1 -1
  39. package/src/compat/thinking-replay.ts +33 -0
  40. package/src/model-thinking.ts +13 -1
  41. package/src/model-tokenizer.ts +7 -1
  42. package/src/models.json +1 -1
  43. package/src/provider-models/bundled-references.ts +5 -2
  44. package/src/provider-models/openai-compat.ts +3 -1
  45. package/src/types.ts +31 -4
  46. package/src/wire/codex.ts +17 -0
@@ -14,10 +14,22 @@
14
14
  // consecutive tool_use or tool_result blocks is one position. Warm-cache
15
15
  // tool-result pruning keeps its rewrites inside this window.
16
16
  // https://platform.claude.com/docs/en/build-with-claude/prompt-caching
17
+ // A replayed signed thinking block bills the full reasoning its signature
18
+ // carries (the server rebuilds it from the signature), at the size its turn
19
+ // billed as output, not the signature's bytes. Thinking a request drops bills
20
+ // nothing (earlier turns on lines that strip it: Opus before 4.5, Sonnet
21
+ // before 4.6, Haiku before 5.5; turns before a compaction or prune on
22
+ // prefix-bound lines; another model's blocks the reader cannot read), so
23
+ // those turns count high.
24
+ // https://platform.claude.com/docs/en/build-with-claude/context-windows#the-context-window-with-thinking
25
+ // https://platform.claude.com/docs/en/build-with-claude/preserved-thinking#switching-models
17
26
  class "anthropic" {
18
27
  prompt-cache-lookback 20
28
+ thinking-replay-tokens "output"
29
+ // verified: billing matched this formula on Opus 4.7+ and Fable 5.1.
19
30
  image-tokenization {
20
31
  regime "anthropic-patch"
32
+ verified #true
21
33
  max-edge 2576
22
34
  max-tokens 4784
23
35
  }
@@ -37,21 +49,39 @@ class "anthropic" {
37
49
  }
38
50
  }
39
51
  }
52
+ // Standard tier. verified: billing matched it on Sonnet 4.6 only; older
53
+ // Sonnet lines keep the floor until measured.
40
54
  family "sonnet" {
41
- revision "<4.7" {
55
+ revision "<4.6" {
42
56
  image-tokenization {
43
57
  regime "anthropic-patch"
44
58
  max-edge 1568
45
59
  max-tokens 1568
46
60
  }
47
61
  }
48
- revision ">=10 <47" {
62
+ revision ">=4.6 <4.7" {
63
+ image-tokenization {
64
+ regime "anthropic-patch"
65
+ verified #true
66
+ max-edge 1568
67
+ max-tokens 1568
68
+ }
69
+ }
70
+ revision ">=10 <46" {
49
71
  image-tokenization {
50
72
  regime "anthropic-patch"
51
73
  max-edge 1568
52
74
  max-tokens 1568
53
75
  }
54
76
  }
77
+ revision ">=46 <47" {
78
+ image-tokenization {
79
+ regime "anthropic-patch"
80
+ verified #true
81
+ max-edge 1568
82
+ max-tokens 1568
83
+ }
84
+ }
55
85
  }
56
86
  family "haiku" {
57
87
  revision "<4.7" {
@@ -87,6 +117,14 @@ class "anthropic" {
87
117
  supports-sampling-params #false
88
118
  }
89
119
  }
120
+ // Opus 5.5 made every first edit exactly right from `read` results it saw
121
+ // only as snapcompact frames (24/24); Haiku 5.5 lost leading whitespace
122
+ // (22/54), so other lines keep `read` as text until measured.
123
+ family "opus" {
124
+ revision ">=5.5 <10" {
125
+ snapcompact-image-reads #true
126
+ }
127
+ }
90
128
  family "sonnet" {
91
129
  revision ">=5 <10" {
92
130
  supports-sampling-params #false
@@ -9,6 +9,11 @@ class "meta" {
9
9
  thinking-efforts "minimal" "low" "medium" "high" "xhigh" "max"
10
10
  thinking-mode "effort"
11
11
  }
12
+ // Meta documents `max` for Muse Wonder (dev.meta.ai/docs/reasoning).
13
+ models "muse-wonder-1.0" {
14
+ thinking-efforts "minimal" "low" "medium" "high" "xhigh" "max"
15
+ thinking-mode "effort"
16
+ }
12
17
  models "muse-spark-1.1" "muse-spark-1.2" "muse-spark-1.2-contributor" {
13
18
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
14
19
  thinking-mode "effort"
@@ -95,11 +95,11 @@ class "openai" {
95
95
  // Older lines carry no lineage rule and bill at their wire API's fallback
96
96
  // (providers/image-tokenization.kdl).
97
97
  class "openai" {
98
- // gpt-5.6 sizing, shared by later lines. `<10` keeps separator-collapsed
99
- // revisions (`openai-gpt-52-codex` parses as 52) off the 5.6+ sizing.
100
- revision ">=5.6 <10" {
98
+ // gpt-5.6 sizing. verified: billing matched this formula on gpt-5.6 through 6.1.
99
+ revision ">=5.6 <6.2" {
101
100
  image-tokenization {
102
101
  regime "openai-patch"
102
+ verified #true
103
103
  multiplier 1.2
104
104
  auto "original"
105
105
  low {
@@ -114,9 +114,30 @@ class "openai" {
114
114
  }
115
115
  }
116
116
  }
117
+ // Later lines size like gpt-5.6, unverified until measured. `<10` keeps
118
+ // separator-collapsed revisions (`openai-gpt-52-codex` parses as 52) off it.
119
+ revision ">=6.2 <10" {
120
+ image-tokenization {
121
+ regime "openai-patch"
122
+ multiplier 1.2
123
+ auto "original"
124
+ low {
125
+ max-edge 512
126
+ }
127
+ high {
128
+ max-edge 2048
129
+ patch-budget 2500
130
+ }
131
+ original {
132
+ max-edge 65535
133
+ }
134
+ }
135
+ }
136
+ // verified: billing matched this formula on gpt-5.5.
117
137
  revision "=5.5" {
118
138
  image-tokenization {
119
139
  regime "openai-patch"
140
+ verified #true
120
141
  multiplier 1.2
121
142
  auto "original"
122
143
  low {
@@ -173,9 +194,11 @@ class "openai" {
173
194
  }
174
195
  }
175
196
  // residue: astra's limits differ from the rest of its revision.
197
+ // verified: billing matched this formula on gpt-6-astra.
176
198
  models "*gpt-6-astra*" {
177
199
  image-tokenization {
178
200
  regime "openai-patch"
201
+ verified #true
179
202
  multiplier 1.2
180
203
  auto "original"
181
204
  low {
@@ -41,6 +41,32 @@ class "xai" {
41
41
  }
42
42
  }
43
43
  }
44
+ // Grok bills 32px patches plus ~30–40 tokens per image, resizing past
45
+ // 2,401 patches at every detail level; the 1.017 multiplier carries the
46
+ // per-image tokens at full size (small images bill slightly more).
47
+ // verified: billing matched this rule on Grok 4.6, 4.7 and 4.20.
48
+ family "grok" {
49
+ revision ">=4.6 <=4.20" {
50
+ image-tokenization {
51
+ regime "openai-patch"
52
+ verified #true
53
+ multiplier 1.017
54
+ auto "original"
55
+ low {
56
+ max-edge 65535
57
+ patch-budget 2401
58
+ }
59
+ high {
60
+ max-edge 65535
61
+ patch-budget 2401
62
+ }
63
+ original {
64
+ max-edge 65535
65
+ patch-budget 2401
66
+ }
67
+ }
68
+ }
69
+ }
44
70
  thinking-loop-guard "xai"
45
71
  }
46
72
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  provider "amazon-bedrock" {
4
4
  default-model "us.anthropic.claude-opus-5-5"
5
+ image-count-budget 90
5
6
 
6
7
  // The Converse assembler positions content blocks by wire index
7
8
  // (`amazon-bedrock.ts`), so a block can land above text already rendered.
@@ -85,7 +85,20 @@ provider "anthropic" {
85
85
  on-api "anthropic-messages" {
86
86
  inline-image-byte-budget 24000000
87
87
  }
88
+ // The official endpoint carries at most 600 images and documents per
89
+ // request, 100 on models with a 200k-token window: every Claude line before
90
+ // 4.6, including separator-collapsed revisions (`claude-opus-45` parses as
91
+ // 45). A custom baseUrl keeps the conservative 90.
92
+ // https://platform.claude.com/docs/en/build-with-claude/vision
93
+ image-count-budget 90
94
+ official-image-count-budget 600
88
95
  class "anthropic" {
96
+ revision "<4.6" {
97
+ official-image-count-budget 100
98
+ }
99
+ revision ">=10 <46" {
100
+ official-image-count-budget 100
101
+ }
89
102
  revision ">=3.7 <4.6" {
90
103
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
91
104
  }
@@ -8,12 +8,27 @@ provider "cursor" {
8
8
  }
9
9
 
10
10
  thinking-mode "effort"
11
- // Cursor's default route selects a differently priced backing model per request.
11
+ // Cursor relays its upstream's image count (Claude 600, GPT 1,500) and took
12
+ // a 64 MB body; 60 images at the 500 KiB resize target stay near 31 MB.
13
+ image-count-budget 60
14
+ // Cursor's default route selects a differently priced backing model per
15
+ // request, Claude and GPT included, so it keeps Claude's image count and
16
+ // their 1024px edge; Gemini and Composer read 1024px pages as well as
17
+ // larger ones.
12
18
  models "default" {
13
19
  pricing-status "variable"
20
+ image-count-budget 20
21
+ image-max-edge 1024
14
22
  }
15
23
 
24
+ // Cursor re-encodes every image for its Claude and GPT upstreams to fit
25
+ // 1024×1024 before the model reads it; Gemini and Composer read larger
26
+ // images as sent.
16
27
  class "anthropic" {
28
+ image-max-edge 1024
29
+ // Past 20 images Claude rejects any image edge over 3,000 px, checked
30
+ // before Cursor downsizes.
31
+ image-count-budget 20
17
32
  family "fable" {
18
33
  requires-cursor-tool-schema-projection #true
19
34
  // Cursor advertised Context window 300k (Max 1M recovered elsewhere).
@@ -56,6 +71,8 @@ provider "cursor" {
56
71
  }
57
72
  }
58
73
  class "openai" {
74
+ // GPT images are fitted to 1024×1024 like Claude's (see above).
75
+ image-max-edge 1024
59
76
  revision ">=5.6 <5.7" {
60
77
  // Cursor advertised GPT-5.6 Sol/Terra/Luna Context window 272k;
61
78
  // raises unlabeled -fast variants from the 200k default.
@@ -711,3 +728,15 @@ provider "cursor" {
711
728
  }
712
729
  }
713
730
  }
731
+
732
+ // The same 1024px edge for targets that name only Cursor's wire (`{ api, id }`,
733
+ // no host). priority=-1: a fallback, so the equally specific provider rule
734
+ // above wins when both match.
735
+ on-api "cursor-agent" {
736
+ class "anthropic" priority=-1 {
737
+ image-max-edge 1024
738
+ }
739
+ class "openai" priority=-1 {
740
+ image-max-edge 1024
741
+ }
742
+ }
@@ -9,6 +9,9 @@ provider "google-antigravity" {
9
9
  image "google-gemini-cli"
10
10
  }
11
11
  web-search "gemini"
12
+ // No size rejection up to a 64 MB body; 60 images at the 500 KiB resize
13
+ // target stay near 41 MB. Gemini counts images only against its context.
14
+ image-count-budget 60
12
15
 
13
16
  seed api="google-gemini-cli" base-url="https://daily-cloudcode-pa.googleapis.com" bundle="always" {
14
17
  model "gemini-3-pro-image" name="Gemini 3 Pro Image" {
@@ -26,6 +29,18 @@ provider "google-antigravity" {
26
29
  preserves-max-output-tokens #false
27
30
 
28
31
  class "anthropic" {
32
+ // Claude here is Vertex Anthropic: one image whose base64 passes
33
+ // 5,242,880 bytes is a 400 "image exceeds 5 MB maximum" (half the
34
+ // direct API's 10 MiB), and 8001 px is a 400 like on the direct API.
35
+ // Declaring the contract makes the Cloud Code Assist wire clamp images
36
+ // for Claude the way `anthropic-messages` does; Gemini on the same
37
+ // gateway has no such limits and keeps them unset.
38
+ max-image-dimension 8000
39
+ max-image-payload-bytes 5242880
40
+ // The Claude upstream rejects a message over 30 MB and, past 20 images,
41
+ // any image edge over 3,000 px. The clamp above caps each image; with no
42
+ // byte budget on this wire, the count bounds the body.
43
+ image-count-budget 20
29
44
  family "opus" {
30
45
  thinking-mode "budget"
31
46
  }
@@ -59,6 +74,17 @@ provider "google-antigravity" {
59
74
  }
60
75
  }
61
76
  }
77
+ // Cloud Code Assist bills a Gemini 2.5 or 3.x image a fixed 1,089 tokens
78
+ // from 32px to 2048px (extreme strips bill less); priority=1 outranks the
79
+ // lineage's 1,120 at equal specificity. verified: billing matched this rule
80
+ // on Gemini 2.5 Flash Lite, 3.1 Flash Lite and 3.8 Flash.
81
+ class "gemini" priority=1 {
82
+ image-tokenization {
83
+ regime "fixed"
84
+ verified #true
85
+ tokens 1089
86
+ }
87
+ }
62
88
  // residue: taxonomy ranks and exact globs do not isolate these models.
63
89
  models "claude-opus-4-6" {
64
90
  thinking-efforts "minimal" "low" "medium" "high"
@@ -2,6 +2,7 @@
2
2
 
3
3
  provider "google-gemini-cli" {
4
4
  default-model "gemini-3.1-pro-preview"
5
+ image-count-budget 200
5
6
 
6
7
  class "gemini" {
7
8
  // Cloud Code Assist rejects an unsigned first function call; the bypass
@@ -3,6 +3,7 @@
3
3
  provider "google-vertex" {
4
4
  default-model "gemini-3.1-pro-preview"
5
5
  allow-unauthenticated #true
6
+ image-count-budget 200
6
7
 
7
8
  // Replaces google-shared.ts stripping functionCall/functionResponse ids for Vertex.
8
9
  supports-function-part-id #false
@@ -7,6 +7,7 @@ provider "google" {
7
7
  image "google-generative-ai"
8
8
  }
9
9
  web-search "gemini"
10
+ image-count-budget 200
10
11
 
11
12
  class "unknown" {
12
13
  thinking-efforts "minimal" "low" "medium" "high"
@@ -1,6 +1,7 @@
1
1
  // Image billing for readers whose lineage has no `image-tokenization` rule in
2
2
  // classes/*.kdl, by the wire API carrying the request. priority=-1: these are
3
- // fallbacks, so a class-wide lineage rule (same specificity) always wins.
3
+ // fallbacks, so a class-wide lineage rule (same specificity) always wins. None
4
+ // is `verified`: nobody measured the billing of the readers they price.
4
5
 
5
6
  // OpenAI-compatible wires bill like GPT-5.5: 32px patches × 1.2, `auto` sized
6
7
  // like `original`.
@@ -54,6 +54,19 @@ provider "meta" {
54
54
  supports-reasoning-effort #true
55
55
  include-encrypted-reasoning #true
56
56
  }
57
+ // Muse Wonder: dev.meta.ai/docs/models + pricing-rate-limits (2026-10-12).
58
+ // `max` documented; no contributor tier on Model API. Meta publishes no
59
+ // output cap, so it takes the Muse Spark ceiling.
60
+ model "muse-wonder-1.0" name="Muse Wonder" {
61
+ reasoning #true
62
+ input "text" "image"
63
+ cost input=4 output=20 cache-read=0.2 cache-write=0
64
+ limits context=1048576 max-tokens=131072
65
+ thinking-mode "effort"
66
+ thinking-efforts "minimal" "low" "medium" "high" "xhigh" "max"
67
+ supports-reasoning-effort #true
68
+ include-encrypted-reasoning #true
69
+ }
57
70
  model "muse-spark-1.3-contributor" name="Muse Spark 1.3 (C)" {
58
71
  reasoning #true
59
72
  input "text" "image"
@@ -72,7 +85,10 @@ provider "meta" {
72
85
  // api.meta.ai/v1 accepts only tool_choice "auto"; "none", "required" and named
73
86
  // choices are rejected with 400 (verified 2026-09-10), so omit the field.
74
87
  supports-tool-choice #false
88
+ // `/v1/models` carries no capability metadata: an id no seed or taxonomy
89
+ // knows is offered this ladder for the user to opt into.
75
90
  class "unknown" {
91
+ thinking-unverified #true
76
92
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
77
93
  thinking-mode "effort"
78
94
  }
@@ -27,7 +27,16 @@ provider "muse-code" {
27
27
  // `custom` tools are rejected with 400 "`custom` tools are not supported
28
28
  // on this endpoint", so apply-patch must stay a function tool here.
29
29
  edit-prompt-variant "compact"
30
+ on-api "openai-responses" {
31
+ // Spark 1.3 Contributor warmed siblings hit 10/10 vs 0/10 with per-child keys (2026-10-12).
32
+ // Meta documents shared-prefix prompt_cache_key routing; keep the opt-in on these exact Muse Code IDs.
33
+ models "muse-spark-1.3" "muse-spark-1.3-contributor" "muse-wonder-1.0" "muse-wonder-1.0-contributor" "muse-wonder-full-1.0" "muse-wonder-full-1.0-contributor" {
34
+ task-sibling-prompt-cache #true
35
+ }
36
+ }
37
+ // Same capability-less `/v1/models` as Meta: unknown ids are opt-in.
30
38
  class "unknown" {
39
+ thinking-unverified #true
31
40
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
32
41
  thinking-mode "effort"
33
42
  }
@@ -9,6 +9,14 @@ provider "openai-codex" {
9
9
  }
10
10
  web-search "codex"
11
11
 
12
+ // Policy budgets: the Codex backend documents no request-size or image
13
+ // limit, and requests with several thousand images fail mid-stream at
14
+ // random. Inline images keep Anthropic's 24 MB; the official endpoint's
15
+ // image count stays well below those failures. A custom baseUrl keeps 200.
16
+ inline-image-byte-budget 24000000
17
+ image-count-budget 200
18
+ official-image-count-budget 2000
19
+
12
20
  seed api="openai-codex-responses" base-url="https://chatgpt.com/backend-api" bundle="always" {
13
21
  // Label only: the Codex backend ignores `tool.model` and runs gpt-image-2-codex.
14
22
  model "gpt-image-2" name="GPT Image 2" {
@@ -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"
@@ -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`
@@ -5,6 +5,7 @@ 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
@@ -9,6 +9,9 @@ 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
12
15
 
13
16
  // Source of truth for the xai-oauth chat picker. Declaration order is headline order.
14
17
  // Context windows from hermes-agent/agent/model_metadata.py:205-220
@@ -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" {
@@ -174,9 +174,9 @@ behavior {
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
176
  // 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-"
177
+ // the Muse Spark chat models, and SAM segmentation beside them.
178
+ exclude-models provider="meta" prefix="muse-image-" prefix="muse-voice-" prefix="sam-"
179
+ exclude-models provider="muse-code" prefix="muse-image-" prefix="muse-voice-" prefix="sam-"
180
180
  // NanoGPT's roster interleaves non-text SKUs by name token.
181
181
  exclude-models provider="nanogpt" substring="embedding" substring="image" substring="vision" \
182
182
  substring="audio" substring="speech" substring="transcribe" substring="moderation" \
@@ -1,10 +1,13 @@
1
1
  class "meta" {
2
2
  bounded "muse-spark"
3
+ bounded "muse-wonder"
3
4
  bounded "llama"
4
5
  namespace "meta-llama"
5
6
 
6
7
  family "llama" glob="*llama*"
7
8
  family "muse-spark" glob="*muse-spark*"
9
+ family "muse-wonder" glob="*muse-wonder*"
8
10
 
9
11
  revision prefix="muse-spark-"
12
+ revision prefix="muse-wonder-"
10
13
  }