@bitmagic/cli 0.1.61-dev.8 → 0.1.61
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.
- package/dist/scaffold/project-files.js +126 -246
- package/dist/scaffold/project-files.js.map +1 -1
- package/dist/scaffold/project.js +3 -1
- package/dist/scaffold/project.js.map +1 -1
- package/dist/scaffold/reference-guidance.d.ts +1 -1
- package/dist/scaffold/reference-guidance.js +3 -2
- package/dist/scaffold/reference-guidance.js.map +1 -1
- package/dist/scaffold/skill-files.d.ts +28 -1
- package/dist/scaffold/skill-files.js +212 -2
- package/dist/scaffold/skill-files.js.map +1 -1
- package/package.json +4 -4
|
@@ -667,84 +667,62 @@ bitmagic dev # long-running — start it IN THE BACKGROUND and leave it u
|
|
|
667
667
|
\`\`\`
|
|
668
668
|
|
|
669
669
|
\`bitmagic dev\` never exits: it builds, then serves the game and the editor — on this project's
|
|
670
|
-
own fixed ports, \`http://localhost:${editorPort}/\` for a machine's first project — until
|
|
671
|
-
**Run it as a background task
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
**If they ask about their phone, restart dev with \`--mobile\`.** It serves the game to their own
|
|
684
|
-
network and writes a QR code to \`.bitmagic/mobile-qr.png\` (the URL is \`mobileUrl\` in
|
|
685
|
-
\`.bitmagic/dev.json\`). Hand them the image, and say their phone warns once about the certificate
|
|
686
|
-
— tap Show Details, then Visit Website.
|
|
687
|
-
|
|
688
|
-
The point is not the server. The point is that the person who asked for this game is sitting in
|
|
689
|
-
front of that page, and everything below assumes they can see what you are doing:
|
|
690
|
-
|
|
691
|
-
- The game reloads by itself every time you change it, so they watch it take shape.
|
|
692
|
-
- The assets panel lists every generation while it runs, with your prompt and progress. A forge
|
|
693
|
-
takes twenty minutes; started with no dev view up, those twenty minutes look identical to a
|
|
694
|
-
crash.
|
|
695
|
-
- They can move objects in the Editor tab and screenshot a problem straight to you.
|
|
696
|
-
|
|
697
|
-
Started at the end, all of that is a server nobody needed. A game that appeared in one silent hour
|
|
698
|
-
is worth less than a rough one they watched arrive, because they could not steer the first.
|
|
670
|
+
own fixed ports, \`http://localhost:${editorPort}/\` for a machine's first project — until
|
|
671
|
+
interrupted. **Run it as a background task**, or you block until the session is killed. Take the
|
|
672
|
+
URL from what it printed rather than assuming ${editorPort} (\`.bitmagic/dev.json\` records what it
|
|
673
|
+
actually bound), and **say it in your reply, once** — you started it in the background, so
|
|
674
|
+
everything it printed, that URL included, went into a log your creator never sees.
|
|
675
|
+
|
|
676
|
+
Everything below assumes they can watch: the game reloads itself on every change, the assets panel
|
|
677
|
+
lists each generation with your prompt and progress, and they can move objects in the Editor tab
|
|
678
|
+
and screenshot a problem straight to you. Started at the end, all of that is a server nobody
|
|
679
|
+
needed — a game that appeared in one silent hour is worth less than a rough one they watched
|
|
680
|
+
arrive, because they could not steer the first. If they ask about their phone, restart with
|
|
681
|
+
\`--mobile\` (\`.claude/skills/working-with-the-creator/SKILL.md\` has the QR and the certificate
|
|
682
|
+
warning).
|
|
699
683
|
|
|
700
684
|
If you are unsure whether one is already running, \`bitmagic reload\` says so and costs nothing.
|
|
701
685
|
|
|
702
686
|
## Layout
|
|
703
687
|
|
|
704
|
-
- \`src/work/\` — **your game.** Everything you write lives here. \`Game.ts\` is the entry
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
Bitmagic's IP, licensed to you under the PolyForm Shield License 1.0.0 with an additional
|
|
713
|
-
permission: build, modify, sell and distribute games anywhere you like, including off
|
|
688
|
+
- \`src/work/\` — **your game.** Everything you write lives here. \`Game.ts\` is the entry point;
|
|
689
|
+
\`game.json\` and \`world.json\` hold configuration and scene data. The \`work\` directory name is
|
|
690
|
+
load-bearing: the engine fetches the literal path \`src/work/world.json\`, not an import or an
|
|
691
|
+
alias, so renaming or moving it breaks the game at runtime while still typechecking.
|
|
692
|
+
- \`engine/\` — **the Bitmagic engine, read-only.** Vendored by the CLI and replaced wholesale by
|
|
693
|
+
\`bitmagic upgrade\`; edits here are lost on upgrade and ignored on publish.
|
|
694
|
+
- \`engine/LICENSE.md\` — **the engine's licence, and not boilerplate.** PolyForm Shield 1.0.0 plus
|
|
695
|
+
one permission: build, modify, sell and distribute games anywhere you like, including off
|
|
714
696
|
bitmagic.ai and with a modified engine. What you may not do is ship the engine *as an engine*.
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
covers three.js, Rapier and the rest.
|
|
697
|
+
Every published bundle must carry a notice, which is why both \`vite.publish*.config.js\` files
|
|
698
|
+
have a \`banner\`: leave it alone. \`engine/THIRD-PARTY-NOTICES.md\` covers three.js and the rest.
|
|
718
699
|
- \`engine/agent-docs/\` — **the engine's documentation, and the fastest thing in this project.**
|
|
719
|
-
\`engine-api/\` is a generated signature digest
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
-
|
|
731
|
-
\`
|
|
732
|
-
\`
|
|
733
|
-
stay current with both; edits to them are lost. Skills you add yourself are never touched.
|
|
700
|
+
\`engine-api/\` is a generated signature digest of every public class, method and type; the ~83
|
|
701
|
+
\`*.md\` files are the per-subsystem guides, including \`mechanic-*.md\` genre recipes and
|
|
702
|
+
\`archetype-*.md\` world recipes; \`samples/\` holds compile-checked reference code. See **Finding
|
|
703
|
+
an engine API** below.
|
|
704
|
+
- \`GAME-DESIGN.md\` — **what this game is**, and \`mechanics-plan.md\` — **how it gets built, and
|
|
705
|
+
in what order.** Both yours to write and rewrite; \`bitmagic cover\` reads the first. Both are
|
|
706
|
+
excluded from the publish fingerprint, so revising them never invalidates a passing
|
|
707
|
+
\`bitmagic verify\`.
|
|
708
|
+
- \`.claude/skills/\` — **shipped by the CLI and re-rendered by \`bitmagic upgrade\`**, so they stay
|
|
709
|
+
current with it. Every one is plain markdown at \`.claude/skills/<name>/SKILL.md\`, readable
|
|
710
|
+
whether or not your harness loads skills by itself: \`planning-a-game/\` (what to build first),
|
|
711
|
+
\`finding-engine-apis/\` (engine docs), \`generating-assets/\`, \`working-with-the-creator/\`,
|
|
712
|
+
\`theming-the-hud/\`, \`publishing-a-game/\`, \`judging-quality/\`, \`checking-usage/\`,
|
|
713
|
+
\`making-a-trailer/\`. Edits to them are lost; skills you add yourself are never touched.
|
|
734
714
|
- \`.claude/settings.json\` — **yours**, seeded with one Stop hook that runs \`bitmagic reload\` so
|
|
735
715
|
the owner's browser refreshes when you finish a turn. \`upgrade\` adds that hook if it is missing
|
|
736
716
|
and changes nothing else, so your permissions and your own hooks are safe here.
|
|
737
|
-
- \`AGENTS.md\` — this file. Yours to edit
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
re-read that diff after an upgrade** — new CLI capabilities are documented here, and an edited
|
|
742
|
-
copy will not learn about them on its own.
|
|
717
|
+
- \`AGENTS.md\` — this file. Yours to edit; \`upgrade\` refreshes it only while it is byte-identical
|
|
718
|
+
to what the CLI wrote, and otherwise keeps yours and drops the current template in
|
|
719
|
+
\`.bitmagic/AGENTS.md.latest\`. **If you edit this file, diff that after an upgrade** — new CLI
|
|
720
|
+
capabilities are documented here, and an edited copy will not learn about them on its own.
|
|
743
721
|
|
|
744
722
|
\`engine/types/work-game.d.ts\` declares \`module 'work/Game.js'\`, which is how the engine
|
|
745
723
|
imports your game. Renaming or removing the \`VoxelGame\` export from \`src/work/Game.ts\` still
|
|
746
|
-
typechecks against that declaration — it only
|
|
747
|
-
|
|
724
|
+
typechecks against that declaration — it fails only at runtime, when the engine loads the module
|
|
725
|
+
and finds the export missing.
|
|
748
726
|
|
|
749
727
|
## Build the smallest playable thing first
|
|
750
728
|
|
|
@@ -776,34 +754,23 @@ Then **stop and report**: what plays now, what you deliberately left out, and th
|
|
|
776
754
|
things you would do next, in order. Let them choose. Do not publish unless they ask.
|
|
777
755
|
|
|
778
756
|
The full contract — what counts as a core verb, what the engine already ships so you never build it,
|
|
779
|
-
the \`mechanics-plan.md\` skeleton, and the loop after slice 1 — is in
|
|
757
|
+
the \`mechanics-plan.md\` skeleton, and the loop after slice 1 — is in
|
|
758
|
+
\`.claude/skills/planning-a-game/SKILL.md\`.
|
|
780
759
|
|
|
781
760
|
## Finding an engine API
|
|
782
761
|
|
|
783
|
-
The vendored engine is ~240,000 lines
|
|
784
|
-
mistake available in this project
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
you. The \`finding-engine-apis\` skill carries the feature-to-doc table — use it instead of
|
|
796
|
-
guessing filenames.
|
|
797
|
-
3. **\`engine/\` source** — last resort, for an implementation detail neither of the above answers.
|
|
798
|
-
|
|
799
|
-
Two conventions in those docs, because they are shared with Bitmagic's hosted agent:
|
|
800
|
-
|
|
801
|
-
- \`@docs foo.md\` means the file \`engine/agent-docs/foo.md\`, and \`samples/foo\` means
|
|
802
|
-
\`engine/agent-docs/samples/foo.ts\`. Just read the file.
|
|
803
|
-
- Where a doc tells you to run \`node bin/voxel.mjs\` or \`bin/world-edit.mjs\`, or to call
|
|
804
|
-
\`configure_game\`, \`generate_character\` or \`runWorldForger\`, those are the hosted agent's
|
|
805
|
-
tools and **do not exist here**. The equivalents are editing \`src/work/world.json\` directly, and
|
|
806
|
-
\`bitmagic generate\` / \`bitmagic forge\`. Everything else in the doc still applies.
|
|
762
|
+
The vendored engine is ~240,000 lines, and reading it to discover what exists is the most expensive
|
|
763
|
+
mistake available in this project. Three tiers, in order, stopping at the first that answers you:
|
|
764
|
+
**\`engine/agent-docs/engine-api/\`**, a generated digest of every public class, method, function,
|
|
765
|
+
interface and type, signatures only — grep it (\`rg -n "spawnAsset" engine/agent-docs/engine-api/\`)
|
|
766
|
+
and read the group doc it lands in, with \`engine-api.md\` indexing the 45 groups; then
|
|
767
|
+
**\`engine/agent-docs/*.md\`**, the prose guides, for how a subsystem is *meant* to be used; then
|
|
768
|
+
**\`engine/\` source**, last resort. \`@docs foo.md\` in those docs means
|
|
769
|
+
\`engine/agent-docs/foo.md\` — just read the file.
|
|
770
|
+
|
|
771
|
+
\`.claude/skills/finding-engine-apis/SKILL.md\` carries the feature-to-doc table (use it instead of
|
|
772
|
+
guessing filenames) and translates the hosted-agent tools those shared docs name, none of which
|
|
773
|
+
exist here.
|
|
807
774
|
|
|
808
775
|
Two counterweights, and they matter as much as the tiers:
|
|
809
776
|
|
|
@@ -846,9 +813,6 @@ It writes \`.bitmagic/cover.webp\` (read that file if you want to show them the
|
|
|
846
813
|
uploads. Because it touches \`world.json\`, it invalidates a passing verify — so run it BEFORE
|
|
847
814
|
\`bitmagic verify\`, not between verifying and publishing.
|
|
848
815
|
|
|
849
|
-
Re-running it on an unchanged \`GAME-DESIGN.md\` generates nothing; it just reports the cover you
|
|
850
|
-
already have. Rewrite the design and run it again — or pass \`--force\` — when the game has moved on
|
|
851
|
-
from its artwork.
|
|
852
816
|
|
|
853
817
|
## Before you change movement, cameras or rotation
|
|
854
818
|
|
|
@@ -901,12 +865,11 @@ bitmagic judge # grade the verify screenshot against a quality rubric (paid,
|
|
|
901
865
|
|
|
902
866
|
The engine is large; \`check\` is the fast way to find out whether an edit holds together.
|
|
903
867
|
|
|
904
|
-
**Run \`bitmagic reload\` when you finish a round of edits.** \`bitmagic dev\`
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
Code Stop hook (\`.claude/settings.json\`), that already runs it for you.
|
|
868
|
+
**Run \`bitmagic reload\` when you finish a round of edits.** \`bitmagic dev\` otherwise guesses
|
|
869
|
+
from writes going quiet, and a pause to think looks like "done"; \`reload\` also waits for the build
|
|
870
|
+
in flight rather than showing the previous one. It exits 0 and does nothing when no \`bitmagic dev\`
|
|
871
|
+
is running, so run it unconditionally — the Stop hook in \`.claude/settings.json\` does that for you
|
|
872
|
+
in Claude Code.
|
|
910
873
|
|
|
911
874
|
**\`check\` passing does not mean the game runs.** The engine's most common failure is a clean
|
|
912
875
|
compile that dies on load — a missing asset, a bad \`world.json\` value, a null container. Run
|
|
@@ -918,62 +881,31 @@ One verify runs at a time per machine: "waiting for" another project's verify is
|
|
|
918
881
|
judge of it. After each milestone run \`bitmagic verify\` (not \`--fast\`), then \`bitmagic judge\`:
|
|
919
882
|
a separate vision model grades the screenshot against \`GAME-DESIGN.md\` and prints at most three
|
|
920
883
|
concrete findings (also written to \`.bitmagic/judge.json\`). Fix the ones worth fixing, confirm
|
|
921
|
-
with one re-run, then move on — **never loop on the judge**. See
|
|
884
|
+
with one re-run, then move on — **never loop on the judge**. See
|
|
885
|
+
\`.claude/skills/judging-quality/SKILL.md\`.
|
|
922
886
|
|
|
923
887
|
## The human may be moving objects too
|
|
924
888
|
|
|
925
889
|
\`bitmagic dev\` serves one page with two tabs — **Game**, where the owner plays, and **Editor**,
|
|
926
890
|
where they click an object and drag a gizmo. A drag writes the new transform straight into
|
|
927
|
-
\`src/work/world.json
|
|
928
|
-
alone:
|
|
891
|
+
\`src/work/world.json\`. So \`world.json\` is shared ground, not yours alone:
|
|
929
892
|
|
|
930
893
|
- **Re-read \`src/work/world.json\` before editing it.** The copy you read earlier in the session
|
|
931
894
|
may be stale, and a whole-file rewrite from that copy silently reverts what they just placed.
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
- **They can watch your generations happen
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
Every editor action is appended there as one JSON object per line, and printed to \`bitmagic dev\`'s
|
|
947
|
-
own output. Read it to find out what the human did — and, for one event, what they want YOU to do.
|
|
948
|
-
|
|
949
|
-
\`\`\`
|
|
950
|
-
{"at":"…","event":"object.moved","objectId":"inst_…","position":{"from":{…},"to":{…}}}
|
|
951
|
-
{"at":"…","event":"object.added","objectId":"inst_…","type":"tree_oak"}
|
|
952
|
-
{"at":"…","event":"object.deleted","objectId":"inst_…"}
|
|
953
|
-
{"at":"…","event":"hq.requested","assetId":"asset_…","prompt":"…","command":"bitmagic generate prop …"}
|
|
954
|
-
\`\`\`
|
|
955
|
-
|
|
956
|
-
Almost every line is history — world.json already says so, and the line exists to tell you WHO
|
|
957
|
-
changed it and from what. Nothing is expected of you.
|
|
958
|
-
|
|
959
|
-
\`hq.started\` / \`hq.completed\` mean the human pressed "Generate high-quality version" and the
|
|
960
|
-
editor ran it: an asset's mesh was regenerated and every placed instance upgraded with it. Read
|
|
961
|
-
these rather than being surprised by an asset that changed on its own. Nothing is expected of you
|
|
962
|
-
here either.
|
|
963
|
-
|
|
964
|
-
**\`hq.requested\` is the one line that asks something of you.** It appears only when the editor
|
|
965
|
-
could NOT run the generation — normally because nobody is logged in. It carries the command:
|
|
966
|
-
|
|
967
|
-
\`\`\`
|
|
968
|
-
bitmagic generate prop --asset <assetId> --prompt "<prompt>" --json
|
|
969
|
-
\`\`\`
|
|
970
|
-
|
|
971
|
-
That generates the mesh, voxelizes it to the asset's recorded \`fitBox\`, and upserts it under the
|
|
972
|
-
same asset id, so every placed instance upgrades at once. They asked for it, so run it — just never
|
|
973
|
-
twice for the same request. If it fails after the mesh was generated, the error and the JSON result
|
|
974
|
-
carry the mesh URL — retry with \`--glb-url <url>\` to skip the step that already succeeded.
|
|
975
|
-
|
|
976
|
-
The file is append-only and never rewritten, so you can re-read it from where you left off.
|
|
895
|
+
Prefer changing the entries you mean to change over regenerating \`environmentObjects\` wholesale.
|
|
896
|
+
- **An image pasted into the conversation is probably a frame from their running game**, not a
|
|
897
|
+
reference or a mock-up — the dev view has a Screenshot button.
|
|
898
|
+
- **They can watch your generations happen, but not your failures.** Each \`bitmagic generate\` and
|
|
899
|
+
\`bitmagic forge\` records itself in \`.bitmagic/jobs/\` and shows in the dev view while it runs;
|
|
900
|
+
one that FAILS drops off that list with the error reaching your terminal and nowhere else, so a
|
|
901
|
+
failure you do not mention is one they never learn about.
|
|
902
|
+
- **\`.bitmagic/edit/events.jsonl\` may be asking you for something.** Every editor action is
|
|
903
|
+
appended there, and almost all of them are history you can ignore — but \`hq.requested\` means
|
|
904
|
+
they pressed "Generate high-quality version" and the editor could not run it, and it carries the
|
|
905
|
+
\`bitmagic generate prop\` command to run on their behalf.
|
|
906
|
+
|
|
907
|
+
The event shapes, the rest of the editor protocol and \`bitmagic dev --mobile\` are in
|
|
908
|
+
\`.claude/skills/working-with-the-creator/SKILL.md\`.
|
|
977
909
|
|
|
978
910
|
## Publishing
|
|
979
911
|
|
|
@@ -982,79 +914,32 @@ bitmagic build # bundle into .bitmagic/build/index.html + .bitmagic/build/m
|
|
|
982
914
|
bitmagic publish # verify-gate, build if needed, and ship to bitmagic.ai
|
|
983
915
|
\`\`\`
|
|
984
916
|
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
bitmagic.ai. Pass \`--visibility public\` explicitly, on that call, to list it; omit it on a later
|
|
1012
|
-
publish and the game goes back to private — its \`/play/\` page stops serving too, so a public
|
|
1013
|
-
game you re-publish bare disappears from bitmagic.ai entirely until the next
|
|
1014
|
-
\`--visibility public\`.
|
|
1015
|
-
|
|
1016
|
-
\`--force\` overrides a **stale or failed** verify verdict, never a **missing** one — a project with
|
|
1017
|
-
no cover art has only the verify screenshot to publish a thumbnail from, so \`bitmagic verify\` must
|
|
1018
|
-
have produced one at least once before \`--force\` has anything to work with.
|
|
1019
|
-
|
|
1020
|
-
\`--name\`/\`--description\` apply to that one publish call only; they are never written back to
|
|
1021
|
-
\`src/work/game.json\` (doing so by hand would change the fingerprint and invalidate the verify
|
|
1022
|
-
you just checked).
|
|
1023
|
-
|
|
1024
|
-
**Category tags are part of every publish.** bitmagic.ai files the game under content categories
|
|
1025
|
-
("Racing", "Puzzle", …); publish auto-classifies an untagged game from its name and description.
|
|
1026
|
-
To choose them yourself, declare \`"categories": ["Racing", "Arcade"]\` in \`worldProfileData\` —
|
|
1027
|
-
a declared set wins on every publish, and an explicit \`[]\` means "no tags" and suppresses the
|
|
1028
|
-
auto-classify. A tracked-file edit: declare them BEFORE \`bitmagic verify\`, not after.
|
|
1029
|
-
|
|
1030
|
-
If \`bitmagic publish\` exits non-zero, branch on the exit code rather than parsing the message:
|
|
1031
|
-
|
|
1032
|
-
| Code | Meaning | Fix |
|
|
1033
|
-
|---|---|---|
|
|
1034
|
-
| 1 | Build failed, or what was uploaded was not an engine build | Run \`bitmagic check\` to see the error, fix it. If the message names a missing \`vite.publish*.config.js\`, this project predates it — run \`bitmagic upgrade\`. Do NOT retry an unchanged bundle; the refusal is deterministic |
|
|
1035
|
-
| 2 | Not logged in | \`bitmagic login\` |
|
|
1036
|
-
| 3 | Verify missing, stale, or failed | \`bitmagic verify\` (then publish again, or add \`--force\` for a stale/failed record) |
|
|
1037
|
-
| 5 | Not this game's owner, or the account/game is banned | Not self-serve — stop and report it |
|
|
1038
|
-
| 6 | Upload or finalize failed | Usually transient (network/storage). Retry once; if it fails identically, stop and report it — this code also covers permanent failures such as an unknown game or a rejected request |
|
|
1039
|
-
| 7 | Published, but the game did not render | The game IS live. Do NOT retry the publish — fix the game and publish again. Artifacts in \`.bitmagic/smoke/\` |
|
|
1040
|
-
|
|
1041
|
-
After a successful publish the CLI loads the published game the way the portal does — in an iframe
|
|
1042
|
-
that starts at a zero-size viewport — and fails with exit 7 if it does not render. This catches
|
|
1043
|
-
failures that leave no other trace: a wrong Content-Type that makes the browser download the page,
|
|
1044
|
-
a bundle that cannot find its own world.json, a canvas nothing ever draws into.
|
|
1045
|
-
|
|
1046
|
-
Pass \`--skip-smoke\` to skip it. The publish still happens; it is simply not confirmed to render,
|
|
1047
|
-
and the output says so.
|
|
1048
|
-
|
|
1049
|
-
Every publish also uploads a **source archive** of this project to a **publicly readable** (though
|
|
1050
|
-
unguessable) URL, which Bitmagic checks against the bundle and against an unmodified \`engine/\`;
|
|
1051
|
-
findings print as \`warning:\` lines and never block a publish. Credential-shaped files (\`.env*\`,
|
|
1052
|
-
\`*.pem\`, \`*.key\`, \`.npmrc\`, service-account JSON) are excluded and named in the output — but
|
|
1053
|
-
that list cannot be exhaustive, so never keep a secret in this directory.
|
|
1054
|
-
|
|
1055
|
-
Publishing is never refused because the vendored engine is old. When a newer engine exists,
|
|
1056
|
-
\`bitmagic dev\` and \`bitmagic publish\` say so and suggest \`bitmagic upgrade\` — upgrade while you
|
|
1057
|
-
are developing, when rebuilding is cheap, rather than being blocked at the moment you ship.
|
|
917
|
+
Publish enforces one order and refuses otherwise: get \`bitmagic verify\` passing, then **do not
|
|
918
|
+
edit a tracked file** between verifying and publishing, then publish (it rebuilds by itself, so a
|
|
919
|
+
manual \`build\` is optional). Staleness is a content fingerprint, not a clock — one edit
|
|
920
|
+
invalidates it immediately, an untouched project stays fresh forever, and the only way to check is
|
|
921
|
+
to verify again. Git operations, \`.bitmagic/\`, \`GAME-DESIGN.md\` and \`mechanics-plan.md\` are
|
|
922
|
+
excluded; \`bitmagic cover\` is NOT, because it writes \`world.json\`.
|
|
923
|
+
|
|
924
|
+
**A bare \`bitmagic publish\` does not make the game public.** Every publish uploads and registers
|
|
925
|
+
the game, but \`visibility\` defaults to \`private\` — reachable by URL, not listed on bitmagic.ai.
|
|
926
|
+
Pass \`--visibility public\` explicitly, on that call, to list it; omit it on a later publish and
|
|
927
|
+
the game goes back to private, its \`/play/\` page included.
|
|
928
|
+
|
|
929
|
+
**Show your creator the QR code.** Your output is a pipe, so publish cannot draw one in the
|
|
930
|
+
terminal: it writes \`.bitmagic/publish-qr.png\` and names it (\`qrPath\` under \`--json\`). Surface
|
|
931
|
+
that image like any artifact you made — a bare URL leaves your creator retyping a game id into a
|
|
932
|
+
browser.
|
|
933
|
+
|
|
934
|
+
**Every publish uploads a source archive of this project to a publicly readable (though
|
|
935
|
+
unguessable) URL.** Credential-shaped files (\`.env*\`, \`*.pem\`, \`*.key\`, \`.npmrc\`,
|
|
936
|
+
service-account JSON) are excluded and named in the output, but that list cannot be exhaustive —
|
|
937
|
+
so never keep a secret in this directory.
|
|
938
|
+
|
|
939
|
+
\`.claude/skills/publishing-a-game/SKILL.md\` has the rest, and you want it before you publish:
|
|
940
|
+
what the thumbnail comes from, category tags, \`--force\` and the one-shot \`--name\`/
|
|
941
|
+
\`--description\`, the post-publish render smoke test, and the exit-code table to branch on when
|
|
942
|
+
publish exits non-zero rather than parsing its message.
|
|
1058
943
|
|
|
1059
944
|
## The game's look is data
|
|
1060
945
|
|
|
@@ -1063,7 +948,7 @@ value: \`worldProfileData.hud.theme\` in \`src/work/world.json\`. **Never restyl
|
|
|
1063
948
|
game code to satisfy a look request** ("rounder buttons", "orange UI", "neon glow"); use
|
|
1064
949
|
\`bitmagic theme patch\` / \`set\` / \`show\` / \`check\` and read
|
|
1065
950
|
\`engine/agent-docs/HUD_THEMES.md\` — its Common-asks table has a copyable patch for every frequent
|
|
1066
|
-
request.
|
|
951
|
+
request. \`.claude/skills/theming-the-hud/SKILL.md\` covers the loop, including verifying with
|
|
1067
952
|
\`.bitmagic/verify/screenshot.png\`.
|
|
1068
953
|
|
|
1069
954
|
## Generating assets
|
|
@@ -1088,24 +973,20 @@ Run \`bitmagic generate <type> --help\` for the full flags of any one.
|
|
|
1088
973
|
|
|
1089
974
|
**Always add \`--original-prompt "<creator's request, verbatim>"\`** — to EVERY \`bitmagic\` command, \`build\`/\`verify\`/\`dev\`/\`reload\`/\`publish\` included. Never affects output; it is what counts the prompts shown on the game's public page.
|
|
1090
975
|
|
|
1091
|
-
|
|
976
|
+
Two things before you use them:
|
|
1092
977
|
|
|
1093
|
-
1. **
|
|
1094
|
-
re-read it afterwards — your in-memory copy is stale. The command prints exactly which paths
|
|
1095
|
-
it changed.
|
|
1096
|
-
2. **Use them.** Generation is what the creator's Bitmagic Pro subscription is for, and these
|
|
978
|
+
1. **Use them.** Generation is what the creator's Bitmagic Pro subscription is for, and these
|
|
1097
979
|
produce real, good-looking assets — a game that ships with placeholders because you were being
|
|
1098
980
|
careful is the worse outcome. The one rule: do not call them **in a loop** to explore options.
|
|
1099
|
-
Decide the prompt, ask for what you actually need, once.
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
generation is refused for a game the logged-in account does not own.
|
|
1103
|
-
4. **A running \`bitmagic dev\` picks the new asset up on its own.** It reloads the browser once
|
|
1104
|
-
the write settles; \`bitmagic reload\` forces it if you want it now.
|
|
981
|
+
Decide the prompt, ask for what you actually need, once.
|
|
982
|
+
2. **Each generation writes to \`src/work/world.json\`.** If you are also editing that file, re-read
|
|
983
|
+
it afterwards — your in-memory copy is stale. The command prints exactly which paths it changed.
|
|
1105
984
|
|
|
1106
985
|
Three lanes make a 3D object, and the wrong one wastes a generation: \`generate model\` mints a NEW
|
|
1107
986
|
asset, \`generate prop --asset <id>\` UPGRADES a placeholder, \`assets add <file>\` uploads your own.
|
|
1108
|
-
Splats, video and \`.vox\`/\`.fbx\` still need the web editor; never reference an asset you did not
|
|
987
|
+
Splats, video and \`.vox\`/\`.fbx\` still need the web editor; never reference an asset you did not
|
|
988
|
+
make. \`.claude/skills/generating-assets/SKILL.md\` has the flags, the reference-image rules, what
|
|
989
|
+
to do after a generation, and every way one refuses.
|
|
1109
990
|
|
|
1110
991
|
## Forging a whole level
|
|
1111
992
|
|
|
@@ -1120,7 +1001,7 @@ level the game boots into, and it moves the legacy mirror fields with it. Add \`
|
|
|
1120
1001
|
\`--platformer\` or \`--freeform\` (at most one) for a different kind of place; omit them all for
|
|
1121
1002
|
natural terrain.
|
|
1122
1003
|
|
|
1123
|
-
|
|
1004
|
+
Four things worth knowing:
|
|
1124
1005
|
|
|
1125
1006
|
1. **It is slow.** A forge runs for many minutes — the level bake alone can take twenty. That is a
|
|
1126
1007
|
planning fact, not a reason to avoid it: plan the run, start it, and do something else while it
|
|
@@ -1129,15 +1010,11 @@ Five things worth knowing:
|
|
|
1129
1010
|
voxelizing is the engine's own code. The command builds and serves the project itself, so you
|
|
1130
1011
|
do not need \`bitmagic dev\` running and it will not collide with one that is.
|
|
1131
1012
|
3. **It rewrites large parts of \`world.json\`** (assets, environmentObjects, the level registry,
|
|
1132
|
-
spawn points), so re-read the file afterwards if you were editing it.
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
5. **Resume rather than re-run.** The command prints a job id. If it fails after the design
|
|
1138
|
-
succeeded, \`bitmagic forge --resume <jobId>\` skips the steps that already finished — twenty
|
|
1139
|
-
minutes you do not spend again. The failure message says when resuming is worth it, and when the
|
|
1140
|
-
failure is deterministic and you should change the prompt instead.
|
|
1013
|
+
spawn points), so re-read the file afterwards if you were editing it. It also drops a
|
|
1014
|
+
\`forged-heightfield.json\` beside it, which later placements use to sit objects on the terrain.
|
|
1015
|
+
4. **Resume rather than re-run.** The command prints a job id, \`world.json\` only ever changes on
|
|
1016
|
+
the final step, and every failure says whether it did and whether
|
|
1017
|
+
\`bitmagic forge --resume <jobId>\` is worth it — which is twenty minutes you do not spend again.
|
|
1141
1018
|
|
|
1142
1019
|
Afterwards actually walk the level in the dev view — one that loads is not necessarily one you can
|
|
1143
1020
|
move through. (You should already have \`bitmagic dev\` running; a forge takes twenty minutes, and
|
|
@@ -1593,9 +1470,12 @@ Cover art and the reference image are the two generations that are **not** \`gen
|
|
|
1593
1470
|
| \`bitmagic cover\` | the game's cover art | \`hud.startScreen.imageUrl\`, \`.bitmagic/cover.webp\`, the publish thumbnail |
|
|
1594
1471
|
| \`bitmagic reference make\` | a concept image of the world | \`.bitmagic/reference/\` only — nothing in \`world.json\` |
|
|
1595
1472
|
|
|
1596
|
-
\`cover\` writes its own prompt from \`GAME-DESIGN.md\` rather than taking one, and it
|
|
1597
|
-
|
|
1598
|
-
|
|
1473
|
+
\`cover\` writes its own prompt from \`GAME-DESIGN.md\` rather than taking one, and re-running it on
|
|
1474
|
+
an unchanged design generates nothing — it just reports the cover you already have. Rewrite the
|
|
1475
|
+
design and run it again, or pass \`--force\`, when the game has moved on from its artwork. It
|
|
1476
|
+
writes \`world.json\`, so it invalidates a passing verify: run it before \`bitmagic verify\`, never
|
|
1477
|
+
between verifying and publishing. See AGENTS.md for why it is worth running before you start
|
|
1478
|
+
implementing rather than after.
|
|
1599
1479
|
|
|
1600
1480
|
${GENERATE_SKILL_REFERENCE_SECTION}## Before generating
|
|
1601
1481
|
|
|
@@ -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":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,gCAAgC,EAChC,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,yBAAyB,CAAC;AAKjC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;IAkBnC,CAAC;AAEL;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,2BAA2B,EAAE,SAAS;IACtC,2BAA2B,EAAE,SAAS;IACtC,kBAAkB,EAAE,QAAQ;IAC5B,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,kCAAkC,EAAE,QAAQ;IAC5C,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,UAAU;IACjB,4FAA4F;IAC5F,6FAA6F;IAC7F,4CAA4C;CACZ,CAAC;AAEnC,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,aAAa,EAAE,UAAU;IACzB,cAAc,EAAE,UAAU;IAC1B,8FAA8F;IAC9F,cAAc,EAAE,QAAQ;IACxB,4FAA4F;IAC5F,mFAAmF;IACnF,eAAe,EAAE,SAAS;IAC1B,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,QAAQ;IACd,wBAAwB,EAAE,QAAQ;CACnC,CAAC;AAEF,qEAAqE;AACrE,SAAS,aAAa,CAAC,IAA+B;IACpD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,SAAS,MAAM,CAAC,IAA+B;IAC7C,OAAO,kBAAkB,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAElC;;;GAGG;AACH,MAAM,kBAAkB,GAAG,yBAAyB,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;AAE7E;;;;GAIG;AACH,MAAM,YAAY,GAAG,GAAG,SAAS,SAAS,CAAC;AAE3C;;;;;;;;;GASG;AACH,MAAM,UAAU,GAAG;IACjB,uBAAuB;IACvB,eAAe,YAAY,IAAI;IAC/B,6BAA6B,SAAS,2CAA2C;IACjF,yBAAyB,SAAS,uCAAuC;IACzE,2BAA2B,SAAS,wCAAwC;CAC7E,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,2FAA2F;IAC3F,4FAA4F;IAC5F,4FAA4F;IAC5F,KAAK,EAAE,UAAU;IACjB,cAAc,EAAE,YAAY;IAC5B,WAAW,EAAE,GAAG,SAAS,MAAM;IAC/B,2FAA2F;IAC3F,6FAA6F;IAC7F,+FAA+F;IAC/F,4FAA4F;IAC5F,6FAA6F;IAC7F,6FAA6F;IAC7F,eAAe,EAAE,GAAG,kBAAkB,UAAU;IAChD,qBAAqB,EAAE,GAAG,kBAAkB,gBAAgB;IAC5D,QAAQ,EAAE,GAAG,SAAS,GAAG;IACzB,2BAA2B,EAAE,MAAM,CAAC,2BAA2B,CAAC;IAChE,2BAA2B,EAAE,MAAM,CAAC,2BAA2B,CAAC;IAChE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;IAC1B,kCAAkC,EAAE,MAAM,CAAC,kCAAkC,CAAC;IAC9E,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;CACzB,CAAC;AAEF,sFAAsF;AACtF,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,UAAU,CAAC;QAChB,IAAI;QACJ,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,cAAc;YACrB,GAAG,EAAE,MAAM;SACZ;QACD,YAAY,EAAE,YAAY;QAC1B,eAAe,EAAE,gBAAgB;QACjC,2FAA2F;QAC3F,8FAA8F;QAC9F,6FAA6F;QAC7F,qFAAqF;QACrF,EAAE;QACF,8EAA8E;QAC9E,2FAA2F;QAC3F,yFAAyF;QACzF,IAAI,EAAE,EAAE,wBAAwB,EAAE,CAAC,SAAS,CAAC,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,UAAU,CAAC;QAChB,eAAe,EAAE;YACf,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;YACtB,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,aAAa,EAAE;YACtB,gBAAgB,EAAE,SAAS;YAC3B,MAAM,EAAE,IAAI;YACZ,wBAAwB,EAAE,IAAI;YAC9B,0BAA0B,EAAE,KAAK;YACjC,oBAAoB,EAAE,IAAI;YAC1B,eAAe,EAAE,IAAI;YACrB,eAAe,EAAE,OAAO;YACxB,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,IAAI;YACrB,4BAA4B,EAAE,IAAI;YAClC,gCAAgC,EAAE,IAAI;YACtC,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,IAAI;YACvB,SAAS,EAAE,IAAI;YACf,wFAAwF;YACxF,yFAAyF;YACzF,wFAAwF;YACxF,0FAA0F;YAC1F,sFAAsF;YACtF,yFAAyF;YACzF,gFAAgF;YAChF,KAAK,EAAE,CAAC,eAAe,CAAC;YACxB,SAAS,EAAE,CAAC,cAAc,EAAE,qBAAqB,EAAE,wCAAwC,CAAC;SAC7F;QACD,OAAO,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC;QACpC,uFAAuF;QACvF,uFAAuF;QACvF,oFAAoF;QACpF,wFAAwF;QACxF,wDAAwD;QACxD,OAAO,EAAE;YACP,cAAc;YACd,MAAM;YACN,qBAAqB;YACrB,0BAA0B;YAC1B,kBAAkB;YAClB,uBAAuB;YACvB,oBAAoB;YACpB,2FAA2F;YAC3F,6FAA6F;YAC7F,2FAA2F;YAC3F,2FAA2F;YAC3F,gEAAgE;YAChE,wBAAwB;SACzB;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,gBAAgB,GACpB,iGAAiG;IACjG,+FAA+F;IAC/F,+FAA+F;IAC/F,gGAAgG;IAChG,gGAAgG;IAChG,gGAAgG;IAChG,gGAAgG;IAChG,uEAAuE,CAAC;AAE1E,MAAM,UAAU,eAAe;IAC7B,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,YAAY,EAAE,CAAC;IACpD,6FAA6F;IAC7F,yFAAyF;IACzF,MAAM,gBAAgB,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,iBAAiB,CAAC;IACrE,0FAA0F;IAC1F,0FAA0F;IAC1F,wFAAwF;IACxF,2FAA2F;IAC3F,mDAAmD;IACnD,OAAO;;;;;;gBAMO,eAAe,uCAAuC,gBAAgB;;;;;;;;;;;;;;;;;;;;;EAqBpF,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;;;iCAG5B,gBAAgB;;;CAGhD,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB;IACzB,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,UAAU,GAAG,OAAO,MAAM,GAAG,CAAC;SACrD,IAAI,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;EAWP,kBAAkB,EAAE;;;;;;;CAOrB,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE5E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CACvC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,CAClF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,oBAAoB;IAC3B,MAAM,OAAO,GAAG,sBAAsB,EAAE;SACrC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;SAC1E,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO;;;;;;;;;;;;;;;;;;;EAmBP,OAAO;;;;;;;;;;;;;;;;;;;;;;CAsBR,CAAC;AACF,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,wBAAwB;IAC/B,OAAO;;;;;;;;;;;;;;;;;;;;;;CAsBR,CAAC;AACF,CAAC;AAED,iGAAiG;AACjG,MAAM,6BAA6B,GAAG;;;kDAGY,CAAC;AAEnD;;;;;;;;GAQG;AACH,MAAM,+BAA+B,GAAG;;;;;2EAKmC,CAAC;AAE5E,oFAAoF;AACpF,MAAM,0BAA0B,GAAG;;;CAGlC,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,mBAAmB,CAAC,IAA0B;IACrD,MAAM,GAAG,GAAG,IAAI,KAAK,KAAK,CAAC;IAC3B,OAAO;;;;;;;;;;;;;EAaP,GAAG,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6C9D,kBAAkB,EAAE;;;;;iGAK2E,GAAG,CAAC,CAAC,CAAC,gEAAgE,CAAC,CAAC,CAAC,EAAE;;;;EAI1K,GAAG,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,+BAA+B;;;EAGrE,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE;iCACN,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wCAAwC;;;kBAGlE,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC;;;;;;CAMxD,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iCAAiC;IAC/C,OAAO,mBAAmB,CAAC,YAAY,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;AA6BD,MAAM,UAAU,kBAAkB,CAAC,QAAyB;IAC1D,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAS,sBAAsB,CAAC,WAAwC;IACtE,MAAM,IAAI,GACR,WAAW,KAAK,SAAS;QACvB,CAAC,CAAC;;;YAGI;QACN,CAAC,CAAC,4BAA4B,WAAW,+FAA+F,CAAC;IAE7I,OAAO;;;;;;EAMP,IAAI;;;;;;;;;wCASkC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAwC;IACrE,iGAAiG;IACjG,iGAAiG;IACjG,MAAM,UAAU,GAAG,eAAe,EAAE,CAAC,UAAU,CAAC;IAChD,OAAO;;;;;;;;;;;sCAW6B,UAAU;;gDAEA,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiIxD,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8N3B,sBAAsB,CAAC,WAAW,CAAC;CACpC,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;EAoBP,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqH9B,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8C/B,CAAC;AACF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4JR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmFP,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDjC,CAAC;AACF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DR,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkER,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,MAAM,KAAK,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;IAC3B,OAAO;;EAEP,KAAK;QACH,CAAC,CAAC,8GAA8G;QAChH,CAAC,CAAC,0KAA0K;;;;EAI9K,KAAK,IAAI,iEAAiE;;;;;;;;;;EAU1E,0BAA0B;;;;;;;;;;;;CAY3B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCR,CAAC;AACF,CAAC"}
|
package/dist/scaffold/project.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as path from 'path';
|
|
|
3
3
|
import { CliError } from '../errors.js';
|
|
4
4
|
import { aliasSourceDir } from './aliases.js';
|
|
5
5
|
import { renderPackageJson, renderTsconfig, renderIndexHtml, renderViteConfig, renderVitePublishConfig, renderVitePublishStandaloneConfig, renderGitignore, renderBitmagicJson, renderAgentsMd, renderGameDesignMd, renderClaudeMd, renderJudgeSkill, renderThemingSkill, renderGenerateSkill, renderPlanningSkill, renderEngineApiSkill, renderUsageSkill, } from './project-files.js';
|
|
6
|
-
import { renderSkillsReadme, renderTrailerSkill } from './skill-files.js';
|
|
6
|
+
import { renderCreatorCollaborationSkill, renderPublishingSkill, renderSkillsReadme, renderTrailerSkill, } from './skill-files.js';
|
|
7
7
|
import { hashAgentsMd } from './agents-md.js';
|
|
8
8
|
import { CLAUDE_SETTINGS_FILE, renderClaudeSettings } from './claude-settings.js';
|
|
9
9
|
/**
|
|
@@ -165,6 +165,8 @@ export const PLATFORM_GENERATED_FILES = [
|
|
|
165
165
|
['.claude/skills/judging-quality/SKILL.md', renderJudgeSkill],
|
|
166
166
|
['.claude/skills/theming-the-hud/SKILL.md', renderThemingSkill],
|
|
167
167
|
['.claude/skills/making-a-trailer/SKILL.md', renderTrailerSkill],
|
|
168
|
+
['.claude/skills/publishing-a-game/SKILL.md', renderPublishingSkill],
|
|
169
|
+
['.claude/skills/working-with-the-creator/SKILL.md', renderCreatorCollaborationSkill],
|
|
168
170
|
];
|
|
169
171
|
/**
|
|
170
172
|
* 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":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,iCAAiC,EACjC,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GAEjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/scaffold/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* markdown, so backticks are escaped exactly as project-files.ts escapes them.
|
|
10
10
|
*/
|
|
11
11
|
/** The `## Reference image` section of the scaffolded AGENTS.md, placed before the cover section. */
|
|
12
|
-
export declare const AGENTS_MD_REFERENCE_SECTION = "## Reference image \u2014 offer it when the idea has a strong setting\n\nWhen the idea names a **place or a look** \u2014 a tropical island, a neon city \u2014 offer to make a\nconcept image of the world before generating anything else:\n\n```\nbitmagic reference make # a candidate lands in .bitmagic/reference/\nbitmagic reference make --from <id> --prompt \"same island, but at dusk\"\nbitmagic reference accept <id> # the human's call, never yours\n```\n\nShow the human each image file and let THEM iterate and accept. Once accepted, it is the default\nstyle reference for `generate skybox|background|block-type|image`, `bitmagic cover` and\n`bitmagic forge` (whose designer literally sees the picture) \u2014 one look across the whole game;\n`--no-reference` exempts a call, and a picture the human hands you for ONE request rides that\ncall as `--reference-image <file>` instead. Accepting prints a durable URL: paste it into\n`GAME-DESIGN.md`'s world/look section, since `.bitmagic/` is not committed and\n`bitmagic reference accept <url>` is how a fresh clone gets it back. Details are in
|
|
12
|
+
export declare const AGENTS_MD_REFERENCE_SECTION = "## Reference image \u2014 offer it when the idea has a strong setting\n\nWhen the idea names a **place or a look** \u2014 a tropical island, a neon city \u2014 offer to make a\nconcept image of the world before generating anything else:\n\n```\nbitmagic reference make # a candidate lands in .bitmagic/reference/\nbitmagic reference make --from <id> --prompt \"same island, but at dusk\"\nbitmagic reference accept <id> # the human's call, never yours\n```\n\nShow the human each image file and let THEM iterate and accept. Once accepted, it is the default\nstyle reference for `generate skybox|background|block-type|image`, `bitmagic cover` and\n`bitmagic forge` (whose designer literally sees the picture) \u2014 one look across the whole game;\n`--no-reference` exempts a call, and a picture the human hands you for ONE request rides that\ncall as `--reference-image <file>` instead. Accepting prints a durable URL: paste it into\n`GAME-DESIGN.md`'s world/look section, since `.bitmagic/` is not committed and\n`bitmagic reference accept <url>` is how a fresh clone gets it back. Details are in\n`.claude/skills/generating-assets/SKILL.md`; skip the offer when the idea has no visual identity\nyet.\n\n";
|
|
13
13
|
/** The planning skill's step-1 paragraph on offering a reference image. */
|
|
14
14
|
export declare const PLANNING_SKILL_REFERENCE_STEP1 = "If the idea describes a **place** \u2014 an island, a city, a specific look \u2014 offer a reference image\nbefore anything else is generated: `bitmagic reference make`, show the human the file it prints,\niterate with `--from <id>`, and run `accept` only when they choose one. Every skybox, block,\ncover and forge after that inherits the accepted image, so it is worth settling first \u2014 and worth\nskipping when the idea has no visual identity yet.\n\n";
|
|
15
15
|
/** The planning skill's step-4 list entry (rendered between the design-doc and cover steps). */
|
|
@@ -26,8 +26,9 @@ style reference for \`generate skybox|background|block-type|image\`, \`bitmagic
|
|
|
26
26
|
\`--no-reference\` exempts a call, and a picture the human hands you for ONE request rides that
|
|
27
27
|
call as \`--reference-image <file>\` instead. Accepting prints a durable URL: paste it into
|
|
28
28
|
\`GAME-DESIGN.md\`'s world/look section, since \`.bitmagic/\` is not committed and
|
|
29
|
-
\`bitmagic reference accept <url>\` is how a fresh clone gets it back. Details are in
|
|
30
|
-
|
|
29
|
+
\`bitmagic reference accept <url>\` is how a fresh clone gets it back. Details are in
|
|
30
|
+
\`.claude/skills/generating-assets/SKILL.md\`; skip the offer when the idea has no visual identity
|
|
31
|
+
yet.
|
|
31
32
|
|
|
32
33
|
`;
|
|
33
34
|
/** The planning skill's step-1 paragraph on offering a reference image. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-guidance.js","sourceRoot":"","sources":["../../src/scaffold/reference-guidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,qGAAqG;AACrG,MAAM,CAAC,MAAM,2BAA2B,GAAG
|
|
1
|
+
{"version":3,"file":"reference-guidance.js","sourceRoot":"","sources":["../../src/scaffold/reference-guidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,qGAAqG;AACrG,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;;CAqB1C,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,8BAA8B,GAAG;;;;;;CAM7C,CAAC;AAEF,gGAAgG;AAChG,MAAM,CAAC,MAAM,8BAA8B,GAAG;;CAE7C,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gCAAgC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8B/C,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,0BAA0B,GACrC,6HAA6H,CAAC"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Shipped skills that
|
|
2
|
+
* Shipped skills that live outside `project-files.ts` — the trailer skill because that file was at
|
|
3
|
+
* the 2000-line ESLint cap when it was written, and `publishing-a-game` / `working-with-the-creator`
|
|
4
|
+
* because they were carved out of AGENTS.md rather than added to it (see the length budget in
|
|
5
|
+
* `__tests__/project-files.test.ts`: a fact whose failure is loud belongs in a skill, and both of
|
|
6
|
+
* those were 116 lines of loud facts riding in every request's context).
|
|
3
7
|
*
|
|
4
8
|
* Same contract as the renderers there: each is a pure function returning the file's contents,
|
|
5
9
|
* registered in `PLATFORM_GENERATED_FILES` (project.ts) so `bitmagic init` writes it and
|
|
@@ -20,3 +24,26 @@ export declare function renderSkillsReadme(): string;
|
|
|
20
24
|
* the creator actually experiences: a prompt in, a shots.json edit out, one command to see it.
|
|
21
25
|
*/
|
|
22
26
|
export declare function renderTrailerSkill(): string;
|
|
27
|
+
/**
|
|
28
|
+
* `.claude/skills/publishing-a-game/SKILL.md` — the whole ship-it path, and every way it refuses.
|
|
29
|
+
*
|
|
30
|
+
* This is the largest block that came out of AGENTS.md, and it is the clearest case for the split:
|
|
31
|
+
* an agent about to publish KNOWS it is publishing, and an agent staring at a non-zero exit code
|
|
32
|
+
* knows it needs the table. Neither failure is silent, so neither has to ride in every request's
|
|
33
|
+
* context. What stayed behind in AGENTS.md is only the part an agent cannot discover by trying:
|
|
34
|
+
* the verify-then-don't-edit order, that a bare publish leaves the game private, that the QR image
|
|
35
|
+
* exists, and that the project is uploaded to a public URL (a fact needed BEFORE a credential is
|
|
36
|
+
* written, not when publish is run).
|
|
37
|
+
*/
|
|
38
|
+
export declare function renderPublishingSkill(): string;
|
|
39
|
+
/**
|
|
40
|
+
* `.claude/skills/working-with-the-creator/SKILL.md` — the dev view as a two-way channel.
|
|
41
|
+
*
|
|
42
|
+
* The creator is not only watching: they drag gizmos into `world.json`, they paste frames from
|
|
43
|
+
* their running game, and one editor action (`hq.requested`) is a job handed to the agent. Reading
|
|
44
|
+
* `.bitmagic/edit/events.jsonl` is a deliberate act with a stated trigger, and the event shapes are
|
|
45
|
+
* reference material — so the format table lives here, while AGENTS.md keeps only the three facts
|
|
46
|
+
* an agent must hold without being asked: re-read `world.json`, a pasted image is probably live,
|
|
47
|
+
* and that file may be asking you for something.
|
|
48
|
+
*/
|
|
49
|
+
export declare function renderCreatorCollaborationSkill(): string;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Shipped skills that
|
|
2
|
+
* Shipped skills that live outside `project-files.ts` — the trailer skill because that file was at
|
|
3
|
+
* the 2000-line ESLint cap when it was written, and `publishing-a-game` / `working-with-the-creator`
|
|
4
|
+
* because they were carved out of AGENTS.md rather than added to it (see the length budget in
|
|
5
|
+
* `__tests__/project-files.test.ts`: a fact whose failure is loud belongs in a skill, and both of
|
|
6
|
+
* those were 116 lines of loud facts riding in every request's context).
|
|
3
7
|
*
|
|
4
8
|
* Same contract as the renderers there: each is a pure function returning the file's contents,
|
|
5
9
|
* registered in `PLATFORM_GENERATED_FILES` (project.ts) so `bitmagic init` writes it and
|
|
@@ -17,7 +21,8 @@ project root for the guidance an agent should read before editing this game.
|
|
|
17
21
|
## Which of these are yours
|
|
18
22
|
|
|
19
23
|
\`planning-a-game/\`, \`finding-engine-apis/\`, \`generating-assets/\`, \`checking-usage/\`,
|
|
20
|
-
\`judging-quality/\`, \`theming-the-hud/\`, \`making-a-trailer
|
|
24
|
+
\`judging-quality/\`, \`theming-the-hud/\`, \`making-a-trailer/\`, \`publishing-a-game/\`,
|
|
25
|
+
\`working-with-the-creator/\` — and
|
|
21
26
|
this README — are shipped by the Bitmagic CLI and **re-rendered by \`bitmagic upgrade\`**. They
|
|
22
27
|
describe what the CLI and the engine can do, so they have to stay current with both; edits to them
|
|
23
28
|
are lost on the next upgrade.
|
|
@@ -31,6 +36,8 @@ are lost on the next upgrade.
|
|
|
31
36
|
| \`judging-quality/\` | a milestone is done and the game deserves an independent quality verdict — \`bitmagic judge\` |
|
|
32
37
|
| \`theming-the-hud/\` | any ask about the game's LOOK — colors, fonts, rounder/sharper, outlines, glow, glossy, mobile-button styling |
|
|
33
38
|
| \`making-a-trailer/\` | asked for a trailer, a highlight reel, a gameplay video, or to record gameplay — \`bitmagic trailer\` from recording to a CDN link, and how to tune the cut from prompts |
|
|
39
|
+
| \`publishing-a-game/\` | shipping the game to bitmagic.ai — the verify gate, public vs private, thumbnails, category tags, and every way \`bitmagic publish\` can refuse |
|
|
40
|
+
| \`working-with-the-creator/\` | they are editing alongside you — gizmo drags into \`world.json\`, a pasted frame from their game, \`.bitmagic/edit/events.jsonl\`, their phone |
|
|
34
41
|
|
|
35
42
|
Every other directory here is yours. \`upgrade\` never opens a skill it does not ship, and never
|
|
36
43
|
deletes anything under \`.claude/\`. Put project-specific guidance in a skill of your own, or in
|
|
@@ -200,4 +207,207 @@ Then: **quota check** the labels (rule of three, one standing start), render, ex
|
|
|
200
207
|
from the changed region, compare with the previous \`-rN\`, deliver the URL.
|
|
201
208
|
`;
|
|
202
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* `.claude/skills/publishing-a-game/SKILL.md` — the whole ship-it path, and every way it refuses.
|
|
212
|
+
*
|
|
213
|
+
* This is the largest block that came out of AGENTS.md, and it is the clearest case for the split:
|
|
214
|
+
* an agent about to publish KNOWS it is publishing, and an agent staring at a non-zero exit code
|
|
215
|
+
* knows it needs the table. Neither failure is silent, so neither has to ride in every request's
|
|
216
|
+
* context. What stayed behind in AGENTS.md is only the part an agent cannot discover by trying:
|
|
217
|
+
* the verify-then-don't-edit order, that a bare publish leaves the game private, that the QR image
|
|
218
|
+
* exists, and that the project is uploaded to a public URL (a fact needed BEFORE a credential is
|
|
219
|
+
* written, not when publish is run).
|
|
220
|
+
*/
|
|
221
|
+
export function renderPublishingSkill() {
|
|
222
|
+
return `---
|
|
223
|
+
name: publishing-a-game
|
|
224
|
+
description: Use when publishing this Bitmagic game to bitmagic.ai, making it public or private, building the bundle, choosing category tags or a thumbnail, sharing the game's link or QR code, or when \`bitmagic publish\` refuses or exits non-zero (verify stale, not logged in, exit 7 and the rest).
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
# Publishing this game
|
|
228
|
+
|
|
229
|
+
\`\`\`
|
|
230
|
+
bitmagic build # bundle into .bitmagic/build/index.html + .bitmagic/build/manifest.json
|
|
231
|
+
bitmagic publish # verify-gate, build if needed, and ship to bitmagic.ai
|
|
232
|
+
\`\`\`
|
|
233
|
+
|
|
234
|
+
Publish enforces this order and refuses otherwise:
|
|
235
|
+
|
|
236
|
+
1. **\`bitmagic verify\`, passing.** It writes \`.bitmagic/verify/result.json\`,
|
|
237
|
+
\`.bitmagic/verify/screenshot.png\` and \`.bitmagic/verify/console.log\` — or the
|
|
238
|
+
\`.mobile\`-suffixed names when the run was a phone one.
|
|
239
|
+
2. **No edit to a tracked file between verifying and publishing.** See the fingerprint rules below.
|
|
240
|
+
3. **\`bitmagic publish\`.** It rebuilds automatically if the project changed since the last build,
|
|
241
|
+
so a manual \`bitmagic build\` first is optional.
|
|
242
|
+
|
|
243
|
+
## Public is a flag, not a default
|
|
244
|
+
|
|
245
|
+
Every publish uploads and registers the game, but \`visibility\` defaults to \`private\` — reachable
|
|
246
|
+
by URL, not listed on bitmagic.ai. Pass \`--visibility public\` explicitly, **on that call**, to
|
|
247
|
+
list it. Omit it on a later publish and the game goes back to private: its \`/play/\` page stops
|
|
248
|
+
serving too, so a public game re-published bare disappears from bitmagic.ai entirely until the next
|
|
249
|
+
\`--visibility public\`.
|
|
250
|
+
|
|
251
|
+
## Show the creator the QR code
|
|
252
|
+
|
|
253
|
+
Publish turns the game's URL into a scannable image. Your output is a pipe, so it cannot be drawn
|
|
254
|
+
in the terminal: publish writes \`.bitmagic/publish-qr.png\` and names it (\`qrPath\` under
|
|
255
|
+
\`--json\`). Surface that image like any artifact you made — scanning it opens the game on a phone,
|
|
256
|
+
and a bare URL leaves your creator retyping a game id into a browser.
|
|
257
|
+
|
|
258
|
+
## The thumbnail
|
|
259
|
+
|
|
260
|
+
\`.bitmagic/cover.webp\` when \`bitmagic cover\` has produced one, and the verify screenshot
|
|
261
|
+
otherwise. The output names which one it used. \`bitmagic cover\` writes \`world.json\`, so it
|
|
262
|
+
invalidates a passing verify — run it BEFORE \`bitmagic verify\`, never between verifying and
|
|
263
|
+
publishing.
|
|
264
|
+
|
|
265
|
+
## What invalidates a verify, and what does not
|
|
266
|
+
|
|
267
|
+
Staleness is a **content fingerprint of every tracked file**, not a clock. One edit after verifying
|
|
268
|
+
invalidates it immediately; an untouched project stays fresh no matter how long it has been. There
|
|
269
|
+
is no way to check freshness except running \`bitmagic verify\` again.
|
|
270
|
+
|
|
271
|
+
| Safe between verify and publish | Invalidates the verify |
|
|
272
|
+
|---|---|
|
|
273
|
+
| Git operations — \`.git/\` is excluded, so commit, branch or stash freely | Any edit to a tracked file under \`src/\`, \`index.html\`, \`game.json\`, \`world.json\`, … |
|
|
274
|
+
| \`node_modules/\`, \`dist/\`, \`.bitmagic/\`, \`.vite-cache/\` | \`bitmagic cover\` (it writes \`world.json\`) |
|
|
275
|
+
| \`GAME-DESIGN.md\` and \`mechanics-plan.md\` — no build step reads them, so refining the design or the backlog is free | declaring \`categories\` or \`primaryPlatform\` (tracked-file edits — do them first) |
|
|
276
|
+
|
|
277
|
+
## Category tags
|
|
278
|
+
|
|
279
|
+
bitmagic.ai files the game under content categories ("Racing", "Puzzle", …), and publish
|
|
280
|
+
auto-classifies an untagged game from its name and description. To choose them yourself, declare
|
|
281
|
+
\`"categories": ["Racing", "Arcade"]\` in \`worldProfileData\` — a declared set wins on every
|
|
282
|
+
publish, and an explicit \`[]\` means "no tags" and suppresses the auto-classify. It is a
|
|
283
|
+
tracked-file edit: declare them BEFORE \`bitmagic verify\`.
|
|
284
|
+
|
|
285
|
+
## One-shot overrides
|
|
286
|
+
|
|
287
|
+
\`--name\` / \`--description\` apply to that one publish call only. They are never written back to
|
|
288
|
+
\`src/work/game.json\` — doing so by hand would change the fingerprint and invalidate the verify you
|
|
289
|
+
just checked.
|
|
290
|
+
|
|
291
|
+
\`--force\` overrides a **stale or failed** verify verdict, never a **missing** one. A project with
|
|
292
|
+
no cover art has only the verify screenshot to publish a thumbnail from, so \`bitmagic verify\` must
|
|
293
|
+
have produced one at least once before \`--force\` has anything to work with.
|
|
294
|
+
|
|
295
|
+
## The render smoke test
|
|
296
|
+
|
|
297
|
+
After a successful publish the CLI loads the published game the way the portal does — in an iframe
|
|
298
|
+
that starts at a zero-size viewport — and fails with **exit 7** if it does not render. This catches
|
|
299
|
+
failures that leave no other trace: a wrong Content-Type that makes the browser download the page, a
|
|
300
|
+
bundle that cannot find its own world.json, a canvas nothing ever draws into. Artifacts land in
|
|
301
|
+
\`.bitmagic/smoke/\`.
|
|
302
|
+
|
|
303
|
+
\`--skip-smoke\` skips it. The publish still happens; it is simply not confirmed to render, and the
|
|
304
|
+
output says so.
|
|
305
|
+
|
|
306
|
+
## When it exits non-zero
|
|
307
|
+
|
|
308
|
+
Branch on the exit code rather than parsing the message.
|
|
309
|
+
|
|
310
|
+
| Code | Meaning | Fix |
|
|
311
|
+
|---|---|---|
|
|
312
|
+
| 1 | Build failed, or what was uploaded was not an engine build | Run \`bitmagic check\` to see the error, fix it. If the message names a missing \`vite.publish*.config.js\`, this project predates it — run \`bitmagic upgrade\`. Do NOT retry an unchanged bundle; the refusal is deterministic |
|
|
313
|
+
| 2 | Not logged in | \`bitmagic login\` |
|
|
314
|
+
| 3 | Verify missing, stale, or failed | \`bitmagic verify\` (then publish again, or add \`--force\` for a stale/failed record) |
|
|
315
|
+
| 5 | Not this game's owner, or the account/game is banned | Not self-serve — stop and report it |
|
|
316
|
+
| 6 | Upload or finalize failed | Usually transient (network/storage). Retry once; if it fails identically, stop and report it — this code also covers permanent failures such as an unknown game or a rejected request |
|
|
317
|
+
| 7 | Published, but the game did not render | The game IS live. Do NOT retry the publish — fix the game and publish again. Artifacts in \`.bitmagic/smoke/\` |
|
|
318
|
+
|
|
319
|
+
## Every publish uploads your source
|
|
320
|
+
|
|
321
|
+
A **source archive** of this project goes to a publicly readable (though unguessable) URL, which
|
|
322
|
+
Bitmagic checks against the bundle and against an unmodified \`engine/\`; findings print as
|
|
323
|
+
\`warning:\` lines and never block a publish. Credential-shaped files (\`.env*\`, \`*.pem\`,
|
|
324
|
+
\`*.key\`, \`.npmrc\`, service-account JSON) are excluded and named in the output — but that list
|
|
325
|
+
cannot be exhaustive, so **never keep a secret in this directory**.
|
|
326
|
+
|
|
327
|
+
## An old engine never blocks a publish
|
|
328
|
+
|
|
329
|
+
When a newer engine exists, \`bitmagic dev\` and \`bitmagic publish\` say so and suggest
|
|
330
|
+
\`bitmagic upgrade\`. Upgrade while you are developing, when rebuilding is cheap, rather than being
|
|
331
|
+
blocked at the moment you ship.
|
|
332
|
+
`;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* `.claude/skills/working-with-the-creator/SKILL.md` — the dev view as a two-way channel.
|
|
336
|
+
*
|
|
337
|
+
* The creator is not only watching: they drag gizmos into `world.json`, they paste frames from
|
|
338
|
+
* their running game, and one editor action (`hq.requested`) is a job handed to the agent. Reading
|
|
339
|
+
* `.bitmagic/edit/events.jsonl` is a deliberate act with a stated trigger, and the event shapes are
|
|
340
|
+
* reference material — so the format table lives here, while AGENTS.md keeps only the three facts
|
|
341
|
+
* an agent must hold without being asked: re-read `world.json`, a pasted image is probably live,
|
|
342
|
+
* and that file may be asking you for something.
|
|
343
|
+
*/
|
|
344
|
+
export function renderCreatorCollaborationSkill() {
|
|
345
|
+
return `---
|
|
346
|
+
name: working-with-the-creator
|
|
347
|
+
description: Use when the creator is watching or editing the game alongside you — they moved or added objects in the Editor tab, pasted a screenshot of the running game, asked to try it on their phone, or pressed "Generate high-quality version"; and whenever you need to read \`.bitmagic/edit/events.jsonl\` or \`.bitmagic/jobs/\` to find out what they did.
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
# Working alongside the creator
|
|
351
|
+
|
|
352
|
+
\`bitmagic dev\` serves one page with two tabs — **Game**, where the owner plays, and **Editor**,
|
|
353
|
+
where they click an object and drag a gizmo. A drag writes the new transform straight into
|
|
354
|
+
\`src/work/world.json\`, one entry per object touched. So \`world.json\` is shared ground, not yours
|
|
355
|
+
alone.
|
|
356
|
+
|
|
357
|
+
- **Re-read \`src/work/world.json\` before editing it.** The copy you read earlier in the session
|
|
358
|
+
may be stale, and a whole-file rewrite from that copy silently reverts what they just placed.
|
|
359
|
+
- **Prefer changing the entries you mean to change** over regenerating \`environmentObjects\`
|
|
360
|
+
wholesale, so their placements survive your edit.
|
|
361
|
+
- **An image pasted into the conversation is probably a frame from their running game.** The dev
|
|
362
|
+
view has a Screenshot button that copies the current frame to the clipboard, so "look at this"
|
|
363
|
+
usually means the game as it is right now — not a reference or a mock-up.
|
|
364
|
+
|
|
365
|
+
## They can watch your generations — but not your failures
|
|
366
|
+
|
|
367
|
+
Every \`bitmagic generate\` and \`bitmagic forge\` records itself in \`.bitmagic/jobs/\` while it
|
|
368
|
+
runs, and the dev view lists those with your progress lines and the prompt you used. One that
|
|
369
|
+
FAILS simply drops off that list, with the error reaching your terminal and nowhere else — **a
|
|
370
|
+
failure you do not mention is one they never learn about.**
|
|
371
|
+
|
|
372
|
+
Those files are yours to read too. Check them before starting a second generation that needs a
|
|
373
|
+
browser: a forge and a prop each want one and will fight over it.
|
|
374
|
+
|
|
375
|
+
## Their phone
|
|
376
|
+
|
|
377
|
+
\`bitmagic dev --mobile\` serves the game to their own network and writes a QR code to
|
|
378
|
+
\`.bitmagic/mobile-qr.png\` (the URL is \`mobileUrl\` in \`.bitmagic/dev.json\`). Hand them the
|
|
379
|
+
image, and say their phone warns once about the certificate — tap Show Details, then Visit Website.
|
|
380
|
+
It is a restart, not a flag you can add to a running server.
|
|
381
|
+
|
|
382
|
+
## \`.bitmagic/edit/events.jsonl\`
|
|
383
|
+
|
|
384
|
+
Every editor action is appended there as one JSON object per line, and printed to \`bitmagic dev\`'s
|
|
385
|
+
own output. The file is append-only and never rewritten, so you can re-read it from where you left
|
|
386
|
+
off.
|
|
387
|
+
|
|
388
|
+
\`\`\`
|
|
389
|
+
{"at":"…","event":"object.moved","objectId":"inst_…","position":{"from":{…},"to":{…}}}
|
|
390
|
+
{"at":"…","event":"object.added","objectId":"inst_…","type":"tree_oak"}
|
|
391
|
+
{"at":"…","event":"object.deleted","objectId":"inst_…"}
|
|
392
|
+
{"at":"…","event":"hq.requested","assetId":"asset_…","prompt":"…","command":"bitmagic generate prop …"}
|
|
393
|
+
\`\`\`
|
|
394
|
+
|
|
395
|
+
| Event | What it means | Expected of you |
|
|
396
|
+
|---|---|---|
|
|
397
|
+
| \`object.moved\` / \`object.added\` / \`object.deleted\` | History. \`world.json\` already says so; the line tells you WHO changed it and from what | Nothing |
|
|
398
|
+
| \`hq.started\` / \`hq.completed\` | The human pressed "Generate high-quality version" and the editor ran it: an asset's mesh was regenerated and every placed instance upgraded with it | Nothing — but read these rather than being surprised by an asset that changed on its own |
|
|
399
|
+
| \`hq.requested\` | The editor could NOT run that generation, normally because nobody is logged in | **Run the command it carries** |
|
|
400
|
+
|
|
401
|
+
\`hq.requested\` is the one line that asks something of you:
|
|
402
|
+
|
|
403
|
+
\`\`\`
|
|
404
|
+
bitmagic generate prop --asset <assetId> --prompt "<prompt>" --json
|
|
405
|
+
\`\`\`
|
|
406
|
+
|
|
407
|
+
That generates the mesh, voxelizes it to the asset's recorded \`fitBox\`, and upserts it under the
|
|
408
|
+
same asset id, so every placed instance upgrades at once. They asked for it, so run it — just never
|
|
409
|
+
twice for the same request. If it fails after the mesh was generated, the error and the JSON result
|
|
410
|
+
carry the mesh URL: retry with \`--glb-url <url>\` to skip the step that already succeeded.
|
|
411
|
+
`;
|
|
412
|
+
}
|
|
203
413
|
//# sourceMappingURL=skill-files.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-files.js","sourceRoot":"","sources":["../../src/scaffold/skill-files.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"skill-files.js","sourceRoot":"","sources":["../../src/scaffold/skill-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BR,CAAC;AACF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsJR,CAAC;AACF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8GR,CAAC;AACF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,+BAA+B;IAC7C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkER,CAAC;AACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitmagic/cli",
|
|
3
|
-
"version": "0.1.61
|
|
3
|
+
"version": "0.1.61",
|
|
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.16
|
|
29
|
-
"@bitmagic/asset-core": "0.2.16
|
|
30
|
-
"@bitmagic/world-forger": "0.1.21
|
|
28
|
+
"@bitmagic/animation-forger": "0.1.16",
|
|
29
|
+
"@bitmagic/asset-core": "0.2.16",
|
|
30
|
+
"@bitmagic/world-forger": "0.1.21"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@eslint/js": "^9.38.0",
|