@cristiancorreau/forge 2.16.0 → 2.18.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.
Files changed (52) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/assets/core/schemas/project.schema.json +18 -8
  3. package/assets/manifest.json +1 -1
  4. package/dist/cli.js +6 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/adopt.d.ts +2 -0
  7. package/dist/commands/adopt.d.ts.map +1 -0
  8. package/dist/commands/adopt.js +267 -0
  9. package/dist/commands/adopt.js.map +1 -0
  10. package/dist/commands/init.d.ts +40 -1
  11. package/dist/commands/init.d.ts.map +1 -1
  12. package/dist/commands/init.js +65 -41
  13. package/dist/commands/init.js.map +1 -1
  14. package/dist/lib/detect.d.ts +4 -0
  15. package/dist/lib/detect.d.ts.map +1 -1
  16. package/dist/lib/detect.js +94 -8
  17. package/dist/lib/detect.js.map +1 -1
  18. package/dist/lib/generators/claude-code.d.ts.map +1 -1
  19. package/dist/lib/generators/claude-code.js +6 -1
  20. package/dist/lib/generators/claude-code.js.map +1 -1
  21. package/dist/lib/generators/codex.js +1 -1
  22. package/dist/lib/generators/codex.js.map +1 -1
  23. package/dist/lib/generators/kiro.d.ts.map +1 -1
  24. package/dist/lib/generators/kiro.js +5 -1
  25. package/dist/lib/generators/kiro.js.map +1 -1
  26. package/dist/lib/generators/opencode.js +1 -1
  27. package/dist/lib/generators/opencode.js.map +1 -1
  28. package/dist/lib/project-analysis.d.ts +52 -0
  29. package/dist/lib/project-analysis.d.ts.map +1 -0
  30. package/dist/lib/project-analysis.js +404 -0
  31. package/dist/lib/project-analysis.js.map +1 -0
  32. package/dist/lib/wiki-autogen.d.ts +31 -0
  33. package/dist/lib/wiki-autogen.d.ts.map +1 -0
  34. package/dist/lib/wiki-autogen.js +603 -0
  35. package/dist/lib/wiki-autogen.js.map +1 -0
  36. package/dist/lib/wizard-flow.d.ts +15 -3
  37. package/dist/lib/wizard-flow.d.ts.map +1 -1
  38. package/dist/lib/wizard-flow.js +43 -10
  39. package/dist/lib/wizard-flow.js.map +1 -1
  40. package/dist/lib/wizard.d.ts +6 -2
  41. package/dist/lib/wizard.d.ts.map +1 -1
  42. package/dist/lib/wizard.js +62 -12
  43. package/dist/lib/wizard.js.map +1 -1
  44. package/dist/lib/yaml.d.ts +6 -2
  45. package/dist/lib/yaml.d.ts.map +1 -1
  46. package/dist/lib/yaml.js.map +1 -1
  47. package/dist/tui/wizard.d.ts.map +1 -1
  48. package/dist/tui/wizard.js +58 -18
  49. package/dist/tui/wizard.js.map +1 -1
  50. package/dist/version.d.ts +1 -1
  51. package/dist/version.js +1 -1
  52. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -7,6 +7,20 @@ Versioning: [Semantic Versioning](https://semver.org/lang/es/)
7
7
 
8
8
  ---
9
9
 
10
+ ## [2.18.0] — 2026-06-04
11
+
12
+ ### Agregado
13
+ - **Más tecnologías reconocidas** en detección, wizard y generadores: **FastAPI** y **Flask** (Python), **Spring Boot** (Java/Kotlin), **Rust** web (Axum/Actix/Rocket), **Flutter** (Dart) y **React Native/Expo**. Se suman los lenguajes `java`, `kotlin`, `dart` y `rust`, y un nuevo tipo de proyecto **mobile**. `forge adopt`/`forge init` detectan estas stacks y generan el `project.yaml` + entity pages del wiki correspondientes (p. ej. "Spring Boot (Java)", "Flutter (Dart)", "Axum (Rust)", "React Native (TypeScript)"). Cambios de schema **aditivos** (enums de lenguaje/tipo + `stack.mobile`/`stack.mobile_language`), backward-compatible. (Todavía sin profiles Tier 2 dedicados para estas stacks — es un paso siguiente.)
14
+
15
+ ---
16
+
17
+ ## [2.17.0] — 2026-06-04
18
+
19
+ ### Agregado
20
+ - **`forge adopt [path]` — onboarding de forge en un repo existente (brownfield).** Lee y analiza un codebase ya existente (sin LLM), genera el `project.yaml` desde lo que detecta (stack vía `detect.ts` con lenguaje por lado, `project.type`, ORM, testing, monorepo, docker), instala la config de forge reusando los installers de `forge init` (agentes por modo, hooks, slash commands, CLAUDE.md, settings.json, architecture.rules, manifest `.forge`) sin pisar archivos existentes salvo `--force`, y **auto-genera el wiki del proyecto** con HECHOS determinísticos: `concepts/arquitectura.md` y `concepts/stack.md` (del mapa de directorios + stack), `entities/` (proyecto + cada framework/herramienta detectada), `sources/` (resumen de README + manifest), `synthesis/overview.md` (resumen factual + nota "Pendiente: compilación semántica con /wiki-ingest") y `raw/` con copias inmutables del README + manifest. El wiki generado pasa `forge wiki lint` (sin links rotos ni huérfanos). La capa SEMÁNTICA (lógica de negocio, decisiones) sigue siendo trabajo del skill `/wiki-ingest`, que `adopt` apunta como próximo paso. Flags: `--yes` (no-interactivo por defecto), `--no-wiki`, `--runtime`, `--mode`, `--force`, `--dry-run`. Módulos puros y testeados: `lib/project-analysis.ts` y `lib/wiki-autogen.ts` (SPEC-038).
21
+
22
+ ---
23
+
10
24
  ## [2.16.0] — 2026-06-04
11
25
 
12
26
  ### Agregado
@@ -27,14 +27,14 @@
27
27
  "type": ["string", "null"]
28
28
  },
