@bitmagic/cli 0.1.65-dev.21 → 0.1.65-dev.23

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.
@@ -22,10 +22,14 @@
22
22
  * so `project.ts` can import this without a cycle.
23
23
  *
24
24
  * What keeps it honest, and what does not:
25
- * - `__tests__/asset-pipeline-skill-files.test.ts` fails when a `bitmagic generate` subcommand
26
- * exists with no row here, when a row names a subcommand or a skill directory that does not
27
- * exist, or when one of the need sections or the two defaults (audio opt-in, block characters)
28
- * disappears. So a new generator cannot ship without a row.
25
+ * - `__tests__/asset-pipeline-skill-files.test.ts` fails when a `bitmagic generate` subcommand or
26
+ * a `bitmagic character` verb exists with no row here (deprecated aliases excepted), when a row
27
+ * names a subcommand or a skill directory that does not exist, or when one of the need sections
28
+ * or the two defaults (audio opt-in, block characters) disappears. So a new generator cannot
29
+ * ship without a row — but a RENAMED flag can: the day this shipped, `--no-library` had just
30
+ * become `--fresh` and `--library-only` had become `character search` + `add`, and every test
31
+ * passed. That is why the sheet names COMMANDS ONLY and tells the agent to read `--help` —
32
+ * a flag written here is a flag that will be wrong.
29
33
  * - Prices and timings are NOT test-checked. Sparks come from `api-server/src/llm/llm_cost.json`
30
34
  * (`toolCosts`, 1 spark = $0.01): glb/model/prop 3, voxel character 15, low-poly character 60,
31
35
  * library-only 0, skybox and background 5, image 3, cover and reference 6, block-type 3, sound
@@ -22,10 +22,14 @@
22
22
  * so `project.ts` can import this without a cycle.
23
23
  *
24
24
  * What keeps it honest, and what does not:
25
- * - `__tests__/asset-pipeline-skill-files.test.ts` fails when a `bitmagic generate` subcommand
26
- * exists with no row here, when a row names a subcommand or a skill directory that does not
27
- * exist, or when one of the need sections or the two defaults (audio opt-in, block characters)
28
- * disappears. So a new generator cannot ship without a row.
25
+ * - `__tests__/asset-pipeline-skill-files.test.ts` fails when a `bitmagic generate` subcommand or
26
+ * a `bitmagic character` verb exists with no row here (deprecated aliases excepted), when a row
27
+ * names a subcommand or a skill directory that does not exist, or when one of the need sections
28
+ * or the two defaults (audio opt-in, block characters) disappears. So a new generator cannot
29
+ * ship without a row — but a RENAMED flag can: the day this shipped, `--no-library` had just
30
+ * become `--fresh` and `--library-only` had become `character search` + `add`, and every test
31
+ * passed. That is why the sheet names COMMANDS ONLY and tells the agent to read `--help` —
32
+ * a flag written here is a flag that will be wrong.
29
33
  * - Prices and timings are NOT test-checked. Sparks come from `api-server/src/llm/llm_cost.json`
30
34
  * (`toolCosts`, 1 spark = $0.01): glb/model/prop 3, voxel character 15, low-poly character 60,
31
35
  * library-only 0, skybox and background 5, image 3, cover and reference 6, block-type 3, sound
@@ -46,8 +50,9 @@ description: Pick the lane that makes a given thing for this Bitmagic game — a
46
50
 
47
51
  Most things this game needs can be made three or four ways, and the ways differ by a hundred
48
52
  sparks and by twenty minutes. This file is the routing table: find the need, take the first row
