create-substrate 0.1.5 → 0.2.0

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 (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -4
  3. package/dist/index.js +25 -7
  4. package/dist/index.js.map +1 -1
  5. package/dist/prompts.d.ts +0 -2
  6. package/dist/prompts.d.ts.map +1 -1
  7. package/dist/prompts.js +6 -50
  8. package/dist/prompts.js.map +1 -1
  9. package/dist/scaffold.d.ts.map +1 -1
  10. package/dist/scaffold.js +93 -66
  11. package/dist/scaffold.js.map +1 -1
  12. package/dist/surfaces/3d-scene.d.ts.map +1 -1
  13. package/dist/surfaces/3d-scene.js +43 -74
  14. package/dist/surfaces/3d-scene.js.map +1 -1
  15. package/dist/surfaces/canvas-2d.d.ts.map +1 -1
  16. package/dist/surfaces/canvas-2d.js +7 -10
  17. package/dist/surfaces/canvas-2d.js.map +1 -1
  18. package/dist/surfaces/data-vis.d.ts.map +1 -1
  19. package/dist/surfaces/data-vis.js +37 -143
  20. package/dist/surfaces/data-vis.js.map +1 -1
  21. package/dist/surfaces/image-gen.d.ts.map +1 -1
  22. package/dist/surfaces/image-gen.js +15 -35
  23. package/dist/surfaces/image-gen.js.map +1 -1
  24. package/dist/surfaces/node-editor.js +1 -1
  25. package/dist/utils/detect-pm.d.ts +2 -0
  26. package/dist/utils/detect-pm.d.ts.map +1 -1
  27. package/dist/utils/detect-pm.js +9 -0
  28. package/dist/utils/detect-pm.js.map +1 -1
  29. package/dist/utils/package-info.d.ts +5 -0
  30. package/dist/utils/package-info.d.ts.map +1 -0
  31. package/dist/utils/package-info.js +17 -0
  32. package/dist/utils/package-info.js.map +1 -0
  33. package/package.json +4 -3
  34. package/skills/3d-scene/SKILL.md +2 -1
  35. package/skills/animation/SKILL.md +2 -1
  36. package/skills/canvas-2d/SKILL.md +67 -5
  37. package/skills/composing-panels/SKILL.md +1 -4
  38. package/skills/data-visualisation/SKILL.md +2 -1
  39. package/skills/image-generation/SKILL.md +2 -1
  40. package/skills/install-components/SKILL.md +22 -16
  41. package/skills/scaffold-playground/SKILL.md +39 -19
  42. package/skills/substrate-canvas/SKILL.md +5 -0
  43. package/skills/substrate-controls/SKILL.md +57 -2
  44. package/skills/substrate-interaction/SKILL.md +19 -10
  45. package/skills/substrate-scaffold/SKILL.md +4 -4
  46. package/skills/theming/SKILL.md +8 -2
  47. package/skills/wire-interactions/SKILL.md +6 -3
  48. package/templates/agents-section.md +41 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 George Drury
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -6,7 +6,7 @@ Scaffold a [Substrate](https://substrate.georgedrury.co.uk) playground: a Vite +
6
6
  npx create-substrate
7
7
  ```
8
8
 
9
- You are asked for a project name, a surface type and a package manager. Pass flags to skip the prompts:
9
+ You are asked for a project name and a surface type. The package manager is the one you ran it with. Pass flags to skip the prompts:
10
10
 
11
11
  ```bash
12
12
  npx create-substrate my-editor --surface canvas-2d --pm pnpm
@@ -29,14 +29,17 @@ npx create-substrate my-editor --surface canvas-2d --pm pnpm
29
29
  | Flag | Description |
30
30
  | --- | --- |
31
31
  | `--surface <type>` | Surface type from the table above |
32
- | `--pm <manager>` | Package manager: `npm`, `pnpm` or `bun` |
32
+ | `--pm <manager>` | Package manager: `npm`, `pnpm` or `bun`. Defaults to the one that ran the command |
33
+ | `-y, --yes` | Accept defaults for anything not passed: name `my-substrate-app`, surface `canvas-2d` |
33
34
  | `--skip-install` | Skip dependency installation |
34
35
  | `--skip-git` | Don't initialise a git repository |
35
36
 
37
+ With no terminal (a script or CI), `--surface` is required unless you pass `--yes`.
38
+
36
39
  ## What you get
37
40
 
38
41
  - A starter page for the chosen surface, built from Substrate components copied into `src/components/substrate/`
39
- - `CLAUDE.md` and `.claude/skills/` so coding agents know which components exist and how to compose them
42
+ - `AGENTS.md`, `CLAUDE.md` and skills in `.claude/skills/` and `.agents/skills/` so coding agents know which components exist and how to compose them
40
43
  - `.mcp.json` registering the Substrate MCP server
41
44
  - [`@substrate-kit/cli`](https://www.npmjs.com/package/@substrate-kit/cli) as a dev dependency, for adding more components later:
42
45
 
@@ -48,6 +51,10 @@ To add Substrate to an existing project instead, run `npx @substrate-kit/cli ini
48
51
 
49
52
  Docs: [substrate.georgedrury.co.uk/docs/create-substrate](https://substrate.georgedrury.co.uk/docs/create-substrate)
50
53
 
54
+ ## Acknowledgements
55
+
56
+ The 3D scene and image generation starters use Substrate's `Controls`, which is built on [DialKit](https://github.com/joshpuckett/dialkit) by Josh Puckett (MIT). Those projects depend on the `dialkit` package.
57
+
51
58
  ## Licence
52
59
 
53
- MIT
60
+ MIT, see [LICENSE](LICENSE).
package/dist/index.js CHANGED
@@ -1,21 +1,39 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from "commander";
3
+ import chalk from "chalk";
3
4
  import { scaffold } from "./scaffold.js";
4
- import { promptName, promptSurface, promptPackageManager } from "./prompts.js";
5
+ import { promptName, promptSurface } from "./prompts.js";
6
+ import { SURFACE_OPTIONS } from "./surfaces/types.js";
7
+ import { detectRunningPackageManager, isPackageManager } from "./utils/detect-pm.js";
8
+ import { VERSION } from "./utils/package-info.js";
9
+ const DEFAULT_NAME = "my-substrate-app";
10
+ const DEFAULT_SURFACE = "canvas-2d";
11
+ const surfaceValues = SURFACE_OPTIONS.map((option) => option.value);
12
+ function fail(message) {
13
+ console.error(chalk.red(` ${message}`));
14
+ process.exit(1);
15
+ }
5
16
  const program = new Command();
6
17
  program
7
18
  .name("create-substrate")
8
19
  .description("Scaffold a Substrate creative tool playground")
9
- .version("0.1.5")
20
+ .version(VERSION)
10
21
  .argument("[project-name]", "Name for the new project")
11
- .option("--surface <type>", "Surface type (canvas-2d, 3d-scene, animation, node-editor, data-vis, image-gen, blank)")
12
- .option("--pm <manager>", "Package manager (npm, pnpm, bun)")
22
+ .option("--surface <type>", `Surface type (${surfaceValues.join(", ")})`)
23
+ .option("--pm <manager>", "Package manager (npm, pnpm, bun). Defaults to the one that ran this command")
13
24
  .option("--skip-install", "Skip dependency installation", false)
14
25
  .option("--skip-git", "Don't initialise a git repository", false)
26
+ .option("-y, --yes", `Accept defaults for anything not passed (name ${DEFAULT_NAME}, surface ${DEFAULT_SURFACE})`, false)
15
27
  .action(async (projectName, options) => {
16
- const name = projectName || await promptName();
17
- const surface = options.surface || await promptSurface();
18
- const pm = options.pm || await promptPackageManager();
28
+ if (options.surface && !surfaceValues.includes(options.surface)) {
29
+ fail(`Unknown surface "${options.surface}". Choose from ${surfaceValues.join(", ")}`);
30
+ }
31
+ if (options.pm && !isPackageManager(options.pm)) {
32
+ fail(`Unknown package manager "${options.pm}". Choose from npm, pnpm, bun`);
33
+ }
34
+ const name = projectName || (options.yes ? DEFAULT_NAME : await promptName());
35
+ const surface = options.surface ?? (options.yes ? DEFAULT_SURFACE : await promptSurface());
36
+ const pm = options.pm ?? detectRunningPackageManager() ?? "npm";
19
37
  await scaffold(name, {
20
38
  surface,
21
39
  packageManager: pm,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAI9E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,OAAO,CAAC,OAAO,CAAC;KAChB,QAAQ,CAAC,gBAAgB,EAAE,0BAA0B,CAAC;KACtD,MAAM,CAAC,kBAAkB,EAAE,wFAAwF,CAAC;KACpH,MAAM,CAAC,gBAAgB,EAAE,kCAAkC,CAAC;KAC5D,MAAM,CAAC,gBAAgB,EAAE,8BAA8B,EAAE,KAAK,CAAC;KAC/D,MAAM,CAAC,YAAY,EAAE,mCAAmC,EAAE,KAAK,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,WAA+B,EAAE,OAAO,EAAE,EAAE;IACzD,MAAM,IAAI,GAAG,WAAW,IAAI,MAAM,UAAU,EAAE,CAAA;IAC9C,MAAM,OAAO,GAAI,OAAO,CAAC,OAAuB,IAAI,MAAM,aAAa,EAAE,CAAA;IACzE,MAAM,EAAE,GAAI,OAAO,CAAC,EAAqB,IAAI,MAAM,oBAAoB,EAAE,CAAA;IAEzE,MAAM,QAAQ,CAAC,IAAI,EAAE;QACnB,OAAO;QACP,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEJ,OAAO,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,eAAe,EAAoB,MAAM,qBAAqB,CAAA;AACvE,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAEjD,MAAM,YAAY,GAAG,kBAAkB,CAAA;AACvC,MAAM,eAAe,GAAgB,WAAW,CAAA;AAChD,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAEnE,SAAS,IAAI,CAAC,OAAe;IAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,OAAO,CAAC,OAAO,CAAC;KAChB,QAAQ,CAAC,gBAAgB,EAAE,0BAA0B,CAAC;KACtD,MAAM,CAAC,kBAAkB,EAAE,iBAAiB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;KACxE,MAAM,CAAC,gBAAgB,EAAE,6EAA6E,CAAC;KACvG,MAAM,CAAC,gBAAgB,EAAE,8BAA8B,EAAE,KAAK,CAAC;KAC/D,MAAM,CAAC,YAAY,EAAE,mCAAmC,EAAE,KAAK,CAAC;KAChE,MAAM,CAAC,WAAW,EAAE,iDAAiD,YAAY,aAAa,eAAe,GAAG,EAAE,KAAK,CAAC;KACxH,MAAM,CAAC,KAAK,EAAE,WAA+B,EAAE,OAAO,EAAE,EAAE;IACzD,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAChE,IAAI,CAAC,oBAAoB,OAAO,CAAC,OAAO,kBAAkB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvF,CAAC;IACD,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,4BAA4B,OAAO,CAAC,EAAE,+BAA+B,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC,CAAA;IAC7E,MAAM,OAAO,GACV,OAAO,CAAC,OAAmC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,aAAa,EAAE,CAAC,CAAA;IACzG,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,2BAA2B,EAAE,IAAI,KAAK,CAAA;IAE/D,MAAM,QAAQ,CAAC,IAAI,EAAE;QACnB,OAAO;QACP,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEJ,OAAO,CAAC,KAAK,EAAE,CAAA"}
package/dist/prompts.d.ts CHANGED
@@ -1,6 +1,4 @@
1
1
  import { type SurfaceType } from "./surfaces/types.js";
2
- import type { PackageManager } from "./utils/detect-pm.js";
3
2
  export declare function promptName(): Promise<string>;
4
3
  export declare function promptSurface(): Promise<SurfaceType>;
5
- export declare function promptPackageManager(): Promise<PackageManager>;
6
4
  //# sourceMappingURL=prompts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAM1D,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAalD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,CA4D1D;AAQD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC,CA6CpE"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAMvE,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAiBlD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,CA4D1D"}
package/dist/prompts.js CHANGED
@@ -5,6 +5,10 @@ function createRl() {
5
5
  return createInterface({ input: process.stdin, output: process.stdout });
6
6
  }
7
7
  export async function promptName() {
8
+ if (!process.stdin.isTTY) {
9
+ console.error(chalk.red(" No terminal to ask in. Pass a project name, or --yes to use the default."));
10
+ process.exit(1);
11
+ }
8
12
  const rl = createRl();
9
13
  return new Promise((resolve) => {
10
14
  rl.question(` ${chalk.bold("Project name:")} `, (answer) => {
@@ -23,8 +27,8 @@ export async function promptSurface() {
23
27
  let cursor = 0;
24
28
  return new Promise((resolve) => {
25
29
  if (!process.stdin.isTTY) {
26
- resolve("canvas-2d");
27
- return;
30
+ console.error(chalk.red(" No terminal to ask in. Pass --surface <type>, or --yes to use the default (canvas-2d)."));
31
+ process.exit(1);
28
32
  }
29
33
  process.stdin.setRawMode(true);
30
34
  process.stdin.resume();
@@ -76,52 +80,4 @@ export async function promptSurface() {
76
80
  });
77
81
  });
78
82
  }
79
- const PM_OPTIONS = [
80
- { value: "npm", label: "npm" },
81
- { value: "pnpm", label: "pnpm" },
82
- { value: "bun", label: "bun" },
83
- ];
84
- export async function promptPackageManager() {
85
- let cursor = 0;
86
- return new Promise((resolve) => {
87
- if (!process.stdin.isTTY) {
88
- resolve("npm");
89
- return;
90
- }
91
- process.stdin.setRawMode(true);
92
- process.stdin.resume();
93
- function render() {
94
- process.stdout.write(`\x1B[1A\x1B[J`);
95
- const items = PM_OPTIONS.map((opt, i) => {
96
- const selected = i === cursor;
97
- return selected ? chalk.cyan.bold(opt.label) : chalk.dim(opt.label);
98
- }).join(" ");
99
- console.log(` ${chalk.bold("Package manager:")} ${items}`);
100
- }
101
- console.log(` ${chalk.bold("Package manager:")} ${PM_OPTIONS.map((o) => chalk.dim(o.label)).join(" ")}`);
102
- render();
103
- process.stdin.on("data", (data) => {
104
- const key = data.toString();
105
- if (key === "\x1B[D" || key === "h") {
106
- cursor = Math.max(0, cursor - 1);
107
- render();
108
- }
109
- else if (key === "\x1B[C" || key === "l") {
110
- cursor = Math.min(PM_OPTIONS.length - 1, cursor + 1);
111
- render();
112
- }
113
- else if (key === "\r" || key === "\n") {
114
- process.stdin.setRawMode(false);
115
- process.stdin.pause();
116
- process.stdin.removeAllListeners("data");
117
- console.log();
118
- resolve(PM_OPTIONS[cursor].value);
119
- }
120
- else if (key === "\x03") {
121
- process.stdin.setRawMode(false);
122
- process.exit(0);
123
- }
124
- });
125
- });
126
- }
127
83
  //# sourceMappingURL=prompts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEhE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,CAAA;IACpB,cAAc,EAAE,cAAc,CAAA;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAoBD,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAsGf"}
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE7E,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEhE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,CAAA;IACpB,cAAc,EAAE,cAAc,CAAA;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAsBD,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA8Hf"}
package/dist/scaffold.js CHANGED
@@ -4,7 +4,9 @@ import { ensureDir, writeFile, exists, copyDir, listDirs, resolveSkillsDir } fro
4
4
  import { exec, execSilent } from "./utils/shell.js";
5
5
  import { log } from "./utils/logger.js";
6
6
  import { getInstallCommand } from "./utils/detect-pm.js";
7
+ import { CLI_RANGE, agentsSection } from "./utils/package-info.js";
7
8
  import { surfaces } from "./surfaces/index.js";
9
+ const INSTALL_ATTEMPTS = 3;
8
10
  // SUBSTRATE_REGISTRY_URL points installs at a local registry for testing
9
11
  const REGISTRY_BASE = process.env.SUBSTRATE_REGISTRY_URL ?? "https://substrate.georgedrury.co.uk/r";
10
12
  function printBanner() {
@@ -55,24 +57,35 @@ export async function scaffold(projectName, options) {
55
57
  }
56
58
  }
57
59
  log.success("Project files created");
60
+ const failedComponents = [];
58
61
  // 2. Install dependencies
59
62
  if (!skipInstall) {
60
63
  log.step(`Installing dependencies with ${packageManager}...`);
61
64
  exec(getInstallCommand(packageManager), { cwd: projectDir });
62
65
  log.success("Dependencies installed");
63
- // 3. Install Substrate components
66
+ // 3. Install Substrate components in one call so shared dependencies are
67
+ // resolved once. The project is new, so overwriting is safe and avoids
68
+ // prompts. Retry because one dropped request would otherwise leave a
69
+ // broken project.
64
70
  log.step("Installing Substrate components...");
65
- for (const component of config.components) {
66
- const url = `${REGISTRY_BASE}/${component}`;
71
+ const urls = config.components.map((component) => `${REGISTRY_BASE}/${component}`);
72
+ let installed = false;
73
+ for (let attempt = 1; attempt <= INSTALL_ATTEMPTS && !installed; attempt++) {
67
74
  try {
68
- exec(`npx shadcn@latest add ${url}`, { cwd: projectDir });
69
- log.step(` ${component}`);
75
+ exec(`npx shadcn@latest add --yes --overwrite ${urls.join(" ")}`, { cwd: projectDir });
76
+ installed = true;
70
77
  }
71
78
  catch {
72
- log.warn(` Failed to install ${component} — add later with: npx substrate-kit add ${component}`);
79
+ if (attempt < INSTALL_ATTEMPTS)
80
+ log.warn(" Retrying...");
73
81
  }
74
82
  }
75
- log.success("Substrate components installed");
83
+ if (installed) {
84
+ log.success("Substrate components installed");
85
+ }
86
+ else {
87
+ failedComponents.push(...config.components);
88
+ }
76
89
  }
77
90
  else {
78
91
  log.warn("Skipping dependency installation (--skip-install)");
@@ -81,19 +94,22 @@ export async function scaffold(projectName, options) {
81
94
  log.step("Installing skills...");
82
95
  try {
83
96
  const skillsSource = resolveSkillsDir();
84
- const skillsDest = join(projectDir, ".claude", "skills");
85
97
  const skillNames = listDirs(skillsSource);
86
- for (const skillName of skillNames) {
87
- copyDir(join(skillsSource, skillName), join(skillsDest, skillName));
98
+ // .claude/skills is read by Claude Code, .agents/skills by other agents
99
+ for (const dir of [".claude/skills", ".agents/skills"]) {
100
+ for (const skillName of skillNames) {
101
+ copyDir(join(skillsSource, skillName), join(projectDir, dir, skillName));
102
+ }
88
103
  }
89
- log.success(`Installed ${skillNames.length} skills`);
104
+ log.success(`Installed ${skillNames.length} skills into .claude/skills and .agents/skills`);
90
105
  }
91
106
  catch {
92
107
  log.warn("Could not install skills — run 'npx @substrate-kit/cli init' to add them later");
93
108
  }
94
- // 5. Write CLAUDE.md
95
- writeFile(join(projectDir, "CLAUDE.md"), claudeMd());
96
- log.success("Created CLAUDE.md");
109
+ // 5. Write the agent guidance once in AGENTS.md; CLAUDE.md imports it
110
+ writeFile(join(projectDir, "AGENTS.md"), agentsSection());
111
+ writeFile(join(projectDir, "CLAUDE.md"), "@AGENTS.md\n");
112
+ log.success("Created AGENTS.md and CLAUDE.md");
97
113
  // 6. Write .mcp.json
98
114
  writeFile(join(projectDir, ".mcp.json"), mcpJson());
99
115
  log.success("Created .mcp.json");
@@ -105,6 +121,16 @@ export async function scaffold(projectName, options) {
105
121
  execSilent('git commit -m "Initial commit from create-substrate"', projectDir);
106
122
  log.success("Git repository initialised");
107
123
  }
124
+ if (failedComponents.length > 0) {
125
+ log.blank();
126
+ log.error(`These components could not be downloaded: ${failedComponents.join(", ")}`);
127
+ log.error("The project will not build until they are installed. Check your connection, then run:");
128
+ log.info(` cd ${projectName}`);
129
+ log.info(` npx substrate-kit add ${failedComponents.join(" ")}`);
130
+ log.blank();
131
+ process.exitCode = 1;
132
+ return;
133
+ }
108
134
  // Done
109
135
  log.title("Your Substrate playground is ready");
110
136
  log.info(` cd ${projectName}`);
@@ -114,7 +140,7 @@ export async function scaffold(projectName, options) {
114
140
  log.blank();
115
141
  }
116
142
  // --- Template functions ---
117
- function packageJson(name, config, options) {
143
+ function packageJson(name, config, _options) {
118
144
  const deps = {
119
145
  react: "^19.1.0",
120
146
  "react-dom": "^19.1.0",
@@ -133,7 +159,7 @@ function packageJson(name, config, options) {
133
159
  "@types/react-dom": "^19",
134
160
  vite: "^6.3.0",
135
161
  "@vitejs/plugin-react": "^4.4.0",
136
- "@substrate-kit/cli": "^0.1.1",
162
+ "@substrate-kit/cli": CLI_RANGE,
137
163
  tailwindcss: "^4",
138
164
  "@tailwindcss/vite": "^4",
139
165
  "tw-animate-css": "^1.4.0",
@@ -209,11 +235,19 @@ export default defineConfig({
209
235
  }
210
236
  function indexHtml(title) {
211
237
  return `<!doctype html>
212
- <html lang="en" class="dark">
238
+ <html lang="en">
213
239
  <head>
214
240
  <meta charset="UTF-8" />
215
241
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
216
242
  <title>${title}</title>
243
+ <script>
244
+ // Follow the system theme. To force one, remove this script and set
245
+ // class="dark" (or nothing, for light) on <html>.
246
+ const darkMode = window.matchMedia("(prefers-color-scheme: dark)")
247
+ const applyTheme = () => document.documentElement.classList.toggle("dark", darkMode.matches)
248
+ applyTheme()
249
+ darkMode.addEventListener("change", applyTheme)
250
+ </script>
217
251
  </head>
218
252
  <body class="antialiased">
219
253
  <div id="root"></div>
@@ -291,6 +325,35 @@ function globalsCss(config) {
291
325
  }
292
326
 
293
327
  :root {
328
+ color-scheme: light;
329
+ --background: oklch(1 0 0);
330
+ --foreground: oklch(0.145 0 0);
331
+ --card: oklch(1 0 0);
332
+ --card-foreground: oklch(0.145 0 0);
333
+ --popover: oklch(1 0 0);
334
+ --popover-foreground: oklch(0.145 0 0);
335
+ --primary: oklch(0.205 0 0);
336
+ --primary-foreground: oklch(0.985 0 0);
337
+ --secondary: oklch(0.97 0 0);
338
+ --secondary-foreground: oklch(0.205 0 0);
339
+ --muted: oklch(0.97 0 0);
340
+ --muted-foreground: oklch(0.556 0 0);
341
+ --accent: oklch(0.97 0 0);
342
+ --accent-foreground: oklch(0.205 0 0);
343
+ --destructive: oklch(0.577 0.245 27.325);
344
+ --border: oklch(0.922 0 0);
345
+ --input: oklch(0.922 0 0);
346
+ --ring: oklch(0.708 0 0);
347
+ --radius: 0.625rem;
348
+ /* Substrate */
349
+ --canvas: oklch(0.97 0 0);
350
+ --canvas-foreground: oklch(0.556 0 0);
351
+ --panel: oklch(1 0 0);
352
+ --panel-foreground: oklch(0.145 0 0);${extra}
353
+ }
354
+
355
+ .dark {
356
+ color-scheme: dark;
294
357
  --background: oklch(0.145 0 0);
295
358
  --foreground: oklch(0.985 0 0);
296
359
  --card: oklch(0.205 0 0);
@@ -309,12 +372,11 @@ function globalsCss(config) {
309
372
  --border: oklch(1 0 0 / 10%);
310
373
  --input: oklch(1 0 0 / 15%);
311
374
  --ring: oklch(0.556 0 0);
312
- --radius: 0.625rem;
313
375
  /* Substrate */
314
376
  --canvas: oklch(17.764% 0.00002 271.152);
315
377
  --canvas-foreground: oklch(0.708 0 0);
316
378
  --panel: oklch(0.205 0 0);
317
- --panel-foreground: oklch(0.985 0 0);${extra}
379
+ --panel-foreground: oklch(0.985 0 0);
318
380
  }
319
381
 
320
382
  @layer base {
@@ -326,6 +388,18 @@ function globalsCss(config) {
326
388
  }
327
389
  }
328
390
 
391
+ /* Honour the system setting: no transitions or animations for people who
392
+ asked for less motion */
393
+ @media (prefers-reduced-motion: reduce) {
394
+ *,
395
+ ::before,
396
+ ::after {
397
+ animation-duration: 0.01ms !important;
398
+ animation-iteration-count: 1 !important;
399
+ transition-duration: 0.01ms !important;
400
+ }
401
+ }
402
+
329
403
  @keyframes collapsible-down {
330
404
  from {
331
405
  height: 0;
@@ -417,51 +491,4 @@ function mcpJson() {
417
491
  },
418
492
  }, null, 2) + "\n";
419
493
  }
420
- function claudeMd() {
421
- return `# Substrate
422
-
423
- This project uses [Substrate](https://substrate.georgedrury.co.uk) — a creative app framework that provides scaffold (toolbar, panels, panes, stores, shortcuts) around different surface types.
424
-
425
- ## Skills
426
-
427
- Substrate skills are installed in \`.claude/skills/\`. They are organised into two groups:
428
-
429
- ### Surface guides (how to build)
430
-
431
- - **scaffold-playground** — bootstrapping a new playground
432
- - **canvas-2d** / **3d-scene** / **animation** / **image-generation** / **data-visualisation** — surface-specific architecture
433
- - **composing-panels** / **wire-interactions** / **create-custom-tool** / **theming** — workflow guides
434
- - **install-components** — full catalogue of available components + how to install via \`substrate-kit add\`
435
-
436
- ### Component reference (what to use)
437
-
438
- - **substrate-scaffold** — Toolbar, Panel, Pane, DocumentTabs, StatusBar, ZoomControls, Breadcrumbs, Resizer
439
- - **substrate-controls** — NumberInput, Slider, NumberSlider, Select, Toggle, TextArea, ColourPicker, ActionControls
440
- - **substrate-canvas** — useViewport, useSelection, useDragReorder, snap, boundingBox, hit testing
441
- - **substrate-nodes** — Node cards, typed ports, port colour theming
442
- - **substrate-feedback** — Toast, ProgressBar, Badge, EmptyState, CommandPalette, ContextMenu, ShortcutOverlay
443
- - **substrate-interaction** — useUndoable, useClipboard, createKeyboardShortcuts, HistoryControls, LayerList, TreeList
444
-
445
- ## Install components
446
-
447
- **Always prefer existing Substrate components over writing custom ones.** Substrate ships sliders, number inputs, toggles, colour pickers, context menus, command palettes, toolbars, panels, timelines, and more — see the \`install-components\` skill for the full catalogue.
448
-
449
- \`\`\`bash
450
- # Core scaffold
451
- npx substrate-kit add design-canvas toolbar panel pane action slider
452
-
453
- # Surface components
454
- npx substrate-kit add surface timeline gallery colour-picker easing-curve-editor
455
-
456
- # Interactive picker (no args)
457
- npx substrate-kit add
458
- \`\`\`
459
-
460
- Do **not** run \`npx shadcn@latest add\` directly for Substrate components — always go through \`substrate-kit add\`.
461
-
462
- ## Registry
463
-
464
- Components are installed from \`substrate.georgedrury.co.uk/r/\` via the Substrate CLI, which wraps shadcn under the hood.
465
- `;
466
- }
467
494
  //# sourceMappingURL=scaffold.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"3d-scene.d.ts","sourceRoot":"","sources":["../../src/surfaces/3d-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,eAAO,MAAM,OAAO,EAAE,aAihBrB,CAAA"}
1
+ {"version":3,"file":"3d-scene.d.ts","sourceRoot":"","sources":["../../src/surfaces/3d-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,eAAO,MAAM,OAAO,EAAE,aAkfrB,CAAA"}