create-ragen-app 0.3.0 → 0.4.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.
package/README.md CHANGED
@@ -44,7 +44,7 @@ requirement".
44
44
  This package is the only thing that exercises the first-run path.
45
45
  `.github/workflows/installer.yml` runs it on pushes to `main` and on pull
46
46
  requests from this repository: it packs the package, installs the tarball,
47
- scaffolds from the branch under review and asserts the result is configured.
47
+ scaffolds from the commit under review and asserts the result is configured.
48
48
  That catches a broken installer, but only for the cases the assertions cover —
49
49
  `AGENTS.md`'s Post-Task Workflow still asks for an update here in the same PR,
50
50
  and for the PR description to say so.
@@ -55,6 +55,7 @@ What counts as install-affecting:
55
55
  | --- | --- |
56
56
  | A new or renamed env var that a fresh install must set | `src/manifest.ts` (generated secret or corrected default) |
57
57
  | A default model, embedding model or `VECTOR_SIZE` change | `src/llm-provider.ts` — and the two must stay consistent, or Qdrant rejects every upsert |
58
+ | A new `@ragenai/llm-gateway` provider, or a change to route-table shape | `src/llm-provider.ts` (`gatewayProvider`, `upstreamModel`) and `src/route-table.ts` — the scaffold writes `infra/llm-gateway/routes.yaml`, which is what a scaffolded install actually reads |
58
59
  | An app the web app can no longer run without | the outro in `src/cli.ts`, which tells people what to start |
59
60
  | A new first-run step (migration, seed, generate) | `src/tasks.ts` and `maybeRunFirstTimeSetup` |
60
61
  | A `docker-compose.yml` service, port or name change | `src/tasks.ts`, and the collision check in `ragenStackVolumeExists` |
@@ -69,7 +70,7 @@ about — has no textual signal, which is why the rule above is a rule.
69
70
 
70
71
  | Flag | Effect |
71
72
  | ----------------- | --------------------------------------------------- |
72
- | `--ref=<branch>` | Clone a branch/tag other than `main` |
73
+ | `--ref=<ref>` | Clone a branch, tag or commit SHA other than `main` |
73
74
  | `--skip-docker` | Write the `.env.local` files but don't start Docker |
74
75
  | `--skip-install` | Skip `npm install` / Prisma / seed |
75
76
  | `--yes` | Accept every default without prompting |
@@ -130,6 +131,13 @@ Three details, each of which this file previously got wrong:
130
131
  so testing a change to the *app* needs that branch pushed. Without it you are
131
132
  testing new installer code against old repository content.
132
133
 
134
+ It takes anything GitHub's tarball endpoint resolves — a branch, a tag, or a
135
+ full commit SHA. The `Installer` workflow passes the **commit**, because a
136
+ branch can be deleted by the merge while the job is still running and the
137
+ endpoint then 404s on a name that resolved seconds earlier. Prefer a SHA
138
+ anywhere the ref is chosen by a machine rather than typed by hand. See
139
+ [the lesson](../../docs/lessons/a-ci-job-that-clones-a-branch-races-the-merge.md).
140
+
133
141
  `prepare` runs `clean` before `build` deliberately. `files` publishes `dist`
134
142
  wholesale and `tsc` does not remove the output of a source file that no
135
143
  longer exists, so without the clean a renamed or deleted module ships as a
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA6DA;;;;;;GAMG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAgJ1D"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA0EA;;;;;;GAMG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA6M1D"}
package/dist/cli.js CHANGED
@@ -40,13 +40,17 @@ const clack = __importStar(require("@clack/prompts"));
40
40
  const dotenv_1 = require("dotenv");
41
41
  const args_1 = require("./args");
42
42
  const clone_1 = require("./clone");
43
+ const config_file_1 = require("./config-file");
44
+ const encryption_provider_1 = require("./encryption-provider");
43
45
  const env_file_1 = require("./env-file");
44
46
  const litellm_config_1 = require("./litellm-config");
45
47
  const manual_setup_1 = require("./manual-setup");
48
+ const route_table_1 = require("./route-table");
46
49
  const node_version_1 = require("./node-version");
47
50
  const llm_provider_1 = require("./llm-provider");
48
51
  const manifest_1 = require("./manifest");
49
52
  const secrets_1 = require("./secrets");
