@bitmagic/cli 0.1.61 → 0.1.62-dev.1

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 (85) hide show
  1. package/README.md +27 -3
  2. package/assets/unity-import/README.md +13 -0
  3. package/assets/unity-import/blender_build.py +462 -0
  4. package/assets/unity-import/build_parts.py +263 -0
  5. package/assets/unity-import/convert_assets.py +193 -0
  6. package/assets/unity-import/fbx_ascii.py +156 -0
  7. package/assets/unity-import/fbx_axis.py +174 -0
  8. package/assets/unity-import/fbx_bounds.py +202 -0
  9. package/assets/unity-import/import_config.py +86 -0
  10. package/assets/unity-import/level_patches.example.json +23 -0
  11. package/assets/unity-import/mesh_walls.py +78 -0
  12. package/assets/unity-import/render_topdown.py +33 -0
  13. package/assets/unity-import/unity-import.example.json +27 -0
  14. package/assets/unity-import/unity_assets.py +114 -0
  15. package/assets/unity-import/unity_colliders2d.py +127 -0
  16. package/assets/unity-import/unity_extract.py +774 -0
  17. package/assets/unity-import/unity_markers.py +249 -0
  18. package/assets/unity-import/unity_renderers.py +279 -0
  19. package/assets/unity-import/write_arena_data.py +198 -0
  20. package/dist/cli.d.ts +12 -0
  21. package/dist/commands/check.js +2 -2
  22. package/dist/commands/check.js.map +1 -1
  23. package/dist/commands/dev.js +4 -4
  24. package/dist/commands/dev.js.map +1 -1
  25. package/dist/commands/forge.js +4 -3
  26. package/dist/commands/forge.js.map +1 -1
  27. package/dist/commands/import.d.ts +4 -0
  28. package/dist/commands/import.js +5 -0
  29. package/dist/commands/import.js.map +1 -1
  30. package/dist/commands/init.d.ts +4 -0
  31. package/dist/commands/init.js +20 -0
  32. package/dist/commands/init.js.map +1 -1
  33. package/dist/commands/upgrade.d.ts +4 -0
  34. package/dist/commands/upgrade.js +31 -5
  35. package/dist/commands/upgrade.js.map +1 -1
  36. package/dist/commands/verify.js +5 -4
  37. package/dist/commands/verify.js.map +1 -1
  38. package/dist/editor/server.js +3 -3
  39. package/dist/editor/shell-page.js +16 -1
  40. package/dist/editor/shell-page.js.map +1 -1
  41. package/dist/editor/watch.d.ts +1 -1
  42. package/dist/editor/watch.js +2 -21
  43. package/dist/editor/watch.js.map +1 -1
  44. package/dist/forge/voxelize-session.d.ts +1 -1
  45. package/dist/forge/voxelize-session.js +4 -32
  46. package/dist/forge/voxelize-session.js.map +1 -1
  47. package/dist/project/context.d.ts +14 -1
  48. package/dist/project/context.js +17 -4
  49. package/dist/project/context.js.map +1 -1
  50. package/dist/project/package-manager.js +2 -2
  51. package/dist/project/package-manager.js.map +1 -1
  52. package/dist/project/spawn-bin.d.ts +69 -0
  53. package/dist/project/spawn-bin.js +96 -0
  54. package/dist/project/spawn-bin.js.map +1 -0
  55. package/dist/publish/bundle.js +3 -3
  56. package/dist/publish/bundle.js.map +1 -1
  57. package/dist/scaffold/agent-targets.d.ts +126 -0
  58. package/dist/scaffold/agent-targets.js +180 -0
  59. package/dist/scaffold/agent-targets.js.map +1 -0
  60. package/dist/scaffold/agents-md.d.ts +4 -1
  61. package/dist/scaffold/agents-md.js +6 -2
  62. package/dist/scaffold/agents-md.js.map +1 -1
  63. package/dist/scaffold/project-files.d.ts +40 -5
  64. package/dist/scaffold/project-files.js +67 -25
  65. package/dist/scaffold/project-files.js.map +1 -1
  66. package/dist/scaffold/project.d.ts +42 -15
  67. package/dist/scaffold/project.js +100 -38
  68. package/dist/scaffold/project.js.map +1 -1
  69. package/dist/scaffold/reference-guidance.d.ts +1 -1
  70. package/dist/scaffold/reference-guidance.js +2 -1
  71. package/dist/scaffold/reference-guidance.js.map +1 -1
  72. package/dist/scaffold/scaffold-run.js +2 -2
  73. package/dist/scaffold/scaffold-run.js.map +1 -1
  74. package/dist/scaffold/skill-files.d.ts +32 -9
  75. package/dist/scaffold/skill-files.js +71 -15
  76. package/dist/scaffold/skill-files.js.map +1 -1
  77. package/dist/scaffold/unity-skill-files.d.ts +30 -0
  78. package/dist/scaffold/unity-skill-files.js +474 -0
  79. package/dist/scaffold/unity-skill-files.js.map +1 -0
  80. package/dist/scaffold/upgrade-project.d.ts +31 -11
  81. package/dist/scaffold/upgrade-project.js +35 -23
  82. package/dist/scaffold/upgrade-project.js.map +1 -1
  83. package/dist/verify/iterate.js +2 -1
  84. package/dist/verify/iterate.js.map +1 -1
  85. package/package.json +4 -4
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Which agent tools a project is set up for, and where each one looks for its skills.
3
+ *
4
+ * The GDK is a bring-your-own-agent product, but for most of its life the scaffold wrote to
5
+ * `.claude/skills/` and nothing else — so a creator on Cursor, Codex or Kiro received a directory of
6
+ * skill files their agent never opened, and `bitmagic upgrade`, the only route by which an existing
7
+ * project learns about a new CLI capability, kept refreshing files nobody read.
8
+ *
9
+ * ── Why `.agents/skills/` is unconditional ───────────────────────────────────────────────────────
10
+ *
11
+ * Cursor, Codex, GitHub Copilot, Cline and OpenCode all load `.agents/skills/` by themselves, and
12
+ * all of them read the root `AGENTS.md` this scaffold already writes. So writing that one directory
13
+ * into every project supports five agents with no flag to pass and no environment to sniff — which
14
+ * is the whole point, because neither of the alternatives survives contact:
15
+ *
16
+ * - Detection cannot be built honestly. `../telemetry/command-context.ts` states the policy —
17
+ * an agent gets a marker here only once that marker is verified against the real thing, because
18
+ * a guessed variable never fires and misleads whoever reads the table next — and `CLAUDECODE` is
19
+ * the only marker anyone has verified. An `init` run by Cursor's agent proves nothing, so
20
+ * detection-as-default would silently produce a Cursor-less project.
21
+ * - A required flag cannot be relied on either. The GDK bootstrap that runs `bitmagic init` is
22
+ * read BY the agent, so it could pass its own id — but nothing upgrades an installed copy of
23
+ * that bootstrap (see `agent-plugin/README.md`), so a creator on last month's copy would get
24
+ * nothing, and the failure is silent.
25
+ *
26
+ * What is left for this table is therefore narrow: agents that read a VENDOR directory and nothing
27
+ * else. Claude Code (`.claude/skills/`) is one, and it is unconditional too — every project on disk
28
+ * today has that directory, and an upgrade that stopped writing it would be the first destructive
29
+ * thing the command has ever done. Kiro (`.kiro/skills/`) is the other, and it is the only reason
30
+ * `--agent` exists: an unasked-for `.kiro/` is pure noise in a project that does not use Kiro.
31
+ *
32
+ * ── Why the directory, not the agent, is the unit ────────────────────────────────────────────────
33
+ *
34
+ * Four agents map onto three directories, so every caller works in terms of the deduped set of
35
+ * DIRECTORIES (`skillDirsFor`). Writing per agent instead would put the same files into
36
+ * `.agents/skills/` twice for a creator who named both Cursor and Codex.
37
+ */
38
+ import { CliError } from '../errors.js';
39
+ /**
40
+ * The directory every agent following the AGENTS.md / agent-skills convention reads by itself.
41
+ * Written into every project whatever agent scaffolded it — see the file header.
42
+ */
43
+ export const SHARED_SKILLS_DIR = '.agents/skills';
44
+ /**
45
+ * Declaration order is output order, so the file set a project receives is a function of WHICH
46
+ * agents were selected and not of how they were typed.
47
+ */
48
+ export const AGENT_TARGETS = [
49
+ {
50
+ id: 'claude-code',
51
+ label: 'Claude Code',
52
+ // Claude Code does NOT read `.agents/skills/`; `.claude/skills/` is its only project path.
53
+ skillsDir: '.claude/skills',
54
+ instructions: 'CLAUDE.md, which imports AGENTS.md',
55
+ },
56
+ { id: 'cursor', label: 'Cursor', instructions: 'AGENTS.md' },
57
+ { id: 'codex', label: 'Codex', instructions: 'AGENTS.md' },
58
+ { id: 'kiro', label: 'Kiro', skillsDir: '.kiro/skills', instructions: '.kiro/steering/*.md' },
59
+ ];
60
+ export const AGENT_IDS = AGENT_TARGETS.map((target) => target.id);
61
+ /**
62
+ * In every project's set, and not removable.
63
+ *
64
+ * `--agent` adds; it never takes away. Both of the unconditional directories are already on disk in
65
+ * every existing project (`.claude/skills/`) or are what makes five agents work for free
66
+ * (`.agents/skills/`), and `upgrade` has never deleted a file under a skills directory.
67
+ */
68
+ export const ALWAYS_AGENTS = ['claude-code'];
69
+ /**
70
+ * `--agent`'s help text, shared by `init` and `upgrade` so the two cannot describe the same flag
71
+ * differently. It names what the flag is FOR, because the honest answer is "usually nothing": the
72
+ * default already covers every agent but Kiro.
73
+ */
74
+ export const AGENT_FLAG_DESCRIPTION = `Agent tools to write skills for, comma-separated (${AGENT_IDS.join(', ')}). ` +
75
+ `Adds to what a project already has; never removes. Only needed for kiro — ` +
76
+ `${SHARED_SKILLS_DIR}/ and .claude/skills/ are always written, which covers the rest.`;
77
+ export function isAgentId(value) {
78
+ return typeof value === 'string' && AGENT_IDS.includes(value);
79
+ }
80
+ export function agentTarget(id) {
81
+ // Non-null by construction: AgentId is derived from this same table.
82
+ return AGENT_TARGETS.find((target) => target.id === id);
83
+ }
84
+ /** In table order, each agent once. */
85
+ export function dedupeAgents(agents) {
86
+ return AGENT_IDS.filter((id) => agents.includes(id));
87
+ }
88
+ /**
89
+ * "Cursor", "Cursor and Codex", "Cursor, Codex and Kiro" — for a sentence a creator reads, not a
90
+ * list a parser does. Exported because the scaffolded AGENTS.md joins its skills directories the
91
+ * same way, and two hand-written copies of this join is how the two come to punctuate differently.
92
+ */
93
+ export function joinWithAnd(items) {
94
+ if (items.length <= 1)
95
+ return items[0] ?? '';
96
+ return `${items.slice(0, -1).join(', ')} and ${items[items.length - 1]}`;
97
+ }
98
+ /** The agents named, in table order, as a clause for a sentence a creator reads. */
99
+ export function agentLabels(agents) {
100
+ return joinWithAnd(dedupeAgents(agents).map((id) => agentTarget(id).label));
101
+ }
102
+ /**
103
+ * `--agent kiro,cursor` → `['cursor', 'kiro']`, unioned with the always-present set.
104
+ *
105
+ * Comma-separated rather than a repeatable flag because citty's string args are single-valued. An
106
+ * unknown id is a hard error naming the valid ones: a typo that silently scaffolded the default set
107
+ * would look like the flag working, and the creator would find out when their agent loaded nothing.
108
+ */
109
+ export function parseAgentFlag(raw) {
110
+ if (raw === undefined)
111
+ return dedupeAgents(ALWAYS_AGENTS);
112
+ const requested = raw
113
+ .split(',')
114
+ .map((part) => part.trim().toLowerCase())
115
+ .filter((part) => part !== '');
116
+ if (requested.length === 0) {
117
+ throw new CliError(`--agent needs at least one agent. Valid values: ${AGENT_IDS.join(', ')}.`);
118
+ }
119
+ const unknown = requested.filter((part) => !isAgentId(part));
120
+ if (unknown.length > 0) {
121
+ throw new CliError(`Unknown agent${unknown.length > 1 ? 's' : ''} ${unknown.map((u) => `"${u}"`).join(', ')}. ` +
122
+ `Valid values: ${AGENT_IDS.join(', ')}.`);
123
+ }
124
+ return dedupeAgents([...ALWAYS_AGENTS, ...requested]);
125
+ }
126
+ /** The `agents` field of a `bitmagic.json`, keeping only ids this CLI recognises. */
127
+ export function readRecordedAgents(value) {
128
+ if (!Array.isArray(value))
129
+ return [];
130
+ return dedupeAgents(value.filter(isAgentId));
131
+ }
132
+ /** Values in a project's `agents` field that this CLI does not recognise — reported, never fatal. */
133
+ export function unrecognisedAgents(value) {
134
+ if (!Array.isArray(value))
135
+ return [];
136
+ return value.filter((entry) => typeof entry === 'string' && !isAgentId(entry));
137
+ }
138
+ /**
139
+ * The directories to write, deduped and in a stable order, always starting with the shared one.
140
+ *
141
+ * A duplicate here would double-write a file and list its path twice in `UpgradeResult.replaced`,
142
+ * so the dedupe is load-bearing rather than tidiness: `--agent cursor,codex` names two agents that
143
+ * share a directory.
144
+ */
145
+ export function skillDirsFor(agents) {
146
+ const dirs = [SHARED_SKILLS_DIR];
147
+ for (const id of dedupeAgents([...ALWAYS_AGENTS, ...agents])) {
148
+ const dir = agentTarget(id).skillsDir;
149
+ if (dir !== undefined && !dirs.includes(dir))
150
+ dirs.push(dir);
151
+ }
152
+ return dirs;
153
+ }
154
+ /**
155
+ * The directory `AGENTS.md` names when it cross-references a skill.
156
+ *
157
+ * Every project has more than one copy of the shipped skills, but `AGENTS.md` is ONE file at the
158
+ * root read by every agent in the project, so it has to name a single path — and the only honest
159
+ * choice is the one that exists in every project and that most agents load from. Its Layout section
160
+ * names the other copies, so a Claude Code reader still learns where its own loader looks.
161
+ */
162
+ export const PRIMARY_SKILLS_DIR = SHARED_SKILLS_DIR;
163
+ /**
164
+ * The agents named by `--agent` that this scaffold writes nothing extra for, because the directory
165
+ * and the instructions file they read are already unconditional.
166
+ *
167
+ * Accepting such a flag and explaining it beats refusing one a creator reasonably typed.
168
+ */
169
+ export function noOpAgents(agents) {
170
+ return dedupeAgents(agents).filter((id) => agentTarget(id).skillsDir === undefined);
171
+ }
172
+ /** Which agents load a given skills directory, as a clause for a sentence the creator reads. */
173
+ export function describeSkillsDir(dir) {
174
+ if (dir === SHARED_SKILLS_DIR) {
175
+ return 'read by Cursor, Codex and every agent that follows the AGENTS.md convention';
176
+ }
177
+ const owner = AGENT_TARGETS.find((target) => target.skillsDir === dir);
178
+ return owner === undefined ? 'read by your agent' : `where ${owner.label} looks`;
179
+ }
180
+ //# sourceMappingURL=agent-targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-targets.js","sourceRoot":"","sources":["../../src/scaffold/agent-targets.ts"],"names":[],"mappings":"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"}
@@ -48,5 +48,8 @@ export interface AgentsMdOutcome {
48
48
  *
49
49
  * `storedHash` is `bitmagic.json`'s `agentsMdHash` — absent for any project scaffolded before this
50
50
  * existed, which is exactly the population that most needs the suggestion path.
51
+ *
52
+ * `skillDirs` is passed for the same reason `environment` is: the template names the skills
53
+ * directories the project actually holds, so a Kiro project's copy differs from a default one's.
51
54
  */
52
- export declare function reconcileAgentsMd(root: string, storedHash: string | undefined, environment: EnvironmentName | undefined): AgentsMdOutcome;
55
+ export declare function reconcileAgentsMd(root: string, storedHash: string | undefined, environment: EnvironmentName | undefined, skillDirs?: readonly string[]): AgentsMdOutcome;
@@ -29,6 +29,7 @@ import { createHash } from 'crypto';
29
29
  import * as fs from 'fs';
30
30
  import * as path from 'path';
31
31
  import { renderAgentsMd } from './project-files.js';
32
+ import { ALWAYS_AGENTS, skillDirsFor } from './agent-targets.js';
32
33
  export const AGENTS_MD_FILE = 'AGENTS.md';
33
34
  /**
34
35
  * Where the current template is written when the creator's own file is kept. Under `.bitmagic/`
@@ -70,10 +71,13 @@ export function missingSections(theirs, ours) {
70
71
  *
71
72
  * `storedHash` is `bitmagic.json`'s `agentsMdHash` — absent for any project scaffolded before this
72
73
  * existed, which is exactly the population that most needs the suggestion path.
74
+ *
75
+ * `skillDirs` is passed for the same reason `environment` is: the template names the skills
76
+ * directories the project actually holds, so a Kiro project's copy differs from a default one's.
73
77
  */
74
- export function reconcileAgentsMd(root, storedHash, environment) {
78
+ export function reconcileAgentsMd(root, storedHash, environment, skillDirs = skillDirsFor(ALWAYS_AGENTS)) {
75
79
  const target = path.join(root, AGENTS_MD_FILE);
76
- const current = renderAgentsMd(environment);
80
+ const current = renderAgentsMd(environment, skillDirs);
77
81
  const currentHash = hashAgentsMd(current);
78
82
  let existing;
79
83
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/scaffold/agents-md.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAE1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;AAElF,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,QAAQ;SACZ,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,IAAY;IAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACvE,CAAC;AAsBD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,UAA8B,EAC9B,WAAwC;IAExC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAE1C,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,+FAA+F;QAC/F,yDAAyD;QACzD,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;QACjC,6FAA6F;QAC7F,oCAAoC;QACpC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,UAAU,KAAK,SAAS,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;QAC5D,sFAAsF;QACtF,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;IAChF,CAAC;IAED,gGAAgG;IAChG,2BAA2B;IAC3B,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAC9D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/scaffold/agents-md.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type AgentId } from './agent-targets.js';
1
2
  import type { EnvironmentName } from '../config/environments.js';
2
3
  /**
3
4
  * The legal notice stamped into every game this project publishes.
@@ -93,11 +94,35 @@ export declare function renderVitePublishConfig(): string;
93
94
  */
94
95
  export declare function renderVitePublishStandaloneConfig(): string;
95
96
  export declare function renderGitignore(): string;
97
+ /**
98
+ * What a shipped skill's renderer is handed.
99
+ *
100
+ * Only `renderSkillsReadme` reads it today — every other body is agent-independent, and
101
+ * assigning a `() => string` to this type is legal TypeScript, so they need no parameter at all.
102
+ * The type exists so a renderer that DOES need to name its own directory can, without the
103
+ * `SHIPPED_SKILLS` table growing two shapes.
104
+ */
105
+ export interface SkillRenderContext {
106
+ /** The directory this copy is being written into, relative to the project root. */
107
+ skillsDir: string;
108
+ /** Every skills directory this project holds, so a renderer can name the sibling copies. */
109
+ skillDirs: readonly string[];
110
+ }
111
+ export type SkillRenderer = (context: SkillRenderContext) => string;
96
112
  export interface ProjectMetadata {
97
113
  gameId: string;
98
114
  engineVersion: string;
99
115
  genre: string;
100
116
  template: string;
117
+ /**
118
+ * Which agent tools this project is set up for, deciding which skills directories `init` writes
119
+ * and `upgrade` refreshes. See `agent-targets.ts`: the entry that matters is Kiro, since the
120
+ * shared and Claude Code directories are written unconditionally.
121
+ *
122
+ * Optional: every project scaffolded before this existed has none, which reads as the
123
+ * always-present set — exactly what those projects have on disk.
124
+ */
125
+ agents?: AgentId[];
101
126
  /**
102
127
  * sha256 of the AGENTS.md the CLI last wrote, so `bitmagic upgrade` can tell an untouched file
103
128
  * (safe to refresh) from one the creator edited (never overwritten — see scaffold/agents-md.ts).
@@ -120,9 +145,19 @@ export interface ProjectMetadata {
120
145
  environment?: EnvironmentName;
121
146
  }
122
147
  export declare function renderBitmagicJson(metadata: ProjectMetadata): string;
123
- export declare function renderAgentsMd(environment: EnvironmentName | undefined): string;
124
148
  /**
125
- * `.claude/skills/planning-a-game/SKILL.md` — the slice contract and the mechanic-recipe routing.
149
+ * `skillDirs` is every skills directory this project holds, in `skillDirsFor` order. It is a
150
+ * parameter for the same reason `environment` is (see `agents-md.ts`): this file has to describe
151
+ * the project it is written into, and a Kiro project holds a directory a default one does not.
152
+ *
153
+ * Cross-references name `PRIMARY_SKILLS_DIR` rather than the reader's own directory, because this
154
+ * is ONE file read by every agent in the project and it has to pick a path that exists in all of
155
+ * them. The Layout section names the rest, so a Claude Code reader still learns where its own
156
+ * loader looks.
157
+ */
158
+ export declare function renderAgentsMd(environment: EnvironmentName | undefined, skillDirs?: readonly string[]): string;
159
+ /**
160
+ * `<skills dir>/planning-a-game/SKILL.md` — the slice contract and the mechanic-recipe routing.
126
161
  *
127
162
  * These are one skill rather than two on purpose: you route to a recipe *in order to* scope slice
128
163
  * 1, and slice 1 is the first section of the plan file the recipe tells you to write. Split, the
@@ -138,7 +173,7 @@ export declare function renderAgentsMd(environment: EnvironmentName | undefined)
138
173
  */
139
174
  export declare function renderPlanningSkill(): string;
140
175
  /**
141
- * `.claude/skills/finding-engine-apis/SKILL.md` — the discovery protocol in full.
176
+ * `<skills dir>/finding-engine-apis/SKILL.md` — the discovery protocol in full.
142
177
  *
143
178
  * The problem this exists to solve is measured, not hypothetical. game-play-agent's
144
179
  * engine-api-digest.ts opens with it: session analysis showed the hosted coding agent spending most
@@ -150,7 +185,7 @@ export declare function renderPlanningSkill(): string;
150
185
  export declare function renderEngineApiSkill(): string;
151
186
  export declare function renderGenerateSkill(): string;
152
187
  /**
153
- * `.claude/skills/checking-usage/SKILL.md` — what the creator's sparks bought.
188
+ * `<skills dir>/checking-usage/SKILL.md` — what the creator's sparks bought.
154
189
  *
155
190
  * Exists because the agent is what spends the money and the human is what pays
156
191
  * for it. Before this, the only way to learn a balance was to be REFUSED one:
@@ -159,7 +194,7 @@ export declare function renderGenerateSkill(): string;
159
194
  */
160
195
  export declare function renderUsageSkill(): string;
161
196
  /**
162
- * `.claude/skills/judging-quality/SKILL.md` — when and how to run `bitmagic judge`.
197
+ * `<skills dir>/judging-quality/SKILL.md` — when and how to run `bitmagic judge`.
163
198
  *
164
199
  * The point the skill has to land is the discipline, not the mechanics: judge after milestones,
165
200
  * fix the findings, confirm once, stop. An agent that loops on the judge is spending the
@@ -2,6 +2,7 @@ import { FAVICON_LINK_ID } from '@bitmagic/asset-core/favicon';
2
2
  import { tsconfigPaths, importMapEntries, viteAliasEntries } from './aliases.js';
3
3
  import { currentPortLane } from '../port-lane.js';
4
4
  import { AGENTS_MD_REFERENCE_SECTION, GAME_DESIGN_REFERENCE_HINT, GENERATE_SKILL_REFERENCE_SECTION, PLANNING_SKILL_REFERENCE_STEP1, PLANNING_SKILL_REFERENCE_STEP4, } from './reference-guidance.js';
5
+ import { ALWAYS_AGENTS, PRIMARY_SKILLS_DIR, joinWithAnd, skillDirsFor, } from './agent-targets.js';
5
6
  /**
6
7
  * The legal notice stamped into every game this project publishes.
7
8
  *
@@ -325,8 +326,28 @@ ${renderAliasEntries()}
325
326
  }
326
327
  },
327
328
  server: {
328
- port: 3001
329
- }
329
+ port: 3001,
330
+ watch: {
331
+ // Vite leaves build.outDir out of its file watcher, but this project SERVES its outDir:
332
+ // every module the browser loads is a tsc emit under dist/. Unwatched, Vite's transform
333
+ // cache keeps serving the PREVIOUS emit after a rebuild until the dev server restarts —
334
+ // edits look like they did nothing. A negated pattern beats Vite's built-in ignore.
335
+ ignored: ['!**/dist/**']
336
+ }
337
+ },
338
+ plugins: [
339
+ {
340
+ // Watching dist/ makes each emit invalidate the stale transform (see server.watch above),
341
+ // but it would also have Vite full-reload the page on the FIRST emitted file of a compile
342
+ // — mid-emit, half the build still old. bitmagic dev reloads the browser itself once the
343
+ // compile lands clean, so Vite's own reaction is swallowed here. The invalidation is not:
344
+ // the module graph is told about the change before this hook runs.
345
+ name: 'bitmagic:defer-dist-reloads',
346
+ handleHotUpdate(context) {
347
+ if (context.file.includes('/dist/')) return [];
348
+ }
349
+ }
350
+ ]
330
351
  });
331
352
  `;
332
353
  }
@@ -652,10 +673,27 @@ rather than version warnings — so run \`self-update\` before debugging a comma
652
673
  strangely. If \`bitmagic.json\` ever disagrees with this paragraph, the file is right. The engine is a
653
674
  separate command: \`bitmagic upgrade\`.`;
654
675
  }
655
- export function renderAgentsMd(environment) {
676
+ /**
677
+ * `skillDirs` is every skills directory this project holds, in `skillDirsFor` order. It is a
678
+ * parameter for the same reason `environment` is (see `agents-md.ts`): this file has to describe
679
+ * the project it is written into, and a Kiro project holds a directory a default one does not.
680
+ *
681
+ * Cross-references name `PRIMARY_SKILLS_DIR` rather than the reader's own directory, because this
682
+ * is ONE file read by every agent in the project and it has to pick a path that exists in all of
683
+ * them. The Layout section names the rest, so a Claude Code reader still learns where its own
684
+ * loader looks.
685
+ */
686
+ export function renderAgentsMd(environment, skillDirs = skillDirsFor(ALWAYS_AGENTS)) {
656
687
  // The port this CLI would bind, so the doc it writes into the project matches the CLI that wrote
657
688
  // it. A dev-line and a release-line install serve the shell on different numbers (port-lane.ts).
658
689
  const editorPort = currentPortLane().editorPort;
690
+ // Built outside the literal: a nested template literal inside `${}` in a file that escapes every
691
+ // backtick is the one place that escaping reliably goes wrong.
692
+ const mirrors = skillDirs.filter((dir) => dir !== PRIMARY_SKILLS_DIR).map((dir) => '`' + dir + '/`');
693
+ const mirrorClause = mirrors.length === 0
694
+ ? ''
695
+ : '\n Agents disagree on where project skills live, so the same files are also written to' +
696
+ `\n ${joinWithAnd(mirrors)}; cite the path above and every agent can open it.`;
659
697
  return `# Working on this Bitmagic game
660
698
 
661
699
  ## Start \`bitmagic dev\` before you build anything
@@ -678,7 +716,7 @@ lists each generation with your prompt and progress, and they can move objects i
678
716
  and screenshot a problem straight to you. Started at the end, all of that is a server nobody
679
717
  needed — a game that appeared in one silent hour is worth less than a rough one they watched
680
718
  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
719
+ \`--mobile\` (\`${PRIMARY_SKILLS_DIR}/working-with-the-creator/SKILL.md\` has the QR and the certificate
682
720
  warning).
683
721
 
684
722
  If you are unsure whether one is already running, \`bitmagic reload\` says so and costs nothing.
@@ -705,15 +743,19 @@ If you are unsure whether one is already running, \`bitmagic reload\` says so an
705
743
  in what order.** Both yours to write and rewrite; \`bitmagic cover\` reads the first. Both are
706
744
  excluded from the publish fingerprint, so revising them never invalidates a passing
707
745
  \`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.
714
- - \`.claude/settings.json\` — **yours**, seeded with one Stop hook that runs \`bitmagic reload\` so
715
- the owner's browser refreshes when you finish a turn. \`upgrade\` adds that hook if it is missing
716
- and changes nothing else, so your permissions and your own hooks are safe here.
746
+ - \`${PRIMARY_SKILLS_DIR}/\` — **shipped by the CLI and re-rendered by \`bitmagic upgrade\`**, so
747
+ they stay current with it. Every one is plain markdown at
748
+ \`${PRIMARY_SKILLS_DIR}/<name>/SKILL.md\`, readable whether or not your harness loads skills by
749
+ itself: \`planning-a-game/\` (what to build first), \`finding-engine-apis/\` (engine docs),
750
+ \`generating-assets/\`, \`working-with-the-creator/\`, \`theming-the-hud/\`,
751
+ \`publishing-a-game/\`, \`judging-quality/\`, \`checking-usage/\`, \`making-a-trailer/\`,
752
+ \`converting-unity-levels/\`.${mirrorClause}
753
+ \`upgrade\` rewrites every copy, so edits to them are lost; skills you add yourself are never
754
+ touched.
755
+ - \`.claude/settings.json\` — **Claude Code only, and yours**: seeded with one Stop hook that runs
756
+ \`bitmagic reload\` so the owner's browser refreshes when you finish a turn. \`upgrade\` adds that
757
+ hook if it is missing and changes nothing else, so your permissions and your own hooks are safe
758
+ here. No other agent has a verified equivalent, so on those you run \`bitmagic reload\` yourself.
717
759
  - \`AGENTS.md\` — this file. Yours to edit; \`upgrade\` refreshes it only while it is byte-identical
718
760
  to what the CLI wrote, and otherwise keeps yours and drops the current template in
719
761
  \`.bitmagic/AGENTS.md.latest\`. **If you edit this file, diff that after an upgrade** — new CLI
@@ -755,7 +797,7 @@ things you would do next, in order. Let them choose. Do not publish unless they
755
797
 
756
798
  The full contract — what counts as a core verb, what the engine already ships so you never build it,
757
799
  the \`mechanics-plan.md\` skeleton, and the loop after slice 1 — is in
758
- \`.claude/skills/planning-a-game/SKILL.md\`.
800
+ \`${PRIMARY_SKILLS_DIR}/planning-a-game/SKILL.md\`.
759
801
 
760
802
  ## Finding an engine API
761
803
 
@@ -768,7 +810,7 @@ and read the group doc it lands in, with \`engine-api.md\` indexing the 45 group
768
810
  **\`engine/\` source**, last resort. \`@docs foo.md\` in those docs means
769
811
  \`engine/agent-docs/foo.md\` — just read the file.
770
812
 
771
- \`.claude/skills/finding-engine-apis/SKILL.md\` carries the feature-to-doc table (use it instead of
813
+ \`${PRIMARY_SKILLS_DIR}/finding-engine-apis/SKILL.md\` carries the feature-to-doc table (use it instead of
772
814
  guessing filenames) and translates the hosted-agent tools those shared docs name, none of which
773
815
  exist here.
774
816
 
@@ -882,7 +924,7 @@ judge of it. After each milestone run \`bitmagic verify\` (not \`--fast\`), then
882
924
  a separate vision model grades the screenshot against \`GAME-DESIGN.md\` and prints at most three
883
925
  concrete findings (also written to \`.bitmagic/judge.json\`). Fix the ones worth fixing, confirm
884
926
  with one re-run, then move on — **never loop on the judge**. See
885
- \`.claude/skills/judging-quality/SKILL.md\`.
927
+ \`${PRIMARY_SKILLS_DIR}/judging-quality/SKILL.md\`.
886
928
 
887
929
  ## The human may be moving objects too
888
930
 
@@ -905,7 +947,7 @@ where they click an object and drag a gizmo. A drag writes the new transform str
905
947
  \`bitmagic generate prop\` command to run on their behalf.
906
948
 
907
949
  The event shapes, the rest of the editor protocol and \`bitmagic dev --mobile\` are in
908
- \`.claude/skills/working-with-the-creator/SKILL.md\`.
950
+ \`${PRIMARY_SKILLS_DIR}/working-with-the-creator/SKILL.md\`.
909
951
 
910
952
  ## Publishing
911
953
 
@@ -936,7 +978,7 @@ unguessable) URL.** Credential-shaped files (\`.env*\`, \`*.pem\`, \`*.key\`, \`
936
978
  service-account JSON) are excluded and named in the output, but that list cannot be exhaustive —
937
979
  so never keep a secret in this directory.
938
980
 
939
- \`.claude/skills/publishing-a-game/SKILL.md\` has the rest, and you want it before you publish:
981
+ \`${PRIMARY_SKILLS_DIR}/publishing-a-game/SKILL.md\` has the rest, and you want it before you publish:
940
982
  what the thumbnail comes from, category tags, \`--force\` and the one-shot \`--name\`/
941
983
  \`--description\`, the post-publish render smoke test, and the exit-code table to branch on when
942
984
  publish exits non-zero rather than parsing its message.
@@ -948,7 +990,7 @@ value: \`worldProfileData.hud.theme\` in \`src/work/world.json\`. **Never restyl
948
990
  game code to satisfy a look request** ("rounder buttons", "orange UI", "neon glow"); use
949
991
  \`bitmagic theme patch\` / \`set\` / \`show\` / \`check\` and read
950
992
  \`engine/agent-docs/HUD_THEMES.md\` — its Common-asks table has a copyable patch for every frequent
951
- request. \`.claude/skills/theming-the-hud/SKILL.md\` covers the loop, including verifying with
993
+ request. \`${PRIMARY_SKILLS_DIR}/theming-the-hud/SKILL.md\` covers the loop, including verifying with
952
994
  \`.bitmagic/verify/screenshot.png\`.
953
995
 
954
996
  ## Generating assets
@@ -985,7 +1027,7 @@ Two things before you use them:
985
1027
  Three lanes make a 3D object, and the wrong one wastes a generation: \`generate model\` mints a NEW
986
1028
  asset, \`generate prop --asset <id>\` UPGRADES a placeholder, \`assets add <file>\` uploads your own.
987
1029
  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
1030
+ make. \`${PRIMARY_SKILLS_DIR}/generating-assets/SKILL.md\` has the flags, the reference-image rules, what
989
1031
  to do after a generation, and every way one refuses.
990
1032
 
991
1033
  ## Forging a whole level
@@ -1024,7 +1066,7 @@ ${renderCliUpdateSection(environment)}
1024
1066
  `;
1025
1067
  }
1026
1068
  /**
1027
- * `.claude/skills/planning-a-game/SKILL.md` — the slice contract and the mechanic-recipe routing.
1069
+ * `<skills dir>/planning-a-game/SKILL.md` — the slice contract and the mechanic-recipe routing.
1028
1070
  *
1029
1071
  * These are one skill rather than two on purpose: you route to a recipe *in order to* scope slice
1030
1072
  * 1, and slice 1 is the first section of the plan file the recipe tells you to write. Split, the
@@ -1183,7 +1225,7 @@ ${PLANNING_SKILL_REFERENCE_STEP4}4. \`bitmagic cover\` — **now**, not later. I
1183
1225
  6. Write the code. Look up APIs with the \`finding-engine-apis\` skill; do not read engine source to
1184
1226
  find out what exists.
1185
1227
  7. \`bitmagic check\` until green.
1186
- 8. \`bitmagic reload\` (the Stop hook in \`.claude/settings.json\` does this for you).
1228
+ 8. \`bitmagic reload\` (in Claude Code the Stop hook in \`.claude/settings.json\` does this for you).
1187
1229
  9. \`bitmagic verify\` — it boots the game in a real browser and clicks Play. A clean \`check\` is
1188
1230
  not evidence the game runs.
1189
1231
  10. Report (below). Publish only if they ask.
@@ -1225,7 +1267,7 @@ code.
1225
1267
  `;
1226
1268
  }
1227
1269
  /**
1228
- * `.claude/skills/finding-engine-apis/SKILL.md` — the discovery protocol in full.
1270
+ * `<skills dir>/finding-engine-apis/SKILL.md` — the discovery protocol in full.
1229
1271
  *
1230
1272
  * The problem this exists to solve is measured, not hypothetical. game-play-agent's
1231
1273
  * engine-api-digest.ts opens with it: session analysis showed the hosted coding agent spending most
@@ -1529,7 +1571,7 @@ fail to load it.
1529
1571
  `;
1530
1572
  }
1531
1573
  /**
1532
- * `.claude/skills/checking-usage/SKILL.md` — what the creator's sparks bought.
1574
+ * `<skills dir>/checking-usage/SKILL.md` — what the creator's sparks bought.
1533
1575
  *
1534
1576
  * Exists because the agent is what spends the money and the human is what pays
1535
1577
  * for it. Before this, the only way to learn a balance was to be REFUSED one:
@@ -1602,7 +1644,7 @@ per-invoice view, the plan page on the web is the source of truth.
1602
1644
  `;
1603
1645
  }
1604
1646
  /**
1605
- * `.claude/skills/judging-quality/SKILL.md` — when and how to run `bitmagic judge`.
1647
+ * `<skills dir>/judging-quality/SKILL.md` — when and how to run `bitmagic judge`.
1606
1648
  *
1607
1649
  * The point the skill has to land is the discipline, not the mechanics: judge after milestones,
1608
1650
  * fix the findings, confirm once, stop. An agent that loops on the judge is spending the
@@ -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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"}