49
- whose conditions hold, say which you took. Flags and refusals for every command are in
50
- \`${PRIMARY_SKILLS_DIR}/generating-assets/SKILL.md\`; this file only decides.
53
+ whose conditions hold, say which you took. It names commands without their flags on purpose —
54
+ **run \`<command> --help\` before using one.** Flags move between releases; the help does not lie.
55
+ Flags and refusals in prose are in \`${PRIMARY_SKILLS_DIR}/generating-assets/SKILL.md\`; this file only decides.
51
56
 
52
57
  Costs are **approximate** — sparks are rounded and times are typical, not promised. \`bitmagic
53
58
  usage\` is the truth about what was actually spent.
@@ -55,15 +60,14 @@ usage\` is the truth about what was actually spent.
55
60
  ## Know these four things first
56
61
 
57
62
  1. **Art style** — \`artStyle\` in \`src/work/game.json\`: \`voxel\` (default) or \`low-poly\`. A declared
58
- switch, not a per-asset flag: in a low-poly game \`generate model|prop\`, \`assets add\` and
59
- \`generate character\` keep meshes instead of voxelizing (and a character costs four times more),
60
- the Blender level route opens, and built-in weapons should use their \`_lowpoly\` twins. Set it
61
- before the first cover.
63
+ switch, not a per-asset flag: in a low-poly game models, props, added files and characters keep
64
+ their meshes instead of voxelizing (and a character costs four times more), the Blender level
65
+ route opens, and built-in weapons should use their \`_lowpoly\` twins. Set it before the first cover.
62
66
  2. **Your model class** — frontier (Claude Fable / Opus 5, GPT-6 class) or not. Only the Blender
63
67
  route depends on it; its §0 says "if you are not sure you are one, you are not".
64
- 3. **Local tooling** — Google Chrome (\`forge\`, \`generate model|prop|vehicle\`, \`assets add *.glb\` in
65
- a voxel game, \`verify\`); Blender 4.2+ (Blender levels); \`ffmpeg\` (\`trailer\`, video contact
66
- sheets); a Unity project to port. Probe once with the checks each skill gives.
68
+ 3. **Local tooling** — Google Chrome (the forge, generated models, props and vehicles, added \`.glb\`
69
+ files in a voxel game, \`verify\`); Blender 4.2+ (Blender levels); \`ffmpeg\` (\`trailer\`, video
70
+ contact sheets); a Unity project to port. Probe once with the checks each skill gives.
67
71
  4. **Purpose** — **prototype** (slice 1, prove the loop, the creator will iterate) or **polished**
68
72
  ("final", "ship it", "make it look great", publishing). Take it from their words. Unsaid:
69
73
  assume prototype for slice 1 and note the upgrade as a backlog item.
@@ -75,8 +79,9 @@ Default: you decide, and state the assumption in one line before running anythin
75
79
  > Assuming *prototype*: using \`<route>\` (~N sparks, ~T). Say "polished" and I will use \`<alt>\`.
76
80
 
77
81
  Ask first only when BOTH hold: the recommended option is expensive — tens of sparks or many
78
- minutes (a forge, a low-poly character, a \`--video\` animation, a long music track, a Blender build)
79
- — AND the creator has not said prototype or polished. Recommended option first, answerable in a word:
82
+ minutes (a forge, a low-poly character, a video-to-motion animation, a long music track, a Blender
83
+ build) — AND the creator has not said prototype or polished. Recommended option first, answerable
84
+ in a word:
80
85
 
81
86
  > \`<need>\`: I recommend \`<A>\` (~N sparks, ~T) because \`<why>\`; the alternative is \`<B>\` (~N, ~T).
82
87
  > Which — or just say prototype / polished and I will pick?
@@ -94,7 +99,7 @@ Rows are in recommended order: take the first whose conditions hold.
94
99
  | Route | Conditions | ~Cost | Notes |
95
100
  |---|---|---|---|
96
101
  | The baseline's procedural voxel terrain (already there) | prototype, or the terrain is not the mechanic | free, instant | Slice 1's world unless the game cannot be played without its shape (planning skill) |
97
- | \`bitmagic forge --prompt "..."\` (\`--city\`, \`--dungeon\`, \`--platformer\`, \`--freeform\` or \`--vessel\`, at most one) | Chrome; terrain IS the mechanic (skiing, a circuit, open-world driving, an enclosed dungeon) or polished | usage-priced, tens of sparks; many minutes (the bake alone can take twenty) | One forge per game; \`--edit --level <id>\` changes a forged level, \`--resume <jobId>\` after a failure. AGENTS.md "Forging a whole level" |
102
+ | \`bitmagic forge\` — natural terrain by default, or one of its modes: city, dungeon, platformer, freeform, vessel | Chrome; terrain IS the mechanic (skiing, a circuit, open-world driving, an enclosed dungeon) or polished | usage-priced, tens of sparks; many minutes (the bake alone can take twenty) | One forge per game; it can edit a forged level in place and resume a failed job — see its help. AGENTS.md "Forging a whole level" |
98
103
  | \`${PRIMARY_SKILLS_DIR}/building-levels-in-blender/SKILL.md\` | frontier model AND Blender 4.2+ AND \`artStyle: "low-poly"\`; a DESIGNED place (interior, station, set), not natural terrain | free in sparks; an hour or more of your time | Its §0 is the gate; audited with ray casts, loaded by \`MeshLevel\` |
99
104
  | \`${PRIMARY_SKILLS_DIR}/converting-unity-levels/SKILL.md\` | the creator has a Unity scene to bring over | free in sparks; minutes to hours | Reuses their prefabs, FBX, colliders; not a way to make a level from nothing |
100
105
 
@@ -103,49 +108,49 @@ Rows are in recommended order: take the first whose conditions hold.
103
108
  | Route | Conditions | ~Cost | Notes |
104
109
  |---|---|---|---|
105
110
  | A block character built in code (the default) | any; recolours, outfits, a blocky knight/robot/wizard | free, seconds | \`character-system.md\`, \`npc-appearance.md\`. Highres and block **never coexist** — going highres means the whole cast goes |
106
- | \`bitmagic generate character --name <id> --prompt "..."\` | the look is genuinely custom; the whole cast will be highres | free and seconds on a library match; else ~15 sparks, ~1.5–4 min (voxel) or ~60 sparks, ~3 min (low-poly) | Library-first by default. \`--head-scale\` / \`--mesh-model\` always forge. \`--apply-to-player\` sets the player |
107
- | \`... --library-only\` | prototype; a close-enough body will do | free, instant | Nearest stored body, or fails and charges nothing |
108
- | \`... --no-library\` | polished; exactly this one | ~15 (voxel) / ~60 (low-poly) sparks; minutes | The costly row: ask first if purpose is unknown |
111
+ | \`bitmagic character search\` then \`bitmagic character add\` | prototype; any plausible ready-made body will do | free, instant | \`search\` lists the closest library bodies and changes nothing; \`add\` takes one and never forges. Judge the match yourself — a score says "plausible", not "right" |
112
+ | \`bitmagic character generate\` | the look is genuinely custom; the whole cast will be highres | free and seconds on a library match; else ~15 sparks, ~1.5–4 min (voxel) or ~60 sparks, ~3 min (low-poly) | Library-first by default; a custom head scale or mesh model always forges. It can set the player directly |
113
+ | \`bitmagic character generate\`, forced fresh | polished; exactly this one, no library substitute | ~15 (voxel) / ~60 (low-poly) sparks; minutes | The costly row: ask first if purpose is unknown |
109
114
 
110
115
  ### A building or landmark
111
116
 
112
117
  | Route | Conditions | ~Cost | Notes |
113
118
  |---|---|---|---|
114
119
  | A structure a forge already placed, or a \`building\` hotspot | the level was forged | free | \`environment-objects.md\` |
115
- | \`bitmagic generate model --prompt "..." --height <m>\` | a new named structure the code places | ~3 sparks; ~10 s voxel, minutes for a mesh | Chrome in a voxel game; above 6 m stays hollow |
116
- | \`bitmagic generate prop --asset <id> --prompt "..."\` | a placeholder or forge asset is already placed and looks bad | ~3 sparks; ~10 s | REPLACES that asset; every placed instance upgrades. Never for a new object |
117
- | \`bitmagic assets add <file.glb>\` (\`--keep-glb\` for a mesh) | the creator has the model | free; seconds to a minute | Chrome to voxelize in a voxel game |
120
+ | \`bitmagic generate model\` | a new named structure the code places | ~3 sparks; ~10 s voxel, minutes for a mesh | Chrome in a voxel game; give it a height — above 6 m stays hollow |
121
+ | \`bitmagic generate prop\` | a placeholder or forge asset is already placed and looks bad | ~3 sparks; ~10 s | REPLACES that asset; every placed instance upgrades. Never for a new object |
122
+ | \`bitmagic assets add\` | the creator has the model | free; seconds to a minute | Chrome to voxelize in a voxel game; can keep the mesh instead |
118
123
 
119
124
  ### A small prop (a crate, a lantern, a pickup)
120
125
 
121
126
  | Route | Conditions | ~Cost | Notes |
122
127
  |---|---|---|---|
123
128
  | An asset already in \`assets[]\` (\`bitmagic assets list\`) | one fits | free | The same object twice is the commonest waste |
124
- | \`bitmagic generate model --prompt "..." --name <id>\` | a new object the code spawns or places | ~3 sparks; ~10 s voxel | Cheap enough not to ask. \`environmentObjects[]\` or \`engine.spawnAsset()\` — \`environment-objects.md\` |
125
- | \`bitmagic assets add <file>\` | the creator has a \`.glb\`/\`.vxl\` | free | |
129
+ | \`bitmagic generate model\` | a new object the code spawns or places | ~3 sparks; ~10 s voxel | Cheap enough not to ask. \`environmentObjects[]\` or \`engine.spawnAsset()\` — \`environment-objects.md\` |
130
+ | \`bitmagic assets add\` | the creator has a \`.glb\`/\`.vxl\` | free | Same voxelize rule as above |
126
131
  | Plain three.js geometry in code | a marker, trigger or debug prop nobody looks at | free, no browser | Do not hand-build what a 3-spark model makes better |
127
132
 
128
133
  ### A vehicle
129
134
 
130
135
  | Route | Conditions | ~Cost | Notes |
131
136
  |---|---|---|---|
132
- | \`bitmagic generate vehicle --preset <NAME>\` (\`--preset ?\` lists them) | no bespoke look needed; prototype | free; ~a minute (Chrome) | Physics, lights, AI built in either way; spawn via \`engine.getVehicleSpawner().spawnAndEnterFromAsset(...)\` |
133
- | \`bitmagic generate vehicle --prompt "..."\` | the look is the point | usage-priced, several sparks; several minutes | NEW asset each run; ask first when purpose is unknown |
137
+ | \`bitmagic generate vehicle\` from a preset (its help lists them) | no bespoke look needed; prototype | free; ~a minute (Chrome) | Physics, lights, AI built in either way; spawn via \`engine.getVehicleSpawner().spawnAndEnterFromAsset(...)\` |
138
+ | \`bitmagic generate vehicle\` from a description | the look is the point | usage-priced, several sparks; several minutes | NEW asset each run; ask first when purpose is unknown |
134
139
 
135
140
  ### A weapon
136
141
 
137
142
  | Route | Conditions | ~Cost | Notes |
138
143
  |---|---|---|---|
139
144
  | A built-in id (\`sword\`, \`assault_rifle\`, \`bow\`…) or its \`_lowpoly\` twin via \`weaponStyleId(base, 'lowpoly')\` | any; match the twin to \`artStyle\` | free, instant | Wired into damage, animations, pickups, NPC use. \`weapon-visuals.md\`, \`combat-system.md\` |
140
- | \`bitmagic generate model --prompt "..."\` | a genuinely custom look | ~3 sparks; ~10 s | A mesh only — still wire it to a built-in's combat behaviour |
145
+ | \`bitmagic generate model\` | a genuinely custom look | ~3 sparks; ~10 s | A mesh only — still wire it to a built-in's combat behaviour |
141
146
 
142
147
  ### The sky
143
148
 
144
149
  | Route | Conditions | ~Cost | Notes |
145
150
  |---|---|---|---|
146
151
  | The engine's default sky | prototype; no strong setting | free | |
147
- | \`bitmagic generate skybox --description "..."\` | a free-look or third-person camera | ~5 sparks; ~a minute | Usually earns its place in slice 1 |
148
- | \`bitmagic generate background --description "..."\` | a fixed sidescroller or top-down camera | ~5 sparks; ~a minute | SAME field as skybox; the second run silently replaces the first |
152
+ | \`bitmagic generate skybox\` | a free-look or third-person camera | ~5 sparks; ~a minute | Usually earns its place in slice 1 |
153
+ | \`bitmagic generate background\` | a fixed sidescroller or top-down camera | ~5 sparks; ~a minute | SAME field as skybox; the second run silently replaces the first |
149
154
 
150
155
  ### Block textures
151
156
 
@@ -153,24 +158,24 @@ Rows are in recommended order: take the first whose conditions hold.
153
158
  |---|---|---|---|
154
159
  | A built-in block name (\`stone\`, \`grass\`, \`sand\`, \`marble\`…) | one fits | free | \`custom-block-types.md\` |
155
160
  | A plain-colour \`customBlockTypes[]\` entry by hand | prototype; a colour is enough | free | snake_case, never a built-in's name |
156
- | \`bitmagic generate block-type --name <id> --description "..."\` | the surface needs a real texture (\`--side-description\` for a second) | ~3 sparks (~6 with sides); seconds to a minute | Same \`--name\` replaces the entry |
161
+ | \`bitmagic generate block-type\` | the surface needs a real texture (a second one for the sides is optional) | ~3 sparks (~6 with sides); seconds to a minute | The same name replaces the entry |
157
162
 
158
163
  ### Images, cover, reference
159
164
 
160
165
  | Route | Conditions | ~Cost | Notes |
161
166
  |---|---|---|---|
162
- | \`bitmagic assets add <png>\` | the creator has the picture | free | |
163
- | \`bitmagic generate image --name <id> --prompt "..."\` | a portrait, icon, poster, HUD art | ~3 sparks; ~30 s | |
167
+ | \`bitmagic assets add\` | the creator has the picture | free | |
168
+ | \`bitmagic generate image\` | a portrait, icon, poster, HUD art | ~3 sparks; ~30 s | |
164
169
  | \`bitmagic cover\` | always, early — after \`artStyle\` is set, before \`verify\` | ~6 sparks; minutes | Prompt comes from \`GAME-DESIGN.md\`; an unchanged design regenerates nothing |
165
- | \`bitmagic reference make\` / \`accept\` | the idea names a place or a look; the HUMAN accepts | ~6 sparks per candidate; ~a minute | Steers every later skybox, block, cover and forge |
170
+ | \`bitmagic reference make\`, then the HUMAN accepts | the idea names a place or a look | ~6 sparks per candidate; ~a minute | Steers every later skybox, block, cover and forge |
166
171
 
167
172
  ### Animation
168
173
 
169
174
  | Route | Conditions | ~Cost | Notes |
170
175
  |---|---|---|---|
171
176
  | A built-in clip (\`mGenIdle01\`, \`mGenWalk01\`, \`mKicking01\`, \`mPunching01\`…) | one fits | free, instant | \`animation-assets.md\`; locomotion auto-plays |
172
- | \`bitmagic generate animation --family gait ...\` or \`--spec <file>\` | a gait variant, a melee move, a key-pose one-shot | ~1 spark; ~1 s | Solved locally; the cheapest generator |
173
- | \`bitmagic generate animation --video <clip>\` (\`--video-prompt "..."\` generates the clip first) | a motion only footage captures | ~15 sparks (plus video seconds with \`--video-prompt\`); minutes | Ask first when purpose is unknown |
177
+ | \`bitmagic generate animation\` from an authored spec (gait, melee, one-shot) | a gait variant, a melee move, a key-pose one-shot | ~1 spark; ~1 s | Solved locally; the cheapest generator |
178
+ | \`bitmagic generate animation\` from a video | a motion only footage captures | ~15 sparks (plus video seconds if it generates the clip); minutes | Ask first when purpose is unknown |
174
179
 
175
180
  ### Audio
176
181
 
@@ -178,25 +183,25 @@ Rows are in recommended order: take the first whose conditions hold.
178
183
  |---|---|---|---|
179
184
  | None | the creator has not asked for sound | free | Audio is added only on request — never by default |
180
185
  | Web Audio synthesis in code | ordinary SFX: a beep, a hit, a pickup | free | \`audio-system.md\` |
181
- | \`bitmagic assets add <file.mp3/.opus>\` | the creator has the track | free | |
182
- | \`bitmagic generate sound --prompt "..."\` | they asked for a premium or generated effect | ~12 sparks; ~30 s | One prompt, one effect |
183
- | \`bitmagic generate music --prompt "..." --duration <s>\` | they asked for original music | ~0.25 sparks/s (30 s ≈ 8, 120 s ≈ 30); ~a minute | Ask first for a long track when purpose is unknown; \`--out --no-world\` for a trailer bed |
186
+ | \`bitmagic assets add\` | the creator has the track | free | |
187
+ | \`bitmagic generate sound\` | they asked for a premium or generated effect | ~12 sparks; ~30 s | One prompt, one effect |
188
+ | \`bitmagic generate music\` | they asked for original music | ~0.25 sparks/s (30 s ≈ 8, 120 s ≈ 30); ~a minute | Ask first for a long track when purpose is unknown; it can write a file instead of a world asset, for a trailer bed |
184
189
 
185
190
  ### A cutscene or video
186
191
 
187
192
  | Route | Conditions | ~Cost | Notes |
188
193
  |---|---|---|---|
189
- | \`bitmagic generate video --prompt "..." --duration 5\` | a story beat played by \`engine.playVideo()\` | ~1.35 sparks/s (5 s ≈ 7); ~40 s | Read the frame sheet before wiring; needs a user gesture to play. \`video-cutscenes.md\` |
190
- | \`... --image <png>\` | animate a still you have (cover, reference) | same sparks; ~3 min | Comes back in the image's shape, not 16:9 |
194
+ | \`bitmagic generate video\` from a prompt | a story beat played by \`engine.playVideo()\` | ~1.35 sparks/s (5 s ≈ 7); ~40 s | Read the frame sheet before wiring; needs a user gesture to play. \`video-cutscenes.md\` |
195
+ | \`bitmagic generate video\` from a still | animate a picture you have (cover, reference) | same sparks; ~3 min | Comes back in the image's shape, not 16:9 |
191
196
  | \`bitmagic trailer\` (\`${PRIMARY_SKILLS_DIR}/making-a-trailer/SKILL.md\`) | a trailer or highlight reel of real gameplay | free apart from an optional music bed; \`ffmpeg\` | Cut from a recording, not generated |
192
197
 
193
198
  ## After you have chosen
194
199
 
195
- - Pass \`--original-prompt "<the creator's request, verbatim>"\` on every command.
200
+ - \`<command> --help\` first, then pass the creator's request verbatim the way AGENTS.md says.
196
201
  - Each generation writes \`src/work/world.json\`; re-read it if you hold a copy.
197
202
  - One generation per decision. Decide the prompt, run it once, use what comes back.
198
- - Flags, reference-image rules, refusals: \`${PRIMARY_SKILLS_DIR}/generating-assets/SKILL.md\`. What it
199
- cost: \`bitmagic usage\`.
203
+ - Flags in prose, reference-image rules, refusals: \`${PRIMARY_SKILLS_DIR}/generating-assets/SKILL.md\`.
204
+ What it cost: \`bitmagic usage\`.
200
205
  `;