53
+ const storage_provider_1 = require("./storage-provider");
50
54
  const tasks_1 = require("./tasks");
51
55
  /** Written into the new install whenever a model still has to be wired by hand. */
52
56
  const MANUAL_SETUP_FILENAME = 'SETUP-LLM.md';
@@ -104,6 +108,23 @@ async function run(argv) {
104
108
  if (llmChoice) {
105
109
  Object.assign(rootOverrides, llmChoice.envUpdates);
106
110
  }
111
+ // Storage and encryption were skipped by every earlier version of this
112
+ // wizard, and both are worse to answer later than now: turning encryption on
113
+ // afterwards leaves everything already written in plaintext, because nothing
114
+ // re-encrypts history, and moving storage strands the files already uploaded.
115
+ const storagePrompt = await resolveStorage(args);
116
+ if (storagePrompt.cancelled) {
117
+ clack.cancel('Cancelled.');
118
+ return false;
119
+ }
120
+ const encryptionPrompt = await resolveEncryption(args);
121
+ if (encryptionPrompt.cancelled) {
122
+ clack.cancel('Cancelled.');
123
+ return false;
124
+ }
125
+ const storage = storagePrompt.selection;
126
+ const encryption = encryptionPrompt.selection;
127
+ Object.assign(rootOverrides, storage.envUpdates, encryption.envUpdates);
107
128
  const rootWrite = writeEnvFile(targetDir, 'root', rootOverrides);
108
129
  const adminWrite = writeEnvFile(targetDir, 'admin', adminOverrides);
109
130
  const missingKeys = [...rootWrite.missingKeys, ...adminWrite.missingKeys];
@@ -114,7 +135,35 @@ async function run(argv) {
114
135
  ].join('\n'));
115
136
  return false;
116
137
  }
