create-ragen-app 0.6.0 → 0.6.2

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/README.md CHANGED
@@ -33,14 +33,32 @@ yourself.
33
33
 
34
34
  ## Node version
35
35
 
36
- A Ragen installation needs Node 24, and the wizard refuses to create one on
37
- anything older _before_ it clones. Not because the CLI needs it — it does not,
38
- and 0.2.0 was published and verified on Node 22 by accident — but because the
39
- setup it runs for you (`npm install` across the monorepo, `prisma generate`,
40
- `migrate deploy`, the seed) runs under the caller's Node and leaves a tree
41
- that fails much later, nowhere near the cause. npm's `EBADENGINE` does warn,
36
+ A Ragen installation runs on `^24.15.0 || >=26.0.0`, and the wizard refuses
37
+ anything outside that _before_ it clones. Not because the CLI needs it —
38
+ it does not, and 0.2.0 was published and verified on Node 22 by accident — but
39
+ because the setup it runs for you (`npm install` across the monorepo, `prisma
40
+ generate`, `migrate deploy`, the seed) runs under the caller's Node and leaves a
41
+ tree that fails much later, nowhere near the cause. npm's `EBADENGINE` does warn,
42
42
  as one line inside a wall of install output that does not say what breaks.
43
43
 
44
+ **It is a range rather than a minimum, and both ends matter.** `jsdom` — a
45
+ transitive dependency, which narrowed its range with no version bump of ours —
46
+ requires `^22.22.2 || ^24.15.0 || >=26.0.0`, and the repository sets
47
+ `engine-strict=true`, so npm stops rather than warns. Two consequences:
48
+
49
+ - Node 24.0 through 24.14 fail `npm install` while looking, to every other
50
+ check, like a supported Node. The refusal names the reason, because "needs
51
+ Node 24" read by someone who has Node 24 is a riddle.
52
+ - **Node 25 fails too**, and no minimum version can say so — `>=24.15.0` accepts
53
+ it. Odd-numbered Node lines never become LTS and libraries routinely omit
54
+ them, so the gap is normal rather than an oversight. A caller on 25 gets a
55
+ refusal that says "newer than the minimum and still not supported", not "too
56
+ old", which would send them to upgrade again.
57
+
58
+ Node 22 is inside jsdom's range and deliberately outside ours: this repository
59
+ has required 24 since long before any of this, and widening support is a
60
+ decision rather than a consequence of a dependency's range.
61
+
44
62
  `--skip-install` turns the refusal into a warning, because then the wizard
45
63
  runs nothing itself: scaffold here, run the setup on a supported Node. `--yes`
46
64
  does not bypass it — that flag means "accept the defaults", not "ignore a
@@ -66,7 +84,8 @@ What counts as install-affecting:
66
84
  | An app the web app can no longer run without | the outro in `src/cli.ts`, which tells people what to start |
67
85
  | A variable a provider seam makes required | `src/worker-runtime.ts`, `src/storage-provider.ts` or `src/encryption-provider.ts` — the selection writes it, and `tests/architecture/create-ragen-app-knows-the-provider-seams.test.ts` fails when it does not |
68
86
  | A new first-run step (migration, seed, generate) | `src/tasks.ts` and `maybeRunFirstTimeSetup` |
69
- | A `docker-compose.yml` service, port or name change | `src/tasks.ts`, and the collision check in `ragenStackVolumeExists` |
87
+ | A `docker-compose.yml` service or published port change | `PUBLISHED_PORTS` in `src/tasks.ts` — the wizard probes those ports before starting the stack, and `tests/architecture/installer-ports-agree-with-compose.test.ts` fails when the two tables disagree |
88
+ | A change to how Compose scopes its resources | `resolveComposeProjectName` in `src/tasks.ts` — it writes `COMPOSE_PROJECT_NAME` into the install's `.env`, which is the only thing keeping two installs in same-named directories apart |
70
89
  | A gate that a brand-new install cannot pass (registration, licensing, onboarding) | usually the app, not this package — a fresh install must be able to reach a working chat without an administrator who does not exist yet |
71
90
 
72
91
  `tests/architecture/create-ragen-app-manifest-is-current.test.ts` catches one
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAoFA;;;;;;GAMG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA6P1D"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAuFA;;;;;;GAMG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA2Q1D"}
package/dist/cli.js CHANGED
@@ -154,6 +154,11 @@ async function run(argv) {
154
154
  ].join('\n'));
155
155
  return false;
156
156
  }
157
+ // Compose's project name, pinned for this directory before anything starts.
158
+ // Two installs whose directories share a basename would otherwise share the
159
+ // project — and therefore the containers and volumes — and a *stopped* first
160
+ // stack makes that silent: no port is held, so nothing refuses.
161
+ await writeComposeProjectName(targetDir);
157
162
  // After the env write, so a run that stops on drifted keys has not already
158
163
  // rewritten a file in the clone.
159
164
  try {
@@ -208,10 +213,9 @@ async function run(argv) {
208
213
  `Exact values for OpenAI and Anthropic are written to ${guidePath}.`,
209
214
  ].join('\n'), 'Configure a model later');
210
215
  }
216
+ let dockerFailed = false;
211
217
  if (!args.skipDocker) {
212
- if (!(await maybeStartDocker(targetDir, args.yes, piiMasking.composeProfiles))) {
213
- return false;
214
- }
218
+ ({ failed: dockerFailed } = await maybeStartDocker(targetDir, args.yes, piiMasking.composeProfiles));
215
219
  }
