@bitmagic/cli 0.1.52-dev.0 → 0.1.52-dev.10

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 (139) hide show
  1. package/README.md +178 -6
  2. package/dist/assets/add.d.ts +40 -0
  3. package/dist/assets/add.js +229 -0
  4. package/dist/assets/add.js.map +1 -0
  5. package/dist/assets/entry.d.ts +44 -0
  6. package/dist/assets/entry.js +71 -0
  7. package/dist/assets/entry.js.map +1 -0
  8. package/dist/assets/file-kind.d.ts +61 -0
  9. package/dist/assets/file-kind.js +195 -0
  10. package/dist/assets/file-kind.js.map +1 -0
  11. package/dist/assets/list.d.ts +27 -0
  12. package/dist/assets/list.js +50 -0
  13. package/dist/assets/list.js.map +1 -0
  14. package/dist/assets/remove.d.ts +50 -0
  15. package/dist/assets/remove.js +91 -0
  16. package/dist/assets/remove.js.map +1 -0
  17. package/dist/assets/voxelize-glb.d.ts +37 -0
  18. package/dist/assets/voxelize-glb.js +65 -0
  19. package/dist/assets/voxelize-glb.js.map +1 -0
  20. package/dist/assets/vxl-summary.d.ts +32 -0
  21. package/dist/assets/vxl-summary.js +118 -0
  22. package/dist/assets/vxl-summary.js.map +1 -0
  23. package/dist/bin.js +25 -0
  24. package/dist/bin.js.map +1 -1
  25. package/dist/browser-gl.d.ts +46 -8
  26. package/dist/browser-gl.js +54 -26
  27. package/dist/browser-gl.js.map +1 -1
  28. package/dist/cli.d.ts +22 -0
  29. package/dist/cli.js +17 -1
  30. package/dist/cli.js.map +1 -1
  31. package/dist/commands/assets.d.ts +56 -0
  32. package/dist/commands/assets.js +328 -0
  33. package/dist/commands/assets.js.map +1 -0
  34. package/dist/commands/cover.js +2 -3
  35. package/dist/commands/cover.js.map +1 -1
  36. package/dist/commands/forge.d.ts +7 -9
  37. package/dist/commands/forge.js +12 -14
  38. package/dist/commands/forge.js.map +1 -1
  39. package/dist/commands/generate.d.ts +41 -9
  40. package/dist/commands/generate.js +234 -54
  41. package/dist/commands/generate.js.map +1 -1
  42. package/dist/commands/init.js +19 -12
  43. package/dist/commands/init.js.map +1 -1
  44. package/dist/commands/judge.d.ts +36 -0
  45. package/dist/commands/judge.js +216 -0
  46. package/dist/commands/judge.js.map +1 -0
  47. package/dist/commands/levels.d.ts +33 -0
  48. package/dist/commands/levels.js +241 -0
  49. package/dist/commands/levels.js.map +1 -0
  50. package/dist/commands/number-flag.d.ts +7 -0
  51. package/dist/commands/number-flag.js +38 -0
  52. package/dist/commands/number-flag.js.map +1 -0
  53. package/dist/commands/publish.js +13 -0
  54. package/dist/commands/publish.js.map +1 -1
  55. package/dist/commands/reset-account.js +2 -8
  56. package/dist/commands/reset-account.js.map +1 -1
  57. package/dist/commands/run-deps.d.ts +27 -0
  58. package/dist/commands/run-deps.js +43 -0
  59. package/dist/commands/run-deps.js.map +1 -0
  60. package/dist/commands/verify.js +3 -3
  61. package/dist/commands/verify.js.map +1 -1
  62. package/dist/editor/journal.d.ts +48 -1
  63. package/dist/editor/journal.js +44 -0
  64. package/dist/editor/journal.js.map +1 -1
  65. package/dist/editor/previews.d.ts +6 -0
  66. package/dist/editor/previews.js +16 -0
  67. package/dist/editor/previews.js.map +1 -1
  68. package/dist/editor/server.js +228 -53
  69. package/dist/editor/server.js.map +1 -1
  70. package/dist/editor/shell-page.js +221 -116
  71. package/dist/editor/shell-page.js.map +1 -1
  72. package/dist/editor/voxel-save.d.ts +47 -0
  73. package/dist/editor/voxel-save.js +49 -0
  74. package/dist/editor/voxel-save.js.map +1 -0
  75. package/dist/errors.d.ts +10 -0
  76. package/dist/errors.js +16 -0
  77. package/dist/errors.js.map +1 -1
  78. package/dist/forge/apply-modifications.d.ts +18 -1
  79. package/dist/forge/apply-modifications.js +15 -32
  80. package/dist/forge/apply-modifications.js.map +1 -1
  81. package/dist/forge/browser-host.js +9 -4
  82. package/dist/forge/browser-host.js.map +1 -1
  83. package/dist/forge/voxelize-session.d.ts +61 -0
  84. package/dist/forge/voxelize-session.js +137 -0
  85. package/dist/forge/voxelize-session.js.map +1 -0
  86. package/dist/generate/model.d.ts +36 -0
  87. package/dist/generate/model.js +90 -0
  88. package/dist/generate/model.js.map +1 -0
  89. package/dist/generate/prop.d.ts +52 -4
  90. package/dist/generate/prop.js +169 -102
  91. package/dist/generate/prop.js.map +1 -1
  92. package/dist/generate/stream.d.ts +7 -0
  93. package/dist/generate/stream.js +2 -1
  94. package/dist/generate/stream.js.map +1 -1
  95. package/dist/generate/vehicle.js +5 -85
  96. package/dist/generate/vehicle.js.map +1 -1
  97. package/dist/http/signed-upload.d.ts +55 -0
  98. package/dist/http/signed-upload.js +168 -0
  99. package/dist/http/signed-upload.js.map +1 -0
  100. package/dist/judge/facts.d.ts +18 -0
  101. package/dist/judge/facts.js +180 -0
  102. package/dist/judge/facts.js.map +1 -0
  103. package/dist/judge/record.d.ts +16 -0
  104. package/dist/judge/record.js +55 -0
  105. package/dist/judge/record.js.map +1 -0
  106. package/dist/judge/stream.d.ts +36 -0
  107. package/dist/judge/stream.js +122 -0
  108. package/dist/judge/stream.js.map +1 -0
  109. package/dist/levels/registry.d.ts +88 -0
  110. package/dist/levels/registry.js +309 -0
  111. package/dist/levels/registry.js.map +1 -0
  112. package/dist/messages/check.d.ts +30 -0
  113. package/dist/messages/check.js +119 -0
  114. package/dist/messages/check.js.map +1 -0
  115. package/dist/messages/notice.d.ts +58 -0
  116. package/dist/messages/notice.js +54 -0
  117. package/dist/messages/notice.js.map +1 -0
  118. package/dist/messages/refresh.d.ts +19 -0
  119. package/dist/messages/refresh.js +42 -0
  120. package/dist/messages/refresh.js.map +1 -0
  121. package/dist/project/jobs.d.ts +1 -1
  122. package/dist/project/jobs.js.map +1 -1
  123. package/dist/publish/client.d.ts +13 -0
  124. package/dist/publish/client.js +13 -34
  125. package/dist/publish/client.js.map +1 -1
  126. package/dist/publish/platform.d.ts +46 -0
  127. package/dist/publish/platform.js +92 -0
  128. package/dist/publish/platform.js.map +1 -0
  129. package/dist/scaffold/project-files.d.ts +8 -0
  130. package/dist/scaffold/project-files.js +192 -34
  131. package/dist/scaffold/project-files.js.map +1 -1
  132. package/dist/scaffold/project.js +2 -1
  133. package/dist/scaffold/project.js.map +1 -1
  134. package/dist/verify/browser.d.ts +11 -6
  135. package/dist/verify/browser.js +31 -15
  136. package/dist/verify/browser.js.map +1 -1
  137. package/dist/verify/iterate.js +3 -3
  138. package/dist/verify/iterate.js.map +1 -1
  139. package/package.json +4 -4
