create-cogenta 0.0.3 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/LICENSE +373 -0
  2. package/dist/bin.d.ts +3 -0
  3. package/dist/bin.d.ts.map +1 -0
  4. package/dist/bin.js +17 -0
  5. package/dist/bin.js.map +1 -0
  6. package/dist/blueprints/association.d.ts +73 -0
  7. package/dist/blueprints/association.d.ts.map +1 -0
  8. package/dist/blueprints/association.js +176 -0
  9. package/dist/blueprints/association.js.map +1 -0
  10. package/dist/blueprints/blog.d.ts +211 -0
  11. package/dist/blueprints/blog.d.ts.map +1 -0
  12. package/dist/blueprints/blog.js +303 -0
  13. package/dist/blueprints/blog.js.map +1 -0
  14. package/dist/blueprints/content-pack.d.ts +54 -0
  15. package/dist/blueprints/content-pack.d.ts.map +1 -0
  16. package/dist/blueprints/content-pack.js +40 -0
  17. package/dist/blueprints/content-pack.js.map +1 -0
  18. package/dist/blueprints/content-packs.d.ts +10 -0
  19. package/dist/blueprints/content-packs.d.ts.map +1 -0
  20. package/dist/blueprints/content-packs.js +26 -0
  21. package/dist/blueprints/content-packs.js.map +1 -0
  22. package/dist/blueprints/documentation.d.ts +71 -0
  23. package/dist/blueprints/documentation.d.ts.map +1 -0
  24. package/dist/blueprints/documentation.js +153 -0
  25. package/dist/blueprints/documentation.js.map +1 -0
  26. package/dist/blueprints/magazine.d.ts +79 -0
  27. package/dist/blueprints/magazine.d.ts.map +1 -0
  28. package/dist/blueprints/magazine.js +163 -0
  29. package/dist/blueprints/magazine.js.map +1 -0
  30. package/dist/blueprints/portfolio.d.ts +73 -0
  31. package/dist/blueprints/portfolio.d.ts.map +1 -0
  32. package/dist/blueprints/portfolio.js +171 -0
  33. package/dist/blueprints/portfolio.js.map +1 -0
  34. package/dist/blueprints/registry.d.ts +23 -0
  35. package/dist/blueprints/registry.d.ts.map +1 -0
  36. package/dist/blueprints/registry.js +42 -0
  37. package/dist/blueprints/registry.js.map +1 -0
  38. package/dist/blueprints/restaurant.d.ts +79 -0
  39. package/dist/blueprints/restaurant.d.ts.map +1 -0
  40. package/dist/blueprints/restaurant.js +175 -0
  41. package/dist/blueprints/restaurant.js.map +1 -0
  42. package/dist/blueprints/saas.d.ts +66 -0
  43. package/dist/blueprints/saas.d.ts.map +1 -0
  44. package/dist/blueprints/saas.js +165 -0
  45. package/dist/blueprints/saas.js.map +1 -0
  46. package/dist/blueprints/vitrine.d.ts +100 -0
  47. package/dist/blueprints/vitrine.d.ts.map +1 -0
  48. package/dist/blueprints/vitrine.js +214 -0
  49. package/dist/blueprints/vitrine.js.map +1 -0
  50. package/dist/config-file.d.ts +13 -0
  51. package/dist/config-file.d.ts.map +1 -0
  52. package/dist/config-file.js +93 -0
  53. package/dist/config-file.js.map +1 -0
  54. package/dist/environment.d.ts +27 -0
  55. package/dist/environment.d.ts.map +1 -0
  56. package/dist/environment.js +91 -0
  57. package/dist/environment.js.map +1 -0
  58. package/dist/index.d.ts +37 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +79 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/llm-setup.d.ts +39 -0
  63. package/dist/llm-setup.d.ts.map +1 -0
  64. package/dist/llm-setup.js +47 -0
  65. package/dist/llm-setup.js.map +1 -0
  66. package/dist/playground-reset.d.ts +27 -0
  67. package/dist/playground-reset.d.ts.map +1 -0
  68. package/dist/playground-reset.js +40 -0
  69. package/dist/playground-reset.js.map +1 -0
  70. package/dist/prompts.d.ts +30 -0
  71. package/dist/prompts.d.ts.map +1 -0
  72. package/dist/prompts.js +63 -0
  73. package/dist/prompts.js.map +1 -0
  74. package/dist/recap.d.ts +19 -0
  75. package/dist/recap.d.ts.map +1 -0
  76. package/dist/recap.js +74 -0
  77. package/dist/recap.js.map +1 -0
  78. package/dist/scaffold.d.ts +49 -0
  79. package/dist/scaffold.d.ts.map +1 -0
  80. package/dist/scaffold.js +170 -0
  81. package/dist/scaffold.js.map +1 -0
  82. package/dist/skin-flow.d.ts +35 -0
  83. package/dist/skin-flow.d.ts.map +1 -0
  84. package/dist/skin-flow.js +56 -0
  85. package/dist/skin-flow.js.map +1 -0
  86. package/dist/skin-preview.d.ts +8 -0
  87. package/dist/skin-preview.d.ts.map +1 -0
  88. package/dist/skin-preview.js +130 -0
  89. package/dist/skin-preview.js.map +1 -0
  90. package/dist/types.d.ts +19 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +13 -0
  93. package/dist/types.js.map +1 -0
  94. package/dist/wizard.d.ts +17 -0
  95. package/dist/wizard.d.ts.map +1 -0
  96. package/dist/wizard.js +157 -0
  97. package/dist/wizard.js.map +1 -0
  98. package/package.json +44 -5
  99. package/README.md +0 -39