29
29
  "language": {
30
- "description": "Lenguaje principal del proyecto. Derivado del lenguaje backend (backend/fullstack) o frontend (frontend-only); 'mixed' cuando los lados difieren. Se mantiene por compatibilidad",
30
+ "description": "Lenguaje principal del proyecto. Derivado del lenguaje backend (backend/fullstack), frontend (frontend-only) o mobile (mobile); 'mixed' cuando los lados difieren. Se mantiene por compatibilidad",
31
31
  "type": ["string", "null"],
32
- "enum": ["typescript", "python", "ruby", "go", "php", "mixed", null]
32
+ "enum": ["typescript", "javascript", "python", "java", "kotlin", "rust", "dart", "ruby", "go", "php", "mixed", null]
33
33
  },
34
34
  "type": {
35
- "description": "Tipo de proyecto: solo frontend, solo backend o fullstack (nuevo). Opcional; se infiere para archivos antiguos",
35
+ "description": "Tipo de proyecto: solo frontend, solo backend, fullstack o mobile (SPEC-039). Opcional; se infiere para archivos antiguos",
36
36
  "type": ["string", "null"],
37
- "enum": ["frontend", "backend", "fullstack", null]
37
+ "enum": ["frontend", "backend", "fullstack", "mobile", null]
38
38
  },