@@ -0,0 +1,92 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { aliasSourceDir } from '../scaffold/aliases.js';
4
+ /**
5
+ * The platform indicators a publish syncs from the project's own work copy: which platform the
6
+ * game is FOR (`primaryPlatform`, top level of game.json) and, for a phone game that only makes
7
+ * sense one way up, `worldProfileData.mobileOrientation`.
8
+ *
9
+ * The project files are the source of truth, exactly as they are in the web lane — the columns
10
+ * are "indicators synced from game.json at publish, like `genre`" (migration 048). So a value
11
+ * changed anywhere else is reverted by the creator's next publish, and the way to make a game
12
+ * mobile is to edit `src/work/game.json`.
13
+ *
14
+ * Two asymmetries that are deliberate:
15
+ *
16
+ * - An ABSENT or unrecognised `primaryPlatform` omits the key rather than defaulting to
17
+ * 'desktop'. Both columns are sticky at the `upsertGame` layer (an absent key preserves the
18
+ * stored value), so "the project says nothing" and "the project says desktop" must not
19
+ * collapse into the same wire message.
20
+ * - A readable work copy that declares no orientation sends an explicit `null`, which CLEARS
21
+ * the column. That is what makes deleting the field from world.json take effect; omitting
22
+ * the key instead would make an orientation impossible to remove from here. Only a work copy
23
+ * neither of whose files can be read omits the key.
24
+ *
25
+ * world.json wins over game.json for the orientation, matching the web lane's own resolution
26
+ * (`game-storage-backend.ts`'s `getListingFieldsSync`). Note this is the OPPOSITE order to
27
+ * `readFaviconOverride` in favicon.ts, which reads game.json first — the favicon override's home
28
+ * is game.json, the orientation's is world.json, and neither order is a house style.
29
+ *
30
+ * The legacy `mainPlatform` spelling is NOT honoured: it predates the CLI lane entirely, so no
31
+ * project this reads can carry it.
32
+ *
33
+ * Best effort throughout, like `readFaviconOverride`: a missing, unreadable or malformed file
34
+ * means "the project declares nothing", never an error. A catalog indicator must not be able to
35
+ * fail a publish whose bundle is already uploaded.
36
+ */
37
+ export function readPlatformIndicators(root) {
38
+ const workDir = path.join(root, aliasSourceDir('work'));
39
+ const game = readJsonObject(path.join(workDir, 'game.json'));
40
+ const world = readJsonObject(path.join(workDir, 'world.json'));
41
+ const fields = {};
42
+ const notes = [];
43
+ const declared = game?.primaryPlatform;
44
+ if (declared === 'desktop' || declared === 'mobile') {
45
+ fields.primaryPlatform = declared;
46
+ }
47
+ else if (declared !== undefined) {
48
+ notes.push(`game.json primaryPlatform ${JSON.stringify(declared)} is not "desktop" or "mobile" — ` +
49
+ 'leaving the stored platform alone.');
50
+ }
51
+ if (world !== null || game !== null) {
52
+ const orientation = worldProfileValue(world, 'mobileOrientation') ?? worldProfileValue(game, 'mobileOrientation');
53
+ if (orientation === 'portrait' || orientation === 'landscape') {
54
+ fields.mobileOrientation = orientation;
55
+ }
56
+ else {
57
+ if (orientation !== undefined) {
58
+ notes.push(`worldProfileData.mobileOrientation ${JSON.stringify(orientation)} is not "portrait" ` +
59
+ 'or "landscape" — publishing with no orientation lock.');
60
+ }
61
+ fields.mobileOrientation = null;
62
+ }
63
+ }
64
+ if (fields.primaryPlatform === 'mobile') {
65
+ notes.push(fields.mobileOrientation
66
+ ? `Cataloged as a mobile game, locked to ${fields.mobileOrientation}.`
67
+ : 'Cataloged as a mobile game.');
68
+ }
69
+ return { fields, notes };
70
+ }
71
+ /** Parse one work-copy JSON file, or null when it is missing, unreadable or not an object. */
72
+ function readJsonObject(filePath) {
73
+ let parsed;
74
+ try {
75
+ if (!fs.existsSync(filePath))
76
+ return null;
77
+ parsed = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)
83
+ ? parsed
84
+ : null;
85
+ }
86
+ function worldProfileValue(source, key) {
87
+ const profile = source?.worldProfileData;
88
+ if (typeof profile !== 'object' || profile === null || Array.isArray(profile))
89
+ return undefined;
90
+ return profile[key];
91
+ }
92
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/publish/platform.ts"],"names":[],"mappings":"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"}
@@ -125,6 +125,14 @@ export declare function renderGenerateSkill(): string;
125
125
  * check first can say "this will take most of what is left" before it burns it.
