@cristiancorreau/forge 2.4.2 → 2.6.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/dist/cli.js +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +134 -73
- package/dist/commands/init.js.map +1 -1
- package/dist/tui/wizard.d.ts +3 -0
- package/dist/tui/wizard.d.ts.map +1 -0
- package/dist/tui/wizard.js +315 -0
- package/dist/tui/wizard.js.map +1 -0
- package/dist/ui/header.d.ts +8 -0
- package/dist/ui/header.d.ts.map +1 -0
- package/dist/ui/header.js +46 -0
- package/dist/ui/header.js.map +1 -0
- package/dist/ui/tasks.d.ts +11 -0
- package/dist/ui/tasks.d.ts.map +1 -0
- package/dist/ui/tasks.js +22 -0
- package/dist/ui/tasks.js.map +1 -0
- package/package.json +7 -2
package/dist/cli.js
CHANGED
|
@@ -4,7 +4,7 @@ import { audit } from './commands/audit.js';
|
|
|
4
4
|
import { generate } from './commands/generate.js';
|
|
5
5
|
import { validate } from './commands/validate.js';
|
|
6
6
|
import { doctor } from './commands/doctor.js';
|
|
7
|
-
const VERSION = '2.
|
|
7
|
+
const VERSION = '2.6.0';
|
|
8
8
|
const HELP = `forge v${VERSION} — Agentic development framework
|
|
9
9
|
|
|
10
10
|
Usage: forge <command> [options]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA0NA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqL1D"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, writeFileSync, readFileSync, copyFileSync, readdirSync, statSync } from 'fs';
|
|
2
|
-
import { join
|
|
2
|
+
import { join } from 'path';
|
|
3
3
|
import { loadProjectYaml } from '../lib/yaml.js';
|
|
4
4
|
import { runWizard } from '../lib/wizard.js';
|
|
5
|
+
// Detect Bun runtime (OpenTUI requires Bun)
|
|
6
|
+
const isBun = typeof globalThis.Bun !== 'undefined';
|
|
5
7
|
import { resolveForgeRoot } from '../lib/paths.js';
|
|
6
8
|
import { buildManifest, saveManifest } from '../lib/lock.js';
|
|
7
|
-
import {
|
|
9
|
+
import { dim } from '../ui/colors.js';
|
|
10
|
+
import { printHeader, printSection, printDetected, printAgentList } from '../ui/header.js';
|
|
11
|
+
import { runTasks } from '../ui/tasks.js';
|
|
8
12
|
import { generateClaudeMd } from '../lib/generators/claude-code.js';
|
|
9
13
|
import { generateAgentsMd } from '../lib/generators/opencode.js';
|
|
10
14
|
import { generateCodexAgentsMd } from '../lib/generators/codex.js';
|
|
@@ -24,20 +28,14 @@ Options:
|
|
|
24
28
|
// Helpers
|
|
25
29
|
// ---------------------------------------------------------------------------
|
|
26
30
|
function write(path, content, force) {
|
|
27
|
-
if (existsSync(path) && !force)
|
|
28
|
-
console.log(` skip ${basename(path)} (ya existe)`);
|
|
31
|
+
if (existsSync(path) && !force)
|
|
29
32
|
return;
|
|
30
|
-
}
|
|
31
33
|
writeFileSync(path, content, 'utf-8');
|
|
32
|
-
console.log(` write ${basename(path)}`);
|
|
33
34
|
}
|
|
34
35
|
function copyFile(src, dest, force) {
|
|
35
|
-
if (existsSync(dest) && !force)
|
|
36
|
-
console.log(` skip ${basename(dest)} (ya existe)`);
|
|
36
|
+
if (existsSync(dest) && !force)
|
|
37
37
|
return;
|
|
38
|
-
}
|
|
39
38
|
copyFileSync(src, dest);
|
|
40
|
-
console.log(` copy ${basename(dest)}`);
|
|
41
39
|
}
|
|
42
40
|
function copyDir(src, dest, force) {
|
|
43
41
|
if (!existsSync(dest))
|
|
@@ -99,6 +97,15 @@ runtimes:
|
|
|
99
97
|
# production_url: https://tu-proyecto.vercel.app
|
|
100
98
|
`;
|
|
101
99
|
}
|
|
100
|
+
function getAgentTech(agent) {
|
|
101
|
+
const map = {
|
|
102
|
+
'orchestrator': 'coordination', 'backend-engineer': 'API', 'api-engineer': 'API',
|
|
103
|
+
'frontend-engineer': 'UI', 'admin-engineer': 'admin UI', 'mobile-engineer': 'mobile',
|
|
104
|
+
'test-engineer': 'testing', 'docs-writer': 'docs', 'compliance-reviewer': 'compliance',
|
|
105
|
+
'security-auditor': 'security', 'fullstack-engineer': 'fullstack',
|
|
106
|
+
};
|
|
107
|
+
return map[agent] ?? 'specialized';
|
|
108
|
+
}
|
|
102
109
|
function defaultAgentsForMode(mode) {
|
|
103
110
|
if (mode === 'startup')
|
|
104
111
|
return ['orchestrator', 'backend-engineer', 'frontend-engineer'];
|
|
@@ -210,16 +217,24 @@ export async function init(args) {
|
|
|
210
217
|
const runtimeOverride = runtimeIdx !== -1 ? (args[runtimeIdx + 1] ?? null) : null;
|
|
211
218
|
const projectYamlPath = join(process.cwd(), 'project.yaml');
|
|
212
219
|
let config;
|
|
220
|
+
// Show header
|
|
221
|
+
printHeader();
|
|
213
222
|
if (!existsSync(projectYamlPath)) {
|
|
214
|
-
// Run interactive wizard
|
|
215
|
-
|
|
223
|
+
// Run interactive wizard — OpenTUI (Bun) or @clack/prompts (Node.js)
|
|
224
|
+
let result;
|
|
225
|
+
if (isBun) {
|
|
226
|
+
const { runOpenTUIWizard } = await import('../tui/wizard.js');
|
|
227
|
+
result = await runOpenTUIWizard();
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
result = await runWizard();
|
|
231
|
+
}
|
|
216
232
|
if (!result) {
|
|
217
233
|
console.log('\nCancelado.');
|
|
218
234
|
return 1;
|
|
219
235
|
}
|
|
220
236
|
const yamlContent = buildProjectYaml(result);
|
|
221
237
|
writeFileSync(projectYamlPath, yamlContent, 'utf-8');
|
|
222
|
-
console.log(`\n write project.yaml`);
|
|
223
238
|
// Build config from wizard result
|
|
224
239
|
config = {
|
|
225
240
|
project: { name: result.name, slug: result.slug, description: result.description, language: result.language, mode: result.mode, status: 'active' },
|
|
@@ -229,7 +244,6 @@ export async function init(args) {
|
|
|
229
244
|
};
|
|
230
245
|
}
|
|
231
246
|
else {
|
|
232
|
-
console.log('project.yaml encontrado — usando configuración existente.\n');
|
|
233
247
|
config = loadProjectYaml(projectYamlPath);
|
|
234
248
|
}
|
|
235
249
|
const forgeRoot = resolveForgeRoot();
|
|
@@ -241,59 +255,105 @@ export async function init(args) {
|
|
|
241
255
|
const complianceAgents = config.agents?.compliance ?? [];
|
|
242
256
|
const profiles = config.agents?.profiles ?? [];
|
|
243
257
|
const allAgents = [...activeAgents, ...complianceAgents];
|
|
258
|
+
// Show detected stack
|
|
259
|
+
const detectedItems = [];
|
|
260
|
+
if (language && language !== 'typescript')
|
|
261
|
+
detectedItems.push(language.charAt(0).toUpperCase() + language.slice(1));
|
|
262
|
+
if (config.stack?.backend)
|
|
263
|
+
detectedItems.push(config.stack.backend);
|
|
264
|
+
if (config.stack?.frontend)
|
|
265
|
+
detectedItems.push(config.stack.frontend);
|
|
266
|
+
if (config.stack?.database)
|
|
267
|
+
detectedItems.push(config.stack.database);
|
|
268
|
+
if (config.stack?.orm)
|
|
269
|
+
detectedItems.push(config.stack.orm);
|
|
270
|
+
if ((config.stack?.testing ?? []).length > 0)
|
|
271
|
+
detectedItems.push(...(config.stack?.testing ?? []));
|
|
272
|
+
if (language === 'typescript')
|
|
273
|
+
detectedItems.unshift('TypeScript');
|
|
274
|
+
if (detectedItems.length > 0)
|
|
275
|
+
printDetected(detectedItems);
|
|
276
|
+
// Show agent list
|
|
277
|
+
const agentListItems = allAgents.map(a => ({ name: a, tech: getAgentTech(a) }));
|
|
278
|
+
if (agentListItems.length > 0)
|
|
279
|
+
printAgentList(agentListItems);
|
|
244
280
|
// --dry-run: show what would be installed
|
|
245
281
|
if (dryRun) {
|
|
246
|
-
|
|
247
|
-
console.log(dim(' Archivos que se crearían:'));
|
|
282
|
+
printSection('Would install (--dry-run)');
|
|
248
283
|
const dryFiles = [
|
|
249
|
-
`.claude/agents/
|
|
250
|
-
'.claude/hooks/
|
|
251
|
-
'.claude/commands/
|
|
252
|
-
'CLAUDE.md',
|
|
253
|
-
'.claude/settings.json',
|
|
254
|
-
'.
|
|
255
|
-
'.forge/manifest.json',
|
|
284
|
+
{ title: `.claude/agents/ — ${allAgents.length} agents`, tech: runtime },
|
|
285
|
+
{ title: '.claude/hooks/ — pre-edit-check.js, pre-bash-check.js', tech: 'guardrail' },
|
|
286
|
+
{ title: '.claude/commands/ — 11 slash commands', tech: 'sdd' },
|
|
287
|
+
{ title: 'CLAUDE.md', tech: 'config' },
|
|
288
|
+
{ title: '.claude/settings.json', tech: 'config' },
|
|
289
|
+
{ title: '.forge/manifest.json', tech: 'manifest' },
|
|
256
290
|
];
|
|
257
|
-
dryFiles.forEach(f
|
|
258
|
-
|
|
291
|
+
dryFiles.forEach((f, i) => {
|
|
292
|
+
process.stdout.write(` ${dim(String(i + 1).padStart(2) + '.')} ${f.title} ${dim('← ' + f.tech)}\n`);
|
|
293
|
+
});
|
|
294
|
+
console.log('\n' + dim(' Run without --dry-run to apply.') + '\n');
|
|
259
295
|
return 0;
|
|
260
296
|
}
|
|
261
|
-
console.log(`\nInstalando forge para runtime: ${runtime}\n`);
|
|
262
297
|
if (runtime === 'claude-code') {
|
|
263
298
|
const claudeDir = join(projectRoot, '.claude');
|
|
264
299
|
mkdirSync(claudeDir, { recursive: true });
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
300
|
+
await runTasks('Installing...', [
|
|
301
|
+
{
|
|
302
|
+
title: `Agents (${allAgents.length})`,
|
|
303
|
+
tech: profiles.length ? `${profiles.join(', ')} profile` : 'core',
|
|
304
|
+
task: () => installCoreAgents(forgeRoot, join(claudeDir, 'agents'), allAgents, profiles, force),
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
title: 'Hooks (pre-edit-check.js, pre-bash-check.js)',
|
|
308
|
+
tech: 'guardrail',
|
|
309
|
+
task: () => installHooks(forgeRoot, join(claudeDir, 'hooks'), mode, force),
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
title: 'Slash commands (11)',
|
|
313
|
+
tech: 'sdd workflow',
|
|
314
|
+
task: () => installCommands(forgeRoot, join(claudeDir, 'commands'), force),
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
title: 'CLAUDE.md',
|
|
318
|
+
tech: 'generated',
|
|
319
|
+
task: () => write(join(projectRoot, 'CLAUDE.md'), generateClaudeMd(config), force),
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
title: 'settings.json',
|
|
323
|
+
tech: 'permissions + hooks',
|
|
324
|
+
task: () => write(join(claudeDir, 'settings.json'), generateSettingsJson(language, mode), force),
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
title: 'docs/specs/ + architecture.rules',
|
|
328
|
+
tech: 'scaffold',
|
|
329
|
+
task: () => {
|
|
330
|
+
mkdirSync(join(projectRoot, 'docs', 'specs'), { recursive: true });
|
|
331
|
+
mkdirSync(join(projectRoot, 'docs', 'daily-notes'), { recursive: true });
|
|
332
|
+
const specTemplateSrc = join(forgeRoot, 'core', 'templates', 'spec-template.md');
|
|
333
|
+
if (existsSync(specTemplateSrc)) {
|
|
334
|
+
copyFile(specTemplateSrc, join(projectRoot, 'docs', 'specs', '_template.md'), false);
|
|
335
|
+
}
|
|
336
|
+
const archRulesTemplate = join(forgeRoot, 'core', 'templates', 'claude-md', 'architecture.rules');
|
|
337
|
+
const archRulesDest = join(claudeDir, 'architecture.rules');
|
|
338
|
+
if (existsSync(archRulesTemplate) && !existsSync(archRulesDest)) {
|
|
339
|
+
const content = readFileSync(archRulesTemplate, 'utf-8').replace('<NOMBRE_PROYECTO>', config.project.name ?? 'Mi Proyecto');
|
|
340
|
+
writeFileSync(archRulesDest, content, 'utf-8');
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
title: '.forge/manifest.json',
|
|
346
|
+
tech: 'sha256 tracking',
|
|
347
|
+
task: () => {
|
|
348
|
+
const installedFiles = [
|
|
349
|
+
'CLAUDE.md', '.claude/settings.json', '.claude/architecture.rules',
|
|
350
|
+
...allAgents.map(a => `.claude/agents/${a}.md`),
|
|
351
|
+
];
|
|
352
|
+
const ts = new Date().toISOString();
|
|
353
|
+
saveManifest(projectRoot, buildManifest(runtime, installedFiles, projectRoot, '2.6.0', ts));
|
|
354
|
+
},
|
|
355
|
+
},
|
|
356
|
+
]);
|
|
297
357
|
}
|
|
298
358
|
else if (runtime === 'opencode') {
|
|
299
359
|
mkdirSync(join(projectRoot, '.opencode'), { recursive: true });
|
|
@@ -305,21 +365,22 @@ export async function init(args) {
|
|
|
305
365
|
else if (runtime === 'kiro') {
|
|
306
366
|
installKiro(forgeRoot, projectRoot, config, force);
|
|
307
367
|
}
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
368
|
+
// Final summary box
|
|
369
|
+
const import_boxen = await import('boxen');
|
|
370
|
+
const importChalk = await import('chalk');
|
|
371
|
+
const nextSteps = runtime === 'claude-code' ? ['Open project in Claude Code', 'Run /plan to create your first spec'] :
|
|
372
|
+
runtime === 'opencode' ? ['Open project in OpenCode'] :
|
|
373
|
+
runtime === 'kiro' ? ['Open project in Kiro IDE'] :
|
|
374
|
+
['Open project in your AI runtime'];
|
|
375
|
+
const summaryContent = importChalk.default.green.bold('✔ forge installed — ' + runtime) + '\n\n' +
|
|
376
|
+
importChalk.default.dim('Next steps:\n') +
|
|
377
|
+
nextSteps.map((s, i) => importChalk.default.dim(` ${i + 1}. ${s}`)).join('\n');
|
|
378
|
+
process.stdout.write('\n' + import_boxen.default(summaryContent, {
|
|
379
|
+
borderStyle: 'round',
|
|
380
|
+
borderColor: 'green',
|
|
381
|
+
padding: { top: 0, bottom: 0, left: 1, right: 1 },
|
|
382
|
+
margin: { top: 0, bottom: 1, left: 0, right: 0 },
|
|
383
|
+
}) + '\n');
|
|
323
384
|
return 0;
|
|
324
385
|
}
|
|
325
386
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/tui/wizard.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAkFrD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA6QrE"}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* forge interactive wizard — OpenTUI panels (Bun runtime only).
|
|
3
|
+
* Layout: header / steps (left) / content (right) / keyhints (bottom)
|
|
4
|
+
*/
|
|
5
|
+
// @ts-nocheck — OpenTUI types verified at runtime; Bun-only module
|
|
6
|
+
import { createCliRenderer, BoxRenderable, Text, SelectRenderable, InputRenderable, } from '@opentui/core';
|
|
7
|
+
import { detectStack } from '../lib/detect.js';
|
|
8
|
+
// ─── Palette ─────────────────────────────────────────────────────────────────
|
|
9
|
+
const C = {
|
|
10
|
+
cyan: '#00e5ff',
|
|
11
|
+
yellow: '#ffd740',
|
|
12
|
+
green: '#69ff47',
|
|
13
|
+
muted: '#546e7a',
|
|
14
|
+
dim: '#37474f',
|
|
15
|
+
bg: '#0d1117',
|
|
16
|
+
bgPanel: '#161b22',
|
|
17
|
+
bgActive: '#1f2937',
|
|
18
|
+
white: '#e6edf3',
|
|
19
|
+
};
|
|
20
|
+
const bold = (s) => `\x1b[1m${s}\x1b[0m`;
|
|
21
|
+
const col = (hex, s) => {
|
|
22
|
+
const r = parseInt(hex.slice(1, 3), 16), g = parseInt(hex.slice(3, 5), 16), b = parseInt(hex.slice(5, 7), 16);
|
|
23
|
+
return `\x1b[38;2;${r};${g};${b}m${s}\x1b[0m`;
|
|
24
|
+
};
|
|
25
|
+
const dim = (s) => `\x1b[2m${s}\x1b[0m`;
|
|
26
|
+
// ─── Steps ────────────────────────────────────────────────────────────────────
|
|
27
|
+
const STEPS = ['Project name', 'Language', 'Mode', 'Backend', 'Frontend', 'Database', 'ORM', 'Package manager', 'Testing', 'Runtime', 'Confirm'];
|
|
28
|
+
// ─── Options ─────────────────────────────────────────────────────────────────
|
|
29
|
+
const opt = (name, value, description = '') => ({ name, value, description });
|
|
30
|
+
const BACKENDS = {
|
|
31
|
+
typescript: [opt('Hono', 'hono', 'Edge-ready, ultralight'), opt('Express', 'express', 'The classic'), opt('NestJS', 'nestjs', 'Enterprise, opinionated'), opt('Fastify', 'fastify', 'High performance'), opt('None', 'none', '')],
|
|
32
|
+
python: [opt('FastAPI', 'fastapi', 'Async Python'), opt('Django', 'django', 'Batteries included'), opt('None', 'none', '')],
|
|
33
|
+
ruby: [opt('Rails', 'rails', 'Full-stack framework'), opt('None', 'none', '')],
|
|
34
|
+
go: [opt('Gin', 'go-gin', 'Fast HTTP router'), opt('None', 'none', '')],
|
|
35
|
+
php: [opt('Laravel', 'laravel', 'Full-stack PHP'), opt('None', 'none', '')],
|
|
36
|
+
};
|
|
37
|
+
const FRONTENDS = [
|
|
38
|
+
opt('Next.js', 'nextjs', 'Fullstack React'), opt('Astro', 'astro', 'Content-first'),
|
|
39
|
+
opt('Nuxt', 'nuxt', 'Vue.js'), opt('SvelteKit', 'sveltekit', 'Svelte'),
|
|
40
|
+
opt('None', 'none', ''),
|
|
41
|
+
];
|
|
42
|
+
const DATABASES = [
|
|
43
|
+
opt('PostgreSQL', 'postgresql', 'Recommended'), opt('MySQL', 'mysql', ''),
|
|
44
|
+
opt('SQLite', 'sqlite', 'Dev / embedded'), opt('None', 'none', ''),
|
|
45
|
+
];
|
|
46
|
+
const ORMS = {
|
|
47
|
+
typescript: [opt('Drizzle ORM', 'drizzle', 'Lightweight, type-safe'), opt('Prisma', 'prisma', 'Full ORM + migrations'), opt('TypeORM', 'typeorm', ''), opt('None', 'none', '')],
|
|
48
|
+
python: [opt('SQLAlchemy', 'sqlalchemy', ''), opt('None', 'none', '')],
|
|
49
|
+
ruby: [opt('Active Record', 'active-record', ''), opt('None', 'none', '')],
|
|
50
|
+
};
|
|
51
|
+
const PKG_MANAGERS = {
|
|
52
|
+
typescript: [opt('pnpm', 'pnpm', 'Recommended — fast'), opt('npm', 'npm', ''), opt('yarn', 'yarn', ''), opt('bun', 'bun', 'Ultra-fast')],
|
|
53
|
+
python: [opt('pip', 'pip', ''), opt('poetry', 'poetry', '')],
|
|
54
|
+
ruby: [opt('bundler', 'bundler', '')],
|
|
55
|
+
go: [opt('go modules', 'go', '')],
|
|
56
|
+
php: [opt('composer', 'composer', '')],
|
|
57
|
+
};
|
|
58
|
+
const TESTING = {
|
|
59
|
+
typescript: [opt('Vitest', 'vitest', 'Unit + integration'), opt('Jest', 'jest', ''), opt('Playwright', 'playwright', 'E2E'), opt('Cypress', 'cypress', 'E2E'), opt('None', 'none', 'Skip')],
|
|
60
|
+
python: [opt('pytest', 'pytest', ''), opt('None', 'none', 'Skip')],
|
|
61
|
+
ruby: [opt('RSpec', 'rspec', ''), opt('None', 'none', 'Skip')],
|
|
62
|
+
php: [opt('PHPUnit', 'phpunit', ''), opt('None', 'none', 'Skip')],
|
|
63
|
+
};
|
|
64
|
+
const RUNTIMES = [
|
|
65
|
+
opt('Claude Code', 'claude-code', 'Recommended'), opt('OpenCode', 'opencode', ''),
|
|
66
|
+
opt('Codex CLI', 'codex', ''), opt('Kiro IDE', 'kiro', ''),
|
|
67
|
+
];
|
|
68
|
+
const PROFILE_MAP = {
|
|
69
|
+
hono: 'hono-drizzle', nextjs: 'nextjs-admin', astro: 'astro',
|
|
70
|
+
fastapi: 'fastapi', rails: 'rails', laravel: 'laravel',
|
|
71
|
+
};
|
|
72
|
+
const toSlug = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
73
|
+
// ─── Main wizard ──────────────────────────────────────────────────────────────
|
|
74
|
+
export async function runOpenTUIWizard() {
|
|
75
|
+
const detected = detectStack(process.cwd());
|
|
76
|
+
const renderer = await createCliRenderer({ exitOnCtrlC: true });
|
|
77
|
+
const W = renderer.width ?? process.stdout.columns ?? 120;
|
|
78
|
+
const H = renderer.height ?? process.stdout.rows ?? 40;
|
|
79
|
+
const HEADER_H = 5;
|
|
80
|
+
const BOTTOM_H = 2;
|
|
81
|
+
const BODY_H = H - HEADER_H - BOTTOM_H - 2;
|
|
82
|
+
const LEFT_W = Math.max(22, Math.floor(W * 0.24));
|
|
83
|
+
const RIGHT_W = W - LEFT_W - 1;
|
|
84
|
+
// ── Header ──
|
|
85
|
+
const header = new BoxRenderable(renderer, {
|
|
86
|
+
id: 'header', position: 'absolute', left: 0, top: 0, width: W, height: HEADER_H,
|
|
87
|
+
borderStyle: 'double', border: true, borderColor: C.cyan,
|
|
88
|
+
backgroundColor: C.bg,
|
|
89
|
+
});
|
|
90
|
+
header.add(Text({
|
|
91
|
+
id: 'header-text',
|
|
92
|
+
content: col(C.yellow, bold('forge')) + ' '.repeat(Math.max(2, W - 26)) + dim('v2.5.0') + '\n' +
|
|
93
|
+
col(C.muted, 'Configure any project for AI agents') + '\n' +
|
|
94
|
+
dim('Claude Code · OpenCode · Codex · Kiro'),
|
|
95
|
+
}));
|
|
96
|
+
renderer.root.add(header);
|
|
97
|
+
// ── Steps panel ──
|
|
98
|
+
const stepsPanel = new BoxRenderable(renderer, {
|
|
99
|
+
id: 'steps-panel', position: 'absolute',
|
|
100
|
+
left: 0, top: HEADER_H + 1, width: LEFT_W, height: BODY_H,
|
|
101
|
+
borderStyle: 'single', border: true, borderColor: C.dim,
|
|
102
|
+
backgroundColor: C.bgPanel, title: ' Steps ',
|
|
103
|
+
});
|
|
104
|
+
renderer.root.add(stepsPanel);
|
|
105
|
+
// ── Content panel ──
|
|
106
|
+
const contentPanel = new BoxRenderable(renderer, {
|
|
107
|
+
id: 'content-panel', position: 'absolute',
|
|
108
|
+
left: LEFT_W + 1, top: HEADER_H + 1, width: RIGHT_W, height: BODY_H,
|
|
109
|
+
borderStyle: 'single', border: true, borderColor: C.cyan,
|
|
110
|
+
backgroundColor: C.bg,
|
|
111
|
+
});
|
|
112
|
+
renderer.root.add(contentPanel);
|
|
113
|
+
// ── Bottom bar ──
|
|
114
|
+
const bottom = new BoxRenderable(renderer, {
|
|
115
|
+
id: 'bottom', position: 'absolute',
|
|
116
|
+
left: 0, top: H - BOTTOM_H, width: W, height: BOTTOM_H,
|
|
117
|
+
backgroundColor: C.bgPanel,
|
|
118
|
+
});
|
|
119
|
+
bottom.add(Text({ id: 'bottom-text', content: dim(' [↑↓] Navigate [Enter] Confirm [Ctrl+C] Cancel') }));
|
|
120
|
+
renderer.root.add(bottom);
|
|
121
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
122
|
+
let currentStep = 0;
|
|
123
|
+
function renderSteps() {
|
|
124
|
+
stepsPanel.remove('steps-list');
|
|
125
|
+
const lines = STEPS.map((s, i) => {
|
|
126
|
+
if (i < currentStep)
|
|
127
|
+
return col(C.green, ` ✔ ${i + 1}. ${s}`);
|
|
128
|
+
if (i === currentStep)
|
|
129
|
+
return col(C.cyan, ` ► ${bold(String(i + 1))}. ${bold(s)}`);
|
|
130
|
+
return col(C.muted, ` ${i + 1}. ${s}`);
|
|
131
|
+
}).join('\n');
|
|
132
|
+
stepsPanel.add(Text({ id: 'steps-list', content: lines }));
|
|
133
|
+
}
|
|
134
|
+
function clearContent() {
|
|
135
|
+
try {
|
|
136
|
+
contentPanel.remove('content-label');
|
|
137
|
+
}
|
|
138
|
+
catch { }
|
|
139
|
+
try {
|
|
140
|
+
contentPanel.remove('content-widget');
|
|
141
|
+
}
|
|
142
|
+
catch { }
|
|
143
|
+
try {
|
|
144
|
+
renderer.root.remove('float-input');
|
|
145
|
+
}
|
|
146
|
+
catch { }
|
|
147
|
+
try {
|
|
148
|
+
renderer.root.remove('float-select');
|
|
149
|
+
}
|
|
150
|
+
catch { }
|
|
151
|
+
}
|
|
152
|
+
// ─── askInput ─────────────────────────────────────────────────────────────────
|
|
153
|
+
async function askInput(title, hint = '', defVal = '') {
|
|
154
|
+
return new Promise(resolve => {
|
|
155
|
+
renderSteps();
|
|
156
|
+
clearContent();
|
|
157
|
+
contentPanel.add(Text({
|
|
158
|
+
id: 'content-label',
|
|
159
|
+
content: '\n ' + col(C.white, bold(title)) + '\n ' + dim(hint || 'Type and press Enter'),
|
|
160
|
+
}));
|
|
161
|
+
const input = new InputRenderable(renderer, {
|
|
162
|
+
id: 'float-input',
|
|
163
|
+
position: 'absolute',
|
|
164
|
+
left: LEFT_W + 3, top: HEADER_H + 6,
|
|
165
|
+
width: Math.min(60, RIGHT_W - 6),
|
|
166
|
+
backgroundColor: C.bgActive,
|
|
167
|
+
borderStyle: 'single', border: true, borderColor: C.cyan,
|
|
168
|
+
value: defVal,
|
|
169
|
+
});
|
|
170
|
+
renderer.root.add(input);
|
|
171
|
+
renderer.focusRenderable(input);
|
|
172
|
+
input.on('enter', () => {
|
|
173
|
+
const val = input.value?.trim() || defVal;
|
|
174
|
+
clearContent();
|
|
175
|
+
resolve(val);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
// ─── askSelect ────────────────────────────────────────────────────────────────
|
|
180
|
+
async function askSelect(title, hint, options, initialValue) {
|
|
181
|
+
return new Promise(resolve => {
|
|
182
|
+
renderSteps();
|
|
183
|
+
clearContent();
|
|
184
|
+
contentPanel.add(Text({
|
|
185
|
+
id: 'content-label',
|
|
186
|
+
content: '\n ' + col(C.white, bold(title)) + '\n ' + dim(hint),
|
|
187
|
+
}));
|
|
188
|
+
const initIdx = initialValue
|
|
189
|
+
? Math.max(0, options.findIndex(o => o.value === initialValue))
|
|
190
|
+
: 0;
|
|
191
|
+
const sel = new SelectRenderable(renderer, {
|
|
192
|
+
id: 'float-select',
|
|
193
|
+
position: 'absolute',
|
|
194
|
+
left: LEFT_W + 3, top: HEADER_H + 6,
|
|
195
|
+
width: Math.min(52, RIGHT_W - 6),
|
|
196
|
+
height: Math.min(options.length + 2, BODY_H - 8),
|
|
197
|
+
options,
|
|
198
|
+
selectedIndex: initIdx,
|
|
199
|
+
backgroundColor: C.bgPanel,
|
|
200
|
+
focusedBackgroundColor: C.bgActive,
|
|
201
|
+
focusedTextColor: C.cyan,
|
|
202
|
+
selectedBackgroundColor: C.bgActive,
|
|
203
|
+
selectedTextColor: C.yellow,
|
|
204
|
+
borderStyle: 'single', border: true, borderColor: C.dim,
|
|
205
|
+
});
|
|
206
|
+
renderer.root.add(sel);
|
|
207
|
+
renderer.focusRenderable(sel);
|
|
208
|
+
sel.on('itemSelected', () => {
|
|
209
|
+
const val = sel.getSelectedOption()?.value ?? options[0].value;
|
|
210
|
+
clearContent();
|
|
211
|
+
resolve(val);
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
// ─── Run wizard steps ─────────────────────────────────────────────────────────
|
|
216
|
+
const answers = {
|
|
217
|
+
testing: detected.testing ?? [],
|
|
218
|
+
profiles: [],
|
|
219
|
+
detected: !!(detected.language || detected.backend),
|
|
220
|
+
};
|
|
221
|
+
renderSteps();
|
|
222
|
+
answers.name = await askInput('Project name', 'Name for your project (e.g. "My API")');
|
|
223
|
+
answers.slug = toSlug(answers.name);
|
|
224
|
+
currentStep = 1;
|
|
225
|
+
answers.language = await askSelect('Language', 'Primary programming language', [
|
|
226
|
+
opt('TypeScript', 'typescript', 'Recommended'), opt('Python', 'python', ''),
|
|
227
|
+
opt('Ruby', 'ruby', ''), opt('Go', 'go', ''), opt('PHP', 'php', ''),
|
|
228
|
+
], detected.language ?? 'typescript');
|
|
229
|
+
currentStep = 2;
|
|
230
|
+
answers.mode = await askSelect('Project mode', 'Determines agents and guardrails installed', [
|
|
231
|
+
opt('startup', 'startup', 'Minimal — small team'),
|
|
232
|
+
opt('standard', 'standard', 'CI/CD, code review, testing'),
|
|
233
|
+
opt('enterprise', 'enterprise', 'Compliance, multi-team'),
|
|
234
|
+
], 'standard');
|
|
235
|
+
currentStep = 3;
|
|
236
|
+
const backendOpts = BACKENDS[answers.language] ?? [opt('None', 'none', '')];
|
|
237
|
+
const backend = await askSelect('Backend framework', 'Select backend (or None)', backendOpts, detected.backend ?? 'none');
|
|
238
|
+
answers.backend = backend === 'none' ? undefined : backend;
|
|
239
|
+
currentStep = 4;
|
|
240
|
+
const frontend = await askSelect('Frontend framework', 'Select frontend (or None)', FRONTENDS, detected.frontend ?? 'none');
|
|
241
|
+
answers.frontend = frontend === 'none' ? undefined : frontend;
|
|
242
|
+
currentStep = 5;
|
|
243
|
+
const database = await askSelect('Database', 'Select primary database', DATABASES, detected.database ?? 'postgresql');
|
|
244
|
+
answers.database = database === 'none' ? undefined : database;
|
|
245
|
+
currentStep = 6;
|
|
246
|
+
if (answers.database) {
|
|
247
|
+
const ormOpts = ORMS[answers.language] ?? [opt('None', 'none', '')];
|
|
248
|
+
const orm = await askSelect('ORM / query builder', 'Select ORM or query builder', ormOpts, detected.orm ?? 'none');
|
|
249
|
+
answers.orm = orm === 'none' ? undefined : orm;
|
|
250
|
+
}
|
|
251
|
+
currentStep = 7;
|
|
252
|
+
const pmOpts = PKG_MANAGERS[answers.language] ?? [opt('npm', 'npm', '')];
|
|
253
|
+
answers.packageManager = await askSelect('Package manager', 'Select package manager', pmOpts, detected.packageManager ?? 'pnpm');
|
|
254
|
+
currentStep = 8;
|
|
255
|
+
const testOpts = TESTING[answers.language] ?? [opt('None', 'none', 'Skip')];
|
|
256
|
+
const test = await askSelect('Testing', 'Select primary testing framework', testOpts, (detected.testing ?? [])[0] ?? 'none');
|
|
257
|
+
answers.testing = test === 'none' ? [] : [test];
|
|
258
|
+
currentStep = 9;
|
|
259
|
+
answers.runtime = await askSelect('AI Runtime', 'Select the primary AI coding runtime', RUNTIMES, 'claude-code');
|
|
260
|
+
currentStep = 10;
|
|
261
|
+
// Confirm
|
|
262
|
+
renderSteps();
|
|
263
|
+
clearContent();
|
|
264
|
+
const summaryLines = [
|
|
265
|
+
'\n ' + col(C.white, bold('Configuration summary')), '',
|
|
266
|
+
` ${col(C.muted, 'Name:')} ${col(C.yellow, answers.name)}`,
|
|
267
|
+
` ${col(C.muted, 'Language:')} ${answers.language} ${col(C.muted, 'Mode:')} ${answers.mode}`,
|
|
268
|
+
answers.backend ? ` ${col(C.muted, 'Backend:')} ${answers.backend}` : '',
|
|
269
|
+
answers.frontend ? ` ${col(C.muted, 'Frontend:')} ${answers.frontend}` : '',
|
|
270
|
+
answers.database ? ` ${col(C.muted, 'Database:')} ${answers.database}${answers.orm ? ' + ' + answers.orm : ''}` : '',
|
|
271
|
+
answers.testing?.length ? ` ${col(C.muted, 'Testing:')} ${answers.testing.join(', ')}` : '',
|
|
272
|
+
` ${col(C.muted, 'Runtime:')} ${answers.runtime}`,
|
|
273
|
+
'',
|
|
274
|
+
].filter(l => l !== '');
|
|
275
|
+
contentPanel.add(Text({ id: 'content-label', content: summaryLines.join('\n') }));
|
|
276
|
+
const confirmed = await askSelect('', 'Install with this configuration?', [
|
|
277
|
+
opt('✔ Yes, install forge', 'yes', ''),
|
|
278
|
+
opt('✗ Cancel', 'no', ''),
|
|
279
|
+
]) === 'yes';
|
|
280
|
+
if (!confirmed) {
|
|
281
|
+
renderer.destroy();
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
renderSteps();
|
|
285
|
+
clearContent();
|
|
286
|
+
contentPanel.add(Text({
|
|
287
|
+
id: 'content-label',
|
|
288
|
+
content: '\n\n ' + col(C.green, bold(' ✔ Configuration complete')) + '\n ' + dim(' Installing forge...'),
|
|
289
|
+
}));
|
|
290
|
+
await new Promise(r => setTimeout(r, 500));
|
|
291
|
+
renderer.destroy();
|
|
292
|
+
// Auto profiles
|
|
293
|
+
const profiles = [];
|
|
294
|
+
if (answers.backend && PROFILE_MAP[answers.backend])
|
|
295
|
+
profiles.push(PROFILE_MAP[answers.backend]);
|
|
296
|
+
if (answers.frontend && PROFILE_MAP[answers.frontend])
|
|
297
|
+
profiles.push(PROFILE_MAP[answers.frontend]);
|
|
298
|
+
return {
|
|
299
|
+
name: answers.name,
|
|
300
|
+
slug: answers.slug,
|
|
301
|
+
description: '',
|
|
302
|
+
language: answers.language,
|
|
303
|
+
mode: answers.mode,
|
|
304
|
+
backend: answers.backend,
|
|
305
|
+
frontend: answers.frontend,
|
|
306
|
+
database: answers.database,
|
|
307
|
+
orm: answers.orm,
|
|
308
|
+
packageManager: answers.packageManager,
|
|
309
|
+
testing: answers.testing,
|
|
310
|
+
profiles: [...new Set(profiles)],
|
|
311
|
+
runtime: answers.runtime,
|
|
312
|
+
detected: answers.detected,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/tui/wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function printHeader(): void;
|
|
2
|
+
export declare function printSection(title: string): void;
|
|
3
|
+
export declare function printDetected(items: string[]): void;
|
|
4
|
+
export declare function printAgentList(agents: Array<{
|
|
5
|
+
name: string;
|
|
6
|
+
tech: string;
|
|
7
|
+
}>): void;
|
|
8
|
+
//# sourceMappingURL=header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/ui/header.ts"],"names":[],"mappings":"AAKA,wBAAgB,WAAW,IAAI,IAAI,CAclC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAiBnD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAQlF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import boxen from 'boxen';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
const VERSION = '2.4.2';
|
|
4
|
+
export function printHeader() {
|
|
5
|
+
const content = chalk.yellow.bold('forge') + ' ' + chalk.dim('v' + '2.6.0') + '\n' +
|
|
6
|
+
chalk.dim('Configure any project for AI agents') + '\n' +
|
|
7
|
+
chalk.dim('Claude Code · OpenCode · Codex · Kiro');
|
|
8
|
+
const output = boxen(content, {
|
|
9
|
+
borderStyle: 'double',
|
|
10
|
+
borderColor: 'cyan',
|
|
11
|
+
padding: { top: 0, bottom: 0, left: 1, right: 1 },
|
|
12
|
+
margin: { top: 1, bottom: 1, left: 0, right: 0 },
|
|
13
|
+
});
|
|
14
|
+
process.stdout.write(output + '\n');
|
|
15
|
+
}
|
|
16
|
+
export function printSection(title) {
|
|
17
|
+
process.stdout.write('\n' + chalk.bold('► ') + chalk.bold(title) + '\n\n');
|
|
18
|
+
}
|
|
19
|
+
export function printDetected(items) {
|
|
20
|
+
if (items.length === 0)
|
|
21
|
+
return;
|
|
22
|
+
printSection('Detected technologies:');
|
|
23
|
+
// 3 columns
|
|
24
|
+
const cols = 3;
|
|
25
|
+
const rows = Math.ceil(items.length / cols);
|
|
26
|
+
for (let r = 0; r < rows; r++) {
|
|
27
|
+
let line = ' ';
|
|
28
|
+
for (let c = 0; c < cols; c++) {
|
|
29
|
+
const idx = r + c * rows;
|
|
30
|
+
if (idx < items.length) {
|
|
31
|
+
line += chalk.green('✔ ') + chalk.bold(items[idx]).padEnd(20);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
process.stdout.write(line.trimEnd() + '\n');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function printAgentList(agents) {
|
|
38
|
+
printSection(`Agents to install (${agents.length})`);
|
|
39
|
+
agents.forEach((a, i) => {
|
|
40
|
+
const num = chalk.dim(String(i + 1).padStart(2) + '.');
|
|
41
|
+
const name = chalk.cyan(a.name.padEnd(30));
|
|
42
|
+
const tech = chalk.dim('← ' + a.tech);
|
|
43
|
+
process.stdout.write(` ${num} ${name} ${tech}\n`);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/ui/header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,UAAU,WAAW;IACzB,MAAM,OAAO,GACX,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,0BAA0B,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI;QACzF,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,GAAG,IAAI;QACvD,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE;QAC5B,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QACjD,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;KACjD,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,YAAY,CAAC,wBAAwB,CAAC,CAAC;IAEvC,YAAY;IACZ,MAAM,IAAI,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACzB,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACvB,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAA6C;IAC1E,YAAY,CAAC,sBAAsB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACrD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface InstallTask {
|
|
2
|
+
title: string;
|
|
3
|
+
task: () => void | Promise<void>;
|
|
4
|
+
tech?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Runs an installation task list with listr2 — renders checkmarks as each task completes,
|
|
8
|
+
* matching the autoskills aesthetic.
|
|
9
|
+
*/
|
|
10
|
+
export declare function runTasks(sectionTitle: string, tasks: InstallTask[]): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=tasks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/ui/tasks.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,WAAW,EAAE,GACnB,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
package/dist/ui/tasks.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Listr } from 'listr2';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
/**
|
|
4
|
+
* Runs an installation task list with listr2 — renders checkmarks as each task completes,
|
|
5
|
+
* matching the autoskills aesthetic.
|
|
6
|
+
*/
|
|
7
|
+
export async function runTasks(sectionTitle, tasks) {
|
|
8
|
+
process.stdout.write('\n' + chalk.bold('► ') + chalk.bold(sectionTitle) + '\n\n');
|
|
9
|
+
const listrTasks = tasks.map(t => ({
|
|
10
|
+
title: chalk.cyan(t.title) + (t.tech ? chalk.dim(' ← ' + t.tech) : ''),
|
|
11
|
+
task: async () => { await t.task(); },
|
|
12
|
+
}));
|
|
13
|
+
const runner = new Listr(listrTasks, {
|
|
14
|
+
concurrent: false,
|
|
15
|
+
rendererOptions: {
|
|
16
|
+
collapseErrors: false,
|
|
17
|
+
showSkipMessage: false,
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
await runner.run();
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/ui/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,YAAoB,EACpB,KAAoB;IAEpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,CAAC;IAElF,MAAM,UAAU,GAAgB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9C,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,IAAI,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KACtC,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE;QACnC,UAAU,EAAE,KAAK;QACjB,eAAe,EAAE;YACf,cAAc,EAAE,KAAK;YACrB,eAAe,EAAE,KAAK;SACvB;KACF,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;AACrB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cristiancorreau/forge",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Agentic development framework — multi-runtime support for Claude Code, OpenCode, Codex and Kiro",
|
|
5
5
|
"author": "Cristian Correa <cristian@socialweb.cl>",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"CHANGELOG.md"
|
|
38
38
|
],
|
|
39
39
|
"devDependencies": {
|
|
40
|
+
"@types/boxen": "^2.1.0",
|
|
40
41
|
"@types/js-yaml": "^4.0.9",
|
|
41
42
|
"@types/node": "^20.0.0",
|
|
42
43
|
"typescript": "^5.4.0"
|
|
@@ -46,8 +47,12 @@
|
|
|
46
47
|
},
|
|
47
48
|
"dependencies": {
|
|
48
49
|
"@clack/prompts": "^0.9.1",
|
|
50
|
+
"@opentui/core": "^0.3.1",
|
|
49
51
|
"ajv": "^8.20.0",
|
|
50
52
|
"ajv-formats": "^3.0.1",
|
|
51
|
-
"
|
|
53
|
+
"boxen": "^8.0.1",
|
|
54
|
+
"chalk": "^5.6.2",
|
|
55
|
+
"js-yaml": "^4.2.0",
|
|
56
|
+
"listr2": "^10.2.1"
|
|
52
57
|
}
|
|
53
58
|
}
|