39
39
  "mode": {
40
40
  "description": "Modo operativo del proyecto: startup (velocidad), standard (balance), enterprise (compliance)",
@@ -83,12 +83,12 @@
83
83
  "backend": {
84
84
  "description": "Framework o runtime del backend",
85
85
  "type": ["string", "null"],
86
- "enum": ["hono", "fastapi", "rails", "express", "laravel", "nestjs", "django", "go-gin", null]
86
+ "enum": ["hono", "fastapi", "flask", "rails", "express", "laravel", "nestjs", "fastify", "django", "springboot", "axum", "actix", "rocket", "go-gin", null]
87
87
  },
88
88
  "backend_language": {
89
89
  "description": "Lenguaje del backend (nuevo). Permite que backend y frontend usen lenguajes distintos",
90
90
  "type": ["string", "null"],
91
- "enum": ["typescript", "python", "ruby", "go", "php", null]
91
+ "enum": ["typescript", "javascript", "python", "java", "kotlin", "rust", "ruby", "go", "php", null]
92
92
  },
93
93
  "frontend": {
94
94
  "description": "Framework del frontend",
@@ -98,7 +98,17 @@
98
98
  "frontend_language": {
99
99
  "description": "Lenguaje del frontend (nuevo). Permite que backend y frontend usen lenguajes distintos",
100
100
  "type": ["string", "null"],
101
- "enum": ["typescript", "python", "ruby", "go", "php", null]
101
+ "enum": ["typescript", "javascript", "python", "ruby", "go", "php", null]
102
+ },
103
+ "mobile": {
104
+ "description": "Framework de mobile (SPEC-039): flutter (Dart), react-native o expo (TypeScript/JS)",
105
+ "type": ["string", "null"],
106
+ "enum": ["flutter", "react-native", "expo", null]
107
+ },
108
+ "mobile_language": {
109
+ "description": "Lenguaje del mobile (SPEC-039): dart (Flutter) o typescript (React Native/Expo)",
110
+ "type": ["string", "null"],
111
+ "enum": ["dart", "typescript", "javascript", null]
102
112
  },
103
113
  "database": {
104
114
  "description": "Motor de base de datos principal",
@@ -118,7 +128,7 @@
118
128
  "package_manager": {
119
129
  "description": "Gestor de paquetes del proyecto (nuevo en v2)",
120
130
  "type": ["string", "null"],
121
- "enum": ["npm", "pnpm", "yarn", "bun", "pip", "poetry", "bundler", null]
131
+ "enum": ["npm", "pnpm", "yarn", "bun", "pip", "poetry", "cargo", "maven", "gradle", "pub", "bundler", null]
122
132
  },
123
133
  "monorepo": {
124
134
  "description": "Herramienta de monorepo si aplica (nuevo en v2)",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forge",
3
- "version": "2.16.0",
3
+ "version": "2.18.0",
4
4
  "description": "Agentic development framework for Claude Code, OpenCode, Codex and Kiro",
5
5
  "license": "Apache-2.0",
6
6
  "repository": "https://github.com/cristiancorreau/forge",
package/dist/cli.js CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { init } from './commands/init.js';
3
+ import { adopt } from './commands/adopt.js';
3
4
  import { audit } from './commands/audit.js';
4
5
  import { generate } from './commands/generate.js';
5
6
  import { validate } from './commands/validate.js';
@@ -21,6 +22,7 @@ Usage: forge <command> [options]
21
22
  Setup
22
23
  panel Open the interactive panel (config, monitor, skills, hooks, templates)
23
24
  init Initialize forge in a project (wizard + post-install dashboard)
25
+ adopt Onboard forge into an EXISTING codebase (analyze + auto-wiki)
24
26
  generate Generate runtime config files from project.yaml
25
27
  migrate Migrate project.yaml from the v1 schema to v2 (--dry-run, --backup)
26
28
  scaffold Scaffold a new agent: Tier 2 profile, or Tier 3 domain agent (--tier 3)
@@ -48,6 +50,7 @@ Run forge <command> --help for command-specific options.
48
50
 
49
51
  Examples:
50
52
  npx @cristiancorreau/forge init
53
+ npx @cristiancorreau/forge adopt ./my-existing-repo --yes
51
54
  npx @cristiancorreau/forge panel
52
55
  npx @cristiancorreau/forge skills
53
56
  npx @cristiancorreau/forge migrate --dry-run
@@ -60,6 +63,9 @@ switch (cmd) {
60
63
  case 'init':
61
64
  exitCode = await init(rest);
62
65
  break;
66
+ case 'adopt':
67
+ exitCode = await adopt(rest);
68
+ break;
63
69
  case 'audit':
64
70
  exitCode = await audit(rest);
65
71
  break;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function adopt(args: string[]): Promise<number>;
2
+ //# sourceMappingURL=adopt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt.d.ts","sourceRoot":"","sources":["../../src/commands/adopt.ts"],"names":[],"mappings":"AA+LA,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+G3D"}
@@ -0,0 +1,267 @@
1
+ /**
2
+ * `forge adopt [path]` — onboard forge into an EXISTING codebase (brownfield).
3
+ *
4
+ * Unlike `forge init` (greenfield wizard), adopt READS the target project, infers
5
+ * its configuration by static analysis, and materializes everything non-
6
+ * interactively: project.yaml + the forge config (.claude/, CLAUDE.md, settings,
7
+ * architecture.rules, manifest) + an auto-generated FACTUAL wiki.
8
+ *
9
+ * The wiki it seeds is deterministic facts only (stack, structure, dependencies,
10
+ * scripts, README summary). The deep SEMANTIC compilation stays the job of the
11
+ * /wiki-ingest skill, which adopt points to as the explicit next step.
12
+ *
13
+ * It reuses init's exported installers so the installed config is identical to
14
+ * `forge init`, and never clobbers existing files unless --force.
15
+ */
16
+ import { existsSync, mkdirSync, writeFileSync, statSync } from 'fs';
17
+ import { join, resolve } from 'path';
18
+ import { resolveForgeRoot } from '../lib/paths.js';
19
+ import { generateClaudeMd } from '../lib/generators/claude-code.js';
20
+ import { generateAgentsMd } from '../lib/generators/opencode.js';
21
+ import { generateCodexAgentsMd } from '../lib/generators/codex.js';
22
+ import { scaffoldWikiStructure } from './wiki.js';
23
+ import { analyzeProject, slugify } from '../lib/project-analysis.js';
24
+ import { generateWiki } from '../lib/wiki-autogen.js';
25
+ import { languageLabel, deriveProjectLanguage, hasBackend, hasFrontend, hasMobile } from '../lib/wizard-flow.js';
26
+ import { VERSION } from '../version.js';
27
+ import { defaultAgentsForMode, installCoreAgents, installHooks, installCommands, writeSettingsJson, installSpecScaffold, saveInstallManifest, write, buildProjectYaml, } from './init.js';
28
+ import { bold, dim, green, cyan, gray, yellow, icons } from '../ui/colors.js';
29
+ import { box } from '../ui/box.js';
30
+ const HELP = `Usage: forge adopt [path] [options]
31
+
32
+ Onboard forge into an EXISTING codebase. Analyzes the project, generates
33
+ project.yaml from what it detects, installs the forge config, and seeds the
34
+ project wiki with FACTUAL knowledge (stack, structure, dependencies, scripts,
35
+ README). Non-interactive by default.
36
+
37
+ Arguments:
38
+ path Target project directory (default: current directory)
39
+
40
+ Options:
41
+ --yes Non-interactive (default — no prompts)
42
+ --no-wiki Skip the auto-generated wiki
43
+ --runtime <name> Runtime: claude-code (default), opencode, codex
44
+ --mode <mode> Mode: startup, standard (default), enterprise
45
+ --force Overwrite existing files instead of preserving them
46
+ --dry-run Analyze + print the plan; write nothing
47
+ -h, --help Show this help
48
+
49
+ The wiki adopt seeds is deterministic FACTS. The deep semantic compilation
50
+ (business logic, decisions) is the job of /wiki-ingest — adopt prints it as the
51
+ next step.
52
+ `;
53
+ function flagValue(args, flag) {
54
+ const i = args.indexOf(flag);
55
+ return i !== -1 ? (args[i + 1] ?? null) : null;
56
+ }
57
+ function parseOptions(args) {
58
+ // First non-flag arg (not a flag value) is the target path.
59
+ const flagsWithValue = new Set(['--runtime', '--mode']);
60
+ let target = process.cwd();
61
+ for (let i = 0; i < args.length; i++) {
62
+ const arg = args[i];
63
+ if (arg.startsWith('-')) {
64
+ if (flagsWithValue.has(arg))
65
+ i++; // skip its value
66
+ continue;
67
+ }
68
+ target = resolve(arg);
69
+ break;
70
+ }
71
+ const modeRaw = flagValue(args, '--mode');
72
+ const mode = modeRaw === 'startup' || modeRaw === 'enterprise' ? modeRaw : 'standard';
73
+ return {
74
+ target,
75
+ runtime: flagValue(args, '--runtime') ?? 'claude-code',
76
+ mode,
77
+ wiki: !args.includes('--no-wiki'),
78
+ force: args.includes('--force'),
79
+ dryRun: args.includes('--dry-run'),
80
+ };
81
+ }
82
+ /** Map a ProjectAnalysis to a WizardResult so buildProjectYaml can render YAML. */
83
+ function analysisToWizardResult(a, opts) {
84
+ const s = a.stack;
85
+ // Per-side language falls back to the base detected language when no framework
86
+ // was matched on that side (e.g. a Python backend whose framework isn't in
87
+ // detect.ts still has a Python backend language, not the TS default).
88
+ const backendLanguage = s.backendLanguage
89
+ ?? (hasBackend(a.type) ? (s.language ?? undefined) : undefined)
90
+ ?? undefined;
91
+ const frontendLanguage = s.frontendLanguage
92
+ ?? (hasFrontend(a.type) ? 'typescript' : undefined)
93
+ ?? undefined;
94
+ const mobileLanguage = s.mobileLanguage
95
+ ?? (hasMobile(a.type) ? (s.language ?? undefined) : undefined)
96
+ ?? undefined;
97
+ const language = deriveProjectLanguage({ type: a.type, backendLanguage, frontendLanguage, mobileLanguage });
98
+ // Auto-detect profiles from the detected frameworks (mirrors the wizard).
99
+ const PROFILE_MAP = {
100
+ hono: 'hono-drizzle', nextjs: 'nextjs-admin', astro: 'astro',
101
+ fastapi: 'fastapi', rails: 'rails', laravel: 'laravel', expo: 'expo',
102
+ };
103
+ const profiles = [];
104
+ for (const key of [s.backend, s.frontend, s.mobile]) {
105
+ if (key && PROFILE_MAP[key])
106
+ profiles.push(PROFILE_MAP[key]);
107
+ }
108
+ return {
109
+ name: a.name,
110
+ slug: slugify(a.name),
111
+ description: a.description || '',
112
+ language,
113
+ type: a.type,
114
+ backendLanguage,
115
+ frontendLanguage,
116
+ mobileLanguage,
117
+ mode: opts.mode,
118
+ backend: s.backend ?? undefined,
119
+ frontend: s.frontend ?? undefined,
120
+ mobile: s.mobile ?? undefined,
121
+ database: s.database ?? undefined,
122
+ orm: s.orm ?? undefined,
123
+ packageManager: s.packageManager ?? undefined,
124
+ testing: s.testing,
125
+ profiles: [...new Set(profiles)],
126
+ skills: ['wiki-ingest', 'wiki-query', 'wiki-lint'],
127
+ runtime: opts.runtime,
128
+ detected: true,
129
+ };
130
+ }
131
+ /** Build the in-memory ProjectYaml config (matches init's config shape). */
132
+ function buildConfig(result) {
133
+ return {
134
+ project: {
135
+ name: result.name, slug: result.slug, description: result.description,
136
+ language: result.language, type: result.type, mode: result.mode, status: 'active',
137
+ },
138
+ stack: {
139
+ backend: result.backend, backend_language: result.backendLanguage,
140
+ frontend: result.frontend, frontend_language: result.frontendLanguage,
141
+ mobile: result.mobile, mobile_language: result.mobileLanguage,
142
+ database: result.database, orm: result.orm,
143
+ package_manager: result.packageManager, testing: result.testing,
144
+ },
145
+ agents: { active: defaultAgentsForMode(result.mode), compliance: [], specialized: [], profiles: result.profiles },
146
+ runtimes: { active: [result.runtime] },
147
+ skills: result.skills,
148
+ };
149
+ }
150
+ function printDetectedSummary(a) {
151
+ const s = a.stack;
152
+ const lines = [];
153
+ lines.push(`${bold('Proyecto')}: ${a.name}${a.description ? gray(` — ${a.description}`) : ''}`);
154
+ lines.push(`${bold('Tipo')}: ${a.type} ${bold('Lenguaje')}: ${a.stack.language ? languageLabel(a.stack.language) : '—'} ${bold('Ecosistema')}: ${a.ecosystem}`);
155
+ if (s.backend)
156
+ lines.push(`${bold('Backend')}: ${s.backend}${s.backendLanguage ? ` (${s.backendLanguage})` : ''}`);
157
+ if (s.frontend)
158
+ lines.push(`${bold('Frontend')}: ${s.frontend}${s.frontendLanguage ? ` (${s.frontendLanguage})` : ''}`);
159
+ if (s.mobile)
160
+ lines.push(`${bold('Mobile')}: ${s.mobile}${s.mobileLanguage ? ` (${s.mobileLanguage})` : ''}`);
161
+ if (s.database || s.orm)
162
+ lines.push(`${bold('Datos')}: ${[s.database, s.orm].filter(Boolean).join(' + ') || '—'}`);
163
+ if (s.testing.length)
164
+ lines.push(`${bold('Testing')}: ${s.testing.join(', ')}`);
165
+ if (s.packageManager)
166
+ lines.push(`${bold('Package manager')}: ${s.packageManager}`);
167
+ lines.push(`${bold('Directorios')}: ${a.directories.slice(0, 6).map(d => `${d.name}/ (${d.fileCount})`).join(' ') || '—'}`);
168
+ if (a.entrypoints.length)
169
+ lines.push(`${bold('Entrypoints')}: ${a.entrypoints.slice(0, 4).join(', ')}`);
170
+ if (a.git.remote)
171
+ lines.push(`${bold('Git')}: ${a.git.remote}${a.git.branch ? ` @ ${a.git.branch}` : ''}`);
172
+ console.log('\n' + box(cyan('Proyecto detectado'), lines));
173
+ }
174
+ export async function adopt(args) {
175
+ if (args.includes('-h') || args.includes('--help')) {
176
+ process.stdout.write(HELP);
177
+ return 0;
178
+ }
179
+ const opts = parseOptions(args);
180
+ console.log(cyan(bold('forge adopt')) + dim(` ${opts.target}`) + '\n');
181
+ if (!existsSync(opts.target) || !statSync(opts.target).isDirectory()) {
182
+ console.error(` ${icons.error} El target no existe o no es un directorio: ${opts.target}\n`);
183
+ return 1;
184
+ }
185
+ // 1. Analyze the existing project (never throws).
186
+ const analysis = analyzeProject(opts.target);
187
+ printDetectedSummary(analysis);
188
+ const result = analysisToWizardResult(analysis, opts);
189
+ const config = buildConfig(result);
190
+ // --- dry-run: print the plan, write nothing ---
191
+ if (opts.dryRun) {
192
+ const plan = [
193
+ `project.yaml ${gray('(generado del análisis)')}`,
194
+ ...(opts.runtime === 'claude-code' ? [
195
+ `.claude/agents/ ${gray(`${config.agents?.active?.length ?? 0} agents (${opts.mode})`)}`,
196
+ '.claude/hooks/ ' + gray('guardrails'),
197
+ '.claude/commands/ ' + gray('slash commands'),
198
+ 'CLAUDE.md ' + gray('generado'),
199
+ '.claude/settings.json ' + gray('permisos + hooks'),
200
+ '.claude/architecture.rules + docs/specs/',
201
+ '.forge/manifest.json',
202
+ ] : [`${opts.runtime}: AGENTS.md ${gray('generado')}`]),
203
+ ...(opts.wiki ? [`wiki/ ${gray('poblado (hechos) — semántica vía /wiki-ingest')}`] : []),
204
+ ];
205
+ console.log('\n' + box(yellow('Plan (--dry-run, no escribe nada)'), plan));
206
+ console.log(dim('\n Ejecutá sin --dry-run para aplicar.\n'));
207
+ return 0;
208
+ }
209
+ // 2. Write project.yaml (preserve existing unless --force).
210
+ const projectYamlPath = join(opts.target, 'project.yaml');
211
+ const created = [];
212
+ if (!existsSync(projectYamlPath) || opts.force) {
213
+ writeFileSync(projectYamlPath, buildProjectYaml(result, []), 'utf-8');
214
+ created.push('project.yaml');
215
+ }
216
+ else {
217
+ console.log(dim(' project.yaml ya existe — se conserva (usá --force para sobrescribir).'));
218
+ }
219
+ // 3. Install the forge config, reusing init's exported installers.
220
+ const forgeRoot = resolveForgeRoot();
221
+ if (opts.runtime === 'claude-code') {
222
+ const claudeDir = join(opts.target, '.claude');
223
+ mkdirSync(claudeDir, { recursive: true });
224
+ const activeAgents = config.agents?.active ?? [];
225
+ const profiles = config.agents?.profiles ?? [];
226
+ installCoreAgents(forgeRoot, join(claudeDir, 'agents'), activeAgents, profiles, opts.force);
227
+ installHooks(forgeRoot, join(claudeDir, 'hooks'), opts.mode, opts.force);
228
+ installCommands(forgeRoot, join(claudeDir, 'commands'), opts.force);
229
+ write(join(opts.target, 'CLAUDE.md'), generateClaudeMd(config), opts.force);
230
+ writeSettingsJson(join(claudeDir, 'settings.json'), config.project.language ?? 'typescript', opts.mode, opts.force);
231
+ installSpecScaffold(forgeRoot, opts.target, claudeDir, config);
232
+ saveInstallManifest(opts.target, claudeDir, opts.runtime, activeAgents, [], VERSION);
233
+ created.push('.claude/ (agents, hooks, commands, settings.json, architecture.rules)', 'CLAUDE.md', 'docs/specs/', '.forge/manifest.json');
234
+ }
235
+ else if (opts.runtime === 'opencode') {
236
+ mkdirSync(join(opts.target, '.opencode'), { recursive: true });
237
+ write(join(opts.target, 'AGENTS.md'), generateAgentsMd(config), opts.force);
238
+ created.push('AGENTS.md');
239
+ }
240
+ else if (opts.runtime === 'codex') {
241
+ write(join(opts.target, 'AGENTS.md'), generateCodexAgentsMd(config), opts.force);
242
+ created.push('AGENTS.md');
243
+ }
244
+ // 4. Auto-generate the wiki (factual) unless --no-wiki.
245
+ let wikiResult = null;
246
+ if (opts.wiki) {
247
+ scaffoldWikiStructure(opts.target, false);
248
+ wikiResult = generateWiki(analysis);
249
+ created.push(`wiki/ (${wikiResult.pages.length} páginas, ${wikiResult.rawSources.length} fuentes en raw/)`);
250
+ }
251
+ // 5. Summary + next steps.
252
+ console.log('\n' + box(green(`forge adoptado — ${opts.runtime}`), created.map(c => `${icons.ok} ${c}`)));
253
+ const rawList = wikiResult?.rawSources.length
254
+ ? wikiResult.rawSources.map(r => `wiki/raw/${r}`)
255
+ : [];
256
+ const nextSteps = [];
257
+ if (opts.wiki) {
258
+ nextSteps.push(`${cyan('/wiki-ingest')} ${dim('— compilá la capa semántica desde las fuentes:')}`, ...rawList.map(r => ` ${dim(r)}`));
259
+ }
260
+ nextSteps.push(`${cyan('forge audit')} ${dim('— verificá el proyecto contra el estándar forge')}`, `${cyan('forge panel')} ${dim('— panel interactivo (config, monitor, skills)')}`);
261
+ console.log('\n' + bold(' Próximos pasos:'));
262
+ for (const step of nextSteps)
263
+ console.log(` ${step}`);
264
+ console.log('');
265
+ return 0;
266
+ }
267
+ //# sourceMappingURL=adopt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt.js","sourceRoot":"","sources":["../../src/commands/adopt.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,43 @@
1
1
  import { runWizard } from '../lib/wizard.js';
2
- export declare function buildProjectYaml(result: Awaited<ReturnType<typeof runWizard>>, specialized?: string[]): string;
2
+ import type { ProjectYaml } from '../lib/yaml.js';
3
+ export declare function write(path: string, content: string, force: boolean): void;
4
+ /**
5
+ * Auto-detecta agentes Tier 3 existentes: escanea .claude/agents/*.md en `root`
6
+ * y devuelve los nombres cuyo frontmatter declara `tier: 3`. Sirve para poblar
7
+ * agents.specialized en project.yaml durante `forge init`.
8
+ */
9
+ export declare function detectTier3Agents(root: string): string[];
10
+ /**
11
+ * Lista los archivos instalados en `<claudeDir>/<subdir>` (p. ej. hooks/ o
12
+ * commands/) como rutas RELATIVAS a `projectRoot`, usando separadores `/` para
13
+ * que el manifest sea estable entre plataformas. Devuelve [] si el dir no existe.
14
+ * Recorre subdirectorios (los slash commands pueden estar anidados).
15
+ */
16
+ export declare function listInstalledRelativeFiles(claudeDir: string, subdir: string, projectRoot: string): string[];
17
+ export declare function buildProjectYaml(result: Awaited<ReturnType<typeof runWizard>> | null, specialized?: string[]): string;
18
+ export declare function defaultAgentsForMode(mode: string): string[];
19
+ export declare function installCoreAgents(forgeRoot: string, destDir: string, activeAgents: string[], profiles: string[], force: boolean): void;
20
+ export declare function installHooks(forgeRoot: string, destDir: string, mode: string, force: boolean): void;
21
+ /**
22
+ * Escribe `.claude/settings.json`. Si el archivo ya existe (y es JSON válido),
23
+ * mezcla preservando keys externas (`env`, etc.) y permisos previos. Si no
24
+ * existe o no se puede parsear, escribe los settings generados tal cual.
25
+ * Respeta `force`: con `force=false` no toca un archivo existente.
26
+ */
27
+ export declare function writeSettingsJson(path: string, language: string, mode: string, force: boolean): void;
28
+ export declare function installCommands(forgeRoot: string, destDir: string, force: boolean): void;
29
+ /**
30
+ * Scaffolds docs/specs/ (+ _template.md), docs/daily-notes/ and the
31
+ * .claude/architecture.rules file. Idempotent: never overwrites the spec
32
+ * template or architecture.rules once they exist. Shared by `forge init` and
33
+ * `forge adopt` so both lay down the same SDD scaffold.
34
+ */
35
+ export declare function installSpecScaffold(forgeRoot: string, projectRoot: string, claudeDir: string, config: ProjectYaml): void;
36
+ /**
37
+ * Builds and saves the .forge/manifest.json for a claude-code install: tracks
38
+ * CLAUDE.md, settings.json, architecture.rules, all agents (active + compliance
39
+ * + specialized) and the installed hooks/commands. Shared by init and adopt.
40
+ */
41
+ export declare function saveInstallManifest(projectRoot: string, claudeDir: string, runtime: string, allAgents: string[], specializedAgents: string[], forgeVersion: string): void;
3
42
  export declare function init(args: string[]): Promise<number>;
4
43
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA0I7C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,EAAE,WAAW,GAAE,MAAM,EAAO,GAAG,MAAM,CAwDlH;AAiLD,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAmP1D"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA2C7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA4BlD,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAGzE;AAiBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBxD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAa3G;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,GAAG,IAAI,EAAE,WAAW,GAAE,MAAM,EAAO,GAAG,MAAM,CA0DzH;AAYD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI3D;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAsBtI;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAqBnG;AAyED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAiBpG;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAKxF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAaxH;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EACvD,SAAS,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GACrE,IAAI,CAYN;AAmBD,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwN1D"}