@cristiancorreau/forge 2.2.0 → 2.4.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 (44) hide show
  1. package/README.md +52 -109
  2. package/assets/core/hooks/pre-bash-check.js +144 -0
  3. package/assets/core/hooks/pre-edit-check.js +166 -0
  4. package/dist/cli.js +1 -1
  5. package/dist/commands/audit.d.ts.map +1 -1
  6. package/dist/commands/audit.js +27 -7
  7. package/dist/commands/audit.js.map +1 -1
  8. package/dist/commands/doctor.d.ts.map +1 -1
  9. package/dist/commands/doctor.js +54 -19
  10. package/dist/commands/doctor.js.map +1 -1
  11. package/dist/commands/generate.d.ts.map +1 -1
  12. package/dist/commands/generate.js +88 -37
  13. package/dist/commands/generate.js.map +1 -1
  14. package/dist/commands/init.d.ts.map +1 -1
  15. package/dist/commands/init.js +43 -5
  16. package/dist/commands/init.js.map +1 -1
  17. package/dist/lib/detect.d.ts +13 -0
  18. package/dist/lib/detect.d.ts.map +1 -0
  19. package/dist/lib/detect.js +85 -0
  20. package/dist/lib/detect.js.map +1 -0
  21. package/dist/lib/generators/claude-code.d.ts.map +1 -1
  22. package/dist/lib/generators/claude-code.js +7 -1
  23. package/dist/lib/generators/claude-code.js.map +1 -1
  24. package/dist/lib/lock.d.ts +15 -0
  25. package/dist/lib/lock.d.ts.map +1 -0
  26. package/dist/lib/lock.js +48 -0
  27. package/dist/lib/lock.js.map +1 -0
  28. package/dist/lib/wizard.d.ts +3 -2
  29. package/dist/lib/wizard.d.ts.map +1 -1
  30. package/dist/lib/wizard.js +211 -142
  31. package/dist/lib/wizard.js.map +1 -1
  32. package/dist/ui/box.d.ts +2 -0
  33. package/dist/ui/box.d.ts.map +1 -0
  34. package/dist/ui/box.js +15 -0
  35. package/dist/ui/box.js.map +1 -0
  36. package/dist/ui/colors.d.ts +15 -0
  37. package/dist/ui/colors.d.ts.map +1 -0
  38. package/dist/ui/colors.js +19 -0
  39. package/dist/ui/colors.js.map +1 -0
  40. package/dist/ui/spinner.d.ts +9 -0
  41. package/dist/ui/spinner.d.ts.map +1 -0
  42. package/dist/ui/spinner.js +46 -0
  43. package/dist/ui/spinner.js.map +1 -0
  44. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAsE9C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA2E5D"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAsE9C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAiF5D"}