201
206
  }
202
207
  //# sourceMappingURL=asset-pipeline-skill-files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"asset-pipeline-skill-files.js","sourceRoot":"","sources":["../../src/scaffold/asset-pipeline-skill-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,yBAAyB;IACvC,OAAO;;;;;;;;;;IAUL,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoCjB,kBAAkB;;;;;;;;;;;;MAYjB,kBAAkB;MAClB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA4FI,kBAAkB;;;;;;;8CAOA,kBAAkB;;CAE/D,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"asset-pipeline-skill-files.js","sourceRoot":"","sources":["../../src/scaffold/asset-pipeline-skill-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,yBAAyB;IACvC,OAAO;;;;;;;;;;;uCAW8B,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoCpD,kBAAkB;;;;;;;;;;;;MAYjB,kBAAkB;MAClB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA4FI,kBAAkB;;;;;;;uDAOS,kBAAkB;;CAExE,CAAC;AACF,CAAC"}
@@ -68,6 +68,10 @@ const ALLOWED_COMMANDS = [
68
68
  // Allowance-funded content generation. See the note above: the gate that
69
69
  // matters is the TTY-only `allowance --allow-sparks`, not a prompt per asset.
70
70
  'Bash(bitmagic generate:*)',
71
+ // The character group: `generate` is allowance-funded like the rest, `search` and `add` are
72
+ // free. Missing from this list, every character request prompted — found by the probe runs
73
+ // the day the group shipped.
74
+ 'Bash(bitmagic character:*)',
71
75
  'Bash(bitmagic cover:*)',
72
76
  'Bash(bitmagic forge:*)',
73
77
  // Copies script bundles the CLI ships into the project's tools/. Local, no network.
@@ -1 +1 @@
1
- {"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../src/scaffold/claude-settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../src/scaffold/claude-settings.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitmagic/cli",
3
- "version": "0.1.65-dev.21",
3
+ "version": "0.1.65-dev.23",
4
4
  "description": "Build Bitmagic games from your own agent tool",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Bitmagic Oy",
@@ -25,9 +25,9 @@
25
25
  "playwright-core": "^1.59.1",
26
26
  "tar": "^7.4.3",
27
27
  "ws": "^8.21.3",
28
- "@bitmagic/animation-forger": "0.1.20-dev.21",
29
- "@bitmagic/asset-core": "0.2.20-dev.21",
30
- "@bitmagic/world-forger": "0.1.25-dev.21"
28
+ "@bitmagic/asset-core": "0.2.20-dev.23",
29
+ "@bitmagic/world-forger": "0.1.25-dev.23",
30
+ "@bitmagic/animation-forger": "0.1.20-dev.23"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@eslint/js": "^9.38.0",