126
126
  */
127
127
  export declare function renderUsageSkill(): string;
128
+ /**
129
+ * `.claude/skills/judging-quality/SKILL.md` — when and how to run `bitmagic judge`.
130
+ *
131
+ * The point the skill has to land is the discipline, not the mechanics: judge after milestones,
132
+ * fix the findings, confirm once, stop. An agent that loops on the judge is spending the
133
+ * creator's sparks on reassurance.
134
+ */
135
+ export declare function renderJudgeSkill(): string;
128
136
  /**
129
137
  * `GAME-DESIGN.md` — the project's design document, and the input `bitmagic cover` builds its
130
138
  * image prompt from. The web lane's Planning Mode writes a file of the same name for the same
@@ -83,12 +83,23 @@ function esmUrl(name) {
83
83
  return `https://esm.sh/${name}@${pinnedVersion(name)}`;
84
84
  }
85
85
  /**
86
- * The three.js release every `three*` import map entry below resolves to. Named once because
87
- * the entries repeat it eight times, including four times inside the `three` shim, and a bump
86
+ * The three.js CDN base every `three*` import map entry below is built from. Named once because
87
+ * the entries restate it a dozen times over, four of them inside the `three` shim, and a bump
88
88
  * that updates some copies but not others splits the engine across two module instances — the
89
89
  * exact failure the comments below describe.
90
90
  */
91
- const THREE_VERSION = pinnedVersion('three');
91
+ const THREE_CDN = esmUrl('three');
92
+ /**
93
+ * esm.sh's `*` build of the same release. Only the addon entries use it — the note on them in
94
+ * `CDN_IMPORTS` says why, and why nothing else may.
95
+ */
96
+ const THREE_CDN_EXTERNAL = `https://esm.sh/*three@${pinnedVersion('three')}`;
97
+ /**
98
+ * The ONE webgpu build both `three` (through the shim) and `three/webgpu` resolve to. Derived
99
+ * from a single constant rather than written twice, because the two being byte-identical is what
100
+ * keeps them one module instance — see the shim below.
101
+ */
102
+ const THREE_WEBGPU = `${THREE_CDN}/webgpu`;
92
103
  /**
93
104
  * `three` resolves to a shim, not straight to the webgpu build. r185's three.webgpu.js exports
94
105
  * neither `UniformsUtils` (which every classic postprocessing pass imports from `three`) nor
@@ -101,10 +112,10 @@ const THREE_VERSION = pinnedVersion('three');
101
112
  */
102
113
  const THREE_SHIM = [
103
114
  'data:text/javascript,',
104
- `export*from'https://esm.sh/three@${THREE_VERSION}/webgpu';`,
105
- `export{UniformsUtils}from'https://esm.sh/three@${THREE_VERSION}/src/renderers/shaders/UniformsUtils.js';`,
106
- `export{ShaderLib}from'https://esm.sh/three@${THREE_VERSION}/src/renderers/shaders/ShaderLib.js';`,
107
- `export{UniformsLib}from'https://esm.sh/three@${THREE_VERSION}/src/renderers/shaders/UniformsLib.js'`,
115
+ `export*from'${THREE_WEBGPU}';`,
116
+ `export{UniformsUtils}from'${THREE_CDN}/src/renderers/shaders/UniformsUtils.js';`,
117
+ `export{ShaderLib}from'${THREE_CDN}/src/renderers/shaders/ShaderLib.js';`,
118
+ `export{UniformsLib}from'${THREE_CDN}/src/renderers/shaders/UniformsLib.js'`,
108
119
  ].join('');
