@cristiancorreau/forge 2.14.0 → 2.16.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/CHANGELOG.md +14 -0
- package/assets/core/schemas/project.schema.json +16 -1
- package/assets/manifest.json +1 -1
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +28 -21
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/panel.d.ts.map +1 -1
- package/dist/commands/panel.js +47 -19
- package/dist/commands/panel.js.map +1 -1
- package/dist/lib/bun.d.ts +53 -0
- package/dist/lib/bun.d.ts.map +1 -1
- package/dist/lib/bun.js +84 -0
- package/dist/lib/bun.js.map +1 -1
- package/dist/lib/detect.d.ts +6 -0
- package/dist/lib/detect.d.ts.map +1 -1
- package/dist/lib/detect.js +17 -1
- package/dist/lib/detect.js.map +1 -1
- package/dist/lib/generators/claude-code.d.ts.map +1 -1
- package/dist/lib/generators/claude-code.js +7 -2
- package/dist/lib/generators/claude-code.js.map +1 -1
- package/dist/lib/generators/codex.d.ts.map +1 -1
- package/dist/lib/generators/codex.js +3 -2
- package/dist/lib/generators/codex.js.map +1 -1
- package/dist/lib/generators/kiro.d.ts.map +1 -1
- package/dist/lib/generators/kiro.js +3 -2
- package/dist/lib/generators/kiro.js.map +1 -1
- package/dist/lib/generators/opencode.d.ts.map +1 -1
- package/dist/lib/generators/opencode.js +3 -2
- package/dist/lib/generators/opencode.js.map +1 -1
- package/dist/lib/wizard-flow.d.ts +57 -0
- package/dist/lib/wizard-flow.d.ts.map +1 -0
- package/dist/lib/wizard-flow.js +99 -0
- package/dist/lib/wizard-flow.js.map +1 -0
- package/dist/lib/wizard.d.ts +8 -0
- package/dist/lib/wizard.d.ts.map +1 -1
- package/dist/lib/wizard.js +171 -82
- package/dist/lib/wizard.js.map +1 -1
- package/dist/lib/yaml.d.ts +6 -0
- package/dist/lib/yaml.d.ts.map +1 -1
- package/dist/lib/yaml.js.map +1 -1
- package/dist/tui/wizard.d.ts.map +1 -1
- package/dist/tui/wizard.js +95 -40
- package/dist/tui/wizard.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/dist/lib/bun.js
CHANGED
|
@@ -89,4 +89,88 @@ export function findBun(opts = {}) {
|
|
|
89
89
|
export function resolveCliEntry(metaUrl) {
|
|
90
90
|
return fileURLToPath(new URL('../cli.js', metaUrl));
|
|
91
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* True when the current win32 console is "capable" of an OpenTUI render — i.e.
|
|
94
|
+
* Windows Terminal (`WT_SESSION`) or any host advertising `TERM_PROGRAM`
|
|
95
|
+
* (VS Code's integrated terminal, etc.). Legacy conhost / PowerShell 5 set
|
|
96
|
+
* neither and would mangle the full-screen alt-screen UI, so we treat them as
|
|
97
|
+
* incapable and prefer the (improved) Node fallback there.
|
|
98
|
+
*/
|
|
99
|
+
function win32TerminalIsCapable(env) {
|
|
100
|
+
return !!env.WT_SESSION || !!env.TERM_PROGRAM;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Pure decision: should forge re-launch itself under Bun to render an OpenTUI
|
|
104
|
+
* panel? Parameterised on platform/env/bunPath/isTTY/alreadyBun so the full
|
|
105
|
+
* matrix is unit-testable on any host.
|
|
106
|
+
*
|
|
107
|
+
* Gates (all must pass): not already under Bun, not already relaunched
|
|
108
|
+
* (`FORGE_BUN_RELAUNCH=1`), not opted out (`FORGE_NO_BUN=1`), a real TTY, and a
|
|
109
|
+
* resolved Bun binary. Beyond that:
|
|
110
|
+
* - `FORGE_FORCE_BUN=1` forces the relaunch (skips the win32 terminal gate).
|
|
111
|
+
* - On win32, only auto-relaunch when the console is capable (Windows Terminal
|
|
112
|
+
* or `TERM_PROGRAM`); otherwise prefer the Node fallback to avoid a broken
|
|
113
|
+
* OpenTUI render on a legacy console.
|
|
114
|
+
* - On macOS/Linux, relaunch whenever Bun is present and we have a TTY.
|
|
115
|
+
*/
|
|
116
|
+
export function shouldRelaunchUnderBun(opts = {}) {
|
|
117
|
+
const platform = opts.platform ?? process.platform;
|
|
118
|
+
const env = opts.env ?? process.env;
|
|
119
|
+
const bunPath = opts.bunPath ?? null;
|
|
120
|
+
const isTTY = opts.isTTY ?? false;
|
|
121
|
+
const alreadyBun = opts.alreadyBun ?? false;
|
|
122
|
+
if (alreadyBun)
|
|
123
|
+
return false; // we ARE Bun — nothing to do
|
|
124
|
+
if (env.FORGE_BUN_RELAUNCH === '1')
|
|
125
|
+
return false; // already relaunched (guard)
|
|
126
|
+
if (env.FORGE_NO_BUN === '1')
|
|
127
|
+
return false; // explicit opt-out
|
|
128
|
+
if (!isTTY)
|
|
129
|
+
return false; // panels need a real TTY
|
|
130
|
+
if (!bunPath)
|
|
131
|
+
return false; // Bun not installed
|
|
132
|
+
// Explicit force overrides the platform/terminal heuristic (once gated above).
|
|
133
|
+
if (env.FORGE_FORCE_BUN === '1')
|
|
134
|
+
return true;
|
|
135
|
+
// Legacy Windows consoles can't render OpenTUI cleanly → prefer Node fallback.
|
|
136
|
+
if (platform === 'win32' && !win32TerminalIsCapable(env))
|
|
137
|
+
return false;
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Spawn the resolved Bun binary to re-run the CLI entry, inheriting stdio and
|
|
142
|
+
* propagating the child's exit code to the caller. Sets the
|
|
143
|
+
* `FORGE_BUN_RELAUNCH=1` guard so the relaunched process won't recurse.
|
|
144
|
+
*
|
|
145
|
+
* `bunPath` must be the absolute path/command from {@link findBun} and
|
|
146
|
+
* `cliEntry` a real filesystem path from {@link resolveCliEntry} (fileURLToPath
|
|
147
|
+
* — valid on Windows). Returns the exit code to pass to `process.exit`.
|
|
148
|
+
*/
|
|
149
|
+
export function relaunchUnderBun(bunPath, cliEntry, argv, env = process.env) {
|
|
150
|
+
const result = spawnSync(bunPath, [cliEntry, ...argv], {
|
|
151
|
+
stdio: 'inherit',
|
|
152
|
+
env: { ...env, FORGE_BUN_RELAUNCH: '1' },
|
|
153
|
+
});
|
|
154
|
+
return result.status ?? 0;
|
|
155
|
+
}
|
|
156
|
+
/** The one-line friendly hint shown when forge runs the Node fallback because
|
|
157
|
+
* Bun is absent (or gated). */
|
|
158
|
+
export const BUN_FALLBACK_HINT = 'Tip: instalá Bun para el panel completo — https://bun.sh';
|
|
159
|
+
/**
|
|
160
|
+
* Return the friendly Bun hint, or `null` when it shouldn't be shown. Shown only
|
|
161
|
+
* in a TTY, never under Bun (OpenTUI is already in use), and never when the user
|
|
162
|
+
* opted out (`FORGE_NO_BUN=1`) — there's no point nudging someone who disabled it.
|
|
163
|
+
*/
|
|
164
|
+
export function bunFallbackHint(opts = {}) {
|
|
165
|
+
const env = opts.env ?? process.env;
|
|
166
|
+
const isTTY = opts.isTTY ?? false;
|
|
167
|
+
const alreadyBun = opts.alreadyBun ?? false;
|
|
168
|
+
if (alreadyBun)
|
|
169
|
+
return null;
|
|
170
|
+
if (!isTTY)
|
|
171
|
+
return null;
|
|
172
|
+
if (env.FORGE_NO_BUN === '1')
|
|
173
|
+
return null;
|
|
174
|
+
return BUN_FALLBACK_HINT;
|
|
175
|
+
}
|
|
92
176
|
//# sourceMappingURL=bun.js.map
|
package/dist/lib/bun.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun.js","sourceRoot":"","sources":["../../src/lib/bun.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"bun.js","sourceRoot":"","sources":["../../src/lib/bun.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/detect.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
import { type ProjectType } from './wizard-flow.js';
|
|
1
2
|
export interface DetectedStack {
|
|
2
3
|
language: string | null;
|
|
4
|
+
/** Per-side language (best-effort). Null when the side isn't detected. */
|
|
5
|
+
backendLanguage: string | null;
|
|
6
|
+
frontendLanguage: string | null;
|
|
7
|
+
/** Inferred project type from what was detected (best-effort). */
|
|
8
|
+
projectType: ProjectType | null;
|
|
3
9
|
backend: string | null;
|
|
4
10
|
frontend: string | null;
|
|
5
11
|
database: string | null;
|
package/dist/lib/detect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kEAAkE;IAClE,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,aAAa,CA+EtE"}
|
package/dist/lib/detect.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'fs';
|
|
2
2
|
import { join } from 'path';
|
|
3
|
+
import { inferProjectType } from './wizard-flow.js';
|
|
3
4
|
export function detectStack(cwd = process.cwd()) {
|
|
4
5
|
const result = {
|
|
5
|
-
language: null,
|
|
6
|
+
language: null, backendLanguage: null, frontendLanguage: null, projectType: null,
|
|
7
|
+
backend: null, frontend: null,
|
|
6
8
|
database: null, orm: null, packageManager: null,
|
|
7
9
|
testing: [], hasDocker: false, isMonorepo: false,
|
|
8
10
|
};
|
|
@@ -80,6 +82,20 @@ export function detectStack(cwd = process.cwd()) {
|
|
|
80
82
|
catch { /* ignore */ }
|
|
81
83
|
}
|
|
82
84
|
}
|
|
85
|
+
// Per-side language (best-effort). A frontend framework implies TypeScript/JS.
|
|
86
|
+
// The backend language is the detected base language. When both sides exist on
|
|
87
|
+
// a non-TS base (e.g. Python backend), only the backend gets the base language
|
|
88
|
+
// and the frontend stays TypeScript.
|
|
89
|
+
if (result.frontend)
|
|
90
|
+
result.frontendLanguage = 'typescript';
|
|
91
|
+
if (result.backend)
|
|
92
|
+
result.backendLanguage = result.language ?? 'typescript';
|
|
93
|
+
// If there's a frontend but no detected backend and the base language is TS,
|
|
94
|
+
// it's a TS frontend-only project; leave backendLanguage null.
|
|
95
|
+
// Infer project type from what was detected.
|
|
96
|
+
if (result.backend || result.frontend) {
|
|
97
|
+
result.projectType = inferProjectType({ backend: result.backend, frontend: result.frontend });
|
|
98
|
+
}
|
|
83
99
|
return result;
|
|
84
100
|
}
|
|
85
101
|
//# sourceMappingURL=detect.js.map
|
package/dist/lib/detect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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;AAoF9C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAqF5D"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { stackWithLanguage } from '../wizard-flow.js';
|
|
1
2
|
const AGENT_TRIGGER = {
|
|
2
3
|
'orchestrator': ['tareas multi-agente, análisis de >3 archivos, descomposición de features completas', null],
|
|
3
4
|
'backend-engineer': ['endpoints, middleware, validaciones, lógica de negocio', 'api'],
|
|
@@ -80,6 +81,10 @@ export function generateClaudeMd(config) {
|
|
|
80
81
|
const name = proj.name ?? 'Mi Proyecto';
|
|
81
82
|
const description = proj.description ?? '';
|
|
82
83
|
const language = proj.language ?? 'typescript';
|
|
84
|
+
// Per-side language (nuevo): muestra "FastAPI (Python)" / "Next.js (TypeScript)".
|
|
85
|
+
// Fallback a project.language cuando los campos por lado no existen (archivos viejos).
|
|
86
|
+
const backendStr = stackWithLanguage(stack.backend, stack.backend_language);
|
|
87
|
+
const frontendStr = stackWithLanguage(stack.frontend, stack.frontend_language);
|
|
83
88
|
const { dev, test, lint, build } = devCommands(language);
|
|
84
89
|
const specsPath = paths?.specs ?? 'docs/specs';
|
|
85
90
|
const progressPath = paths?.progress ?? 'docs/progress.html';
|
|
@@ -98,8 +103,8 @@ ${description}
|
|
|
98
103
|
## Stack
|
|
99
104
|
|
|
100
105
|
- **Lenguaje**: ${language}
|
|
101
|
-
- **Backend**: ${
|
|
102
|
-
- **Frontend**: ${
|
|
106
|
+
- **Backend**: ${backendStr}
|
|
107
|
+
- **Frontend**: ${frontendStr}
|
|
103
108
|
- **Base de datos**: ${stack.database ?? 'N/A'}
|
|
104
109
|
- **Testing**: ${(stack.testing ?? []).join(', ')}
|
|
105
110
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/lib/generators/claude-code.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/lib/generators/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAE5D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA+EjE"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { stackWithLanguage } from '../wizard-flow.js';
|
|
1
2
|
// Codex has no native blocking hooks: it shares the executable git pre-commit
|
|
2
3
|
// fallback with OpenCode so branch guard + debug detection still run automatically.
|
|
3
4
|
export { generateSharedPreCommitHook } from './opencode.js';
|
|
@@ -18,8 +19,8 @@ export function generateCodexAgentsMd(config) {
|
|
|
18
19
|
|
|
19
20
|
- **Nombre**: ${name}
|
|
20
21
|
- **Lenguaje**: ${language}
|
|
21
|
-
- **Backend**: ${stack.backend
|
|
22
|
-
- **Frontend**: ${stack.frontend
|
|
22
|
+
- **Backend**: ${stackWithLanguage(stack.backend, stack.backend_language)}
|
|
23
|
+
- **Frontend**: ${stackWithLanguage(stack.frontend, stack.frontend_language)}
|
|
23
24
|
|
|
24
25
|
## Agentes disponibles
|
|
25
26
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/lib/generators/codex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/lib/generators/codex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,8EAA8E;AAC9E,oFAAoF;AACpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAE5D,MAAM,UAAU,qBAAqB,CAAC,MAAmB;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAEnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC;IAE7C,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC;IAEzF,OAAO,iBAAiB,IAAI;;;;;gBAKd,IAAI;kBACF,QAAQ;iBACT,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC;kBACvD,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,iBAAiB,CAAC;;;;EAI1E,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDV,CAAC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/kiro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"kiro.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/kiro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAc9C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAsB/D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA+BjE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAqC9D;AAED,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAgBnE;AAED,wBAAgB,2BAA2B,IAAI,MAAM,CAcpD;AAGD,wBAAgB,yBAAyB,IAAI,MAAM,CAclD;AAGD,wBAAgB,wBAAwB,IAAI,MAAM,CAcjD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { stackWithLanguage } from '../wizard-flow.js';
|
|
1
2
|
function devCommands(language) {
|
|
2
3
|
switch (language) {
|
|
3
4
|
case 'typescript': return { dev: 'pnpm dev', test: 'pnpm test', lint: 'pnpm lint' };
|
|
@@ -20,8 +21,8 @@ ${proj.description ?? ''}
|
|
|
20
21
|
## Stack
|
|
21
22
|
|
|
22
23
|
- Language: ${proj.language ?? 'N/A'}
|
|
23
|
-
- Backend: ${stack.backend
|
|
24
|
-
- Frontend: ${stack.frontend
|
|
24
|
+
- Backend: ${stackWithLanguage(stack.backend, stack.backend_language)}
|
|
25
|
+
- Frontend: ${stackWithLanguage(stack.frontend, stack.frontend_language)}
|
|
25
26
|
- Database: ${stack.database ?? 'N/A'}
|
|
26
27
|
- ORM: ${stack.orm ?? 'N/A'}
|
|
27
28
|
- Testing: ${(stack.testing ?? []).join(', ') || 'N/A'}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../../src/lib/generators/kiro.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../../src/lib/generators/kiro.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,SAAS,WAAW,CAAC,QAAgB;IACnC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QACpF,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;QACjG,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxF,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;QAChG,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;QACpG,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAChF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IACjC,OAAO,KAAK,IAAI,CAAC,IAAI,IAAI,UAAU;;;;EAInC,IAAI,CAAC,WAAW,IAAI,EAAE;;;;cAIV,IAAI,CAAC,QAAQ,IAAI,KAAK;aACvB,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC;cACvD,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,iBAAiB,CAAC;cAC1D,KAAK,CAAC,QAAQ,IAAI,KAAK;SAC5B,KAAK,CAAC,GAAG,IAAI,KAAK;aACd,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK;;;;EAIpD,IAAI,CAAC,MAAM,IAAI,QAAQ;CACxB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAmB;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAC;IACrD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO;;;;;;;;;;;;;;;;EAgBP,GAAG;EACH,IAAI;EACJ,IAAI;;;;;;;;;CASL,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC;IAE7C,MAAM,iBAAiB,GAA2B;QAChD,cAAc,EAAS,iDAAiD;QACxE,kBAAkB,EAAK,+BAA+B;QACtD,cAAc,EAAS,wCAAwC;QAC/D,mBAAmB,EAAI,uCAAuC;QAC9D,gBAAgB,EAAO,oCAAoC;QAC3D,iBAAiB,EAAM,mCAAmC;QAC1D,oBAAoB,EAAG,gCAAgC;QACvD,eAAe,EAAQ,sDAAsD;QAC7E,aAAa,EAAU,8CAA8C;QACrE,qBAAqB,EAAE,0CAA0C;QACjE,kBAAkB,EAAK,2CAA2C;QAClE,sBAAsB,EAAC,8BAA8B;KACtD,CAAC;IAEF,MAAM,IAAI,GAAG,SAAS;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAC,IAAI,mBAAmB,IAAI,CAAC;SACrE,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;;EAIP,IAAI,IAAI,4CAA4C;;;;;;;CAOrD,CAAC;AACF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,cAAsB;IACzD,OAAO;;;;;;;;;;wBAUe,cAAc;;;;CAIrC,CAAC;AACF,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,oDAAoD;QACjE,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,wDAAwD;SACjE;QACD,MAAM,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,qGAAqG;SAC/G;KACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACd,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,yBAAyB;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,oFAAoF;QACjG,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,0JAA0J;SACnK;QACD,MAAM,EAAE;YACN,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,kMAAkM;SAC5M;KACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACd,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,oEAAoE;QACjF,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,kJAAkJ;SAC3J;QACD,MAAM,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,qJAAqJ;SAC/J;KACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/lib/generators/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CA6CpD;AAqED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA4C5D"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { stackWithLanguage } from '../wizard-flow.js';
|
|
1
2
|
/**
|
|
2
3
|
* Shared git pre-commit hook. Runtimes without native blocking hooks
|
|
3
4
|
* (OpenCode, Codex) rely on this executable fallback so branch guard and
|
|
@@ -141,8 +142,8 @@ export function generateAgentsMd(config) {
|
|
|
141
142
|
|
|
142
143
|
- **Nombre**: ${name}
|
|
143
144
|
- **Lenguaje**: ${language}
|
|
144
|
-
- **Backend**: ${stack.backend
|
|
145
|
-
- **Frontend**: ${stack.frontend
|
|
145
|
+
- **Backend**: ${stackWithLanguage(stack.backend, stack.backend_language)}
|
|
146
|
+
- **Frontend**: ${stackWithLanguage(stack.frontend, stack.frontend_language)}
|
|
146
147
|
- **Base de datos**: ${stack.database ?? 'N/A'}
|
|
147
148
|
- **Profiles activos**: ${profiles.join(', ') || '—'}
|
|
148
149
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/lib/generators/opencode.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/lib/generators/opencode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers shared by both wizards (OpenTUI `tui/wizard.ts` and the @clack
|
|
3
|
+
* fallback `lib/wizard.ts`) and exercised directly by the test suite.
|
|
4
|
+
*
|
|
5
|
+
* The wizard now asks the PROJECT TYPE first (frontend · backend · fullstack)
|
|
6
|
+
* and then the LANGUAGE + FRAMEWORK separately per side, with the framework list
|
|
7
|
+
* FILTERED by the chosen language. The data model stays backward-compatible:
|
|
8
|
+
* `project.language` is DERIVED from the per-side languages.
|
|
9
|
+
*/
|
|
10
|
+
export type ProjectType = 'frontend' | 'backend' | 'fullstack';
|
|
11
|
+
/** Backend frameworks by language. Used to filter the framework picker. */
|
|
12
|
+
export declare const BACKEND_BY_LANG: Record<string, string[]>;
|
|
13
|
+
/** Frontend frameworks by language. Frontend is TypeScript/JS only today. */
|
|
14
|
+
export declare const FRONTEND_BY_LANG: Record<string, string[]>;
|
|
15
|
+
/** Languages offered for the backend side. */
|
|
16
|
+
export declare const BACKEND_LANGUAGES: string[];
|
|
17
|
+
/** Languages offered for the frontend side. */
|
|
18
|
+
export declare const FRONTEND_LANGUAGES: string[];
|
|
19
|
+
/** True when the project type implies a backend side. */
|
|
20
|
+
export declare function hasBackend(type: ProjectType): boolean;
|
|
21
|
+
/** True when the project type implies a frontend side. */
|
|
22
|
+
export declare function hasFrontend(type: ProjectType): boolean;
|
|
23
|
+
/** Backend framework values valid for a language (always includes the escape). */
|
|
24
|
+
export declare function backendFrameworksFor(language: string): string[];
|
|
25
|
+
/** Frontend framework values valid for a language. */
|
|
26
|
+
export declare function frontendFrameworksFor(language: string): string[];
|
|
27
|
+
/**
|
|
28
|
+
* Derive the legacy `project.language` from the per-side languages, per the
|
|
29
|
+
* backward-compat rule:
|
|
30
|
+
* - backend / fullstack → the backend language
|
|
31
|
+
* - frontend-only → the frontend language
|
|
32
|
+
* - fullstack with differing sides → 'mixed'
|
|
33
|
+
* Falls back to 'typescript' when nothing is known.
|
|
34
|
+
*/
|
|
35
|
+
export declare function deriveProjectLanguage(args: {
|
|
36
|
+
type: ProjectType;
|
|
37
|
+
backendLanguage?: string;
|
|
38
|
+
frontendLanguage?: string;
|
|
39
|
+
}): string;
|
|
40
|
+
/**
|
|
41
|
+
* Infer the project type from what was detected/declared. Best-effort, used by
|
|
42
|
+
* detect.ts and to back-fill old project.yaml files that lack `project.type`.
|
|
43
|
+
*/
|
|
44
|
+
export declare function inferProjectType(args: {
|
|
45
|
+
backend?: string | null;
|
|
46
|
+
frontend?: string | null;
|
|
47
|
+
}): ProjectType;
|
|
48
|
+
/** Human label for a language, used in generated docs (CLAUDE.md/AGENTS.md). */
|
|
49
|
+
export declare function languageLabel(language: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Render a stack side for generated docs: "FastAPI (Python)" when the per-side
|
|
52
|
+
* language is known, "FastAPI" when only the framework is known, and 'N/A' when
|
|
53
|
+
* the side is absent. Old project.yaml files (no per-side language) degrade to
|
|
54
|
+
* just the framework name.
|
|
55
|
+
*/
|
|
56
|
+
export declare function stackWithLanguage(framework?: string | null, language?: string | null): string;
|
|
57
|
+
//# sourceMappingURL=wizard-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-flow.d.ts","sourceRoot":"","sources":["../../src/lib/wizard-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAE/D,2EAA2E;AAC3E,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAMpD,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAErD,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,UAAgD,CAAC;AAE/E,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,UAAiB,CAAC;AAEjD,yDAAyD;AACzD,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAErD;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEtD;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/D;AAED,sDAAsD;AACtD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAEhE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,IAAI,EAAE,WAAW,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,CAST;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GAAG,WAAW,CAOd;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUtD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG7F"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers shared by both wizards (OpenTUI `tui/wizard.ts` and the @clack
|
|
3
|
+
* fallback `lib/wizard.ts`) and exercised directly by the test suite.
|
|
4
|
+
*
|
|
5
|
+
* The wizard now asks the PROJECT TYPE first (frontend · backend · fullstack)
|
|
6
|
+
* and then the LANGUAGE + FRAMEWORK separately per side, with the framework list
|
|
7
|
+
* FILTERED by the chosen language. The data model stays backward-compatible:
|
|
8
|
+
* `project.language` is DERIVED from the per-side languages.
|
|
9
|
+
*/
|
|
10
|
+
/** Backend frameworks by language. Used to filter the framework picker. */
|
|
11
|
+
export const BACKEND_BY_LANG = {
|
|
12
|
+
typescript: ['hono', 'express', 'nestjs', 'fastify'],
|
|
13
|
+
python: ['fastapi', 'django'],
|
|
14
|
+
ruby: ['rails'],
|
|
15
|
+
go: ['go-gin'],
|
|
16
|
+
php: ['laravel'],
|
|
17
|
+
};
|
|
18
|
+
/** Frontend frameworks by language. Frontend is TypeScript/JS only today. */
|
|
19
|
+
export const FRONTEND_BY_LANG = {
|
|
20
|
+
typescript: ['nextjs', 'astro', 'sveltekit', 'nuxt'],
|
|
21
|
+
};
|
|
22
|
+
/** Languages offered for the backend side. */
|
|
23
|
+
export const BACKEND_LANGUAGES = ['typescript', 'python', 'ruby', 'go', 'php'];
|
|
24
|
+
/** Languages offered for the frontend side. */
|
|
25
|
+
export const FRONTEND_LANGUAGES = ['typescript'];
|
|
26
|
+
/** True when the project type implies a backend side. */
|
|
27
|
+
export function hasBackend(type) {
|
|
28
|
+
return type === 'backend' || type === 'fullstack';
|
|
29
|
+
}
|
|
30
|
+
/** True when the project type implies a frontend side. */
|
|
31
|
+
export function hasFrontend(type) {
|
|
32
|
+
return type === 'frontend' || type === 'fullstack';
|
|
33
|
+
}
|
|
34
|
+
/** Backend framework values valid for a language (always includes the escape). */
|
|
35
|
+
export function backendFrameworksFor(language) {
|
|
36
|
+
return BACKEND_BY_LANG[language] ?? [];
|
|
37
|
+
}
|
|
38
|
+
/** Frontend framework values valid for a language. */
|
|
39
|
+
export function frontendFrameworksFor(language) {
|
|
40
|
+
return FRONTEND_BY_LANG[language] ?? [];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Derive the legacy `project.language` from the per-side languages, per the
|
|
44
|
+
* backward-compat rule:
|
|
45
|
+
* - backend / fullstack → the backend language
|
|
46
|
+
* - frontend-only → the frontend language
|
|
47
|
+
* - fullstack with differing sides → 'mixed'
|
|
48
|
+
* Falls back to 'typescript' when nothing is known.
|
|
49
|
+
*/
|
|
50
|
+
export function deriveProjectLanguage(args) {
|
|
51
|
+
const { type, backendLanguage, frontendLanguage } = args;
|
|
52
|
+
if (type === 'frontend')
|
|
53
|
+
return frontendLanguage ?? 'typescript';
|
|
54
|
+
if (type === 'backend')
|
|
55
|
+
return backendLanguage ?? 'typescript';
|
|
56
|
+
// fullstack
|
|
57
|
+
if (backendLanguage && frontendLanguage) {
|
|
58
|
+
return backendLanguage === frontendLanguage ? backendLanguage : 'mixed';
|
|
59
|
+
}
|
|
60
|
+
return backendLanguage ?? frontendLanguage ?? 'typescript';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Infer the project type from what was detected/declared. Best-effort, used by
|
|
64
|
+
* detect.ts and to back-fill old project.yaml files that lack `project.type`.
|
|
65
|
+
*/
|
|
66
|
+
export function inferProjectType(args) {
|
|
67
|
+
const hasB = !!args.backend;
|
|
68
|
+
const hasF = !!args.frontend;
|
|
69
|
+
if (hasB && hasF)
|
|
70
|
+
return 'fullstack';
|
|
71
|
+
if (hasF && !hasB)
|
|
72
|
+
return 'frontend';
|
|
73
|
+
// backend, or nothing detected → default to backend (DB/ORM stay available).
|
|
74
|
+
return 'backend';
|
|
75
|
+
}
|
|
76
|
+
/** Human label for a language, used in generated docs (CLAUDE.md/AGENTS.md). */
|
|
77
|
+
export function languageLabel(language) {
|
|
78
|
+
const map = {
|
|
79
|
+
typescript: 'TypeScript',
|
|
80
|
+
python: 'Python',
|
|
81
|
+
ruby: 'Ruby',
|
|
82
|
+
go: 'Go',
|
|
83
|
+
php: 'PHP',
|
|
84
|
+
mixed: 'mixed',
|
|
85
|
+
};
|
|
86
|
+
return map[language] ?? language;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Render a stack side for generated docs: "FastAPI (Python)" when the per-side
|
|
90
|
+
* language is known, "FastAPI" when only the framework is known, and 'N/A' when
|
|
91
|
+
* the side is absent. Old project.yaml files (no per-side language) degrade to
|
|
92
|
+
* just the framework name.
|
|
93
|
+
*/
|
|
94
|
+
export function stackWithLanguage(framework, language) {
|
|
95
|
+
if (!framework)
|
|
96
|
+
return 'N/A';
|
|
97
|
+
return language ? `${framework} (${languageLabel(language)})` : framework;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=wizard-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-flow.js","sourceRoot":"","sources":["../../src/lib/wizard-flow.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/wizard.d.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
|
+
import { type ProjectType } from './wizard-flow.js';
|
|
1
2
|
export interface WizardResult {
|
|
2
3
|
name: string;
|
|
3
4
|
slug: string;
|
|
4
5
|
description: string;
|
|
6
|
+
/** Derived legacy language (backend lang, frontend lang, or 'mixed'). */
|
|
5
7
|
language: string;
|
|
8
|
+
/** Project type: solo frontend, solo backend o fullstack. */
|
|
9
|
+
type: ProjectType;
|
|
10
|
+
/** Backend language (only when the project has a backend). */
|
|
11
|
+
backendLanguage?: string;
|
|
12
|
+
/** Frontend language (only when the project has a frontend). */
|
|
13
|
+
frontendLanguage?: string;
|
|
6
14
|
mode: 'startup' | 'standard' | 'enterprise';
|
|
7
15
|
backend?: string;
|
|
8
16
|
frontend?: string;
|
package/dist/lib/wizard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/lib/wizard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/lib/wizard.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,WAAW,EAIjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,IAAI,EAAE,WAAW,CAAC;IAClB,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,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,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AA6ID,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAsP9D"}
|