@@ -73,7 +73,7 @@ export function generateClaudeMd(config) {
73
73
  const progressPath = paths?.progress ?? 'docs/progress.html';
74
74
  const agentScopeSection = buildAgentScopeTable(agents, paths);
75
75
  const complianceSection = compliance.frameworks && compliance.frameworks.length > 0
76
- ? `\n## Compliance activo\n\nEste proyecto opera bajo:\n${compliance.frameworks.map(f => `- **${f.toUpperCase()}**`).join('\n')}\n\nReglas no-negociables:\n- Sin datos personales en logs de stdout\n- Consentimiento explícito antes de cualquier tracker no esencial\n- Logs de auditoría append-only (sin UPDATE/DELETE)\n`
76
+ ? `\n## Compliance activo\n\nEste proyecto opera bajo: ${compliance.frameworks.map(f => `**${f.toUpperCase()}**`).join(', ')}\n\nReglas no-negociables:\n- Sin datos personales en logs de stdout\n- Consentimiento explícito antes de cualquier tracker no esencial\n- Logs de auditoría append-only (sin UPDATE/DELETE)\n- Derechos del titular implementados (acceso, rectificación, supresión, portabilidad)\n`
77
77
  : '';
78
78
  return `# CLAUDE.md — ${name}
79
79
 
@@ -96,7 +96,13 @@ ${agentScopeSection}## Estructura
96
96
  \`\`\`
97
97
  ${proj.slug ?? 'proyecto'}/
98
98
  ├── CLAUDE.md ← Estás acá
99
+ ├── AGENTS.md ← Convenciones del agent team
99
100
  ├── project.yaml ← Config de forge (fuente de verdad)
101
+ ├── .claude/
102
+ │ ├── agents/ ← Agentes instalados
103
+ │ ├── hooks/ ← Hooks de guardrail (JS, sin Python)
104
+ │ ├── commands/ ← Slash commands del flujo SDD
105
+ │ └── architecture.rules ← Convenciones de arquitectura del proyecto
100
106
  ├── ${specsPath}/ ← Specs de features (requeridas antes de implementar)
101
107
  └── ${progressPath} ← Dashboard de progreso
102
108
  \`\`\`
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/lib/generators/claude-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/lib/generators/claude-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface ForgeManifest {
2
+ forgeVersion: string;
3
+ runtime: string;
4
+ installedAt: string;
5
+ files: Record<string, {
6
+ sha256: string;
7
+ installedAt: string;
8
+ }>;
9
+ }
10
+ export declare function loadManifest(projectRoot: string): ForgeManifest | null;
11
+ export declare function saveManifest(projectRoot: string, manifest: ForgeManifest): void;
12
+ export declare function sha256file(absPath: string): string;
13
+ export declare function buildManifest(runtime: string, files: string[], projectRoot: string, forgeVersion: string, timestamp: string): ForgeManifest;
14
+ export declare function checkOutdated(projectRoot: string, manifest: ForgeManifest): string[];
15
+ //# sourceMappingURL=lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/lib/lock.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE;AAID,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAKtE;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAI/E;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,aAAa,CASf;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,EAAE,CAQpF"}
@@ -0,0 +1,48 @@
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
2
+ import { join, dirname } from 'path';
3
+ import { createHash } from 'crypto';
4
+ const MANIFEST_PATH = '.forge/manifest.json';
5
+ export function loadManifest(projectRoot) {
6
+ const path = join(projectRoot, MANIFEST_PATH);
7
+ if (!existsSync(path))
8
+ return null;
9
+ try {
10
+ return JSON.parse(readFileSync(path, 'utf-8'));
11
+ }
12
+ catch {
13
+ return null;
14
+ }
15
+ }
16
+ export function saveManifest(projectRoot, manifest) {
17
+ const path = join(projectRoot, MANIFEST_PATH);
18
+ mkdirSync(dirname(path), { recursive: true });
19
+ writeFileSync(path, JSON.stringify(manifest, null, 2), 'utf-8');
20
+ }
21
+ export function sha256file(absPath) {
22
+ const content = readFileSync(absPath, 'utf-8');
23
+ return createHash('sha256').update(content).digest('hex');
24
+ }
25
+ export function buildManifest(runtime, files, projectRoot, forgeVersion, timestamp) {
26
+ const fileEntries = {};
27
+ for (const file of files) {
28
+ const absPath = join(projectRoot, file);
29
+ if (existsSync(absPath)) {
30
+ fileEntries[file] = { sha256: sha256file(absPath), installedAt: timestamp };
31
+ }
32
+ }
33
+ return { forgeVersion, runtime, installedAt: timestamp, files: fileEntries };
34
+ }
35
+ export function checkOutdated(projectRoot, manifest) {
36
+ const outdated = [];
37
+ for (const [file, entry] of Object.entries(manifest.files)) {
38
+ const absPath = join(projectRoot, file);
39
+ if (!existsSync(absPath)) {
40
+ outdated.push(file + ' (eliminado)');
41
+ continue;
42
+ }
43
+ if (sha256file(absPath) !== entry.sha256)
44
+ outdated.push(file);
45
+ }
46
+ return outdated;
47
+ }
48
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/lib/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AASpC,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAE7C,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAkB,CAAC;IAAC,CAAC;IACxE,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAAmB,EAAE,QAAuB;IACvE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC9C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,KAAe,EACf,WAAmB,EACnB,YAAoB,EACpB,SAAiB;IAEjB,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,QAAuB;IACxE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAC7E,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -9,9 +9,10 @@ export interface WizardResult {
9
9
  database?: string;
10
10
  orm?: string;
11
11
  packageManager?: string;
12
- testing?: string[];
13
- profiles?: string[];
12
+ testing: string[];
13
+ profiles: string[];
14
14
  runtime: string;
15
+ detected: boolean;
15
16
  }
16
17
  export declare function runWizard(): Promise<WizardResult | null>;
17
18
  //# sourceMappingURL=wizard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/lib/wizard.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAwGD,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA8F9D"}
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/lib/wizard.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAyFD,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAsK9D"}
@@ -1,162 +1,231 @@
1
- import { createInterface } from 'readline';
2
- const rl = createInterface({ input: process.stdin, output: process.stdout, terminal: process.stdin.isTTY });
3
- function ask(question) {
4
- return new Promise(resolve => rl.question(question, answer => resolve(answer.trim())));
5
- }
6
- function askWithDefault(question, def) {
7
- return new Promise(resolve => rl.question(`${question} [${def}]: `, answer => {
8
- const a = answer.trim();
9
- resolve(a === '' ? def : a);
10
- }));
11
- }
12
- function askChoice(question, choices, def) {
13
- const choiceStr = choices.map((c, i) => ` ${i + 1}) ${c}`).join('\n');
14
- const defIdx = def ? choices.indexOf(def) + 1 : 1;
15
- return new Promise(resolve => {
16
- console.log(`\n${question}`);
17
- console.log(choiceStr);
18
- rl.question(`Elegir [${defIdx}]: `, answer => {
19
- const n = parseInt(answer.trim(), 10);
20
- if (n >= 1 && n <= choices.length)
21
- resolve(choices[n - 1]);
22
- else
23
- resolve(choices[defIdx - 1]);
24
- });
25
- });
26
- }
27
- function askMulti(question, choices) {
28
- const choiceStr = choices.map((c, i) => ` ${i + 1}) ${c}`).join('\n');
29
- return new Promise(resolve => {
30
- console.log(`\n${question} (números separados por coma, ej: 1,3)`);
31
- console.log(choiceStr);
32
- rl.question('Elegir: ', answer => {
33
- const selected = answer.trim().split(',')
34
- .map(s => parseInt(s.trim(), 10) - 1)
35
- .filter(i => i >= 0 && i < choices.length)
36
- .map(i => choices[i]);
37
- resolve(selected);
38
- });
39
- });
40
- }
41
- const BACKEND_BY_LANGUAGE = {
42
- typescript: ['hono', 'express', 'nestjs', 'none'],
43
- python: ['fastapi', 'django', 'none'],
44
- ruby: ['rails', 'none'],
45
- go: ['go-gin', 'none'],
46
- php: ['laravel', 'none'],
1
+ import * as p from '@clack/prompts';
2
+ import { detectStack } from './detect.js';
3
+ // ─── Options tables ──────────────────────────────────────────────────────────
4
+ const BACKENDS = {
5
+ typescript: [
6
+ { value: 'hono', label: 'Hono', hint: 'edge-ready, ultraligero' },
7
+ { value: 'express', label: 'Express', hint: 'el clásico' },
8
+ { value: 'nestjs', label: 'NestJS', hint: 'enterprise, opinionado' },
9
+ { value: 'fastify', label: 'Fastify', hint: 'rápido, plugins' },
10
+ { value: 'none', label: 'Ninguno' },
11
+ ],
12
+ python: [{ value: 'fastapi', label: 'FastAPI', hint: 'async' }, { value: 'django', label: 'Django' }, { value: 'none', label: 'Ninguno' }],
13
+ ruby: [{ value: 'rails', label: 'Rails' }, { value: 'none', label: 'Ninguno' }],
14
+ go: [{ value: 'go-gin', label: 'Gin' }, { value: 'none', label: 'Ninguno' }],
15
+ php: [{ value: 'laravel', label: 'Laravel' }, { value: 'none', label: 'Ninguno' }],
47
16
  };
48
- const FRONTEND_BY_LANGUAGE = {
49
- typescript: ['nextjs', 'astro', 'sveltekit', 'nuxt', 'none'],
50
- php: ['none'],
51
- ruby: ['rails-views', 'none'],
52
- python: ['none'],
53
- go: ['none'],
17
+ const FRONTENDS = {
18
+ typescript: [
19
+ { value: 'nextjs', label: 'Next.js', hint: 'fullstack React' },
20
+ { value: 'astro', label: 'Astro', hint: 'content-first' },
21
+ { value: 'nuxt', label: 'Nuxt', hint: 'Vue' },
22
+ { value: 'sveltekit', label: 'SvelteKit', hint: 'Svelte' },
23
+ { value: 'none', label: 'Ninguno' },
24
+ ],
54
25
  };
55
- const DATABASE_OPTIONS = ['postgresql', 'mysql', 'sqlite', 'none'];
56
- const ORM_BY_LANGUAGE = {
57
- typescript: ['drizzle', 'prisma', 'typeorm', 'none'],
58
- python: ['sqlalchemy', 'none'],
59
- ruby: ['active-record', 'none'],
60
- php: ['none'],
61
- go: ['none'],
26
+ const ORMS = {
27
+ typescript: [
28
+ { value: 'drizzle', label: 'Drizzle ORM', hint: 'ligero, type-safe' },
29
+ { value: 'prisma', label: 'Prisma', hint: 'completo, migrations' },
30
+ { value: 'typeorm', label: 'TypeORM' },
31
+ { value: 'none', label: 'Ninguno' },
32
+ ],
33
+ python: [{ value: 'sqlalchemy', label: 'SQLAlchemy' }, { value: 'none', label: 'Ninguno' }],
34
+ ruby: [{ value: 'active-record', label: 'Active Record' }, { value: 'none', label: 'Ninguno' }],
62
35
  };
63
- const PM_BY_LANGUAGE = {
64
- typescript: ['pnpm', 'npm', 'yarn', 'bun'],
65
- python: ['pip', 'poetry'],
66
- ruby: ['bundler'],
67
- go: ['none'],
68
- php: ['none'],
36
+ const PKG_MANAGERS = {
37
+ typescript: [
38
+ { value: 'pnpm', label: 'pnpm', hint: 'recomendado — rápido y eficiente' },
39
+ { value: 'npm', label: 'npm' },
40
+ { value: 'yarn', label: 'yarn' },
41
+ { value: 'bun', label: 'bun', hint: 'ultra-rápido' },
42
+ ],
43
+ python: [{ value: 'pip', label: 'pip' }, { value: 'poetry', label: 'poetry' }],
44
+ ruby: [{ value: 'bundler', label: 'bundler' }],
45
+ go: [{ value: 'go', label: 'go modules' }],
46
+ php: [{ value: 'composer', label: 'composer' }],
69
47
  };
70
- const TESTING_BY_LANGUAGE = {
71
- typescript: ['vitest', 'jest', 'playwright', 'cypress'],
72
- python: ['pytest'],
73
- ruby: ['rspec'],
74
- go: ['none'],
75
- php: ['phpunit'],
48
+ const TESTING_OPTS = {
49
+ typescript: [
50
+ { value: 'vitest', label: 'Vitest', hint: 'unit/integration' },
51
+ { value: 'jest', label: 'Jest' },
52
+ { value: 'playwright', label: 'Playwright', hint: 'E2E' },
53
+ { value: 'cypress', label: 'Cypress', hint: 'E2E' },
54
+ ],
55
+ python: [{ value: 'pytest', label: 'pytest' }],
56
+ ruby: [{ value: 'rspec', label: 'RSpec' }],
57
+ php: [{ value: 'phpunit', label: 'PHPUnit' }],
76
58
  };
77
- const PROFILE_BY_STACK = {
78
- hono: ['hono-drizzle'],
79
- nextjs: ['nextjs-admin'],
80
- astro: ['astro'],
81
- fastapi: ['fastapi'],
82
- rails: ['rails'],
83
- laravel: ['laravel'],
84
- expo: ['expo'],
59
+ const PROFILE_MAP = {
60
+ hono: 'hono-drizzle',
61
+ nextjs: 'nextjs-admin',
62
+ astro: 'astro',
63
+ fastapi: 'fastapi',
64
+ rails: 'rails',
65
+ laravel: 'laravel',
85
66
  };
86
- const RUNTIME_OPTIONS = ['claude-code', 'opencode', 'codex', 'kiro'];
87
67
  function toSlug(name) {
88
68
  return name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
89
69
  }
70
+ function cancel() {
71
+ p.cancel('Operación cancelada.');
72
+ process.exit(0);
73
+ }
74
+ function check(v) {
75
+ if (p.isCancel(v))
76
+ cancel();
77
+ return v;
78
+ }
79
+ // ─── Main wizard ─────────────────────────────────────────────────────────────
90
80
  export async function runWizard() {
91
- console.log('\n╔════════════════════════════════════╗');
92
- console.log('║ forge Asistente de inicio ║');
93
- console.log('╚════════════════════════════════════╝\n');
94
- console.log('Responde las preguntas para configurar tu proyecto.\n');
95
- const name = await ask('Nombre del proyecto: ');
96
- if (!name) {
97
- rl.close();
98
- return null;
81
+ p.intro(' forge — Configuración de proyecto ');
82
+ // Auto-detect stack
83
+ const detected = detectStack(process.cwd());
84
+ const hasDetection = !!(detected.language || detected.backend || detected.packageManager);
85
+ if (hasDetection) {
86
+ const detectedItems = [
87
+ detected.language && `lenguaje: ${detected.language}`,
88
+ detected.backend && `backend: ${detected.backend}`,
89
+ detected.frontend && `frontend: ${detected.frontend}`,
90
+ detected.packageManager && `package manager: ${detected.packageManager}`,
91
+ detected.testing.length && `testing: ${detected.testing.join(', ')}`,
92
+ ].filter(Boolean);
93
+ p.note(detectedItems.join('\n'), 'Stack detectado — pre-seleccionado abajo');
99
94
  }
95
+ // ── Proyecto ──
96
+ const name = check(await p.text({
97
+ message: 'Nombre del proyecto',
98
+ placeholder: 'Mi Proyecto',
99
+ validate: (v) => (v ?? '').trim() ? undefined : 'El nombre es requerido',
100
+ }));
100
101
  const slugDefault = toSlug(name);
101
- const slug = await askWithDefault('Slug (identificador URL-safe)', slugDefault);
102
- const description = await askWithDefault('Descripción breve', '');
103
- const language = await askChoice('Lenguaje principal:', ['typescript', 'python', 'ruby', 'go', 'php'], 'typescript');
104
- const mode = await askChoice('Modo del proyecto:', ['startup — mínimo viable, equipo pequeño', 'standard — equipo mediano, CI/CD, revisión de código', 'enterprise — compliance, auditoría, múltiples equipos'], 'startup — mínimo viable, equipo pequeño');
105
- const modeValue = mode.split(' ')[0];
106
- const backends = BACKEND_BY_LANGUAGE[language] ?? ['none'];
107
- const backendChoice = backends.length > 1
108
- ? await askChoice('Backend:', backends, backends[0])
109
- : backends[0];
110
- const backend = backendChoice === 'none' ? undefined : backendChoice;
111
- const frontends = FRONTEND_BY_LANGUAGE[language] ?? ['none'];
112
- const frontendChoice = frontends.length > 1
113
- ? await askChoice('Frontend:', frontends, frontends[0])
114
- : frontends[0];
115
- const frontend = frontendChoice === 'none' ? undefined : frontendChoice;
116
- const dbChoice = await askChoice('Base de datos:', DATABASE_OPTIONS, 'postgresql');
117
- const database = dbChoice === 'none' ? undefined : dbChoice;
102
+ const slugInput = check(await p.text({
103
+ message: 'Slug (URL-safe)',
104
+ placeholder: slugDefault,
105
+ defaultValue: slugDefault,
106
+ }));
107
+ const slug = slugInput || slugDefault;
108
+ const description = check(await p.text({
109
+ message: 'Descripción breve',
110
+ placeholder: 'Describe tu proyecto en una línea',
111
+ }));
112
+ // ── Tech stack ──
113
+ const language = check(await p.select({
114
+ message: 'Lenguaje principal',
115
+ initialValue: detected.language ?? 'typescript',
116
+ options: [
117
+ { value: 'typescript', label: 'TypeScript / JavaScript', hint: 'recomendado' },
118
+ { value: 'python', label: 'Python' },
119
+ { value: 'ruby', label: 'Ruby' },
120
+ { value: 'go', label: 'Go' },
121
+ { value: 'php', label: 'PHP' },
122
+ ],
123
+ }));
124
+ const mode = check(await p.select({
125
+ message: 'Modo del proyecto',
126
+ initialValue: 'standard',
127
+ options: [
128
+ { value: 'startup', label: 'startup', hint: 'mínimo viable, equipo pequeño' },
129
+ { value: 'standard', label: 'standard', hint: 'CI/CD, code review, testing' },
130
+ { value: 'enterprise', label: 'enterprise', hint: 'compliance, auditoría, multi-equipo' },
131
+ ],
132
+ }));
133
+ const backendOpts = BACKENDS[language] ?? [{ value: 'none', label: 'Ninguno' }];
134
+ const backendVal = check(await p.select({
135
+ message: 'Framework backend',
136
+ initialValue: detected.backend ?? backendOpts[0].value,
137
+ options: backendOpts,
138
+ }));
139
+ const backend = backendVal === 'none' ? undefined : backendVal;
140
+ const frontendOpts = FRONTENDS[language];
141
+ let frontend;
142
+ if (frontendOpts) {
143
+ const v = check(await p.select({
144
+ message: 'Framework frontend',
145
+ initialValue: detected.frontend ?? 'none',
146
+ options: frontendOpts,
147
+ }));
148
+ frontend = v === 'none' ? undefined : v;
149
+ }
150
+ const dbVal = check(await p.select({
151
+ message: 'Base de datos',
152
+ initialValue: detected.database ?? 'postgresql',
153
+ options: [
154
+ { value: 'postgresql', label: 'PostgreSQL', hint: 'recomendado' },
155
+ { value: 'mysql', label: 'MySQL / MariaDB' },
156
+ { value: 'sqlite', label: 'SQLite', hint: 'dev/embedded' },
157
+ { value: 'none', label: 'Ninguna' },
158
+ ],
159
+ }));
160
+ const database = dbVal === 'none' ? undefined : dbVal;
118
161
  let orm;
119
- if (database) {
120
- const orms = ORM_BY_LANGUAGE[language] ?? ['none'];
121
- if (orms.length > 1) {
122
- const ormChoice = await askChoice('ORM / query builder:', orms, orms[0]);
123
- orm = ormChoice === 'none' ? undefined : ormChoice;
124
- }
162
+ const ormOpts = ORMS[language];
163
+ if (database && ormOpts) {
164
+ const v = check(await p.select({
165
+ message: 'ORM / query builder',
166
+ initialValue: detected.orm ?? ormOpts[0].value,
167
+ options: ormOpts,
168
+ }));
169
+ orm = v === 'none' ? undefined : v;
170
+ }
171
+ const pmOpts = PKG_MANAGERS[language];
172
+ let packageManager;
173
+ if (pmOpts) {
174
+ const v = check(await p.select({
175
+ message: 'Package manager',
176
+ initialValue: detected.packageManager ?? pmOpts[0].value,
177
+ options: pmOpts,
178
+ }));
179
+ packageManager = v === 'none' ? undefined : v;
180
+ }
181
+ const testOpts = TESTING_OPTS[language];
182
+ let testing = detected.testing;
183
+ if (testOpts) {
184
+ const v = check(await p.multiselect({
185
+ message: 'Frameworks de testing',
186
+ initialValues: detected.testing,
187
+ options: testOpts,
188
+ required: false,
189
+ }));
190
+ testing = v;
125
191
  }
126
- const pms = PM_BY_LANGUAGE[language] ?? ['none'];
127
- const pmChoice = pms.length > 1
128
- ? await askChoice('Package manager:', pms, pms[0])
129
- : pms[0];
130
- const packageManager = pmChoice === 'none' ? undefined : pmChoice;
131
- const testingOptions = TESTING_BY_LANGUAGE[language] ?? [];
132
- let testing = [];
133
- if (testingOptions.length > 0 && testingOptions[0] !== 'none') {
134
- testing = await askMulti('Frameworks de testing:', testingOptions);
192
+ const runtime = check(await p.select({
193
+ message: 'Runtime de IA',
194
+ initialValue: 'claude-code',
195
+ options: [
196
+ { value: 'claude-code', label: 'Claude Code', hint: 'recomendado' },
197
+ { value: 'opencode', label: 'OpenCode' },
198
+ { value: 'codex', label: 'Codex CLI' },
199
+ { value: 'kiro', label: 'Kiro IDE' },
200
+ ],
201
+ }));
202
+ // ── Confirmación ──
203
+ const summary = [
204
+ ` Nombre: ${name}`,
205
+ ` Lenguaje: ${language} Modo: ${mode}`,
206
+ backend ? ` Backend: ${backend}` : '',
207
+ frontend ? ` Frontend: ${frontend}` : '',
208
+ database ? ` Base de datos: ${database}${orm ? ' + ' + orm : ''}` : '',
209
+ testing.length ? ` Testing: ${testing.join(', ')}` : '',
210
+ ` Runtime: ${runtime}`,
211
+ ].filter(Boolean).join('\n');
212
+ p.note(summary, 'Configuración seleccionada');
213
+ const confirmed = check(await p.confirm({ message: '¿Instalar con esta configuración?' }));
214
+ if (!confirmed) {
215
+ p.cancel('Cancelado.');
216
+ return null;
135
217
  }
136
- // Auto-suggest profiles based on stack
137
- const suggestedProfiles = [];
138
- for (const [key, profiles] of Object.entries(PROFILE_BY_STACK)) {
139
- if (backend === key || frontend === key)
140
- suggestedProfiles.push(...profiles);
218
+ p.outro('Configuración lista. Instalando...');
219
+ // Auto-detect profiles
220
+ const profiles = [];
221
+ for (const key of [backend, frontend]) {
222
+ if (key && PROFILE_MAP[key])
223
+ profiles.push(PROFILE_MAP[key]);
141
224
  }
142
- const runtime = await askChoice('Runtime de IA principal:', RUNTIME_OPTIONS, 'claude-code');
143
- rl.close();
144
- // Build profiles list from suggestions
145
- const profiles = [...new Set(suggestedProfiles)];
146
225
  return {
147
- name,
148
- slug,
149
- description,
150
- language,
151
- mode: modeValue,
152
- backend,
153
- frontend,
154
- database,
155
- orm,
156
- packageManager,
157
- testing,
158
- profiles,
159
- runtime,
226
+ name, slug, description: description || '', language, mode,
227
+ backend, frontend, database, orm, packageManager, testing,
228
+ profiles: [...new Set(profiles)], runtime, detected: hasDetection,
160
229
  };
161
230
  }
162
231
  //# sourceMappingURL=wizard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/lib/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAkB3C,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAE5G,SAAS,GAAG,CAAC,QAAgB;IAC3B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,GAAW;IACnD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAC3B,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,KAAK,GAAG,KAAK,EAAE,MAAM,CAAC,EAAE;QAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,OAAiB,EAAE,GAAY;IAClE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,EAAE,CAAC,QAAQ,CAAC,WAAW,MAAM,KAAK,EAAE,MAAM,CAAC,EAAE;YAC3C,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM;gBAAE,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;gBACtD,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB,EAAE,OAAiB;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,wCAAwC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE;YAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;iBACtC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;iBACpC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;iBACzC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,mBAAmB,GAA6B;IACpD,UAAU,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;IACjD,MAAM,EAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;IACzC,IAAI,EAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAC7B,EAAE,EAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC9B,GAAG,EAAS,CAAC,SAAS,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,MAAM,oBAAoB,GAA6B;IACrD,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC;IAC5D,GAAG,EAAS,CAAC,MAAM,CAAC;IACpB,IAAI,EAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IACnC,MAAM,EAAM,CAAC,MAAM,CAAC;IACpB,EAAE,EAAU,CAAC,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAEnE,MAAM,eAAe,GAA6B;IAChD,UAAU,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;IACpD,MAAM,EAAM,CAAC,YAAY,EAAE,MAAM,CAAC;IAClC,IAAI,EAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACrC,GAAG,EAAS,CAAC,MAAM,CAAC;IACpB,EAAE,EAAU,CAAC,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,cAAc,GAA6B;IAC/C,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;IAC1C,MAAM,EAAM,CAAC,KAAK,EAAE,QAAQ,CAAC;IAC7B,IAAI,EAAQ,CAAC,SAAS,CAAC;IACvB,EAAE,EAAU,CAAC,MAAM,CAAC;IACpB,GAAG,EAAS,CAAC,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,mBAAmB,GAA6B;IACpD,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC;IACvD,MAAM,EAAM,CAAC,QAAQ,CAAC;IACtB,IAAI,EAAQ,CAAC,OAAO,CAAC;IACrB,EAAE,EAAU,CAAC,MAAM,CAAC;IACpB,GAAG,EAAS,CAAC,SAAS,CAAC;CACxB,CAAC;AAEF,MAAM,gBAAgB,GAA6B;IACjD,IAAI,EAAK,CAAC,cAAc,CAAC;IACzB,MAAM,EAAG,CAAC,cAAc,CAAC;IACzB,KAAK,EAAI,CAAC,OAAO,CAAC;IAClB,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,KAAK,EAAI,CAAC,OAAO,CAAC;IAClB,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,IAAI,EAAK,CAAC,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAErE,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IAErE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,EAAE,CAAC;QAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAEvC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,+BAA+B,EAAE,WAAW,CAAC,CAAC;IAChF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAElE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAC9B,qBAAqB,EACrB,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EAC7C,YAAY,CACb,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,SAAS,CAC1B,oBAAoB,EACpB,CAAC,0CAA0C,EAAE,uDAAuD,EAAE,wDAAwD,CAAC,EAC/J,0CAA0C,CACF,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAA0C,CAAC;IAE/E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;QACvC,CAAC,CAAC,MAAM,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,OAAO,GAAG,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;IAErE,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;QACzC,CAAC,CAAC,MAAM,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACjB,MAAM,QAAQ,GAAG,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;IAExE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE5D,IAAI,GAAuB,CAAC;IAC5B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,GAAG,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;QAC7B,CAAC,CAAC,MAAM,SAAS,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACX,MAAM,cAAc,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAElE,MAAM,cAAc,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC3D,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC9D,OAAO,GAAG,MAAM,QAAQ,CAAC,wBAAwB,EAAE,cAAc,CAAC,CAAC;IACrE,CAAC;IAED,uCAAuC;IACvC,MAAM,iBAAiB,GAAa,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/D,IAAI,OAAO,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG;YAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAC7B,0BAA0B,EAC1B,eAAe,EACf,aAAa,CACd,CAAC;IAEF,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,uCAAuC;IACvC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAEjD,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,WAAW;QACX,QAAQ;QACR,IAAI,EAAE,SAAS;QACf,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,GAAG;QACH,cAAc;QACd,OAAO;QACP,QAAQ;QACR,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/lib/wizard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function box(title: string, lines: string[]): string;
2
+ //# sourceMappingURL=box.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/ui/box.ts"],"names":[],"mappings":"AAEA,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAY1D"}