138
+ // After the env write, so a run that stops on drifted keys has not already
139
+ // rewritten a file in the clone.
140
+ try {
141
+ (0, config_file_1.writeRagenConfig)(targetDir, storage, encryption);
142
+ }
143
+ catch (error) {
144
+ clack.cancel(`Could not update ragen.config.ts: ${String(error)}\n` +
145
+ 'The environment is written and correct; only the typed config is out of date. Fix its storage/encryption block by hand.');
146
+ return false;
147
+ }
148
+ if (encryption.generatedKey) {
149
+ clack.log.info([
150
+ 'Generated an encryption key into .env.local as ENCRYPTION_MASTER_KEY.',
151
+ 'Back it up: messages and documents encrypted with it cannot be read',
152
+ 'without it, and nothing can re-derive it.',
153
+ ].join(' '));
154
+ }
155
+ if (encryption.provider === 'none') {
156
+ clack.log.warn([
157
+ 'Encryption is off, so messages and documents are stored in plaintext.',
158
+ 'Turning it on later leaves everything written before then unencrypted —',
159
+ 'nothing re-encrypts history.',
160
+ ].join(' '));
161
+ }
117
162
  if (llmChoice) {
163
+ // The route table is what the install actually uses: `LLM_GATEWAY` is
164
+ // `native` for both providers the wizard offers. The proxy config is
165
+ // written too, so setting `LLM_GATEWAY=litellm` is a working rollback.
166
+ (0, route_table_1.writeRouteTable)(targetDir, llmChoice.routes);
118
167
  patchLiteLLMConfig(targetDir, llmChoice.liteLLMEntries);
119
168
  if (!llmChoice.embeddingsConfigured) {
120
169
  clack.log.warn([
@@ -133,11 +182,15 @@ async function run(argv) {
133
182
  clack.note([
134
183
  'No LLM provider configured, so chat and the knowledge base are off.',
135
184
  '',
136
- 'Two files to edit, then `docker compose restart litellm`:',
185
+ 'This path leaves LLM_GATEWAY=litellm, so configure the proxy —',
186
+ 'two files to edit, then `docker compose restart litellm`:',
137
187
  ' .env.local — your key, DEFAULT_MODEL, REPHRASE_MODEL,',
138
188
  ' EMBEDDINGS_MODEL, VECTOR_SIZE',
139
189
  ' infra/litellm/config.yaml — a model_list entry per model',
140
190
  '',
191
+ 'To call providers directly instead, set LLM_GATEWAY=native and put',
192
+ `a route per model in ${route_table_1.ROUTE_TABLE_PATH}.`,
193
+ '',
141
194
  `Exact values for OpenAI and Anthropic are written to ${guidePath}.`,
142
195
  ].join('\n'), 'Configure a model later');
143
196
  }
@@ -241,6 +294,156 @@ function writeEnvFile(targetDir, target, overrides) {
241
294
  (0, node_fs_1.writeFileSync)(localPath, content, { mode: 0o600 });
242
295
  return { content, missingKeys };
243
296
  }
297
+ /**
298
+ * Whether the wizard may ask anything at all.
299
+ *
300
+ * `--yes` is the obvious one. `--provider=` is the other, and it is not
301
+ * obvious: that flag exists so CI can run this wizard, *because CI cannot
302
+ * answer a prompt*. Adding a question that `--provider` does not silence would
303
+ * hang every automated install — the flag's whole purpose, undone by a
304
+ * question about buckets.
305
+ *
306
+ * A person who would rather not type an API key into a CLI, and does want to
307
+ * be asked about storage, omits the flag and exports the key instead.
308
+ */
309
+ function isUnattended(args) {
310
+ return args.yes || args.provider !== undefined;
311
+ }
312
+ /**
313
+ * Unattended installs take the shipped defaults: files on disk (ADR-27) and a
314
+ * generated encryption key.
315
+ *
316
+ * Encryption is *on* in that path on purpose. The alternative defaults an
317
+ * install to plaintext, and the only cost of the key is a line in `.env.local`
318
+ * the wizard writes itself — where the cost of not having it is that every
319
+ * message written before someone thinks to turn it on stays readable forever.
320
+ */
321
+ async function resolveStorage(args) {
322
+ if (isUnattended(args)) {
323
+ return { cancelled: false, selection: (0, storage_provider_1.resolveStorageSelection)('local') };
324
+ }
325
+ return promptStorage();
326
+ }
327
+ async function resolveEncryption(args) {
328
+ if (isUnattended(args)) {
329
+ return { cancelled: false, selection: (0, encryption_provider_1.resolveEncryptionSelection)('local') };
330
+ }
331
+ return promptEncryption();
332
+ }
333
+ async function promptStorage() {
334
+ const choice = await clack.select({
335
+ message: 'Where should uploaded documents be stored?',
336
+ options: ['local', 's3'].map((value) => ({
337
+ value,
338
+ label: storage_provider_1.STORAGE_LABELS[value],
339
+ })),
340
+ });
341
+ if (clack.isCancel(choice)) {
342
+ return { cancelled: true };
343
+ }
344
+ if (choice === 'local') {
345
+ return { cancelled: false, selection: (0, storage_provider_1.resolveStorageSelection)('local') };
346
+ }
347
+ const bucket = await clack.text({
348
+ message: 'Bucket name',
349
+ validate: (value) => (value.trim() ? undefined : 'Required for S3.'),
350
+ });
351
+ if (clack.isCancel(bucket)) {
352
+ return { cancelled: true };
353
+ }
354
+ const region = await clack.text({
355
+ message: 'Region',
356
+ placeholder: 'fr-par, us-east-1, auto',
357
+ validate: (value) => (value.trim() ? undefined : 'Required for S3.'),
358
+ });
359
+ if (clack.isCancel(region)) {
360
+ return { cancelled: true };
361
+ }
362
+ const endpoint = await clack.text({
363
+ message: 'Endpoint URL (blank for AWS)',
364
+ placeholder: 'https://s3.fr-par.scw.cloud',
365
+ defaultValue: '',
366
+ });
367
+ if (clack.isCancel(endpoint)) {
368
+ return { cancelled: true };
369
+ }
370
+ const accessKeyId = await clack.text({
371
+ message: 'Access key ID',
372
+ validate: (value) => (value.trim() ? undefined : 'Required for S3.'),
373
+ });
374
+ if (clack.isCancel(accessKeyId)) {
375
+ return { cancelled: true };
376
+ }
377
+ // password, not text: this one is a secret and should not be echoed into a
378
+ // terminal someone may be sharing or recording.
379
+ const secretAccessKey = await clack.password({
380
+ message: 'Secret access key',
381
+ });
382
+ if (clack.isCancel(secretAccessKey)) {
383
+ return { cancelled: true };
384
+ }
385
+ if (!secretAccessKey.trim()) {
386
+ clack.log.warn('No secret key given — falling back to local storage.');
387
+ return { cancelled: false, selection: (0, storage_provider_1.resolveStorageSelection)('local') };
388
+ }
389
+ return {
390
+ cancelled: false,
391
+ selection: (0, storage_provider_1.resolveStorageSelection)('s3', {
392
+ bucket,
393
+ region,
394
+ endpoint,
395
+ accessKeyId,
396
+ secretAccessKey,
397
+ }),
398
+ };
399
+ }
400
+ async function promptEncryption() {
401
+ const choice = await clack.select({
402
+ message: 'Encrypt messages and documents at rest?',
403
+ options: ['local', 'scaleway', 'kms', 'none'].map((value) => ({
404
+ value,
405
+ label: encryption_provider_1.ENCRYPTION_LABELS[value],
406
+ })),
407
+ });
408
+ if (clack.isCancel(choice)) {
409
+ return { cancelled: true };
410
+ }
411
+ const provider = choice;
412
+ if (provider === 'none' || provider === 'local') {
413
+ return {
414
+ cancelled: false,
415
+ selection: (0, encryption_provider_1.resolveEncryptionSelection)(provider),
416
+ };
417
+ }
418
+ const keyId = await clack.text({
419
+ message: provider === 'kms' ? 'KMS key id or ARN' : 'Key Manager key id',
420
+ validate: (value) => (value.trim() ? undefined : 'Required.'),
421
+ });
422
+ if (clack.isCancel(keyId)) {
423
+ return { cancelled: true };
424
+ }
425
+ if (provider === 'kms') {
426
+ return {
427
+ cancelled: false,
428
+ selection: (0, encryption_provider_1.resolveEncryptionSelection)('kms', { keyId, apiKey: '' }),
429
+ };
430
+ }
431
+ // Validated rather than given a fallback, unlike the S3 secret: someone who
432
+ // chose Scaleway has no second choice to fall back to, and a blank key would
433
+ // write `SCW_API_KEY=` — a provider named with a credential that reads as
434
+ // unset, which the boot check then refuses.
435
+ const apiKey = await clack.password({
436
+ message: 'Scaleway API secret key',
437
+ validate: (value) => (value.trim() ? undefined : 'Required for Scaleway.'),
438
+ });
439
+ if (clack.isCancel(apiKey)) {
440
+ return { cancelled: true };
441
+ }
442
+ return {
443
+ cancelled: false,
444
+ selection: (0, encryption_provider_1.resolveEncryptionSelection)('scaleway', { keyId, apiKey }),
445
+ };
446
+ }
244
447
  /**
245
448
  * Three ways to arrive at a provider, in precedence order: named on the
246
449
  * command line with the key in the environment, declined wholesale by
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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"}
@@ -0,0 +1,14 @@
1
+ import { CONFIG_FILENAME, renderRagenConfig } from './config-template';
2
+ import type { EncryptionSelection } from './encryption-provider';
3
+ import type { StorageSelection } from './storage-provider';
4
+ /**
5
+ * Writes the configuration the wizard was told to set up.
6
+ *
7
+ * Overwrites rather than patches. The cloned file is a generated artifact of
8
+ * the same template (see `config-template.ts`), so there is nothing in it
9
+ * worth preserving that this does not already produce — and nothing to locate,
10
+ * which is where every previous defect in this file lived.
11
+ */
12
+ export declare function writeRagenConfig(targetDir: string, storage: StorageSelection, encryption: EncryptionSelection): void;
13
+ export { CONFIG_FILENAME, renderRagenConfig };
14
+ //# sourceMappingURL=config-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,mBAAmB,GAC9B,IAAI,CAKN;AAED,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderRagenConfig = exports.CONFIG_FILENAME = void 0;
4
+ exports.writeRagenConfig = writeRagenConfig;
5
+ const node_fs_1 = require("node:fs");
6
+ const node_path_1 = require("node:path");
7
+ const config_template_1 = require("./config-template");
8
+ Object.defineProperty(exports, "CONFIG_FILENAME", { enumerable: true, get: function () { return config_template_1.CONFIG_FILENAME; } });
9
+ Object.defineProperty(exports, "renderRagenConfig", { enumerable: true, get: function () { return config_template_1.renderRagenConfig; } });
10
+ /**
11
+ * Writes the configuration the wizard was told to set up.
12
+ *
13
+ * Overwrites rather than patches. The cloned file is a generated artifact of
14
+ * the same template (see `config-template.ts`), so there is nothing in it
15
+ * worth preserving that this does not already produce — and nothing to locate,
16
+ * which is where every previous defect in this file lived.
17
+ */
18
+ function writeRagenConfig(targetDir, storage, encryption) {
19
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(targetDir, config_template_1.CONFIG_FILENAME), (0, config_template_1.renderRagenConfig)(storage, encryption));
20
+ }
21
+ //# sourceMappingURL=config-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-file.js","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":";;;AAeA,4CASC;AAxBD,qCAAwC;AACxC,yCAAiC;AAEjC,uDAAuE;AAuB9D,gGAvBA,iCAAe,OAuBA;AAAE,kGAvBA,mCAAiB,OAuBA;AAnB3C;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAC9B,SAAiB,EACjB,OAAyB,EACzB,UAA+B;IAE/B,IAAA,uBAAa,EACX,IAAA,gBAAI,EAAC,SAAS,EAAE,iCAAe,CAAC,EAChC,IAAA,mCAAiB,EAAC,OAAO,EAAE,UAAU,CAAC,CACvC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { EncryptionSelection } from './encryption-provider';
2
+ import type { StorageSelection } from './storage-provider';
3
+ /**
4
+ * The whole `ragen.config.ts`, rendered.
5
+ *
6
+ * This replaced patching a marked region in the cloned file, after that
7
+ * approach produced four separate defects in a day: a substring search that
8
+ * matched the end marker inside the start marker, a marker line that carried
9
+ * explanatory prose and so matched nothing once the search was tightened, and
10
+ * two duplicate-region layouts that each mangled the file in a different way.
11
+ * Every one was a case of locating a region inside arbitrary text, and the
12
+ * space of ways that goes wrong is not something a fixture can be trusted to
13
+ * explore — the third defect reached CI precisely because every fixture
14
+ * agreed with the others and none agreed with the file being shipped.
15
+ *
16
+ * Rendering the whole file removes the operation entirely. There is nothing
17
+ * to find, nothing to preserve, and no malformed input: the installer writes
18
+ * what it means.
19
+ *
20
+ * The cost is that this template must carry the groups the wizard never asks
21
+ * about, and could drift from the file the repository ships. It cannot:
22
+ * `ragen.config.ts` at the repository root **is generated from this function**
23
+ * (`npm run config:template`), and
24
+ * `tests/architecture/ragen-config-is-generated.test.ts` compares them. One
25
+ * source, one artifact, checked — the same arrangement as the published
26
+ * configuration reference.
27
+ */
28
+ export declare const CONFIG_FILENAME = "ragen.config.ts";
29
+ export declare function renderRagenConfig(storage: StorageSelection, encryption: EncryptionSelection): string;
30
+ //# sourceMappingURL=config-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-template.d.ts","sourceRoot":"","sources":["../src/config-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,eAAO,MAAM,eAAe,oBAAoB,CAAC;AA8FjD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,mBAAmB,GAC9B,MAAM,CAwBR"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONFIG_FILENAME = void 0;
4
+ exports.renderRagenConfig = renderRagenConfig;
5
+ /**
6
+ * The whole `ragen.config.ts`, rendered.
7
+ *
8
+ * This replaced patching a marked region in the cloned file, after that
9
+ * approach produced four separate defects in a day: a substring search that
10
+ * matched the end marker inside the start marker, a marker line that carried
11
+ * explanatory prose and so matched nothing once the search was tightened, and
12
+ * two duplicate-region layouts that each mangled the file in a different way.
13
+ * Every one was a case of locating a region inside arbitrary text, and the
14
+ * space of ways that goes wrong is not something a fixture can be trusted to
15
+ * explore — the third defect reached CI precisely because every fixture
16
+ * agreed with the others and none agreed with the file being shipped.
17
+ *
18
+ * Rendering the whole file removes the operation entirely. There is nothing
19
+ * to find, nothing to preserve, and no malformed input: the installer writes
20
+ * what it means.
21
+ *
22
+ * The cost is that this template must carry the groups the wizard never asks
23
+ * about, and could drift from the file the repository ships. It cannot:
24
+ * `ragen.config.ts` at the repository root **is generated from this function**
25
+ * (`npm run config:template`), and
26
+ * `tests/architecture/ragen-config-is-generated.test.ts` compares them. One
27
+ * source, one artifact, checked — the same arrangement as the published
28
+ * configuration reference.
29
+ */
30
+ exports.CONFIG_FILENAME = 'ragen.config.ts';
31
+ /**
32
+ * A required field is typed `string`, so `process.env.X` alone does not
33
+ * compile — it is `string | undefined`. The fallback is a blank rather than a
34
+ * non-null assertion because a blank is *true*: the variable may genuinely be
35
+ * missing, and every reader in `@ragenai/env` treats blank as unset, so the
36
+ * boot-time check reports it instead of a `!` hiding it until something
37
+ * dereferences undefined.
38
+ */
39
+ function renderField({ field, envVar, required }) {
40
+ const value = required
41
+ ? `process.env.${envVar} ?? ''`
42
+ : `process.env.${envVar}`;
43
+ return ` ${field}: ${value},`;
44
+ }
45
+ function renderGroup(group, provider, fields, comment) {
46
+ return [
47
+ ` ${group}: {`,
48
+ ...(comment ? [` // ${comment}`] : []),
49
+ ` provider: '${provider}',`,
50
+ ...fields.map(renderField),
51
+ ' },',
52
+ ];
53
+ }
54
+ const HEADER = `import { defineConfig } from '@ragenai/env';
55
+
56
+ /**
57
+ * The configuration this deployment was created with.
58
+ *
59
+ * Generated by \`create-ragen-app\`, which writes it once when the project is
60
+ * scaffolded and never again — so in a scaffolded project this is yours to
61
+ * edit.
62
+ *
63
+ * In the Ragen repository itself it is an artifact: regenerate it with
64
+ * \`npm run config:template\` and make changes in
65
+ * \`packages/create-ragen-app/src/config-template.ts\`, or the next scaffold
66
+ * discards them.
67
+ *
68
+ * ADR-37 declined a \`ragen.config.ts\` the apps would *read* instead of the
69
+ * environment, and that still holds: a secret does not belong in git, and
70
+ * compose, the Dockerfiles and Railway only speak environment variables.
71
+ * **Nothing reads this file at runtime.** It is the structure and the
72
+ * defaulting, with every value still resolved from \`process.env\` — which is
73
+ * why a fresh clone works with the minimum \`.env.local\` AGENTS.md documents,
74
+ * and why the fallbacks below are the same ones the code already applies.
75
+ *
76
+ * What it is for: choosing a provider makes that provider's variables
77
+ * mandatory *in the editor*. \`storage: { provider: 's3' }\` with no bucket does
78
+ * not compile. \`npm run typecheck:config\` is what makes that real — without
79
+ * it this file would be checked by nothing, since the repository has no root
80
+ * \`tsconfig.json\`.
81
+ *
82
+ * The shapes come from \`packages/env/src/provider-seams.ts\` and
83
+ * \`config-groups.ts\`, the same tables the boot-time check reads.
84
+ */
85
+ export default defineConfig({
86
+ database: {
87
+ url:
88
+ process.env.DATABASE_URL ??
89
+ 'postgresql://postgres:pass123@localhost:55432/ragen',
90
+ },
91
+
92
+ gateway: {
93
+ // Every model call goes through LiteLLM (ADR-04).
94
+ url: process.env.LITELLM_PROXY_URL ?? 'http://localhost:4000',
95
+ masterKey: process.env.LITELLM_MASTER_KEY,
96
+ },
97
+
98
+ vectorStore: {
99
+ // Qdrant is the only supported vector store (ADR-31).
100
+ url: process.env.QDRANT_URL ?? 'http://localhost:6333',
101
+ apiKey: process.env.QDRANT_API_KEY,
102
+ },
103
+
104
+ models: {
105
+ chat: process.env.DEFAULT_MODEL ?? 'gemini-3-flash-preview',
106
+ // Do not upgrade without approval — see AGENTS.md, "Model Defaults".
107
+ rephrase: process.env.REPHRASE_MODEL ?? 'gemini-2.5-flash',
108
+ summary: process.env.SUMMARY_MODEL ?? 'gemini-2.5-flash',
109
+ embeddings: process.env.EMBEDDINGS_MODEL,
110
+ // Changing this after documents exist invalidates the collection.
111
+ vectorSize: process.env.VECTOR_SIZE,
112
+ },
113
+
114
+ `;
115
+ function renderRagenConfig(storage, encryption) {
116
+ const lines = [
117
+ ...renderGroup('storage', storage.provider, storage.configFields, storage.provider === 'local'
118
+ ? 'ADR-27: local by default, so a fresh clone runs without a cloud account.'
119
+ : undefined),
120
+ ];
121
+ if (encryption.provider !== 'none') {
122
+ lines.push('', ...renderGroup('encryption', encryption.provider, encryption.configFields));
123
+ }
124
+ return `${HEADER}${lines.join('\n')}\n});\n`;
125
+ }
126
+ //# sourceMappingURL=config-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-template.js","sourceRoot":"","sources":["../src/config-template.ts"],"names":[],"mappings":";;;AA2HA,8CA2BC;AAnJD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEU,QAAA,eAAe,GAAG,iBAAiB,CAAC;AAEjD;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAe;IAC3D,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAC,eAAe,MAAM,QAAQ;QAC/B,CAAC,CAAC,eAAe,MAAM,EAAE,CAAC;IAC5B,OAAO,OAAO,KAAK,KAAK,KAAK,GAAG,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAClB,KAAa,EACb,QAAgB,EAChB,MAAqB,EACrB,OAAgB;IAEhB,OAAO;QACL,KAAK,KAAK,KAAK;QACf,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,kBAAkB,QAAQ,IAAI;QAC9B,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;QAC1B,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Dd,CAAC;AAEF,SAAgB,iBAAiB,CAC/B,OAAyB,EACzB,UAA+B;IAE/B,MAAM,KAAK,GAAG;QACZ,GAAG,WAAW,CACZ,SAAS,EACT,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC1B,CAAC,CAAC,0EAA0E;YAC5E,CAAC,CAAC,SAAS,CACd;KACF,CAAC;IAEF,IAAI,UAAU,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CACR,EAAE,EACF,GAAG,WAAW,CACZ,YAAY,EACZ,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,YAAY,CACxB,CACF,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { ConfigField } from './storage-provider';
2
+ /**
3
+ * Encryption at rest for thread messages and PII (ADR-02, ADR-06).
4
+ *
5
+ * The wizard skipped this too, and the cost of skipping is asymmetric:
6
+ * turning encryption *on* later leaves everything written before it in
7
+ * plaintext, because nothing re-encrypts history. So the one moment it is
8
+ * free to decide is the moment the install is created.
9
+ *
10
+ * `local` is offered first because it costs the user nothing —
11
+ * `generateSecret()` already produces a 64-character hex string, which is
12
+ * exactly what `parseMasterKey` in `@ragenai/crypto` accepts. No account, no
13
+ * console, no copy-paste.
14
+ *
15
+ * The variable names mirror `ENCRYPTION_SEAM` in `@ragenai/env`, copied rather
16
+ * than imported for the reason given in `storage-provider.ts`, and held to the
17
+ * original by `tests/architecture/create-ragen-app-knows-the-provider-seams.test.ts`.
18
+ */
19
+ export type EncryptionChoice = 'none' | 'local' | 'scaleway' | 'kms';
20
+ export declare const ENCRYPTION_LABELS: Record<EncryptionChoice, string>;
21
+ export interface EncryptionAnswers {
22
+ /** Scaleway: Key Manager key id. KMS: the key id or ARN. */
23
+ keyId: string;
24
+ /** Scaleway only. */
25
+ apiKey: string;
26
+ }
27
+ export interface EncryptionSelection {
28
+ provider: EncryptionChoice;
29
+ envUpdates: Record<string, string>;
30
+ configFields: ConfigField[];
31
+ /** True when the wizard minted the key, so the CLI can say where it went. */
32
+ generatedKey: boolean;
33
+ }
34
+ export declare function resolveEncryptionSelection(provider: EncryptionChoice, answers?: EncryptionAnswers): EncryptionSelection;
35
+ //# sourceMappingURL=encryption-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption-provider.d.ts","sourceRoot":"","sources":["../src/encryption-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;AAErE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAK9D,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,6EAA6E;IAC7E,YAAY,EAAE,OAAO,CAAC;CACvB;AAOD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,mBAAmB,CAkDrB"}