109
120
  /**
110
121
  * Resolved in the browser from a CDN, not from node_modules — see the design's import-map note.
@@ -117,17 +128,17 @@ export const CDN_IMPORTS = {
117
128
  // builds (core + webgpu) they are two, and r185's LightsNode then fails to recognise lights
118
129
  // built by the other instance — the scene renders unlit. Keep in step with game/index.html.
119
130
  three: THREE_SHIM,
120
- 'three/webgpu': `https://esm.sh/three@${THREE_VERSION}/webgpu`,
121
- 'three/tsl': `https://esm.sh/three@${THREE_VERSION}/tsl`,
131
+ 'three/webgpu': THREE_WEBGPU,
132
+ 'three/tsl': `${THREE_CDN}/tsl`,
122
133
  // The addon entries use esm.sh's `*` build, which keeps `three` a BARE specifier so addons
123
134
  // resolve back through this map. Plain esm.sh inlines its own copy of three, which shares no
124
135
  // module with the webgpu build: GLTFLoader then hands back Meshes from a second Mesh class and
125
136
  // the engine's `instanceof THREE.Mesh` scans find nothing. Same one-instance rule as above.
126
137
  // The classic WebGL addons are not excepted — the shim, not a pinned inlined-three build, is
127
138
  // what gives them the UniformsUtils / ShaderLib / UniformsLib they import from bare `three`.
128
- 'three/addons/': `https://esm.sh/*three@${THREE_VERSION}/addons/`,
129
- 'three/examples/jsm/': `https://esm.sh/*three@${THREE_VERSION}/examples/jsm/`,
130
- 'three/': `https://esm.sh/three@${THREE_VERSION}/`,
139
+ 'three/addons/': `${THREE_CDN_EXTERNAL}/addons/`,
140
+ 'three/examples/jsm/': `${THREE_CDN_EXTERNAL}/examples/jsm/`,
141
+ 'three/': `${THREE_CDN}/`,
131
142
  '@dimforge/rapier3d-compat': esmUrl('@dimforge/rapier3d-compat'),
132
143
  '@dimforge/rapier2d-compat': esmUrl('@dimforge/rapier2d-compat'),
133
144
  i18next: esmUrl('i18next'),
@@ -622,12 +633,35 @@ from its artwork.
622
633
  Read \`engine/agent-docs/coordinate-system.md\`. Gameplay faces **+Z** while cameras face **−Z**, and
623
634
  the two yaw conventions differ. Guessing produces code that compiles and moves the wrong way.
624
635
 
636
+ ## Every control must work on a phone
637
+
638
+ Published games are played on phones whichever platform they were built for, and touch controls
639
+ are configured in **code** — there is no panel for them.
640
+
641
+ - **Bind an action once, for both platforms.** \`playerController.registerCustomAction({ action,
642
+ desktop: { keys: ['KeyR'] }, mobile: { label: 'LOAD', behavior: 'tap' } })\` binds the desktop
643
+ key AND creates the mobile button in one call, and throws if you leave \`mobile\` out. To declare
644
+ a genre's buttons up front instead, return them from \`declareMobileActions()\`. Read both flags
645
+ the same way afterwards: \`this.keys.reload\`.
646
+ - **Never** \`desktopControls.registerKeyHandler()\` or a raw \`document.addEventListener('keydown',
647
+ …)\` for a gameplay action. The first strands phone players and the engine logs a
648
+ \`[mobile-parity]\` error on game start; the raw listener strands them **silently** — the parity
649
+ check cannot see a listener that never went through the engine.
650
+ - **Say which platform the game is for.** \`"primaryPlatform": "mobile"\` at the top level of
651
+ \`src/work/game.json\` is what bitmagic.ai catalogs it as, and \`bitmagic publish\` sends it —
652
+ editing that file is the only way to set it. For a game that only works one way up, add
653
+ \`"mobileOrientation": "portrait"\` (or \`"landscape"\`) to \`worldProfileData\` in
654
+ \`src/work/world.json\`; published mobile builds lock to it.
655
+
656
+ Details — button slots, icons, the joystick, the parity check: \`engine/agent-docs/control-system.md\`.
657
+
625
658
  ## Checking your work
626
659
 
627
660
  \`\`\`
628
661
  bitmagic check # typecheck against the vendored engine
629
662
  bitmagic reload # tell the open browser you have finished a round of edits
630
663
  bitmagic verify # boot the game in a real browser and report what broke
664
+ bitmagic judge # grade the verify screenshot against a quality rubric (paid, cheap)
631
665
  \`\`\`
632
666
 
633
667
  (\`bitmagic dev\` belongs at the START of the session — see the top of this file.)
@@ -646,6 +680,12 @@ compile that dies on load — a missing asset, a bad \`world.json\` value, a nul
646
680
  \`bitmagic verify\` after a change you cannot eyeball: it loads the game in a headless browser and
647
681
  fails with what actually broke, leaving a console log and a screenshot in \`.bitmagic/verify/\`.
648
682
 
683
+ **\`verify\` passing does not mean the game is good.** You built this game, so you are the wrong
684
+ judge of it. After each milestone run \`bitmagic verify\` (not \`--fast\`), then \`bitmagic judge\`:
685
+ a separate vision model grades the screenshot against \`GAME-DESIGN.md\` and prints at most three
686
+ concrete findings (also written to \`.bitmagic/judge.json\`). Fix the ones worth fixing, confirm
687
+ with one re-run, then move on — **never loop on the judge**. See the \`judging-quality/\` skill.
688
+
649
689
  ## The human may be moving objects too
650
690
 
651
691
  \`bitmagic dev\` serves one page with two tabs — **Game**, where the owner plays, and **Editor**,
@@ -775,13 +815,16 @@ are developing, when rebuilding is cheap, rather than being blocked at the momen
775
815
  You can create game content from here — no web editor needed:
776
816
 
777
817
  \`\`\`
778
- bitmagic generate skybox --description "a stormy alien sky with two moons"
779
- bitmagic generate sound --prompt "heavy wooden door slamming" [--duration 3] [--loop]
780
- bitmagic generate image --name hero-portrait --prompt "..." [--width 512] [--height 512]
781
- bitmagic generate character --name guard --prompt "..." [--apply-to-player]
782
- bitmagic generate animation --family gait --name LimpStride --based-on walk [--dial limpSide=right]
783
- bitmagic generate animation --spec clip.json # melee and oneShot clips: a spec file
784
- bitmagic generate vehicle --prompt "a rusty orange pickup" | --preset VAN
818
+ bitmagic generate skybox --description "a stormy alien sky with two moons"
819
+ bitmagic generate background --description "layered pine forest at dusk"
820
+ bitmagic generate block-type --name mossy_brick --description "damp green moss on red brick"
821
+ bitmagic generate sound --prompt "heavy wooden door slamming" [--duration 3] [--loop]
822
+ bitmagic generate image --name hero-portrait --prompt "..." [--width 512] [--height 512]
823
+ bitmagic generate character --name guard --prompt "..." [--apply-to-player]
824
+ bitmagic generate animation --family gait --name LimpStride --based-on walk [--dial limpSide=right]
825
+ bitmagic generate animation --spec clip.json # melee and oneShot clips: a spec file
826
+ bitmagic generate model --prompt "a mossy stone arch" [--height 3]
827
+ bitmagic generate vehicle --prompt "a rusty orange pickup" | --preset VAN
785
828
  \`\`\`
786
829
 
787
830
  Run \`bitmagic generate <type> --help\` for the full flags of any one.
@@ -801,10 +844,9 @@ Four things worth knowing before you use these:
801
844
  4. **A running \`bitmagic dev\` picks the new asset up on its own.** It reloads the browser once
802
845
  the write settles; \`bitmagic reload\` forces it if you want it now.
803
846
 
804
- **Not available as \`generate\` subcommands:** individual 3D models, voxel assets and block types.
805
- Those need a browser to voxelize and upload. Do not work around it by hand-editing
806
- \`world.json\` to point at a model you have not generated the asset will not exist and the game
807
- will fail to load it.
847
+ Three lanes make a 3D object, and the wrong one wastes a generation: \`generate model\` mints a NEW
848
+ asset, \`generate prop --asset <id>\` UPGRADES a placeholder, \`assets add <file>\` uploads your own.
849
+ Splats, video and \`.vox\`/\`.fbx\` still need the web editor; never reference an asset you did not make.
808
850
 
809
851
  ## Forging a whole level
810
852
 
@@ -813,7 +855,9 @@ bitmagic forge --prompt "a ruined desert temple with a central courtyard"
813
855
  \`\`\`
814
856
 
815
857
  This designs a scene, builds its geometry, bakes it to voxels and writes the finished level —
816
- terrain, props, spawn points — into \`src/work/world.json\`. Add \`--city\`, \`--dungeon\`,
858
+ terrain, props, spawn points — into \`src/work/world.json\`. \`bitmagic levels list | add | rename
859
+ | set-start | remove\` manages them afterwards (free, local); \`set-start\` is how you change which
860
+ level the game boots into, and it moves the legacy mirror fields with it. Add \`--city\`, \`--dungeon\`,
817
861
  \`--platformer\` or \`--freeform\` (at most one) for a different kind of place; omit them all for
818
862
  natural terrain.
819
863
 
@@ -931,6 +975,7 @@ the engine, already wired** — and hand-building a worse version of it is the m
931
975
  | Save points, checkpoints, persistence | Persistence system | \`persistence-system.md\` |
932
976
  | Multiple levels or arenas | \`levels[]\` registry + \`engine.loadLevel()\` | \`level-system.md\` |
933
977
  | Voice input, speaking to NPCs | \`engine.enablePushToTalk()\` | \`voice-input.md\` |
978
+ | A key for a new action — shoot, reload, boost, throw | \`registerCustomAction()\` / \`declareMobileActions()\` — one call binds the desktop key AND the phone button | \`control-system.md\` |
934
979
  | The default player and its animation set | Already there | — |
935
980
 
936
981
  A built-in still covers the request when the human names a style ("a katana" → the built-in katana).
@@ -958,11 +1003,16 @@ from GAME-DESIGN.md").
958
1003
  Camera mode. Is the player an embodied walking character? Terrain form. Anything the recipe fixes
959
1004
  that I would otherwise have defaulted differently.
960
1005
 
1006
+ ## Platform
1007
+ \`primaryPlatform\` in \`game.json\` — \`desktop\` or \`mobile\`. Plus \`worldProfileData.mobileOrientation\`
1008
+ in \`world.json\` when the game only works one way up.
1009
+
961
1010
  ## Slice 1 — the smallest playable thing
962
1011
  - Core verb: the ONE thing the player does
963
1012
  - Win: fires, even if the number is wrong
964
1013
  - Lose:
965
1014
  - On-screen feedback: score / timer / health
1015
+ - Controls: every action as desktop key + phone button, bound in one call
966
1016
  - Engine systems: one line each, naming the doc — \`engine/agent-docs/…\`
967
1017
  - Assets to generate: name them. A skybox and the cover usually earn their place in slice 1.
968
1018
  - Level: procedural baseline terrain, unless the terrain IS the mechanic
@@ -1008,8 +1058,9 @@ forge is backlog item 1, run once the loop is proven.
1008
1058
 
1009
1059
  Short, concrete, and honest. Three parts:
1010
1060
 
1011
- - **Playable now** — one sentence, plus the literal control. "You can drive the kart and complete a
1012
- lap. It is already reloaded in your browser — W to accelerate, A/D to steer."
1061
+ - **Playable now** — one sentence, plus the literal control on both platforms. "You can drive the
1062
+ kart and complete a lap. It is already reloaded in your browser — W to accelerate, A/D to steer,
1063
+ and the same on a phone from the joystick and the GAS button."
1013
1064
  - **Not in yet, on purpose** — three to five items from the backlog, so they know it is a choice and
1014
1065
  not a bug.
1015
1066
  - **Next I would do** — two or three, numbered, in order. Then ask which.
@@ -1153,11 +1204,30 @@ These docs are shared with Bitmagic's hosted agent, so two things read oddly her
1153
1204
  |---|---|
1154
1205
  | \`configure_game\`, \`manage-achievements\`, \`manage-levels\`, \`spawnpoint upsert\` | edit \`src/work/world.json\` directly |
1155
1206
  | \`node bin/voxel.mjs\` / \`bin/world-edit.mjs\` | edit \`src/work/world.json\` directly |
1156
- | \`generate_character\`, \`design-vehicle\`, skybox/sound/image/animation generation | \`bitmagic generate <type>\` |
1207
+ | \`generate_character\`, \`design-vehicle\`, \`generateBlockTypeTool\`, \`backgroundImageGenerationTool\`, skybox/sound/image/animation generation | \`bitmagic generate <type>\` |
1157
1208
  | \`runWorldForger\` / \`run-world-forger\` | \`bitmagic forge\` |
1158
1209
 
1159
1210
  Everything else in the doc — the engine APIs, the world.json shape, the gotchas — still applies.
1160
1211
 
1212
+ ## Controls: one API, both platforms
1213
+
1214
+ The one lookup worth doing before you write any input code, because getting it wrong compiles,
1215
+ runs, and ships a control no phone can reach.
1216
+
1217
+ - \`PlayerController.registerCustomAction({ action, desktop: { keys }, mobile: { label, behavior } })\`
1218
+ — binds the desktop key and creates the mobile button atomically. **Throws** without \`mobile\`.
1219
+ - \`declareMobileActions(): MobileActionSpec[]\` on the genre's Game class — the declarative form,
1220
+ run before game systems initialize. \`MobileActionSpec\` (\`engine/MobileActionSpec.js\`):
1221
+ \`action\`, \`desktopKeys\`, \`iconKey\`, \`label\`, \`behavior: 'tap' | 'continuous'\`, \`preferredSlot\`.
1222
+ - Both write \`playerController.keys.<action>\`, so the gameplay code reads one flag either way.
1223
+ - \`playerController.verifyMobileParity()\` runs at game start and reports gaps as a
1224
+ \`[mobile-parity]\` console error. It only sees keys registered through the engine — a raw
1225
+ \`document.addEventListener('keydown', …)\` is invisible to it, which is why that pattern and
1226
+ \`desktopControls.registerKeyHandler()\` are both banned for gameplay actions.
1227
+
1228
+ Full reference, including the nine button slots and the built-in icon keys:
1229
+ \`engine/agent-docs/control-system.md\`.
1230
+
1161
1231
  ## The two rules that keep this cheap
1162
1232
 
1163
1233
  **Stop searching, start writing.** Do not pre-verify every API you plan to touch. Once you know
@@ -1185,20 +1255,23 @@ you work. Re-read it before editing it.
1185
1255
  export function renderGenerateSkill() {
1186
1256
  return `---
1187
1257
  name: generating-assets
1188
- description: Use when this Bitmagic game needs a new skybox, sound effect, image, character, animation or drivable vehicle — anything that would otherwise require the web editor.
1258
+ description: Use when this Bitmagic game needs a new skybox, 2D background, custom block type, sound effect, image, character, animation or drivable vehicle, or when the creator has a model, sound, image or .vxl file of their own to add — anything that would otherwise require the web editor.
1189
1259
  ---
1190
1260
 
1191
1261
  # Generating game assets
1192
1262
 
1193
- The \`bitmagic\` CLI generates content directly into this project. Six types work today:
1263
+ The \`bitmagic\` CLI generates content directly into this project. Nine types work today:
1194
1264
 
1195
1265
  | Command | Makes | Lands in |
1196
1266
  |---|---|---|
1197
1267
  | \`bitmagic generate skybox --description "..."\` | a 360° environment | \`worldProfileData.skyboxUrl\` |
1268
+ | \`bitmagic generate background --description "..."\` | a flat 2D backdrop | \`worldProfileData.skyboxUrl\` |
1269
+ | \`bitmagic generate block-type --name <id> --description "..."\` | a custom voxel block | \`worldProfileData.customBlockTypes[]\` |
1198
1270
  | \`bitmagic generate sound --prompt "..."\` | a sound effect | \`assets[]\` |
1199
1271
  | \`bitmagic generate image --name <id> --prompt "..."\` | a 2D image | \`assets[]\` |
1200
1272
  | \`bitmagic generate character --name <id> --prompt "..."\` | a rigged character | \`assets[]\` |
1201
1273
  | \`bitmagic generate animation --family gait ...\` or \`--spec <file>\` | an animation clip | \`assets[]\` |
1274
+ | \`bitmagic generate model --prompt "..."\` | a new 3D model | \`assets[]\` |
1202
1275
  | \`bitmagic generate vehicle --prompt "..."\` | a drivable vehicle | \`assets[]\` |
1203
1276
 
1204
1277
  \`--help\` on any subcommand lists its full flags.
@@ -1208,6 +1281,13 @@ spec in one of three families — \`gait\` (the only one with a flag form), \`me
1208
1281
  (lists of key poses, so they come from a \`--spec\` file). It is also the cheapest, one spark a
1209
1282
  clip, because it is solved locally rather than generated by a model.
1210
1283
 
1284
+ \`model\` is the one to reach for when the game needs an object that does not exist yet — a new
1285
+ asset from a sentence. It needs Chrome and a free port between 3000 and 3199, because only the
1286
+ engine can voxelize. \`--height\` scales it (interiors fill solid below 6 m and stay hollow above,
1287
+ so a building is not baked as a solid block), and \`--name\` sets what game code places by. Do not
1288
+ confuse it with \`prop\`, which REPLACES an existing placeholder and changes every instance already
1289
+ placed.
1290
+
1211
1291
  \`vehicle\` is the one that needs more than a prompt to be useful. It creates a NEW asset (it does
1212
1292
  not upgrade an existing one), it needs Chrome and a free port between 3000 and 3199 because only
1213
1293
  the engine can voxelize, and \`--preset VAN\` builds a standard vehicle without calling the designer
@@ -1220,6 +1300,21 @@ engine.getVehicleSpawner().spawnAndEnterFromAsset({ x: 0, z: 0 }, '<assetName>',
1220
1300
 
1221
1301
  Headlights, taillights and beacons are built and lit automatically — never ask for them.
1222
1302
 
1303
+ \`background\` and \`skybox\` write the **same field**. Pick one: \`skybox\` for a 360° panorama a
1304
+ free-look camera can turn in, \`background\` for a flat layered backdrop behind a fixed sidescroller
1305
+ or top-down camera. The engine wraps either onto the sky sphere, so a flat backdrop reads as a
1306
+ distant painted horizon rather than a full-screen image — and running one after the other replaces
1307
+ the first, silently.
1308
+
1309
+ \`block-type\` registers a block **before** anything can use it: \`--name\` is what
1310
+ \`create-voxel-asset\`, \`groundConfig.surfaceBlockType\` and building code refer to, and an
1311
+ unrecognised name falls back to flat vertex colour instead of failing. Names are lowercase
1312
+ snake_case, are compared case-insensitively, and cannot shadow a built-in (\`wood\`, \`leaves\`,
1313
+ \`stone\`, \`grass\`, \`sand\`, \`dirt\`, \`ice\`, \`asphalt\`, \`water\`, \`lava\`, \`marble\`, or the
1314
+ aliases \`trunk\`, \`foliage\`, \`rock\`, \`road\`). Re-running with the same \`--name\` **replaces**
1315
+ the entry rather than adding a second one. \`--side-description\` gives the side faces their own
1316
+ texture and generates a second one.
1317
+
1223
1318
  Cover art is the one generation that is **not** a \`generate\` subcommand:
1224
1319
 
1225
1320
  | Command | Makes | Lands in |
@@ -1263,11 +1358,22 @@ just a worse game. Two things to settle first:
1263
1358
  Every failure before the asset arrives leaves \`world.json\` unchanged, and the command says so
1264
1359
  explicitly. You never need to guess whether a failed generation half-applied.
1265
1360
 
1361
+ ## Adding a file the creator already has
1362
+
1363
+ Not a generation, but the same registry: \`bitmagic assets add <file>\` uploads a \`.glb\`
1364
+ (voxelized in a headless browser — Chrome and a free port in 3000–3199, like \`vehicle\`), a
1365
+ \`.vxl\`, an image (\`.png/.jpg/.webp\`), audio (\`.opus/.ogg/.m4a/.mp3\`) or a config \`.json\`
1366
+ into \`assets[]\` and prints the id. \`--keep-glb\` registers a \`.glb\` as a polygon mesh instead;
1367
+ \`--voxel-size\`, \`--height\` and \`--hollow\` tune the bake. It costs no sparks. \`bitmagic
1368
+ assets list\` shows what is there; \`bitmagic assets remove <id>\` takes one out of \`world.json\`
1369
+ (the file stays in storage) and refuses while something in \`world.json\` still references it.
1370
+
1266
1371
  ## What is not available
1267
1372
 
1268
- 3D models, voxel assets and block types need a browser to voxelize and upload, which this
1269
- toolchain does not run yet. Do not hand-edit \`world.json\` to reference a model you cannot
1270
- generate the game will fail to load it.
1373
+ Gaussian splats, video, and the import formats \`assets add\` refuses (\`.gltf\`, \`.vox\`, \`.qb\`,
1374
+ \`.fbx\`, \`.spz\`, \`.ply\`, \`.sog\`, \`.mp4\`) still need the web editor's Assets tab. Do not
1375
+ hand-edit \`world.json\` to reference an asset you have neither generated nor added; the game will
1376
+ fail to load it.
1271
1377
  `;
1272
1378
  }
1273
1379
  /**
@@ -1343,6 +1449,56 @@ game or prompt — the ledger records what was charged, not which change asked f
1343
1449
  per-invoice view, the plan page on the web is the source of truth.
1344
1450
  `;
1345
1451
  }
1452
+ /**
1453
+ * `.claude/skills/judging-quality/SKILL.md` — when and how to run `bitmagic judge`.
1454
+ *
1455
+ * The point the skill has to land is the discipline, not the mechanics: judge after milestones,
1456
+ * fix the findings, confirm once, stop. An agent that loops on the judge is spending the
1457
+ * creator's sparks on reassurance.
1458
+ */
1459
+ export function renderJudgeSkill() {
1460
+ return `---
1461
+ name: judging-quality
1462
+ description: Use after finishing a milestone — a mechanics-plan slice shipped, a level forged, a visual pass done — to get an independent quality verdict on the running game, or when asked whether the game looks good, what to polish next, or to review the game's quality.
1463
+ ---
1464
+
1465
+ # Judging the game's quality
1466
+
1467
+ \`\`\`bash
1468
+ bitmagic verify # first: captures the screenshot the judge grades (no --fast)
1469
+ bitmagic judge # one vision-model call; prints a scorecard, exits 0
1470
+ bitmagic judge --genre platformer # sharpen the rubric: platformer, racing, shooter, combat, driving, tower-defense
1471
+ bitmagic judge --min-score 7 # exit 4 when the overall score is below the bar
1472
+ bitmagic judge --json # the scorecard as one JSON document on stdout
1473
+ \`\`\`
1474
+
1475
+ You built this game, so you are the wrong judge of it. \`bitmagic judge\` sends the screenshot
1476
+ \`bitmagic verify\` captured, plus a rubric built from \`GAME-DESIGN.md\`, to a separate vision
1477
+ model and prints back four dimension scores (visual-quality, readability, design-fidelity, polish)
1478
+ and at most three findings — each naming what to change, most severe first. The scorecard is also
1479
+ written to \`.bitmagic/judge.json\`.
1480
+
1481
+ It is paid (sparks, roughly the cost of one small model call) and deliberate — which is why it is
1482
+ a command you run, not something verify does for you.
1483
+
1484
+ ## The loop, and where it stops
1485
+
1486
+ 1. Finish the milestone. Run \`bitmagic verify\` — the judge grades verify's screenshot, so a
1487
+ stale one gets you a verdict on the game you had yesterday (the command warns when so).
1488
+ 2. Run \`bitmagic judge\`. Read the findings.
1489
+ 3. Fix the ones worth fixing — they name the object or region and the change.
1490
+ 4. Re-run \`verify\`, then \`judge\` once to confirm the fixes landed.
1491
+ 5. **Stop.** Whatever the score now says, move on to the next milestone. Never run the judge a
1492
+ third time on the same milestone, and never chase a number — the findings are the product, the
1493
+ score is context.
1494
+
1495
+ ## When it refuses
1496
+
1497
+ - **No screenshot** — run \`bitmagic verify\` first, without \`--fast\` (which skips screenshots).
1498
+ - **Not enough sparks / spending not approved** — report it to the creator; see the
1499
+ \`checking-usage\` skill. Never enable spending yourself.
1500
+ `;
1501
+ }
1346
1502
  /**
1347
1503
  * `GAME-DESIGN.md` — the project's design document, and the input `bitmagic cover` builds its
1348
1504
  * image prompt from. The web lane's Planning Mode writes a file of the same name for the same
@@ -1394,7 +1550,8 @@ project root for the guidance an agent should read before editing this game.
1394
1550
 
1395
1551
  ## Which of these are yours
1396
1552
 
1397
- \`planning-a-game/\`, \`finding-engine-apis/\`, \`generating-assets/\`, \`checking-usage/\` — and
1553
+ \`planning-a-game/\`, \`finding-engine-apis/\`, \`generating-assets/\`, \`checking-usage/\`,
1554
+ \`judging-quality/\` — and
1398
1555
  this README — are shipped by the Bitmagic CLI and **re-rendered by \`bitmagic upgrade\`**. They
1399
1556
  describe what the CLI and the engine can do, so they have to stay current with both; edits to them
1400
1557
  are lost on the next upgrade.
@@ -1403,8 +1560,9 @@ are lost on the next upgrade.
1403
1560
  |---|---|
1404
1561
  | \`planning-a-game/\` | starting a game, a genre, or anything touching more than one gameplay feature — scoping the first playable slice and writing \`mechanics-plan.md\` |
1405
1562
  | \`finding-engine-apis/\` | you need an engine API and do not know its name or signature, or \`bitmagic check\` cannot resolve a symbol |
1406
- | \`generating-assets/\` | the game needs a skybox, sound, image, character, animation or vehicle |
1563
+ | \`generating-assets/\` | the game needs a skybox, a background, a custom block type, sound, image, character, animation or vehicle |
1407
1564
  | \`checking-usage/\` | asked what sparks were spent on, how much Pro allowance is left, or whether there is enough left to keep generating |
1565
+ | \`judging-quality/\` | a milestone is done and the game deserves an independent quality verdict — \`bitmagic judge\` |
1408
1566
 
1409
1567
  Every other directory here is yours. \`upgrade\` never opens a skill it does not ship, and never
1410
1568
  deletes anything under \`.claude/\`. Put project-specific guidance in a skill of your own, or in
@@ -1 +1 @@
1
- {"version":3,"file":"project-files.js","sourceRoot":"","sources":["../../src/scaffold/project-files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-files.js","sourceRoot":"","sources":["../../src/scaffold/project-files.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import * as fs from 'fs';
2
2
  import * as path from 'path';
3
3
  import { CliError } from '../errors.js';
4
4
  import { aliasSourceDir } from './aliases.js';
5
- import { renderPackageJson, renderTsconfig, renderIndexHtml, renderViteConfig, renderVitePublishConfig, renderGitignore, renderBitmagicJson, renderAgentsMd, renderGameDesignMd, renderClaudeMd, renderSkillsReadme, renderGenerateSkill, renderPlanningSkill, renderEngineApiSkill, renderUsageSkill, } from './project-files.js';
5
+ import { renderPackageJson, renderTsconfig, renderIndexHtml, renderViteConfig, renderVitePublishConfig, renderGitignore, renderBitmagicJson, renderAgentsMd, renderGameDesignMd, renderClaudeMd, renderJudgeSkill, renderSkillsReadme, renderGenerateSkill, renderPlanningSkill, renderEngineApiSkill, renderUsageSkill, } from './project-files.js';
6
6
  import { hashAgentsMd } from './agents-md.js';
7
7
  import { CLAUDE_SETTINGS_FILE, renderClaudeSettings } from './claude-settings.js';
8
8
  /**
@@ -160,6 +160,7 @@ export const PLATFORM_GENERATED_FILES = [
160
160
  ['.claude/skills/planning-a-game/SKILL.md', renderPlanningSkill],
161
161
  ['.claude/skills/finding-engine-apis/SKILL.md', renderEngineApiSkill],
162
162
  ['.claude/skills/checking-usage/SKILL.md', renderUsageSkill],
163
+ ['.claude/skills/judging-quality/SKILL.md', renderJudgeSkill],
163
164
  ];
164
165
  /**
165
166
  * Every template the downloaded bundle carries, in index order.
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/scaffold/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/scaffold/project.ts"],"names":[],"mappings":"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"}