@@ -0,0 +1,91 @@
1
+ import { access, constants as fsConstants, mkdir, rm, writeFile } from 'node:fs/promises';
2
+ import { connect } from 'node:net';
3
+ import { join } from 'node:path';
4
+ /** Node's own SQLite module needs 22.13 — the same threshold `cogenta doctor` already checks. */
5
+ function checkNodeVersion() {
6
+ const version = process.versions.node;
7
+ const [major, minor] = version.split('.').map(Number);
8
+ if (major === undefined || major < 22) {
9
+ return {
10
+ name: 'node',
11
+ status: 'fail',
12
+ message: `Node ${version} is too old. Cogenta needs Node 22.11 or later — install a current LTS from nodejs.org.`,
13
+ };
14
+ }
15
+ if (major === 22 && minor !== undefined && minor < 13) {
16
+ return {
17
+ name: 'node',
18
+ status: 'warn',
19
+ message: `Node ${version} has no built-in SQLite. Upgrade to 22.13 or later, or choose Postgres or MySQL in the next step.`,
20
+ };
21
+ }
22
+ return { name: 'node', status: 'ok', message: `Node ${version}.` };
23
+ }
24
+ /** `npm_config_user_agent` is the one signal every package manager sets consistently — parsed the same way `pnpm`/`corepack` themselves rely on it being. */
25
+ function detectPackageManager(env) {
26
+ const userAgent = env.npm_config_user_agent;
27
+ if (userAgent === undefined)
28
+ return 'npm';
29
+ const name = userAgent.split('/')[0];
30
+ return name === undefined || name === '' ? 'npm' : name;
31
+ }
32
+ async function checkWritePermission(targetDir) {
33
+ try {
34
+ await mkdir(targetDir, { recursive: true });
35
+ await access(targetDir, fsConstants.W_OK);
36
+ const probe = join(targetDir, '.cogenta-write-probe');
37
+ await writeFile(probe, '', 'utf8');
38
+ await rm(probe, { force: true });
39
+ return { name: 'write-permission', status: 'ok', message: `${targetDir} is writable.` };
40
+ }
41
+ catch (error) {
42
+ return {
43
+ name: 'write-permission',
44
+ status: 'fail',
45
+ message: `Cannot write to ${targetDir} (${error instanceof Error ? error.message : String(error)}). Choose a different directory, or fix its permissions.`,
46
+ };
47
+ }
48
+ }
49
+ /** A short-timeout TCP connect — best-effort, never a `fail`: a database that is not running locally is completely normal, this only feeds "Postgres/MySQL proposed if detected". */
50
+ function probePort(port, timeoutMs = 300) {
51
+ return new Promise((resolve) => {
52
+ const socket = connect({ port, host: '127.0.0.1' });
53
+ const finish = (result) => {
54
+ socket.removeAllListeners();
55
+ socket.destroy();
56
+ resolve(result);
57
+ };
58
+ socket.setTimeout(timeoutMs);
59
+ socket.once('connect', () => finish(true));
60
+ socket.once('timeout', () => finish(false));
61
+ socket.once('error', () => finish(false));
62
+ });
63
+ }
64
+ /**
65
+ * Step 1 of the wizard: "Vérification de l'environnement — version de Node,
66
+ * gestionnaire de paquets, droits d'écriture, services détectés." Every
67
+ * `fail` message names both the cause and the remedy — never just what
68
+ * broke, matching `cogenta doctor`'s own convention (`packages/cli/src/commands/doctor.ts`).
69
+ */
70
+ export async function checkEnvironment(options) {
71
+ const env = options.env ?? process.env;
72
+ const [writeCheck, hasPostgres, hasMysql] = await Promise.all([
73
+ checkWritePermission(options.targetDir),
74
+ probePort(5432),
75
+ probePort(3306),
76
+ ]);
77
+ const checks = [checkNodeVersion(), writeCheck];
78
+ const detectedDatabases = [];
79
+ if (hasPostgres)
80
+ detectedDatabases.push('postgres');
81
+ if (hasMysql)
82
+ detectedDatabases.push('mysql');
83
+ return {
84
+ node: process.versions.node,
85
+ packageManager: detectPackageManager(env),
86
+ checks,
87
+ detectedDatabases,
88
+ ok: checks.every((check) => check.status !== 'fail'),
89
+ };
90
+ }
91
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { type Writer } from '@cogenta/cli';
2
+ export type { BlueprintContentPack, RecommendedAgentHint, SeedDemoContent, } from './blueprints/content-pack.js';
3
+ export { BLUEPRINT_CONTENT_PACKS } from './blueprints/content-packs.js';
4
+ export type { Blueprint, ResolvedBlueprint } from './blueprints/registry.js';
5
+ export { BLUEPRINTS, DEFAULT_BLUEPRINT_ID, resolveBlueprint } from './blueprints/registry.js';
6
+ export { ConfigFileError, loadConfigFile } from './config-file.js';
7
+ export type { CheckStatus, EnvironmentCheck, EnvironmentReport } from './environment.js';
8
+ export { checkEnvironment } from './environment.js';
9
+ export type { CreateProviderClientOptions, LlmProviderId, LlmProviderOption, ValidateKeyOptions, ValidateKeyResult, } from './llm-setup.js';
10
+ export { createProviderClient, LLM_PROVIDERS, validateApiKey } from './llm-setup.js';
11
+ export type { ResetPlaygroundDataOptions } from './playground-reset.js';
12
+ export { resetPlaygroundData } from './playground-reset.js';
13
+ export type { Choice, Prompter, PromptIO } from './prompts.js';
14
+ export { createDefaultsPrompter, createInteractivePrompter } from './prompts.js';
15
+ export { printRecap } from './recap.js';
16
+ export type { ScaffoldAnswers, ScaffoldResult } from './scaffold.js';
17
+ export { scaffoldSite } from './scaffold.js';
18
+ export type { ChooseSkinOptions, SkinOutcome } from './skin-flow.js';
19
+ export { chooseSkin } from './skin-flow.js';
20
+ export type { SkinPreviewPage } from './skin-preview.js';
21
+ export { renderSkinPreview } from './skin-preview.js';
22
+ export type { WizardAnswers } from './types.js';
23
+ export { defaultAnswers } from './types.js';
24
+ export type { RunWizardOptions } from './wizard.js';
25
+ export { runWizard } from './wizard.js';
26
+ export interface RunOptions {
27
+ readonly argv: readonly string[];
28
+ readonly cwd?: string;
29
+ readonly stdout?: Writer;
30
+ readonly stderr?: Writer;
31
+ readonly stdin?: NodeJS.ReadableStream;
32
+ readonly env?: Record<string, string | undefined>;
33
+ readonly isTty?: boolean;
34
+ }
35
+ /** Mirrors `@cogenta/cli`'s own `run()`: nothing here calls `process.exit` or writes to a stream directly, so the whole wizard is testable without spawning a process. */
36
+ export declare function run(options: RunOptions): Promise<number>;
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiC,KAAK,MAAM,EAAE,MAAM,cAAc,CAAA;AAIzE,YAAY,EACV,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,GAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AACvE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC7F,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,YAAY,EACV,2BAA2B,EAC3B,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpF,YAAY,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAavC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,0KAA0K;AAC1K,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAsD9D"}
package/dist/index.js ADDED
@@ -0,0 +1,79 @@
1
+ import { basename, resolve as resolvePath } from 'node:path';
2
+ import { parseArgs } from 'node:util';
3
+ import { createOutput, shouldUseColour } from '@cogenta/cli';
4
+ import { createDefaultsPrompter, createInteractivePrompter } from './prompts.js';
5
+ import { runWizard } from './wizard.js';
6
+ export { BLUEPRINT_CONTENT_PACKS } from './blueprints/content-packs.js';
7
+ export { BLUEPRINTS, DEFAULT_BLUEPRINT_ID, resolveBlueprint } from './blueprints/registry.js';
8
+ export { ConfigFileError, loadConfigFile } from './config-file.js';
9
+ export { checkEnvironment } from './environment.js';
10
+ export { createProviderClient, LLM_PROVIDERS, validateApiKey } from './llm-setup.js';
11
+ export { resetPlaygroundData } from './playground-reset.js';
12
+ export { createDefaultsPrompter, createInteractivePrompter } from './prompts.js';
13
+ export { printRecap } from './recap.js';
14
+ export { scaffoldSite } from './scaffold.js';
15
+ export { chooseSkin } from './skin-flow.js';
16
+ export { renderSkinPreview } from './skin-preview.js';
17
+ export { defaultAnswers } from './types.js';
18
+ export { runWizard } from './wizard.js';
19
+ const USAGE = `create-cogenta — scaffold a new Cogenta site
20
+
21
+ Usage
22
+ npm create cogenta [directory] [options]
23
+
24
+ Options
25
+ --yes Accept every default, no questions asked
26
+ --config <file> Install non-interactively from a JSON config file
27
+ --no-color Never colour the output (NO_COLOR is honoured too)
28
+ `;
29
+ /** Mirrors `@cogenta/cli`'s own `run()`: nothing here calls `process.exit` or writes to a stream directly, so the whole wizard is testable without spawning a process. */
30
+ export async function run(options) {
31
+ const env = options.env ?? process.env;
32
+ const stdout = options.stdout ?? ((text) => void process.stdout.write(text));
33
+ const stderr = options.stderr ?? ((text) => void process.stderr.write(text));
34
+ let parsed;
35
+ try {
36
+ parsed = parseArgs({
37
+ args: [...options.argv],
38
+ allowPositionals: true,
39
+ strict: true,
40
+ options: {
41
+ yes: { type: 'boolean' },
42
+ config: { type: 'string' },
43
+ 'no-color': { type: 'boolean' },
44
+ help: { type: 'boolean', short: 'h' },
45
+ },
46
+ });
47
+ }
48
+ catch (error) {
49
+ stderr(`${error instanceof Error ? error.message : String(error)}\n\n${USAGE}`);
50
+ return 2;
51
+ }
52
+ if (parsed.values.help === true) {
53
+ stdout(USAGE);
54
+ return 0;
55
+ }
56
+ const colour = parsed.values['no-color'] === true ? false : shouldUseColour(env, options.isTty ?? false);
57
+ const out = createOutput(stdout, colour);
58
+ const cwd = options.cwd ?? process.cwd();
59
+ const targetArg = parsed.positionals[0] ?? '.';
60
+ const targetDir = resolvePath(cwd, targetArg);
61
+ const siteName = targetArg === '.' ? basename(cwd) : basename(targetArg);
62
+ // `--config` never prompts at all — building an interactive readline
63
+ // interface for it would needlessly hold stdin open.
64
+ const useYes = parsed.values.yes === true || typeof parsed.values.config === 'string';
65
+ const prompter = useYes
66
+ ? createDefaultsPrompter()
67
+ : createInteractivePrompter({ input: options.stdin ?? process.stdin, output: process.stdout });
68
+ return runWizard({
69
+ targetDir,
70
+ siteName,
71
+ prompter,
72
+ out,
73
+ env,
74
+ ...(typeof parsed.values.config === 'string'
75
+ ? { configPath: resolvePath(cwd, parsed.values.config) }
76
+ : {}),
77
+ });
78
+ }
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { type ProviderClient } from '@cogenta/agents';
2
+ export type LlmProviderId = 'none' | 'anthropic' | 'openai' | 'google';
3
+ export interface LlmProviderOption {
4
+ readonly id: LlmProviderId;
5
+ readonly label: string;
6
+ readonly defaultModel?: string;
7
+ }
8
+ /** "aucun pour l'instant" is listed first, not hidden at the bottom — the CMS works without AI (R2), and the wizard's own layout must not suggest otherwise. */
9
+ export declare const LLM_PROVIDERS: readonly LlmProviderOption[];
10
+ export interface ValidateKeyOptions {
11
+ readonly provider: Exclude<LlmProviderId, 'none'>;
12
+ readonly apiKey: string;
13
+ readonly model: string;
14
+ readonly timeoutMs?: number;
15
+ /** Test seam only — lets a test stand in for the network without mocking a shared module. */
16
+ readonly fetchImpl?: typeof fetch;
17
+ }
18
+ export interface ValidateKeyResult {
19
+ readonly valid: boolean;
20
+ /** Present only when `valid` is `false` — why the check failed, so the recap can say more than "no". */
21
+ readonly reason?: string;
22
+ }
23
+ export interface CreateProviderClientOptions {
24
+ readonly provider: Exclude<LlmProviderId, 'none'>;
25
+ readonly apiKey: string;
26
+ readonly model: string;
27
+ /** Test seam only — lets a test stand in for the network without mocking a shared module. */
28
+ readonly fetchImpl?: typeof fetch;
29
+ }
30
+ /** The same adapter construction `validateApiKey` uses, exported so a later real call (skin generation, L9 task 7) does not duplicate it. */
31
+ export declare function createProviderClient(options: CreateProviderClientOptions): ProviderClient;
32
+ /**
33
+ * "Modèle et clé API si un fournisseur est choisi ; validation immédiate de
34
+ * la clé." A one-token round trip is enough to know the key is accepted —
35
+ * this is not the AI skin-generation pipeline (L9 task 7), just a yes/no on
36
+ * whether the provider will work at all.
37
+ */
38
+ export declare function validateApiKey(options: ValidateKeyOptions): Promise<ValidateKeyResult>;
39
+ //# sourceMappingURL=llm-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-setup.d.ts","sourceRoot":"","sources":["../src/llm-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAA;AAExB,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEtE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED,gKAAgK;AAChK,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EAKrD,CAAA;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAClC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,wGAAwG;IACxG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAClC;AAED,6IAA6I;AAC7I,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,cAAc,CASzF;AAMD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiB5F"}
@@ -0,0 +1,47 @@
1
+ import { createAnthropicClient, createGoogleClient, createOpenAiClient, } from '@cogenta/agents';
2
+ /** "aucun pour l'instant" is listed first, not hidden at the bottom — the CMS works without AI (R2), and the wizard's own layout must not suggest otherwise. */
3
+ export const LLM_PROVIDERS = [
4
+ { id: 'none', label: 'None for now — the CMS works fully without one' },
5
+ { id: 'anthropic', label: 'Anthropic', defaultModel: 'claude-sonnet-5' },
6
+ { id: 'openai', label: 'OpenAI', defaultModel: 'gpt-5' },
7
+ { id: 'google', label: 'Google', defaultModel: 'gemini-2.5-pro' },
8
+ ];
9
+ /** The same adapter construction `validateApiKey` uses, exported so a later real call (skin generation, L9 task 7) does not duplicate it. */
10
+ export function createProviderClient(options) {
11
+ const config = {
12
+ apiKey: options.apiKey,
13
+ model: options.model,
14
+ ...(options.fetchImpl === undefined ? {} : { fetchImpl: options.fetchImpl }),
15
+ };
16
+ if (options.provider === 'anthropic')
17
+ return createAnthropicClient(config);
18
+ if (options.provider === 'openai')
19
+ return createOpenAiClient(config);
20
+ return createGoogleClient(config);
21
+ }
22
+ function clientFor(options) {
23
+ return createProviderClient(options);
24
+ }
25
+ /**
26
+ * "Modèle et clé API si un fournisseur est choisi ; validation immédiate de
27
+ * la clé." A one-token round trip is enough to know the key is accepted —
28
+ * this is not the AI skin-generation pipeline (L9 task 7), just a yes/no on
29
+ * whether the provider will work at all.
30
+ */
31
+ export async function validateApiKey(options) {
32
+ const client = clientFor(options);
33
+ const timeoutMs = options.timeoutMs ?? 8_000;
34
+ const controller = new AbortController();
35
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
36
+ try {
37
+ await client.chat({ model: options.model, messages: [{ role: 'user', content: 'ping' }], maxTokens: 1 }, { signal: controller.signal });
38
+ return { valid: true };
39
+ }
40
+ catch (error) {
41
+ return { valid: false, reason: error instanceof Error ? error.message : String(error) };
42
+ }
43
+ finally {
44
+ clearTimeout(timer);
45
+ }
46
+ }
47
+ //# sourceMappingURL=llm-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-setup.js","sourceRoot":"","sources":["../src/llm-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,iBAAiB,CAAA;AAUxB,gKAAgK;AAChK,MAAM,CAAC,MAAM,aAAa,GAAiC;IACzD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gDAAgD,EAAE;IACvE,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE;IACxE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE;IACxD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE;CAClE,CAAA;AAyBD,6IAA6I;AAC7I,MAAM,UAAU,oBAAoB,CAAC,OAAoC;IACvE,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;KAC7E,CAAA;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,WAAW;QAAE,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAA;IAC1E,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAA;IACpE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAA;AACnC,CAAC;AAED,SAAS,SAAS,CAAC,OAA2B;IAC5C,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;IACjC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAA;IAC5C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAA;IAE7D,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CACf,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EACrF,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAC9B,CAAA;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;IACzF,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { type DatabaseHandle } from '@cogenta/core';
2
+ export interface ResetPlaygroundDataOptions {
3
+ readonly db: DatabaseHandle;
4
+ /** Which real content pack to reset back to — `blog` by default, the one with the richest real demo content. */
5
+ readonly blueprintId?: string;
6
+ readonly defaultLocale?: string;
7
+ /** An existing admin's email, whose id becomes `createdBy` on every reseeded entry. Omit to leave it null. */
8
+ readonly adminEmail?: string;
9
+ }
10
+ /**
11
+ * "Un bac à sable public exécutant du code arbitraire est une cible.
12
+ * Commencer par une démo en lecture seule réinitialisée périodiquement."
13
+ * (L9 tâche 12).
14
+ *
15
+ * Wipes a blueprint's own tables and reseeds its real demo content —
16
+ * `BLUEPRINT_CONTENT_PACKS`, the exact same collections and
17
+ * `seedDemoContent` already built and tested for `create-cogenta`'s
18
+ * installer (L9 tasks 3-4, 8), not a second, parallel set of demo data
19
+ * invented for this one purpose.
20
+ *
21
+ * A real, tested, callable unit — scheduling it periodically (a cron job,
22
+ * a platform's scheduled task) is an operational decision for whoever
23
+ * deploys a read-only playground instance, out of scope here: this
24
+ * function does the actual reset, once, when called.
25
+ */
26
+ export declare function resetPlaygroundData(options: ResetPlaygroundDataOptions): Promise<void>;
27
+ //# sourceMappingURL=playground-reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground-reset.d.ts","sourceRoot":"","sources":["../src/playground-reset.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAIjE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAA;IAC3B,gHAAgH;IAChH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,8GAA8G;IAC9G,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB5F"}
@@ -0,0 +1,40 @@
1
+ import { createUserStore, ensureAuthTables } from '@cogenta/auth';
2
+ import { CogentaError } from '@cogenta/core';
3
+ import { createSchemaTables, dropSchemaTables } from '@cogenta/schema';
4
+ import { BLUEPRINT_CONTENT_PACKS } from './blueprints/content-packs.js';
5
+ /**
6
+ * "Un bac à sable public exécutant du code arbitraire est une cible.
7
+ * Commencer par une démo en lecture seule réinitialisée périodiquement."
8
+ * (L9 tâche 12).
9
+ *
10
+ * Wipes a blueprint's own tables and reseeds its real demo content —
11
+ * `BLUEPRINT_CONTENT_PACKS`, the exact same collections and
12
+ * `seedDemoContent` already built and tested for `create-cogenta`'s
13
+ * installer (L9 tasks 3-4, 8), not a second, parallel set of demo data
14
+ * invented for this one purpose.
15
+ *
16
+ * A real, tested, callable unit — scheduling it periodically (a cron job,
17
+ * a platform's scheduled task) is an operational decision for whoever
18
+ * deploys a read-only playground instance, out of scope here: this
19
+ * function does the actual reset, once, when called.
20
+ */
21
+ export async function resetPlaygroundData(options) {
22
+ const blueprintId = options.blueprintId ?? 'blog';
23
+ const pack = BLUEPRINT_CONTENT_PACKS[blueprintId];
24
+ if (pack === undefined) {
25
+ throw new CogentaError({
26
+ code: 'PLAYGROUND_BLUEPRINT_UNKNOWN',
27
+ message: `No content pack for blueprint "${blueprintId}".`,
28
+ hint: `Pass one of: ${Object.keys(BLUEPRINT_CONTENT_PACKS).join(', ')}.`,
29
+ details: { blueprintId },
30
+ });
31
+ }
32
+ await dropSchemaTables(options.db, pack.collections);
33
+ await createSchemaTables(options.db, pack.collections);
34
+ await ensureAuthTables(options.db);
35
+ const adminId = options.adminEmail === undefined
36
+ ? null
37
+ : ((await createUserStore(options.db).byEmail(options.adminEmail))?.id ?? null);
38
+ await pack.seedDemoContent(options.db, options.defaultLocale ?? 'en', adminId);
39
+ }
40
+ //# sourceMappingURL=playground-reset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground-reset.js","sourceRoot":"","sources":["../src/playground-reset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACjE,OAAO,EAAE,YAAY,EAAuB,MAAM,eAAe,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAWvE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAmC;IAC3E,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,CAAA;IACjD,MAAM,IAAI,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAA;IACjD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CAAC;YACrB,IAAI,EAAE,8BAA8B;YACpC,OAAO,EAAE,kCAAkC,WAAW,IAAI;YAC1D,IAAI,EAAE,gBAAgB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACxE,OAAO,EAAE,EAAE,WAAW,EAAE;SACzB,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;IACpD,MAAM,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;IAEtD,MAAM,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAClC,MAAM,OAAO,GACX,OAAO,CAAC,UAAU,KAAK,SAAS;QAC9B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,CAAA;IAEnF,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI,EAAE,OAAO,CAAC,CAAA;AAChF,CAAC"}
@@ -0,0 +1,30 @@
1
+ export interface Choice<T> {
2
+ readonly label: string;
3
+ readonly value: T;
4
+ readonly hint?: string;
5
+ }
6
+ /**
7
+ * Text/numbered-choice/confirm — the three primitives the wizard needs.
8
+ * R9: audited against `@clack/prompts`/`prompts`/`enquirer` and built on
9
+ * `node:readline/promises` instead — `prompts` and `enquirer` have had no
10
+ * release in over two years, and `@clack/prompts`, while healthy, pulls
11
+ * four more packages for what three functions here cover in well under a
12
+ * hundred lines. No arrow-key navigation, but "type a number and press
13
+ * Enter" is a completely standard, universally understood CLI pattern —
14
+ * it does not put "moins de 60 secondes" at risk.
15
+ */
16
+ export interface Prompter {
17
+ text(question: string, defaultValue: string): Promise<string>;
18
+ choice<T>(question: string, choices: readonly Choice<T>[], defaultIndex: number): Promise<T>;
19
+ confirm(question: string, defaultValue: boolean): Promise<boolean>;
20
+ close(): void;
21
+ }
22
+ export interface PromptIO {
23
+ readonly input: NodeJS.ReadableStream;
24
+ readonly output: NodeJS.WritableStream;
25
+ }
26
+ /** Talks to a real terminal (or any injected stream pair, for tests that want to script real input). */
27
+ export declare function createInteractivePrompter(io: PromptIO): Prompter;
28
+ /** `--yes`: every question answers its own default, and stdin is never touched — this is what makes "nine Enters" and "zero Enters" the same outcome. */
29
+ export declare function createDefaultsPrompter(): Prompter;
30
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7D,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAC5F,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAClE,KAAK,IAAI,IAAI,CAAA;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAA;CACvC;AAED,wGAAwG;AACxG,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,QAAQ,GAAG,QAAQ,CAyChE;AAED,yJAAyJ;AACzJ,wBAAgB,sBAAsB,IAAI,QAAQ,CAqBjD"}
@@ -0,0 +1,63 @@
1
+ import { createInterface } from 'node:readline/promises';
2
+ /** Talks to a real terminal (or any injected stream pair, for tests that want to script real input). */
3
+ export function createInteractivePrompter(io) {
4
+ const rl = createInterface({ input: io.input, output: io.output });
5
+ return {
6
+ async text(question, defaultValue) {
7
+ const answer = await rl.question(`${question} (${defaultValue}): `);
8
+ const trimmed = answer.trim();
9
+ return trimmed === '' ? defaultValue : trimmed;
10
+ },
11
+ async choice(question, choices, defaultIndex) {
12
+ const fallback = choices[defaultIndex];
13
+ if (fallback === undefined) {
14
+ throw new RangeError(`defaultIndex ${defaultIndex} is out of range for ${choices.length} choices.`);
15
+ }
16
+ const lines = choices.map((entry, index) => {
17
+ const marker = index === defaultIndex ? '*' : ' ';
18
+ const hint = entry.hint === undefined ? '' : ` — ${entry.hint}`;
19
+ return ` ${marker} ${index + 1}. ${entry.label}${hint}`;
20
+ });
21
+ const answer = await rl.question(`${question}\n${lines.join('\n')}\nChoice (${defaultIndex + 1}): `);
22
+ const trimmed = answer.trim();
23
+ if (trimmed === '')
24
+ return fallback.value;
25
+ const picked = Number.parseInt(trimmed, 10);
26
+ const entry = choices[picked - 1];
27
+ return entry === undefined ? fallback.value : entry.value;
28
+ },
29
+ async confirm(question, defaultValue) {
30
+ const suffix = defaultValue ? 'Y/n' : 'y/N';
31
+ const answer = await rl.question(`${question} (${suffix}): `);
32
+ const trimmed = answer.trim().toLowerCase();
33
+ if (trimmed === '')
34
+ return defaultValue;
35
+ return trimmed === 'y' || trimmed === 'yes';
36
+ },
37
+ close() {
38
+ rl.close();
39
+ },
40
+ };
41
+ }
42
+ /** `--yes`: every question answers its own default, and stdin is never touched — this is what makes "nine Enters" and "zero Enters" the same outcome. */
43
+ export function createDefaultsPrompter() {
44
+ return {
45
+ async text(_question, defaultValue) {
46
+ return defaultValue;
47
+ },
48
+ async choice(_question, choices, defaultIndex) {
49
+ const fallback = choices[defaultIndex];
50
+ if (fallback === undefined) {
51
+ throw new RangeError(`defaultIndex ${defaultIndex} is out of range for ${choices.length} choices.`);
52
+ }
53
+ return fallback.value;
54
+ },
55
+ async confirm(_question, defaultValue) {
56
+ return defaultValue;
57
+ },
58
+ close() {
59
+ // Nothing was opened.
60
+ },
61
+ };
62
+ }
63
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Output } from '@cogenta/cli';
2
+ import type { ResolvedBlueprint } from './blueprints/registry.js';
3
+ import type { EnvironmentReport } from './environment.js';
4
+ import type { ValidateKeyResult } from './llm-setup.js';
5
+ import type { ScaffoldResult } from './scaffold.js';
6
+ import type { SkinOutcome } from './skin-flow.js';
7
+ import type { WizardAnswers } from './types.js';
8
+ export interface RecapInput {
9
+ readonly answers: WizardAnswers;
10
+ readonly environment: EnvironmentReport;
11
+ readonly resolvedBlueprint: ResolvedBlueprint;
12
+ readonly keyValidation?: ValidateKeyResult;
13
+ readonly scaffold: ScaffoldResult;
14
+ /** Present only when generation was attempted (L9 task 7) — absent means it was never offered (no LLM, no description). */
15
+ readonly skinOutcome?: SkinOutcome;
16
+ }
17
+ /** Step 10: "ce qui est actif, ce qui est dégradé et pourquoi, prochaine étape." Every degraded item names why, never just that it is degraded. */
18
+ export declare function printRecap(input: RecapInput, out: Output): void;
19
+ //# sourceMappingURL=recap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recap.d.ts","sourceRoot":"","sources":["../src/recap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;IACvC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAA;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAA;IAC1C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,2HAA2H;IAC3H,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;CACnC;AAED,mJAAmJ;AACnJ,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAmF/D"}
package/dist/recap.js ADDED
@@ -0,0 +1,74 @@
1
+ import { BLUEPRINT_CONTENT_PACKS } from './blueprints/content-packs.js';
2
+ /** Step 10: "ce qui est actif, ce qui est dégradé et pourquoi, prochaine étape." Every degraded item names why, never just that it is degraded. */
3
+ export function printRecap(input, out) {
4
+ const { answers, environment, resolvedBlueprint, keyValidation, scaffold, skinOutcome } = input;
5
+ out.heading('Your site');
6
+ out.ok(`${answers.siteName} — ${answers.siteUrl}`);
7
+ out.detail(answers.targetDir);
8
+ out.heading('Blueprint');
9
+ if (resolvedBlueprint.fellBackToBlank) {
10
+ out.warn(`"${answers.blueprintId}" is not built yet — used "blank" instead.`);
11
+ }
12
+ else {
13
+ out.ok(resolvedBlueprint.blueprint.label);
14
+ }
15
+ out.heading('Database');
16
+ out.ok(answers.databaseDriver);
17
+ if (answers.databaseDriver === 'sqlite') {
18
+ out.detail('One machine, no vector index — fine for a single site, not for a fleet.');
19
+ }
20
+ out.heading('LLM provider');
21
+ if (answers.llmProvider === 'none') {
22
+ out.warn('None configured. Everything works except the agents.');
23
+ }
24
+ else if (keyValidation === undefined) {
25
+ out.warn(`${answers.llmProvider} configured, but no API key was given to validate.`);
26
+ }
27
+ else if (keyValidation.valid) {
28
+ out.ok(`${answers.llmProvider} (${answers.llmModel ?? 'default model'}) — key validated.`);
29
+ }
30
+ else {
31
+ out.bad(`${answers.llmProvider} key did not validate: ${keyValidation.reason ?? 'unknown error'}. The agents will not run until this is fixed.`);
32
+ }
33
+ const hasContentPack = BLUEPRINT_CONTENT_PACKS[resolvedBlueprint.blueprint.id] !== undefined;
34
+ out.heading('Skin');
35
+ if (!hasContentPack) {
36
+ out.warn('Default skin — this blueprint has no theme.tokens.json step yet. AI skin generation applies only to blueprints with a real content pack today.');
37
+ }
38
+ else if (skinOutcome?.kind === 'generated') {
39
+ out.ok(`AI-generated skin, validated in ${skinOutcome.attempts} attempt${skinOutcome.attempts === 1 ? '' : 's'} — written to theme.tokens.json.`);
40
+ }
41
+ else if (skinOutcome?.kind === 'default') {
42
+ out.warn(`@cogenta/theme-canonical default skin — kept because ${skinOutcome.reason}.`);
43
+ }
44
+ else {
45
+ out.ok('@cogenta/theme-canonical default skin — written to theme.tokens.json.');
46
+ if (answers.llmProvider === 'none' || answers.siteDescription === undefined) {
47
+ out.detail('AI skin generation was not offered: it needs an LLM provider and a site description. Run `cogenta skin generate` later (a future CLI task) to try it.');
48
+ }
49
+ }
50
+ if (hasContentPack) {
51
+ out.heading('Recommended agents');
52
+ out.detail('Not enabled — no site runs a live agent scheduler yet. Recorded in .cogenta/recommended-agents.json for when one exists.');
53
+ }
54
+ out.heading('Admin account');
55
+ if (scaffold.usersExitCode === 0) {
56
+ out.line(scaffold.usersOutput.trim());
57
+ }
58
+ else {
59
+ out.bad('Could not create the admin account.');
60
+ out.detail(scaffold.usersOutput.trim());
61
+ }
62
+ if (environment.checks.some((check) => check.status === 'warn')) {
63
+ out.heading('Degraded');
64
+ for (const check of environment.checks) {
65
+ if (check.status === 'warn')
66
+ out.warn(check.message);
67
+ }
68
+ }
69
+ out.heading('Next step');
70
+ out.line(`cd ${answers.targetDir}`);
71
+ out.line('npx cogenta serve');
72
+ out.detail('Sign in with the admin account above and enrol a passkey from the admin UI — that ceremony needs a browser, so it never runs during install.');
73
+ }
74
+ //# sourceMappingURL=recap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recap.js","sourceRoot":"","sources":["../src/recap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAkBvE,mJAAmJ;AACnJ,MAAM,UAAU,UAAU,CAAC,KAAiB,EAAE,GAAW;IACvD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAE/F,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACxB,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IAClD,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAE7B,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACxB,IAAI,iBAAiB,CAAC,eAAe,EAAE,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,WAAW,4CAA4C,CAAC,CAAA;IAC/E,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC3C,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACvB,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,IAAI,OAAO,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;QACxC,GAAG,CAAC,MAAM,CAAC,yEAAyE,CAAC,CAAA;IACvF,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC3B,IAAI,OAAO,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;IAClE,CAAC;SAAM,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,oDAAoD,CAAC,CAAA;IACtF,CAAC;SAAM,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;QAC/B,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,QAAQ,IAAI,eAAe,oBAAoB,CAAC,CAAA;IAC5F,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,CACL,GAAG,OAAO,CAAC,WAAW,0BAA0B,aAAa,CAAC,MAAM,IAAI,eAAe,gDAAgD,CACxI,CAAA;IACH,CAAC;IAED,MAAM,cAAc,GAAG,uBAAuB,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,SAAS,CAAA;IAE5F,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACnB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,GAAG,CAAC,IAAI,CACN,gJAAgJ,CACjJ,CAAA;IACH,CAAC;SAAM,IAAI,WAAW,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;QAC7C,GAAG,CAAC,EAAE,CACJ,mCAAmC,WAAW,CAAC,QAAQ,WAAW,WAAW,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,kCAAkC,CAC1I,CAAA;IACH,CAAC;SAAM,IAAI,WAAW,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3C,GAAG,CAAC,IAAI,CAAC,wDAAwD,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;IACzF,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,EAAE,CAAC,uEAAuE,CAAC,CAAA;QAC/E,IAAI,OAAO,CAAC,WAAW,KAAK,MAAM,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC5E,GAAG,CAAC,MAAM,CACR,uJAAuJ,CACxJ,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;QACjC,GAAG,CAAC,MAAM,CACR,0HAA0H,CAC3H,CAAA;IACH,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAC5B,IAAI,QAAQ,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;IACvC,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;QAC9C,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACvB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACxB,GAAG,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IACnC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC7B,GAAG,CAAC,MAAM,CACR,8IAA8I,CAC/I,CAAA;AACH,CAAC"}