@cristiancorreau/forge 2.1.0 → 2.3.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 (43) hide show
  1. package/assets/core/hooks/pre-bash-check.js +144 -0
  2. package/assets/core/hooks/pre-edit-check.js +166 -0
  3. package/dist/cli.js +1 -1
  4. package/dist/commands/audit.d.ts.map +1 -1
  5. package/dist/commands/audit.js +154 -9
  6. package/dist/commands/audit.js.map +1 -1
  7. package/dist/commands/doctor.d.ts.map +1 -1
  8. package/dist/commands/doctor.js +39 -28
  9. package/dist/commands/doctor.js.map +1 -1
  10. package/dist/commands/generate.d.ts.map +1 -1
  11. package/dist/commands/generate.js +114 -5
  12. package/dist/commands/generate.js.map +1 -1
  13. package/dist/commands/init.d.ts.map +1 -1
  14. package/dist/commands/init.js +283 -9
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/validate.d.ts.map +1 -1
  17. package/dist/commands/validate.js +92 -6
  18. package/dist/commands/validate.js.map +1 -1
  19. package/dist/lib/generators/claude-code.d.ts +3 -0
  20. package/dist/lib/generators/claude-code.d.ts.map +1 -0
  21. package/dist/lib/generators/claude-code.js +140 -0
  22. package/dist/lib/generators/claude-code.js.map +1 -0
  23. package/dist/lib/generators/codex.d.ts +3 -0
  24. package/dist/lib/generators/codex.d.ts.map +1 -0
  25. package/dist/lib/generators/codex.js +69 -0
  26. package/dist/lib/generators/codex.js.map +1 -0
  27. package/dist/lib/generators/kiro.d.ts +7 -0
  28. package/dist/lib/generators/kiro.d.ts.map +1 -0
  29. package/dist/lib/generators/kiro.js +134 -0
  30. package/dist/lib/generators/kiro.js.map +1 -0
  31. package/dist/lib/generators/opencode.d.ts +3 -0
  32. package/dist/lib/generators/opencode.d.ts.map +1 -0
  33. package/dist/lib/generators/opencode.js +96 -0
  34. package/dist/lib/generators/opencode.js.map +1 -0
  35. package/dist/lib/wizard.d.ts +17 -0
  36. package/dist/lib/wizard.d.ts.map +1 -0
  37. package/dist/lib/wizard.js +162 -0
  38. package/dist/lib/wizard.js.map +1 -0
  39. package/dist/lib/yaml.d.ts +96 -0
  40. package/dist/lib/yaml.d.ts.map +1 -0
  41. package/dist/lib/yaml.js +26 -0
  42. package/dist/lib/yaml.js.map +1 -0
  43. package/package.json +7 -1