216
220
  if (!args.skipInstall) {
217
221
  // prisma.config.ts reads DATABASE_URL from process.env directly, and
@@ -220,7 +224,7 @@ async function run(argv) {
220
224
  // .env.local themselves — so the values just written have to be passed
221
225
  // through explicitly.
222
226
  const rootEnv = (0, dotenv_1.parse)(rootWrite.content);
223
- if (!(await maybeRunFirstTimeSetup(targetDir, args.yes, rootEnv))) {
227
+ if (!(await maybeRunFirstTimeSetup(targetDir, args.yes, rootEnv, dockerFailed))) {
224
228
  return false;
225
229
  }
226
230
  }
@@ -322,6 +326,98 @@ function overridesForTarget(target, resolved) {
322
326
  }
323
327
  return overrides;
324
328
  }
329
+ /**
330
+ * Writes `COMPOSE_PROJECT_NAME` into the new tree's `.env`.
331
+ *
332
+ * `.env`, not `.env.local`, and the distinction is the point: Compose reads
333
+ * `.env` from the project directory by itself, so every later `docker compose`
334
+ * the caller runs — days after this wizard exited — uses the same name. A
335
+ * value passed only in the installer's own environment would name one project
336
+ * here and a different one afterwards, which is the empty-database failure
337
+ * rather than a fix for it.
338
+ *
339
+ * Safe to sit beside the install's own config: `scripts/load-root-env.mjs`
340
+ * reads `.env` last, `.env.local` wins over it, nothing in the apps reads this
341
+ * variable, and `.env` is gitignored.
342
+ *
343
+ * Failure here is a warning, not an abort. The files are correct and Compose
344
+ * still works — it simply falls back to the basename, which is where this
345
+ * started.
346
+ */
347
+ async function writeComposeProjectName(targetDir) {
348
+ // An existing value wins over anything resolved here, and this is not
349
+ // politeness — it is what makes the mechanism stable. Re-running the wizard
350
+ // over a tree that already has a stack must not rename its project: the new
351
+ // name would address empty volumes and abandon the database the first run
352
+ // migrated. That can happen for an innocent reason too — the first run
353
+ // decided while Docker was up, this one cannot reach it — so the rule is
354
+ // "whatever this directory already decided", not "whatever we would decide
355
+ // again".
356
+ const existing = readComposeProjectName(targetDir);
357
+ if (existing) {
358
+ clack.log.info(`Keeping this directory's Compose project name: ${existing} (from .env).`);
359
+ return;
360
+ }
361
+ const project = await (0, tasks_1.resolveComposeProjectName)(targetDir);
362
+ try {
363
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(targetDir, '.env'), [
364
+ "# Read by docker compose, not by the apps. It scopes this install's",
365
+ '# containers, volumes and network, so a second Ragen checkout cannot',
366
+ '# reuse them — which it would if both directories had the same name,',
367
+ '# since that basename is what Compose uses when this is unset.',
368
+ `COMPOSE_PROJECT_NAME=${project.name}`,
369
+ '',
370
+ ].join('\n'), { mode: 0o600 });
371
+ }
372
+ catch (error) {
373
+ clack.log.warn([
374
+ `Could not write .env with COMPOSE_PROJECT_NAME: ${String(error)}`,
375
+ "Compose will fall back to this directory's name, which another",
376
+ `install in a directory called "${(0, node_path_1.basename)((0, node_path_1.resolve)(targetDir))}" would`,
377
+ 'share — add the line by hand if you have one.',
378
+ ].join('\n'));
379
+ return;
380
+ }
381
+ if (project.daemonUnreachable) {
382
+ // Not a collision — a question that could not be asked. Said plainly, or
383
+ // the hashed name in `docker ps` looks like something went wrong.
384
+ clack.log.info([
385
+ 'Could not ask Docker which Compose projects exist, so this install',
386
+ `took a name derived from its path: ${project.name}. A stopped daemon`,
387
+ 'still holds the volumes of earlier installs, and the plain directory',
388
+ 'name would have reused them.',
389
+ ].join(' '));
390
+ return;
391
+ }
392
+ if (project.disambiguated) {
393
+ clack.log.warn([
394
+ `This machine already runs a Compose project called "${(0, node_path_1.basename)((0, node_path_1.resolve)(targetDir))}"`,
395
+ project.takenBy ? `(from ${project.takenBy}).` : '.',
396
+ '',
397
+ 'Compose names a project after its directory, so this install would',
398
+ "have reused that one's containers and volumes — including its",
399
+ `database. Written .env with COMPOSE_PROJECT_NAME=${project.name}`,
400
+ 'instead, so the two stay apart. Host ports are separate and may still',
401
+ 'collide; see below.',
402
+ ].join(' '));
403
+ }
404
+ }
405
+ /**
406
+ * Reads `COMPOSE_PROJECT_NAME` back out of an install's `.env`, or undefined
407
+ * when there is no such file or no such line. Parsed with dotenv rather than a
408
+ * regex so a quoted value reads the same way Compose reads it.
409
+ */
410
+ function readComposeProjectName(targetDir) {
411
+ try {
412
+ const parsed = (0, dotenv_1.parse)((0, node_fs_1.readFileSync)((0, node_path_1.join)(targetDir, '.env'), 'utf8'));
413
+ const name = parsed.COMPOSE_PROJECT_NAME?.trim();
414
+ return name === undefined || name === '' ? undefined : name;
415
+ }
416
+ catch {
417
+ // No `.env` is the normal case on a fresh clone.
418
+ return undefined;
419
+ }
420
+ }
325
421
  function writeEnvFile(targetDir, target, overrides) {
326
422
  const paths = ENV_PATHS[target];
327
423
  const examplePath = (0, node_path_1.join)(targetDir, paths.example);
@@ -710,35 +806,48 @@ async function runStep(spinner, label, successMessage, task) {
710
806
  spinner.stop(successMessage);
711
807
  return true;
712
808
  }
809
+ /**
810
+ * `failed` is *not* the same as "the user declined": someone running their own
811
+ * Postgres answers no and their database is fine. Only a compose that tried and
812
+ * could not is a reason to keep migrations away from it.
813
+ */
713
814
  async function maybeStartDocker(targetDir, yes, profiles = []) {
714
815
  const withPii = profiles.includes(pii_masking_1.PII_COMPOSE_PROFILE);
715
- // Before the confirm, not after: sharing a database with an install you
716
- // already depend on is the kind of thing to decline, and you can only
816
+ // Before the confirm, not after: starting a stack onto ports something else
817
+ // already answers on is the kind of thing to decline, and you can only
717
818
  // decline it if you are told first.
718
- if (await (0, tasks_1.ragenStackVolumeExists)()) {
819
+ //
820
+ // This used to warn about *data* — pinned volume names meant a second
821
+ // install silently opened the first one's database. docker-compose.yml no
822
+ // longer pins them, so containers, volumes and the network are scoped to the
823
+ // project directory and two installs coexist. Ports are the half that
824
+ // prefixing cannot fix: a published port is a host port either way.
825
+ const candidates = withPii
826
+ ? [...tasks_1.PUBLISHED_PORTS, ...tasks_1.PII_PUBLISHED_PORTS]
827
+ : tasks_1.PUBLISHED_PORTS;
828
+ const busy = await (0, tasks_1.busyPublishedPorts)(candidates);
829
+ if (busy.length > 0) {
719
830
  clack.log.warn([
720
- 'This machine already runs a Ragen stack, and docker-compose.yml pins',
721
- 'container, volume and network names globally — so starting this one',
722
- 'would reuse the existing Postgres and Qdrant data, not create its own.',
831
+ 'Something is already listening on ports this stack publishes:',
832
+ '',
833
+ ...busy.map(({ service, variable, port }) => ` ${port} ${service} (${variable})`),
723
834
  '',
724
- 'To keep them apart, answer no here and start the stack yourself under a',
725
- 'distinct name *and* distinct host ports — the name only moves the',
726
- 'containers and volumes, while the published ports would still collide',
727
- 'with the running stack:',
835
+ 'Usually that is another Ragen install. Its containers and volumes no',
836
+ 'longer collide with this one — Compose scopes those to the directory —',
837
+ 'but a host port belongs to whoever bound it first, so `docker compose',
838
+ 'up` will fail, and worse, DATABASE_URL here would point at that other',
839
+ "install's Postgres if it did not.",
840
+ '',
841
+ 'Answer no here and start this stack on ports of its own:',
728
842
  '',
729
843
  ` cd ${targetDir} \\`,
730
- ' && RAGEN_STACK_NAME=my-ragen \\',
731
- ' POSTGRES_PORT=55532 QDRANT_PORT=6343 QDRANT_GRPC_PORT=6344 \\',
732
- ' DOCLING_PORT=5011 REDIS_PORT=56479 \\',
844
+ ` && ${busy.map(({ variable, port }) => `${variable}=${port + 100}`).join(' ')} \\`,
733
845
  // Built from what this install actually chose. A command that omits
734
846
  // the profile starts a stack without the services whose urls were just
735
847
  // written — which is the same half-configuration the profile exists to
736
848
  // prevent, only printed instead of executed.
737
849
  ...(withPii
738
- ? [
739
- ' PRESIDIO_ANALYZER_PORT=5012 PRESIDIO_ANONYMIZER_PORT=5013 \\',
740
- ` docker compose --profile ${pii_masking_1.PII_COMPOSE_PROFILE} up -d`,
741
- ]
850
+ ? [` docker compose --profile ${pii_masking_1.PII_COMPOSE_PROFILE} up -d`]
742
851
  : [' docker compose up -d']),
743
852
  '',
744
853
  'Then update .env.local to match: DATABASE_URL, QDRANT_URL, REDIS_URL',
@@ -754,15 +863,56 @@ async function maybeStartDocker(targetDir, yes, profiles = []) {
754
863
  }
755
864
  const proceed = await confirmOrSkip('Start the backing services now? (Postgres, Qdrant, Redis, …)', yes);
756
865
  if (!proceed) {
757
- return true;
866
+ return { failed: false };
758
867
  }
759
868
  if (!(await (0, tasks_1.isDockerAvailable)())) {
760
869
  clack.log.warn('Docker does not seem to be available — skipping. Install Docker and run `docker compose up -d` yourself.');
761
- return true;
870
+ return { failed: false };
762
871
  }
763
- return runStep(clack.spinner(), 'Starting docker compose (Postgres, Qdrant, Redis, …)', 'Backing services started.', () => (0, tasks_1.startDockerServices)({ cwd: targetDir, profiles }));
872
+ const spinner = clack.spinner();
873
+ spinner.start('Starting docker compose (Postgres, Qdrant, Redis, …)');
874
+ try {
875
+ await (0, tasks_1.startDockerServices)({ cwd: targetDir, profiles });
876
+ spinner.stop('Backing services started.');
877
+ }
878
+ catch (error) {
879
+ // **Not fatal, deliberately.** Every other step here aborts the install on
880
+ // failure because it would leave a tree that fails later; this one is the
881
+ // exception. The files are already written and correct, and the usual
882
+ // reason compose fails is the one the warning above predicts — another
883
+ // Ragen stack holding these container names and ports. Stopping there
884
+ // leaves someone with a complete install, a raw `ExecaError` and no next
885
+ // step, which is how a first run ends in a support question.
886
+ spinner.stop('Backing services — not started.', 1);
887
+ clack.log.warn([
888
+ 'docker compose could not start the services, and the install carried',
889
+ 'on: the files are written, so this is the one step you can redo by',
890
+ 'hand. The usual cause is another stack already holding these host',
891
+ 'ports — compose says so with "port is already allocated".',
892
+ '',
893
+ 'Either stop the other stack, or start this one on ports of its own,',
894
+ 'then point .env.local at them.',
895
+ '',
896
+ `The error was: ${String(error)}`,
897
+ ].join('\n'));
898
+ return { failed: true };
899
+ }
900
+ return { failed: false };
764
901
  }
765
- async function maybeRunFirstTimeSetup(targetDir, yes, env) {
902
+ /**
903
+ * `skipDatabaseSteps` is the compose failure reaching this far, and it is not
904
+ * caution for its own sake. The usual cause of that failure is another stack
905
+ * holding these host ports — which means its Postgres is answering on the very
906
+ * port this install was just configured for. Running `migrate
907
+ * deploy` and the seed then writes into *that* install's database: the exact
908
+ * thing the warning two prompts earlier exists to prevent, arrived at by a
909
+ * different road.
910
+ *
911
+ * npm install and `prisma generate` still run. Both are local to the new tree,
912
+ * neither opens a connection, and skipping them would leave something that
913
+ * cannot be finished by hand.
914
+ */
915
+ async function maybeRunFirstTimeSetup(targetDir, yes, env, skipDatabaseSteps = false) {
766
916
  const proceed = await confirmOrSkip('Install dependencies and run first-time setup (prisma generate, migrate, seed)?', yes);
767
917
  if (!proceed) {
768
918
  return true;
@@ -779,22 +929,38 @@ async function maybeRunFirstTimeSetup(targetDir, yes, env) {
779
929
  'Prisma client generated.',
780
930
  () => (0, tasks_1.generatePrismaClient)({ cwd: targetDir, env }),
781
931
  ],
782
- [
783
- 'Applying database migrations',
784
- 'Migrations applied.',
785
- () => (0, tasks_1.migrateDatabase)({ cwd: targetDir, env }),
786
- ],
787
- [
788
- 'Seeding the database',
789
- 'Database seeded.',
790
- () => (0, tasks_1.seedDatabase)({ cwd: targetDir, env }),
791
- ],
932
+ ...(skipDatabaseSteps
933
+ ? []
934
+ : [
935
+ [
936
+ 'Applying database migrations',
937
+ 'Migrations applied.',
938
+ () => (0, tasks_1.migrateDatabase)({ cwd: targetDir, env }),
939
+ ],
940
+ [
941
+ 'Seeding the database',
942
+ 'Database seeded.',
943
+ () => (0, tasks_1.seedDatabase)({ cwd: targetDir, env }),
944
+ ],
945
+ ]),
792
946
  ];
793
947
  for (const [label, successMessage, task] of steps) {
794
948
  if (!(await runStep(spinner, label, successMessage, task))) {
795
949
  return false;
796
950
  }
797
951
  }
952
+ if (skipDatabaseSteps) {
953
+ clack.log.warn([
954
+ 'Migrations and seeding were skipped, because the services did not',
955
+ 'start. A Postgres may well be answering on that port — the one',
956
+ 'belonging to the stack that refused to make room — and migrating into',
957
+ 'it would touch an install you did not mean to change.',
958
+ '',
959
+ 'Once this install has services of its own:',
960
+ ' npx prisma migrate deploy',
961
+ ' npm run db:seed',
962
+ ].join('\n'));
963
+ }
798
964
  return true;
799
965
  }
800
966
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Whether this Node can be used to create a Ragen installation.
3
3
  *
4
- * The distinction that matters: **the installation** needs Node 24, not this
5
- * CLI. The CLI itself runs happily on older majors — it was published and
4
+ * The distinction that matters: **the installation** needs a recent Node, not
5
+ * this CLI. The CLI itself runs happily on older majors — it was published and
6
6
  * verified on Node 22 by accident — so refusing on the grounds that "this
7
7
  * tool requires Node 24" would be both untrue and unhelpfully broad.
8
8
  *
@@ -18,17 +18,52 @@
18
18
  *
19
19
  * - running the setup steps → refuse, before anything is cloned
20
20
  * - `--skip-install` → proceed, because nothing runs here; warn instead,
21
- * since the scaffolded app still needs Node 24 to start
21
+ * since the scaffolded app still needs a supported Node to start
22
22
  *
23
23
  * `--yes` deliberately does not bypass it. That flag means "accept the
24
24
  * defaults", not "ignore a requirement".
25
25
  */
26
26
  /**
27
- * Kept in step with this package's `engines.node` by
28
- * `src/__tests__/node-version.test.ts`, and with the repository's own Node
29
- * version documented in AGENTS.md ("Node.js 24.x (Active LTS)").
27
+ * What the install actually runs on — a set of ranges, not a floor, and both
28
+ * the patch digit and the gap are load-bearing.
29
+ *
30
+ * A bare major used to be enough, and stopped being enough when a transitive
31
+ * dependency narrowed its own range mid-line. `jsdom@30.0.1` requires
32
+ * `^22.22.2 || ^24.15.0 || >=26.0.0`, and the repository sets
33
+ * `engine-strict=true`, so npm *stops* on a mismatch rather than warning.
34
+ * Two consequences, and only the first was obvious:
35
+ *
36
+ * - **Node 24.0–24.14 fail `npm install`.** The old `>=24` check waved them
37
+ * through, so someone on 24.13 got a cloned tree, a written `.env.local`, a
38
+ * running docker compose, and then EBADENGINE.
39
+ * - **Node 25 fails too, and a floor cannot say that.** `>=24.15.0` accepts
40
+ * 25.x, which that range skips entirely. Odd-numbered Node lines are never
41
+ * LTS and libraries routinely omit them, so the gap is normal rather than an
42
+ * oversight — and a single minimum version cannot express it.
43
+ *
44
+ * Node 22 is inside jsdom's range and deliberately *not* here: the repository
45
+ * has required 24 since long before this, and widening support is a decision,
46
+ * not a consequence of a dependency's range.
47
+ *
48
+ * Kept in step with `engines.node` across the root and every workspace by
49
+ * `tests/architecture/the-node-floor-is-one-number.test.ts`, with this
50
+ * package's own `engines` by `src/__tests__/node-version.test.ts`, and proved
51
+ * against real Nodes by `.github/workflows/installer.yml`, which pins 24.14
52
+ * (must refuse), 25 (must refuse) and 24.15 (must scaffold).
53
+ */
54
+ export declare const SUPPORTED_NODE_RANGES: readonly [{
55
+ readonly from: "24.15.0";
56
+ readonly belowMajor: 25;
57
+ }, {
58
+ readonly from: "26.0.0";
59
+ }];
60
+ /** The oldest Node the install accepts — the first range's start. */
61
+ export declare const REQUIRED_NODE_VERSION: "24.15.0";
62
+ /**
63
+ * The same thing in the notation `engines.node` uses, so one constant can be
64
+ * compared against twenty-one manifests instead of being retyped into them.
30
65
  */
31
- export declare const REQUIRED_NODE_MAJOR = 24;
66
+ export declare const SUPPORTED_NODE_ENGINES_RANGE: string;
32
67
  export type NodeVersionVerdict = {
33
68
  kind: 'ok';
34
69
  } | {
@@ -39,16 +74,41 @@ export type NodeVersionVerdict = {
39
74
  message: string;
40
75
  };
41
76
  export interface NodeVersionCheck {
42
- /** As `process.version` gives it, e.g. `v22.22.3`. */
77
+ /** As `process.version` gives it, e.g. `v24.13.0`. */
43
78
  version: string;
44
79
  /** False when `--skip-install` means the wizard runs nothing itself. */
45
80
  willRunSetup: boolean;
46
81
  }
82
+ export interface NodeVersion {
83
+ major: number;
84
+ minor: number;
85
+ patch: number;
86
+ /**
87
+ * The `-nightly`/`-rc.1` tail, without its dash. Kept because dropping it
88
+ * would make a prerelease compare equal to the release it precedes, and
89
+ * semver puts it *below*: `24.15.0-nightly` does not satisfy `^24.15.0`.
90
+ * npm checks engines with `includePrerelease: true`, which changes which
91
+ * prereleases pass but not that one — so ignoring the tail would accept a
92
+ * Node whose `npm install` fails, which is this whole exercise again.
93
+ */
94
+ prerelease?: string;
95
+ }
47
96
  /**
48
97
  * Returns undefined for anything that is not a recognisable Node version, so
49
- * an unexpected format cannot be read as "too old" and block an install that
50
- * would have worked.
98
+ * an unexpected format cannot be read as unsupported and block an install that
99
+ * would have worked. A version missing its patch digit counts as unreadable
100
+ * for the same reason: guessing `.0` would refuse a release that may be fine.
101
+ */
102
+ export declare function parseNodeVersion(version: string): NodeVersion | undefined;
103
+ export declare function formatNodeVersion({ major, minor, patch, prerelease, }: NodeVersion): string;
104
+ /**
105
+ * Whether a version falls inside any supported range.
106
+ *
107
+ * A range with `belowMajor` is closed at that major (`^24.15.0`); one without
108
+ * is open above (`>=26.0.0`). An unparseable range entry cannot happen — the
109
+ * table is a literal in this file — but it fails *open* if it ever does,
110
+ * matching `parseNodeVersion`.
51
111
  */
52
- export declare function parseNodeMajor(version: string): number | undefined;
112
+ export declare function isSupportedNodeVersion(version: NodeVersion): boolean;
53
113
  export declare function checkNodeVersion({ version, willRunSetup, }: NodeVersionCheck): NodeVersionVerdict;
54
114
  //# sourceMappingURL=node-version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMlE;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,YAAY,GACb,EAAE,gBAAgB,GAAG,kBAAkB,CAkCvC"}
1
+ {"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,qBAAqB;;;;;EAGxB,CAAC;AAEX,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,WAAgC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,4BAA4B,QAE3B,CAAC;AAWf,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAazE;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,KAAK,EACL,UAAU,GACX,EAAE,WAAW,GAAG,MAAM,CAGtB;AAqBD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAWpE;AA6CD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,YAAY,GACb,EAAE,gBAAgB,GAAG,kBAAkB,CA4CvC"}
@@ -2,8 +2,8 @@
2
2
  /**
3
3
  * Whether this Node can be used to create a Ragen installation.
4
4
  *
5
- * The distinction that matters: **the installation** needs Node 24, not this
6
- * CLI. The CLI itself runs happily on older majors — it was published and
5
+ * The distinction that matters: **the installation** needs a recent Node, not
6
+ * this CLI. The CLI itself runs happily on older majors — it was published and
7
7
  * verified on Node 22 by accident — so refusing on the grounds that "this
8
8
  * tool requires Node 24" would be both untrue and unhelpfully broad.
9
9
  *
@@ -19,43 +19,172 @@
19
19
  *
20
20
  * - running the setup steps → refuse, before anything is cloned
21
21
  * - `--skip-install` → proceed, because nothing runs here; warn instead,
22
- * since the scaffolded app still needs Node 24 to start
22
+ * since the scaffolded app still needs a supported Node to start
23
23
  *
24
24
  * `--yes` deliberately does not bypass it. That flag means "accept the
25
25
  * defaults", not "ignore a requirement".
26
26
  */
27
27
  Object.defineProperty(exports, "__esModule", { value: true });
28
- exports.REQUIRED_NODE_MAJOR = void 0;
29
- exports.parseNodeMajor = parseNodeMajor;
28
+ exports.SUPPORTED_NODE_ENGINES_RANGE = exports.REQUIRED_NODE_VERSION = exports.SUPPORTED_NODE_RANGES = void 0;
29
+ exports.parseNodeVersion = parseNodeVersion;
30
+ exports.formatNodeVersion = formatNodeVersion;
31
+ exports.isSupportedNodeVersion = isSupportedNodeVersion;
30
32
  exports.checkNodeVersion = checkNodeVersion;
31
33
  /**
32
- * Kept in step with this package's `engines.node` by
33
- * `src/__tests__/node-version.test.ts`, and with the repository's own Node
34
- * version documented in AGENTS.md ("Node.js 24.x (Active LTS)").
34
+ * What the install actually runs on — a set of ranges, not a floor, and both
35
+ * the patch digit and the gap are load-bearing.
36
+ *
37
+ * A bare major used to be enough, and stopped being enough when a transitive
38
+ * dependency narrowed its own range mid-line. `jsdom@30.0.1` requires
39
+ * `^22.22.2 || ^24.15.0 || >=26.0.0`, and the repository sets
40
+ * `engine-strict=true`, so npm *stops* on a mismatch rather than warning.
41
+ * Two consequences, and only the first was obvious:
42
+ *
43
+ * - **Node 24.0–24.14 fail `npm install`.** The old `>=24` check waved them
44
+ * through, so someone on 24.13 got a cloned tree, a written `.env.local`, a
45
+ * running docker compose, and then EBADENGINE.
46
+ * - **Node 25 fails too, and a floor cannot say that.** `>=24.15.0` accepts
47
+ * 25.x, which that range skips entirely. Odd-numbered Node lines are never
48
+ * LTS and libraries routinely omit them, so the gap is normal rather than an
49
+ * oversight — and a single minimum version cannot express it.
50
+ *
51
+ * Node 22 is inside jsdom's range and deliberately *not* here: the repository
52
+ * has required 24 since long before this, and widening support is a decision,
53
+ * not a consequence of a dependency's range.
54
+ *
55
+ * Kept in step with `engines.node` across the root and every workspace by
56
+ * `tests/architecture/the-node-floor-is-one-number.test.ts`, with this
57
+ * package's own `engines` by `src/__tests__/node-version.test.ts`, and proved
58
+ * against real Nodes by `.github/workflows/installer.yml`, which pins 24.14
59
+ * (must refuse), 25 (must refuse) and 24.15 (must scaffold).
60
+ */
61
+ exports.SUPPORTED_NODE_RANGES = [
62
+ { from: '24.15.0', belowMajor: 25 },
63
+ { from: '26.0.0' },
64
+ ];
65
+ /** The oldest Node the install accepts — the first range's start. */
66
+ exports.REQUIRED_NODE_VERSION = exports.SUPPORTED_NODE_RANGES[0].from;
67
+ /**
68
+ * The same thing in the notation `engines.node` uses, so one constant can be
69
+ * compared against twenty-one manifests instead of being retyped into them.
70
+ */
71
+ exports.SUPPORTED_NODE_ENGINES_RANGE = exports.SUPPORTED_NODE_RANGES.map((range) => ('belowMajor' in range ? `^${range.from}` : `>=${range.from}`)).join(' || ');
72
+ /**
73
+ * Why the range is shaped the way it is. Named in the refusal, because
74
+ * "you need 24.15" read by someone who *has* Node 24 is a riddle, not an
75
+ * instruction — and "you need 24.15 or newer" read by someone on Node 25 is
76
+ * simply wrong.
35
77
  */
36
- exports.REQUIRED_NODE_MAJOR = 24;
78
+ const REQUIRED_NODE_REASON = 'jsdom, a transitive dependency, requires ^22.22.2 || ^24.15.0 || >=26.0.0, and this repository sets engine-strict=true — so npm stops rather than warns.';
37
79
  /**
38
80
  * Returns undefined for anything that is not a recognisable Node version, so
39
- * an unexpected format cannot be read as "too old" and block an install that
40
- * would have worked.
81
+ * an unexpected format cannot be read as unsupported and block an install that
82
+ * would have worked. A version missing its patch digit counts as unreadable
83
+ * for the same reason: guessing `.0` would refuse a release that may be fine.
41
84
  */
42
- function parseNodeMajor(version) {
43
- const match = /^v?(\d+)\./.exec(version.trim());
85
+ function parseNodeVersion(version) {
86
+ const match = /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/.exec(version.trim());
44
87
  if (!match) {
45
88
  return undefined;
46
89
  }
47
- return Number(match[1]);
90
+ return {
91
+ major: Number(match[1]),
92
+ minor: Number(match[2]),
93
+ patch: Number(match[3]),
94
+ ...(match[4] === undefined ? {} : { prerelease: match[4] }),
95
+ };
96
+ }
97
+ function formatNodeVersion({ major, minor, patch, prerelease, }) {
98
+ const base = `${major}.${minor}.${patch}`;
99
+ return prerelease === undefined ? base : `${base}-${prerelease}`;
100
+ }
101
+ /**
102
+ * Negative when `a` is older than `b`, positive when newer, 0 when equal.
103
+ *
104
+ * Prereleases follow semver: `24.15.0-rc.1` is *older* than `24.15.0`, which
105
+ * is the rule that matters here — it is what makes a prerelease of a range's
106
+ * starting version fall outside that range, exactly as npm finds it.
107
+ * Prereleases are not ordered against each other, because nothing here needs
108
+ * it: a version either reaches a range's start or it does not.
109
+ */
110
+ function compareNodeVersions(a, b) {
111
+ const numeric = a.major - b.major || a.minor - b.minor || a.patch - b.patch;
112
+ if (numeric !== 0) {
113
+ return numeric;
114
+ }
115
+ const aPre = a.prerelease === undefined ? 0 : -1;
116
+ const bPre = b.prerelease === undefined ? 0 : -1;
117
+ return aPre - bPre;
118
+ }
119
+ /**
120
+ * Whether a version falls inside any supported range.
121
+ *
122
+ * A range with `belowMajor` is closed at that major (`^24.15.0`); one without
123
+ * is open above (`>=26.0.0`). An unparseable range entry cannot happen — the
124
+ * table is a literal in this file — but it fails *open* if it ever does,
125
+ * matching `parseNodeVersion`.
126
+ */
127
+ function isSupportedNodeVersion(version) {
128
+ return exports.SUPPORTED_NODE_RANGES.some((range) => {
129
+ const from = parseNodeVersion(range.from);
130
+ if (!from) {
131
+ return true;
132
+ }
133
+ if (compareNodeVersions(version, from) < 0) {
134
+ return false;
135
+ }
136
+ return !('belowMajor' in range) || version.major < range.belowMajor;
137
+ });
138
+ }
139
+ /**
140
+ * One deliberate difference from npm, in the safe direction.
141
+ *
142
+ * npm passes `includePrerelease: true`, under which `25.0.0-rc.1` satisfies
143
+ * `^24.15.0` — it sorts below the `<25.0.0` bound. The check here refuses it,
144
+ * because the *released* 25 line is unsupported and scaffolding onto a release
145
+ * candidate of it would work today and stop working at 25.0.0 final. The cases
146
+ * that matter agree with npm exactly: a prerelease of a range's own starting
147
+ * version (`24.15.0-nightly`, `26.0.0-rc.1`) is refused by both, and one above
148
+ * it (`24.16.0-rc.1`, `27.0.0-nightly`) is accepted by both.
149
+ */
150
+ /**
151
+ * A line the caller can paste. `nvm install`, not `nvm use`: someone in this
152
+ * position usually has *some* Node of that major already, and `nvm use 24`
153
+ * would select exactly the one that does not work.
154
+ */
155
+ const REMEDY = ` nvm install ${exports.REQUIRED_NODE_VERSION} # or fnm, volta, asdf, …`;
156
+ /**
157
+ * Whether this Node is below every supported range, or inside a gap between
158
+ * two of them. The distinction is the whole message: "too old" is actionable
159
+ * and "unsupported release line" is a different instruction.
160
+ */
161
+ function describeUnsupported(version) {
162
+ const floor = parseNodeVersion(exports.REQUIRED_NODE_VERSION);
163
+ const tooOld = floor ? compareNodeVersions(version, floor) < 0 : false;
164
+ const current = formatNodeVersion(version);
165
+ // A prerelease reads as a supported version to the eye, so the message has
166
+ // to say which part of it is the problem — otherwise the number in the
167
+ // refusal looks identical to the number in the requirement.
168
+ if (version.prerelease !== undefined) {
169
+ return `Node ${current} is a prerelease, and a Ragen installation needs ${exports.SUPPORTED_NODE_ENGINES_RANGE}. semver sorts a prerelease below the release it precedes, so ${current} does not satisfy that range and npm will refuse it — use a released Node.`;
170
+ }
171
+ if (tooOld) {
172
+ return `A Ragen installation needs Node ${exports.SUPPORTED_NODE_ENGINES_RANGE}, and this is Node ${current}.`;
173
+ }
174
+ return `Node ${current} is newer than the minimum and still not supported: a Ragen installation needs ${exports.SUPPORTED_NODE_ENGINES_RANGE}, which skips the ${version.major}.x line. Odd-numbered Node lines never become LTS, and libraries routinely omit them.`;
48
175
  }
49
176
  function checkNodeVersion({ version, willRunSetup, }) {
50
- const major = parseNodeMajor(version);
51
- if (major === undefined || major >= exports.REQUIRED_NODE_MAJOR) {
177
+ const current = parseNodeVersion(version);
178
+ if (current === undefined || isSupportedNodeVersion(current)) {
52
179
  return { kind: 'ok' };
53
180
  }
181
+ const headline = describeUnsupported(current);
54
182
  if (!willRunSetup) {
55
183
  return {
56
184
  kind: 'warn',
57
185
  message: [
58
- `You are on Node ${major}, and a Ragen installation needs Node ${exports.REQUIRED_NODE_MAJOR}.`,
186
+ headline,
187
+ REQUIRED_NODE_REASON,
59
188
  'Nothing is being installed here, so the files will be written anyway —',
60
189
  'but switch before running npm install or the app in the new directory.',
61
190
  ].join(' '),
@@ -64,14 +193,21 @@ function checkNodeVersion({ version, willRunSetup, }) {
64
193
  return {
65
194
  kind: 'refuse',
66
195
  message: [
67
- `A Ragen installation needs Node ${exports.REQUIRED_NODE_MAJOR}, and this is Node ${major}.`,
196
+ headline,
197
+ '',
198
+ // The reason comes second and in full, because the interesting cases are
199
+ // someone who already has the right major and someone on a *newer* Node,
200
+ // both of whom read the line above as nonsense without it.
201
+ `Why: ${REQUIRED_NODE_REASON}`,
202
+ 'On this Node, npm install fails with EBADENGINE partway through the',
203
+ 'setup below.',
68
204
  '',
69
205
  'Stopping before anything is written: the setup this runs for you —',
70
206
  'npm install, prisma generate, migrate and seed — would run under this',
71
207
  'Node and leave a tree that fails later, somewhere that does not point',
72
208
  'back here.',
73
209
  '',
74
- ` nvm use ${exports.REQUIRED_NODE_MAJOR} # or fnm, volta, asdf, …`,
210
+ REMEDY,
75
211
  '',
76
212
  'Or pass --skip-install to write the files now and run the setup',
77
213
  'yourself on a supported Node.',
@@ -1 +1 @@
1
- {"version":3,"file":"node-version.js","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;;AA0BH,wCAMC;AAED,4CAqCC;AArED;;;;GAIG;AACU,QAAA,mBAAmB,GAAG,EAAE,CAAC;AActC;;;;GAIG;AACH,SAAgB,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,YAAY,GACK;IACjB,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAEtC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,2BAAmB,EAAE,CAAC;QACxD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,mBAAmB,KAAK,yCAAyC,2BAAmB,GAAG;gBACvF,wEAAwE;gBACxE,wEAAwE;aACzE,CAAC,IAAI,CAAC,GAAG,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,mCAAmC,2BAAmB,sBAAsB,KAAK,GAAG;YACpF,EAAE;YACF,oEAAoE;YACpE,uEAAuE;YACvE,uEAAuE;YACvE,YAAY;YACZ,EAAE;YACF,aAAa,2BAAmB,6BAA6B;YAC7D,EAAE;YACF,iEAAiE;YACjE,+BAA+B;SAChC,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"node-version.js","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"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"}
package/dist/tasks.d.ts CHANGED
@@ -15,20 +15,110 @@ export interface MigrateOptions {
15
15
  }
16
16
  export declare function isDockerAvailable(): Promise<boolean>;
17
17
  /**
18
- * Whether this Docker daemon already runs a Ragen stack.
18
+ * Compose takes its project name from the **directory basename**, which is not
19
+ * the same as being unique per install.
19
20
  *
20
- * docker-compose.yml pins container, volume and network names instead of
21
- * letting Compose prefix them per project, so a second install does not just
22
- * collide on the container names — it silently attaches to the *same*
23
- * postgres and qdrant volumes as the first one. Checking the volume rather
24
- * than a container catches a stack that is merely stopped, which is the
25
- * case that looks safest and is not.
21
+ * Removing the pinned `container_name`/volume `name:` from docker-compose.yml
22
+ * scopes every resource to the project, and that is what lets two checkouts
23
+ * coexist. But `/work/a/ragen` and `/work/b/ragen` produce the same project
24
+ * name, and therefore the same containers, volumes and network — the original
25
+ * bug, narrowed to same-named directories rather than fixed. Worse than the
26
+ * port collision, because a *stopped* first stack collides silently: no port
27
+ * is held, nothing refuses, and the second install opens the first one's
28
+ * database.
26
29
  *
27
- * Reads RAGEN_STACK_NAME for the same reason compose does: someone already
28
- * running a stack under a name of their own would otherwise be told their
29
- * machine is clear, and collide with it.
30
+ * So the name is decided here, at install time, and written to the new tree's
31
+ * `.env` — which Compose reads from the project directory on every later
32
+ * `docker compose` the user runs, with no flag to remember. `.env` is the
33
+ * lowest-precedence file `scripts/load-root-env.mjs` reads and is gitignored,
34
+ * and nothing in the apps reads `COMPOSE_PROJECT_NAME`, so it cannot collide
35
+ * with the install's own configuration.
36
+ *
37
+ * The basename is kept whenever it is free, because the readability given up
38
+ * with the pinned names is worth not giving up twice. A suffix appears only
39
+ * when this daemon already runs a project of that name from somewhere else.
40
+ */
41
+ export interface ComposeProjectName {
42
+ name: string;
43
+ /** True when the plain basename was taken and a suffix was added. */
44
+ disambiguated: boolean;
45
+ /** The compose file of the project that took it, for the message. */
46
+ takenBy?: string;
47
+ /**
48
+ * True when the suffix was added because Docker could not be asked, rather
49
+ * than because a collision was seen. A different sentence to the reader:
50
+ * nothing is wrong, and the name is cautious rather than forced.
51
+ */
52
+ daemonUnreachable?: boolean;
53
+ }
54
+ /**
55
+ * Compose accepts `[a-z0-9][a-z0-9_-]*`. A directory called `My Ragen!` or
56
+ * `.ragen` is perfectly legal and would otherwise make every compose command
57
+ * fail with a validation error after the install had finished.
58
+ */
59
+ export declare function normalizeComposeProjectName(raw: string): string;
60
+ export declare function resolveComposeProjectName(targetDir: string): Promise<ComposeProjectName>;
61
+ /**
62
+ * Every host port a default `docker compose up` publishes, with the variable
63
+ * that moves it. The order is the order the warning prints them in.
64
+ *
65
+ * Defaults are duplicated from docker-compose.yml rather than parsed out of
66
+ * it, because this runs *before* the repository is cloned — there is no file
67
+ * to read yet. `ports-agree-with-compose.test.ts` holds the two in step.
68
+ */
69
+ export declare const PUBLISHED_PORTS: readonly [{
70
+ readonly service: "Postgres";
71
+ readonly variable: "POSTGRES_PORT";
72
+ readonly port: 55432;
73
+ }, {
74
+ readonly service: "Qdrant";
75
+ readonly variable: "QDRANT_PORT";
76
+ readonly port: 6333;
77
+ }, {
78
+ readonly service: "Qdrant (gRPC)";
79
+ readonly variable: "QDRANT_GRPC_PORT";
80
+ readonly port: 6334;
81
+ }, {
82
+ readonly service: "Docling";
83
+ readonly variable: "DOCLING_PORT";
84
+ readonly port: 5001;
85
+ }, {
86
+ readonly service: "Redis";
87
+ readonly variable: "REDIS_PORT";
88
+ readonly port: 56379;
89
+ }];
90
+ /** The two more, behind the `pii` profile, that only a masking install starts. */
91
+ export declare const PII_PUBLISHED_PORTS: readonly [{
92
+ readonly service: "Presidio analyzer";
93
+ readonly variable: "PRESIDIO_ANALYZER_PORT";
94
+ readonly port: 5002;
95
+ }, {
96
+ readonly service: "Presidio anonymizer";
97
+ readonly variable: "PRESIDIO_ANONYMIZER_PORT";
98
+ readonly port: 5003;
99
+ }];
100
+ export interface PublishedPort {
101
+ service: string;
102
+ variable: string;
103
+ port: number;
104
+ }
105
+ /**
106
+ * Which of these host ports something is already listening on.
107
+ *
108
+ * This replaces a check for the volume `ragen-postgres-data`. That volume name
109
+ * was pinned in docker-compose.yml, which is what made a second install share
110
+ * the first one's database — and removing the pin removed the sharing, so the
111
+ * old check now answers a question nobody is asking and would answer "clear"
112
+ * for every install made after the change. A guard that quietly stops firing
113
+ * is worse than no guard.
114
+ *
115
+ * Ports are what is genuinely left: Compose prefixes names per project, and
116
+ * prefixes nothing about a published port, so two stacks still collide on
117
+ * 55432. Binding is also a better probe than asking Docker — it sees a native
118
+ * Postgres on the port as well, which is the other way this install ends up
119
+ * talking to a database it did not start.
30
120
  */
31
- export declare function ragenStackVolumeExists(): Promise<boolean>;
121
+ export declare function busyPublishedPorts(candidates?: readonly PublishedPort[]): Promise<PublishedPort[]>;
32
122
  /**
33
123
  * `profiles` names compose profiles to add to the default set.
34
124
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAU1D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAgB/D;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,GAAG,EACH,QAAa,GACd,EAAE,UAAU,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtD;AAED,wBAAsB,mBAAmB,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,oBAAoB,CAAC,EACzC,GAAG,EACH,GAAG,GACJ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5B;AAED,wBAAsB,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,EACxB,EAAE,OAAW,EAAE,YAAmB,EAAE,GAAE,cAAmB,GACxD,OAAO,CAAC,IAAI,CAAC,CAsBf"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAU1D;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,aAAa,EAAE,OAAO,CAAC;IACvB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO/D;AA4BD,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CA8C7B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;EAMlB,CAAC;AAEX,kFAAkF;AAClF,eAAO,MAAM,mBAAmB;;;;;;;;EAWtB,CAAC;AAEX,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,GAAE,SAAS,aAAa,EAAoB,GACrD,OAAO,CAAC,aAAa,EAAE,CAAC,CAS1B;AAyBD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,GAAG,EACH,QAAa,GACd,EAAE,UAAU,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtD;AAED,wBAAsB,mBAAmB,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,oBAAoB,CAAC,EACzC,GAAG,EACH,GAAG,GACJ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5B;AAED,wBAAsB,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,EACxB,EAAE,OAAW,EAAE,YAAmB,EAAE,GAAE,cAAmB,GACxD,OAAO,CAAC,IAAI,CAAC,CAsBf"}
package/dist/tasks.js CHANGED
@@ -1,12 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PII_PUBLISHED_PORTS = exports.PUBLISHED_PORTS = void 0;
3
4
  exports.isDockerAvailable = isDockerAvailable;
4
- exports.ragenStackVolumeExists = ragenStackVolumeExists;
5
+ exports.normalizeComposeProjectName = normalizeComposeProjectName;
6
+ exports.resolveComposeProjectName = resolveComposeProjectName;
7
+ exports.busyPublishedPorts = busyPublishedPorts;
5
8
  exports.startDockerServices = startDockerServices;
6
9
  exports.installDependencies = installDependencies;
7
10
  exports.generatePrismaClient = generatePrismaClient;
8
11
  exports.seedDatabase = seedDatabase;
9
12
  exports.migrateDatabase = migrateDatabase;
13
+ const node_crypto_1 = require("node:crypto");
14
+ const node_net_1 = require("node:net");
15
+ const node_path_1 = require("node:path");
10
16
  const execa_1 = require("execa");
11
17
  async function isDockerAvailable() {
12
18
  try {
@@ -21,31 +27,148 @@ async function isDockerAvailable() {
21
27
  }
22
28
  }
23
29
  /**
24
- * Whether this Docker daemon already runs a Ragen stack.
30
+ * Compose accepts `[a-z0-9][a-z0-9_-]*`. A directory called `My Ragen!` or
31
+ * `.ragen` is perfectly legal and would otherwise make every compose command
32
+ * fail with a validation error after the install had finished.
33
+ */
34
+ function normalizeComposeProjectName(raw) {
35
+ const cleaned = raw
36
+ .toLowerCase()
37
+ .replace(/[^a-z0-9_-]+/g, '-')
38
+ .replace(/^[^a-z0-9]+/, '')
39
+ .replace(/-+$/, '');
40
+ return cleaned || 'ragen';
41
+ }
42
+ /** Six hex characters of the absolute path — stable for this directory. */
43
+ function pathSuffix(absoluteDir) {
44
+ return (0, node_crypto_1.createHash)('sha256').update(absoluteDir).digest('hex').slice(0, 6);
45
+ }
46
+ /**
47
+ * Whether a compose file belongs to the install in `absoluteDir`.
25
48
  *
26
- * docker-compose.yml pins container, volume and network names instead of
27
- * letting Compose prefix them per project, so a second install does not just
28
- * collide on the container names — it silently attaches to the *same*
29
- * postgres and qdrant volumes as the first one. Checking the volume rather
30
- * than a container catches a stack that is merely stopped, which is the
31
- * case that looks safest and is not.
49
+ * `relative()` rather than a `startsWith(dir + '/')` prefix test, for two
50
+ * reasons: on Windows `resolve()` returns backslashes, so a forward-slash
51
+ * prefix never matches and every re-run would look like a collision — which
52
+ * renames the stack and abandons its volumes, the worst outcome available
53
+ * here. And a prefix test is true for `/work/ragen-app-2` against
54
+ * `/work/ragen-app` unless the separator is appended exactly right.
32
55
  *
33
- * Reads RAGEN_STACK_NAME for the same reason compose does: someone already
34
- * running a stack under a name of their own would otherwise be told their
35
- * machine is clear, and collide with it.
56
+ * A file *inside* the directory counts, at any depth: `-f infra/compose.yml`
57
+ * is a legitimate way to run this stack, and treating it as someone else's
58
+ * project is the same destructive mistake.
36
59
  */
37
- async function ragenStackVolumeExists() {
38
- const stackName = process.env.RAGEN_STACK_NAME?.trim() || 'ragen';
39
- const postgresVolume = `${stackName}-postgres-data`;
60
+ function isInsideDirectory(file, absoluteDir) {
61
+ const path = (0, node_path_1.relative)(absoluteDir, (0, node_path_1.resolve)(file.trim()));
62
+ // `..` means outside; an absolute result means a different Windows drive,
63
+ // where "inside" is not a question that has a yes.
64
+ return !path.startsWith('..') && !(0, node_path_1.isAbsolute)(path);
65
+ }
66
+ async function resolveComposeProjectName(targetDir) {
67
+ const absoluteDir = (0, node_path_1.resolve)(targetDir);
68
+ const base = normalizeComposeProjectName((0, node_path_1.basename)(absoluteDir));
69
+ const suffixed = `${base}-${pathSuffix(absoluteDir)}`;
70
+ let projects = [];
40
71
  try {
41
- const { stdout } = await (0, execa_1.execa)('docker', ['volume', 'ls', '--format', '{{.Name}}'], { timeout: 10_000 });
42
- return stdout.split('\n').some((name) => name.trim() === postgresVolume);
72
+ const { stdout } = await (0, execa_1.execa)('docker', ['compose', 'ls', '--all', '--format', 'json'], { timeout: 10_000 });
73
+ projects = JSON.parse(stdout);
43
74
  }
44
75
  catch {
45
- // Same reasoning as isDockerAvailable: an unreachable daemon is not a
46
- // reason to fail, the caller is about to find that out anyway.
47
- return false;
76
+ // An unreachable daemon, or a Compose too old for `ls --format json`.
77
+ //
78
+ // The plain basename is *not* the safe answer here, which is what it first
79
+ // looked like. A daemon that cannot be reached still holds the volumes of
80
+ // every install made before it stopped, and they collide as soon as it
81
+ // starts — so falling back to the basename fails in the silent, expensive
82
+ // direction: a second install quietly opening the first one's database.
83
+ // The suffix fails in the visible, cheap one: a less pretty name in
84
+ // `docker ps`.
85
+ return { name: suffixed, disambiguated: true, daemonUnreachable: true };
48
86
  }
87
+ // A project whose compose files live under *this* directory is this install
88
+ // — a re-run of the wizard over an existing tree — and must keep its name,
89
+ // or the second run would point at empty volumes.
90
+ const collision = projects.find((project) => project.Name === base &&
91
+ !(project.ConfigFiles ?? '')
92
+ .split(',')
93
+ .some((file) => isInsideDirectory(file, absoluteDir)));
94
+ if (!collision) {
95
+ return { name: base, disambiguated: false };
96
+ }
97
+ return {
98
+ name: suffixed,
99
+ disambiguated: true,
100
+ takenBy: collision.ConfigFiles?.split(',')[0]?.trim(),
101
+ };
102
+ }
103
+ /**
104
+ * Every host port a default `docker compose up` publishes, with the variable
105
+ * that moves it. The order is the order the warning prints them in.
106
+ *
107
+ * Defaults are duplicated from docker-compose.yml rather than parsed out of
108
+ * it, because this runs *before* the repository is cloned — there is no file
109
+ * to read yet. `ports-agree-with-compose.test.ts` holds the two in step.
110
+ */
111
+ exports.PUBLISHED_PORTS = [
112
+ { service: 'Postgres', variable: 'POSTGRES_PORT', port: 55432 },
113
+ { service: 'Qdrant', variable: 'QDRANT_PORT', port: 6333 },
114
+ { service: 'Qdrant (gRPC)', variable: 'QDRANT_GRPC_PORT', port: 6334 },
115
+ { service: 'Docling', variable: 'DOCLING_PORT', port: 5001 },
116
+ { service: 'Redis', variable: 'REDIS_PORT', port: 56379 },
117
+ ];
118
+ /** The two more, behind the `pii` profile, that only a masking install starts. */
119
+ exports.PII_PUBLISHED_PORTS = [
120
+ {
121
+ service: 'Presidio analyzer',
122
+ variable: 'PRESIDIO_ANALYZER_PORT',
123
+ port: 5002,
124
+ },
125
+ {
126
+ service: 'Presidio anonymizer',
127
+ variable: 'PRESIDIO_ANONYMIZER_PORT',
128
+ port: 5003,
129
+ },
130
+ ];
131
+ /**
132
+ * Which of these host ports something is already listening on.
133
+ *
134
+ * This replaces a check for the volume `ragen-postgres-data`. That volume name
135
+ * was pinned in docker-compose.yml, which is what made a second install share
136
+ * the first one's database — and removing the pin removed the sharing, so the
137
+ * old check now answers a question nobody is asking and would answer "clear"
138
+ * for every install made after the change. A guard that quietly stops firing
139
+ * is worse than no guard.
140
+ *
141
+ * Ports are what is genuinely left: Compose prefixes names per project, and
142
+ * prefixes nothing about a published port, so two stacks still collide on
143
+ * 55432. Binding is also a better probe than asking Docker — it sees a native
144
+ * Postgres on the port as well, which is the other way this install ends up
145
+ * talking to a database it did not start.
146
+ */
147
+ async function busyPublishedPorts(candidates = exports.PUBLISHED_PORTS) {
148
+ const results = await Promise.all(candidates.map(async (candidate) => (await isPortInUse(candidate.port)) ? candidate : undefined));
149
+ return results.filter((candidate) => Boolean(candidate));
150
+ }
151
+ /**
152
+ * Loopback only, because that is where docker-compose.yml publishes
153
+ * (`RAGEN_BIND_ADDR` defaults to 127.0.0.1). Anything other than EADDRINUSE —
154
+ * a permission error, a system without IPv4 loopback — reports "free": the
155
+ * cost of a missed warning is a compose error the caller then reads, and the
156
+ * cost of a false one is telling someone their machine is occupied when it is
157
+ * not.
158
+ */
159
+ function isPortInUse(port) {
160
+ return new Promise((resolve) => {
161
+ const server = (0, node_net_1.createServer)();
162
+ server.once('error', (error) => {
163
+ resolve(error.code === 'EADDRINUSE');
164
+ });
165
+ server.once('listening', () => {
166
+ server.close(() => {
167
+ resolve(false);
168
+ });
169
+ });
170
+ server.listen(port, '127.0.0.1');
171
+ });
49
172
  }
50
173
  /**
51
174
  * `profiles` names compose profiles to add to the default set.
package/dist/tasks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-ragen-app",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "private": false,
5
5
  "description": "Scaffold a self-hosted Ragen AI installation with one command",
6
6
  "license": "Apache-2.0",
@@ -39,6 +39,6 @@
39
39
  "typescript": "~5.7.0"
40
40
  },
41
41
  "engines": {
42
- "node": ">=24"
42
+ "node": "^24.15.0 || >=26.0.0"
43
43
  }
44
44
  }