@@ -0,0 +1,140 @@
1
+ const AGENT_TRIGGER = {
2
+ 'orchestrator': ['tareas multi-agente, análisis de >3 archivos, descomposición de features completas', null],
3
+ 'backend-engineer': ['endpoints, middleware, validaciones, lógica de negocio', 'api'],
4
+ 'api-engineer': ['endpoints REST, middleware, validaciones, migraciones de BD', 'api'],
5
+ 'frontend-engineer': ['componentes UI, páginas, estilos, integración con API', 'frontend'],
6
+ 'admin-engineer': ['UI de gestión interna, dashboards de admin', 'admin'],
7
+ 'mobile-engineer': ['pantallas móviles, navegación, stores de estado', 'mobile'],
8
+ 'fullstack-engineer': ['features full-stack end-to-end que abarcan backend y frontend', null],
9
+ 'test-engineer': ['tests unitarios, integración, E2E — nunca código de producción', 'tests'],
10
+ 'docs-writer': ['specs, ADRs, READMEs, documentación — nunca código de producción', 'specs'],
11
+ 'compliance-reviewer': ['revisión de PRs con PII, consentimientos, logs de auditoría', null],
12
+ 'security-auditor': ['auditoría de vulnerabilidades, revisión de dependencias, pentest', null],
13
+ 'migration-specialist': ['migraciones de versión de framework (ej: L6→L13)', 'migrations'],
14
+ 'wp-engineer': ['temas WordPress, FSE, Gutenberg, child themes', 'frontend'],
15
+ 'divi-engineer': ['layouts Divi 5, módulos custom, Divi Builder', 'frontend'],
16
+ 'elementor-engineer': ['templates Elementor Pro, widgets custom', 'frontend'],
17
+ 'scanner-engineer': ['scraping, crawling, extracción estructurada de datos', 'scanner'],
18
+ };
19
+ function buildAgentScopeTable(agents, paths) {
20
+ const active = agents?.active ?? [];
21
+ const compliance = agents?.compliance ?? [];
22
+ const all = [...active, ...compliance];
23
+ if (all.length === 0)
24
+ return '';
25
+ const rows = all.map(agent => {
26
+ const [trigger, pathKey] = AGENT_TRIGGER[agent] ?? ['implementación', null];
27
+ const scope = pathKey && paths ? paths[pathKey] : undefined;
28
+ const scopeStr = scope ? `\`${scope}\`` : '`/`';
29
+ return `| \`${agent}\` | ${scopeStr} | ${trigger} |`;
30
+ });
31
+ return ('## Agentes y su scope\n\n' +
32
+ '| Agente | Scope | Cuándo usarlo |\n' +
33
+ '|--------|-------|---------------|\n' +
34
+ rows.join('\n') + '\n\n' +
35
+ '> Invocar el agente del scope correcto, no el orchestrator, para tareas acotadas.\n\n');
36
+ }
37
+ function renderPhases(config) {
38
+ const sprint = config.sprint ?? {};
39
+ const current = sprint.current ?? 1;
40
+ const phases = sprint.phases ?? [];
41
+ if (phases.length === 0) {
42
+ return `- **Sprint actual:** Sprint ${current}\n- **Completadas:** —\n- **En curso:** —\n- **Pendientes:** —`;
43
+ }
44
+ const lines = [`- **Sprint actual:** Sprint ${current}`];
45
+ for (const phase of phases) {
46
+ const specs = phase.specs ?? [];
47
+ const specList = specs.length > 0 ? specs.join(', ') : '—';
48
+ lines.push(`- **Fase ${phase.id} — ${phase.name}** (${phase.status ?? 'pendiente'}): ${specList}`);
49
+ }
50
+ return lines.join('\n');
51
+ }
52
+ function devCommands(language) {
53
+ switch (language) {
54
+ case 'typescript': return { dev: 'pnpm dev', test: 'pnpm test', lint: 'pnpm lint', build: 'pnpm build' };
55
+ case 'python': return { dev: 'uvicorn main:app --reload', test: 'pytest', lint: 'ruff check .', build: '# no aplica' };
56
+ case 'ruby': return { dev: 'rails server', test: 'bundle exec rspec', lint: 'rubocop', build: '# no aplica' };
57
+ case 'go': return { dev: 'go run ./cmd/...', test: 'go test ./...', lint: 'golangci-lint run', build: 'go build ./...' };
58
+ case 'php': return { dev: 'php artisan serve', test: './vendor/bin/pest', lint: 'vendor/bin/phpstan analyse', build: 'composer install --no-dev' };
59
+ default: return { dev: '# ver documentación', test: '# ver documentación', lint: '# ver documentación', build: '# ver documentación' };
60
+ }
61
+ }
62
+ export function generateClaudeMd(config) {
63
+ const proj = config.project;
64
+ const stack = config.stack ?? {};
65
+ const agents = config.agents ?? {};
66
+ const compliance = config.compliance ?? {};
67
+ const paths = config.paths;
68
+ const name = proj.name ?? 'Mi Proyecto';
69
+ const description = proj.description ?? '';
70
+ const language = proj.language ?? 'typescript';
71
+ const { dev, test, lint, build } = devCommands(language);
72
+ const specsPath = paths?.specs ?? 'docs/specs';
73
+ const progressPath = paths?.progress ?? 'docs/progress.html';
74
+ const agentScopeSection = buildAgentScopeTable(agents, paths);
75
+ const complianceSection = compliance.frameworks && compliance.frameworks.length > 0
76
+ ? `\n## Compliance activo\n\nEste proyecto opera bajo: ${compliance.frameworks.map(f => `**${f.toUpperCase()}**`).join(', ')}\n\nReglas no-negociables:\n- Sin datos personales en logs de stdout\n- Consentimiento explícito antes de cualquier tracker no esencial\n- Logs de auditoría append-only (sin UPDATE/DELETE)\n- Derechos del titular implementados (acceso, rectificación, supresión, portabilidad)\n`
77
+ : '';
78
+ return `# CLAUDE.md — ${name}
79
+
80
+ > Generado por forge. Actualizar project.yaml para cambiar la configuración.
81
+
82
+ ## Misión del proyecto
83
+
84
+ ${description}
85
+
86
+ ## Stack
87
+
88
+ - **Lenguaje**: ${language}
89
+ - **Backend**: ${stack.backend ?? 'N/A'}
90
+ - **Frontend**: ${stack.frontend ?? 'N/A'}
91
+ - **Base de datos**: ${stack.database ?? 'N/A'}
92
+ - **Testing**: ${(stack.testing ?? []).join(', ')}
93
+
94
+ ${agentScopeSection}## Estructura
95
+
96
+ \`\`\`
97
+ ${proj.slug ?? 'proyecto'}/
98
+ ├── CLAUDE.md ← Estás acá
99
+ ├── AGENTS.md ← Convenciones del agent team
100
+ ├── project.yaml ← Config de forge (fuente de verdad)
101
+ ├── .claude/
102
+ │ ├── agents/ ← Agentes instalados
103
+ │ ├── hooks/ ← Hooks de guardrail (JS, sin Python)
104
+ │ ├── commands/ ← Slash commands del flujo SDD
105
+ │ └── architecture.rules ← Convenciones de arquitectura del proyecto
106
+ ├── ${specsPath}/ ← Specs de features (requeridas antes de implementar)
107
+ └── ${progressPath} ← Dashboard de progreso
108
+ \`\`\`
109
+
110
+ ## Cómo trabajar (SDD)
111
+
112
+ 1. **Identificá la spec.** Si no está en \`${specsPath}/\`, pará y pedí que se cree.
113
+ 2. **Leé la spec correspondiente.**
114
+ 3. **Proponé opciones** para decisiones no cubiertas por la spec.
115
+ 4. **Esperá aprobación** antes de generar código.
116
+ 5. **Tests** junto con la implementación, no al final.
117
+ 6. **Antes de cerrar**: \`${test}\`, \`${lint}\`.
118
+ ${complianceSection}
119
+ ## Phases activas y estado
120
+
121
+ ${renderPhases(config)}
122
+
123
+ ## Comandos frecuentes
124
+
125
+ \`\`\`bash
126
+ ${dev} # Desarrollo
127
+ ${test} # Tests
128
+ ${lint} # Lint
129
+ ${build} # Build
130
+ \`\`\`
131
+
132
+ ## Qué NO hacer
133
+
134
+ - No implementar sin spec en \`${specsPath}/\`
135
+ - No hardcodear tokens, passwords o secrets
136
+ - No commits con \`console.log\` o \`print\` de depuración
137
+ - No hacer force push a main/master
138
+ `;
139
+ }
140
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/lib/generators/claude-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectYaml } from '../yaml.js';
2
+ export declare function generateCodexAgentsMd(config: ProjectYaml): string;
3
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +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;AAE9C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAsEjE"}
@@ -0,0 +1,69 @@
1
+ export function generateCodexAgentsMd(config) {
2
+ const proj = config.project;
3
+ const stack = config.stack ?? {};
4
+ const agents = config.agents ?? {};
5
+ const name = proj.name ?? 'Mi Proyecto';
6
+ const language = proj.language ?? 'typescript';
7
+ const active = agents.active ?? [];
8
+ const compliance = agents.compliance ?? [];
9
+ const allAgents = [...active, ...compliance];
10
+ const agentList = allAgents.map(a => `- \`${a}\``).join('\n') || '- (ninguno declarado)';
11
+ return `# AGENTS.md — ${name}
12
+ # Generado por forge v2 para Codex CLI
13
+
14
+ ## Proyecto
15
+
16
+ - **Nombre**: ${name}
17
+ - **Lenguaje**: ${language}
18
+ - **Backend**: ${stack.backend ?? 'N/A'}
19
+ - **Frontend**: ${stack.frontend ?? 'N/A'}
20
+
21
+ ## Agentes disponibles
22
+
23
+ ${agentList}
24
+
25
+ ## Workflow SDD (obligatorio)
26
+
27
+ 1. **SIEMPRE** leer la spec antes de escribir código
28
+ 2. Si no hay spec para la tarea: DETENER y pedir que se cree en docs/specs/
29
+ 3. Implementar SOLO lo que la spec aprueba
30
+ 4. Tests junto con la implementación, nunca al final
31
+ 5. Antes de terminar: correr typecheck + lint
32
+
33
+ ## Reglas de producción (BLOQUEADAS)
34
+
35
+ Los siguientes comandos están PROHIBIDOS sin confirmación explícita del humano:
36
+
37
+ \`\`\`
38
+ --force-reset # Borra datos irreversiblemente
39
+ DROP TABLE # Borra tabla completa
40
+ TRUNCATE # Vacía tabla
41
+ rm -rf / # Borra sistema
42
+ git push --force # Sobreescribe historial remoto
43
+ \`\`\`
44
+
45
+ > Incidente 2026-04-28: --force-reset borró 225 usuarios en producción.
46
+ > Estos comandos están bloqueados por el hook pre-bash-check.
47
+
48
+ ## Branch guard
49
+
50
+ - Verificar rama: \`git branch --show-current\`
51
+ - NUNCA editar directamente en main/master
52
+ - Excepciones: CLAUDE.md, AGENTS.md, project.yaml, archivos .yaml/.json de configuración
53
+
54
+ ## Autonomy limits
55
+
56
+ - No hacer deploy a producción sin smoke tests
57
+ - No modificar migraciones de BD existentes
58
+ - No borrar archivos sin verificar que no hay referencias
59
+
60
+ ## Comandos por tipo de tarea
61
+
62
+ Ver plantillas en \`adapters/codex/commands/\`:
63
+ - \`plan.md\` — crear/revisar spec
64
+ - \`work.md\` — implementar feature
65
+ - \`review.md\` — revisar diff
66
+ - \`ship.md\` — deploy a producción
67
+ `;
68
+ }
69
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/lib/generators/codex.ts"],"names":[],"mappings":"AAEA,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,KAAK,CAAC,OAAO,IAAI,KAAK;kBACrB,KAAK,CAAC,QAAQ,IAAI,KAAK;;;;EAIvC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CV,CAAC;AACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ProjectYaml } from '../yaml.js';
2
+ export declare function generateKiroProduct(config: ProjectYaml): string;
3
+ export declare function generateKiroStructure(config: ProjectYaml): string;
4
+ export declare function generateKiroAgents(config: ProjectYaml): string;
5
+ export declare function generateKiroCommands(): string;
6
+ export declare function generateKiroBranchGuardHook(): string;
7
+ //# sourceMappingURL=kiro.d.ts.map
@@ -0,0 +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;AAa9C,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,IAAI,MAAM,CAiB7C;AAED,wBAAgB,2BAA2B,IAAI,MAAM,CAcpD"}
@@ -0,0 +1,134 @@
1
+ function devCommands(language) {
2
+ switch (language) {
3
+ case 'typescript': return { dev: 'pnpm dev', test: 'pnpm test', lint: 'pnpm lint' };
4
+ case 'python': return { dev: 'uvicorn main:app --reload', test: 'pytest', lint: 'ruff check .' };
5
+ case 'ruby': return { dev: 'rails server', test: 'bundle exec rspec', lint: 'rubocop' };
6
+ case 'go': return { dev: 'go run ./cmd/...', test: 'go test ./...', lint: 'golangci-lint run' };
7
+ case 'php': return { dev: 'php artisan serve', test: './vendor/bin/pest', lint: 'phpstan analyse' };
8
+ default: return { dev: '# ver docs', test: '# ver docs', lint: '# ver docs' };
9
+ }
10
+ }
11
+ export function generateKiroProduct(config) {
12
+ const proj = config.project;
13
+ const stack = config.stack ?? {};
14
+ return `# ${proj.name ?? 'Proyecto'} — Product Context
15
+
16
+ ## Overview
17
+
18
+ ${proj.description ?? ''}
19
+
20
+ ## Stack
21
+
22
+ - Language: ${proj.language ?? 'N/A'}
23
+ - Backend: ${stack.backend ?? 'N/A'}
24
+ - Frontend: ${stack.frontend ?? 'N/A'}
25
+ - Database: ${stack.database ?? 'N/A'}
26
+ - ORM: ${stack.orm ?? 'N/A'}
27
+ - Testing: ${(stack.testing ?? []).join(', ') || 'N/A'}
28
+
29
+ ## Status
30
+
31
+ ${proj.status ?? 'active'}
32
+ `;
33
+ }
34
+ export function generateKiroStructure(config) {
35
+ const lang = config.project.language ?? 'typescript';
36
+ const { dev, test, lint } = devCommands(lang);
37
+ return `# Project Structure & Development Workflow
38
+
39
+ ## Forge v2 SDD Workflow
40
+
41
+ Before every coding session:
42
+ 1. Run \`/session-start\` — verify branch, tools, env
43
+ 2. Read the spec for your task in \`docs/specs/\`
44
+ 3. Use \`/plan\` if no spec exists yet
45
+ 4. Use \`/work\` to implement once spec is approved
46
+ 5. Use \`/review\` before submitting
47
+ 6. Use \`/ship\` for production deploy
48
+ 7. Run \`/session-close\` to commit, create PR, write daily note
49
+
50
+ ## Commands
51
+
52
+ \`\`\`bash
53
+ ${dev} # Development
54
+ ${test} # Tests
55
+ ${lint} # Lint
56
+ \`\`\`
57
+
58
+ ## Rules
59
+
60
+ - Never implement without an approved spec
61
+ - Never push directly to main/master
62
+ - Never hardcode secrets or API keys
63
+ - Tests alongside implementation, not after
64
+ `;
65
+ }
66
+ export function generateKiroAgents(config) {
67
+ const agents = config.agents ?? {};
68
+ const active = agents.active ?? [];
69
+ const compliance = agents.compliance ?? [];
70
+ const allAgents = [...active, ...compliance];
71
+ const agentDescriptions = {
72
+ 'orchestrator': 'Coordinates agents and decomposes complex tasks',
73
+ 'backend-engineer': 'API, database, business logic',
74
+ 'api-engineer': 'REST endpoints, middleware, validation',
75
+ 'frontend-engineer': 'UI components, pages, API integration',
76
+ 'admin-engineer': 'Admin dashboards and management UI',
77
+ 'mobile-engineer': 'Mobile screens, navigation, state',
78
+ 'fullstack-engineer': 'End-to-end full-stack features',
79
+ 'test-engineer': 'Unit, integration, E2E tests (never production code)',
80
+ 'docs-writer': 'Specs, ADRs, READMEs (never production code)',
81
+ 'compliance-reviewer': 'PII handling, consent, audit logs review',
82
+ 'security-auditor': 'Vulnerability auditing, dependency review',
83
+ 'migration-specialist': 'Framework version migrations',
84
+ };
85
+ const rows = allAgents
86
+ .map(a => `| ${a} | ${agentDescriptions[a] ?? 'Specialized agent'} |`)
87
+ .join('\n');
88
+ return `# Agent Roster
89
+
90
+ | Agent | Responsibility |
91
+ |-------|----------------|
92
+ ${rows || '| — | No agents declared in project.yaml |'}
93
+
94
+ ## Usage
95
+
96
+ - Use the specialized agent for each task
97
+ - Use orchestrator only for multi-agent or complex tasks
98
+ - Never ask the orchestrator to do work a specialized agent can handle
99
+ `;
100
+ }
101
+ export function generateKiroCommands() {
102
+ return `# Forge v2 Commands Reference
103
+
104
+ | Command | Description |
105
+ |---------|-------------|
106
+ | \`/session-start\` | Start session: verify branch, tools, repo state |
107
+ | \`/plan\` | Create or review specs with Planner-Critic |
108
+ | \`/work\` | Implement an approved spec |
109
+ | \`/review\` | Multi-agent diff review |
110
+ | \`/ship\` | Deploy pipeline: tests → build → Vercel |
111
+ | \`/session-close\` | Close session: commit, PR, daily note |
112
+
113
+ ## Kiro Note
114
+
115
+ Kiro does not support slash commands natively.
116
+ Use these as prompts or reference them in your workflow.
117
+ `;
118
+ }
119
+ export function generateKiroBranchGuardHook() {
120
+ return JSON.stringify({
121
+ name: 'forge-branch-guard',
122
+ description: 'Warn before editing files on main or master branch',
123
+ event: 'PreEdit',
124
+ condition: {
125
+ type: 'script',
126
+ script: 'git branch --show-current | grep -qE "^(main|master)$"'
127
+ },
128
+ action: {
129
+ type: 'warn',
130
+ message: 'You are on main/master. Create a feature branch before editing:\n git checkout -b feat/description'
131
+ }
132
+ }, null, 2);
133
+ }
134
+ //# sourceMappingURL=kiro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../../src/lib/generators/kiro.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectYaml } from '../yaml.js';
2
+ export declare function generateAgentsMd(config: ProjectYaml): string;
3
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +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;AA2D9C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA4C5D"}
@@ -0,0 +1,96 @@
1
+ const AGENT_DESCRIPTIONS = {
2
+ 'orchestrator': 'Coordina agentes y descompone tareas complejas',
3
+ 'backend-engineer': 'API, base de datos, lógica de negocio',
4
+ 'api-engineer': 'Endpoints REST, middleware, validaciones',
5
+ 'frontend-engineer': 'UI, componentes, integración con API',
6
+ 'admin-engineer': 'Interfaces de administración y dashboards',
7
+ 'mobile-engineer': 'Pantallas móviles, navegación, estado',
8
+ 'fullstack-engineer': 'Features full-stack de extremo a extremo',
9
+ 'test-engineer': 'Tests unitarios, integración y E2E',
10
+ 'docs-writer': 'Specs, ADRs, READMEs, documentación',
11
+ 'compliance-reviewer': 'Revisión de PRs con PII y compliance regulatorio',
12
+ 'security-auditor': 'Auditoría de vulnerabilidades y dependencias',
13
+ 'migration-specialist': 'Migraciones de versión de framework',
14
+ 'wp-engineer': 'Temas WordPress, FSE, Gutenberg',
15
+ 'scanner-engineer': 'Scraping, crawling, extracción de datos',
16
+ };
17
+ function guardrailSection() {
18
+ return `## Guardrails de seguridad
19
+
20
+ Las siguientes reglas aplican a TODOS los agentes sin excepción:
21
+
22
+ ### Branch guard
23
+ - Verificar siempre la rama antes de hacer cambios: \`git branch --show-current\`
24
+ - **NUNCA** hacer push directo a \`main\` o \`master\`
25
+ - Si estás en main/master, crear una rama antes de cualquier edición: \`git checkout -b fix/descripcion\`
26
+
27
+ ### Debug detection
28
+ - No commitear \`console.log\`, \`print()\`, \`dd()\`, \`var_dump()\`, \`debugger\`, \`binding.pry\`
29
+ - Si los encuentras en código existente, eliminarlos antes de commitear
30
+
31
+ ### Production safety
32
+ - Nunca ejecutar comandos destructivos en producción sin confirmación explícita
33
+ - Comandos bloqueados en producción: \`--force-reset\`, \`DROP TABLE\`, \`TRUNCATE\`, \`rm -rf /\`, \`git push --force\`
34
+
35
+ ### Secrets
36
+ - Nunca hardcodear tokens, passwords o API keys en archivos que van a git
37
+ - Usar variables de entorno o secret managers
38
+ `;
39
+ }
40
+ function commandsSection() {
41
+ return `## Comandos del flujo SDD
42
+
43
+ | Comando | Descripción |
44
+ |---------|-------------|
45
+ | \`/session-start\` | Inicia sesión: verifica rama, tools, estado del repo |
46
+ | \`/plan\` | Crea o revisa specs con Planner-Critic |
47
+ | \`/work\` | Implementa una spec aprobada (modo serial en OpenCode) |
48
+ | \`/review\` | Revisión multi-agente del diff actual |
49
+ | \`/ship\` | Pipeline de deploy: tests → typecheck → Vercel |
50
+ | \`/session-close\` | Cierra sesión: commit, PR, daily note |
51
+
52
+ > **Nota OpenCode**: Los agentes se ejecutan en serie, no en paralelo.
53
+ `;
54
+ }
55
+ export function generateAgentsMd(config) {
56
+ const proj = config.project;
57
+ const stack = config.stack ?? {};
58
+ const agents = config.agents ?? {};
59
+ const compliance = config.compliance ?? {};
60
+ const name = proj.name ?? 'Mi Proyecto';
61
+ const language = proj.language ?? 'typescript';
62
+ const active = agents.active ?? [];
63
+ const complianceAgents = agents.compliance ?? [];
64
+ const profiles = agents.profiles ?? [];
65
+ const allAgents = [...active, ...complianceAgents];
66
+ const agentRows = allAgents
67
+ .map(a => `| \`${a}\` | ${AGENT_DESCRIPTIONS[a] ?? 'Agente especializado'} |`)
68
+ .join('\n');
69
+ const complianceSection = compliance.frameworks && compliance.frameworks.length > 0
70
+ ? `\n## Compliance\n\nMarcos activos: ${compliance.frameworks.map(f => f.toUpperCase()).join(', ')}\n`
71
+ : '';
72
+ return `# AGENTS.md — ${name}
73
+
74
+ > Generado por forge v2. Actualizar project.yaml para cambiar la configuración.
75
+
76
+ ## Proyecto
77
+
78
+ - **Nombre**: ${name}
79
+ - **Lenguaje**: ${language}
80
+ - **Backend**: ${stack.backend ?? 'N/A'}
81
+ - **Frontend**: ${stack.frontend ?? 'N/A'}
82
+ - **Base de datos**: ${stack.database ?? 'N/A'}
83
+ - **Profiles activos**: ${profiles.join(', ') || '—'}
84
+
85
+ ## Agentes del equipo
86
+
87
+ | Agente | Descripción |
88
+ |--------|-------------|
89
+ ${agentRows || '| — | Sin agentes declarados en project.yaml |'}
90
+
91
+ > Invocar el agente especializado para cada tarea. Usar orchestrator solo para tareas multi-agente.
92
+
93
+ ${commandsSection()}
94
+ ${guardrailSection()}${complianceSection}`;
95
+ }
96
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/lib/generators/opencode.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAA2B;IACjD,cAAc,EAAU,gDAAgD;IACxE,kBAAkB,EAAM,uCAAuC;IAC/D,cAAc,EAAU,0CAA0C;IAClE,mBAAmB,EAAK,sCAAsC;IAC9D,gBAAgB,EAAQ,2CAA2C;IACnE,iBAAiB,EAAO,uCAAuC;IAC/D,oBAAoB,EAAI,0CAA0C;IAClE,eAAe,EAAS,oCAAoC;IAC5D,aAAa,EAAW,qCAAqC;IAC7D,qBAAqB,EAAG,kDAAkD;IAC1E,kBAAkB,EAAM,8CAA8C;IACtE,sBAAsB,EAAE,qCAAqC;IAC7D,aAAa,EAAW,iCAAiC;IACzD,kBAAkB,EAAM,yCAAyC;CAClE,CAAC;AAEF,SAAS,gBAAgB;IACvB,OAAO;;;;;;;;;;;;;;;;;;;;CAoBR,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;;;;;;;;;;;CAYR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,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;IACnC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;IAE3C,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,gBAAgB,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC;IAEnD,MAAM,SAAS,GAAG,SAAS;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,kBAAkB,CAAC,CAAC,CAAC,IAAI,sBAAsB,IAAI,CAAC;SAC7E,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,iBAAiB,GAAG,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QACjF,CAAC,CAAC,sCAAsC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QACtG,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,iBAAiB,IAAI;;;;;;gBAMd,IAAI;kBACF,QAAQ;iBACT,KAAK,CAAC,OAAO,IAAI,KAAK;kBACrB,KAAK,CAAC,QAAQ,IAAI,KAAK;uBAClB,KAAK,CAAC,QAAQ,IAAI,KAAK;0BACpB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG;;;;;;EAMlD,SAAS,IAAI,gDAAgD;;;;EAI7D,eAAe,EAAE;EACjB,gBAAgB,EAAE,GAAG,iBAAiB,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface WizardResult {
2
+ name: string;
3
+ slug: string;
4
+ description: string;
5
+ language: string;
6
+ mode: 'startup' | 'standard' | 'enterprise';
7
+ backend?: string;
8
+ frontend?: string;
9
+ database?: string;
10
+ orm?: string;
11
+ packageManager?: string;
12
+ testing?: string[];
13
+ profiles?: string[];
14
+ runtime: string;
15
+ }
16
+ export declare function runWizard(): Promise<WizardResult | null>;
17
+ //# sourceMappingURL=wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/lib/wizard.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAwGD,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA8F9D"}