@cristiancorreau/forge 2.7.0 → 2.8.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 (39) hide show
  1. package/README.md +64 -5
  2. package/dist/cli.js +44 -10
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/aitmpl-search.d.ts +2 -0
  5. package/dist/commands/aitmpl-search.d.ts.map +1 -0
  6. package/dist/commands/aitmpl-search.js +711 -0
  7. package/dist/commands/aitmpl-search.js.map +1 -0
  8. package/dist/commands/doctor.d.ts.map +1 -1
  9. package/dist/commands/doctor.js +113 -2
  10. package/dist/commands/doctor.js.map +1 -1
  11. package/dist/commands/init.js +1 -1
  12. package/dist/commands/migrate.d.ts +2 -0
  13. package/dist/commands/migrate.d.ts.map +1 -0
  14. package/dist/commands/migrate.js +261 -0
  15. package/dist/commands/migrate.js.map +1 -0
  16. package/dist/commands/scaffold.d.ts +2 -0
  17. package/dist/commands/scaffold.d.ts.map +1 -0
  18. package/dist/commands/scaffold.js +214 -0
  19. package/dist/commands/scaffold.js.map +1 -0
  20. package/dist/commands/skills.d.ts +2 -0
  21. package/dist/commands/skills.d.ts.map +1 -0
  22. package/dist/commands/skills.js +86 -0
  23. package/dist/commands/skills.js.map +1 -0
  24. package/dist/commands/teardown.d.ts +2 -0
  25. package/dist/commands/teardown.d.ts.map +1 -0
  26. package/dist/commands/teardown.js +186 -0
  27. package/dist/commands/teardown.js.map +1 -0
  28. package/dist/commands/wiki.d.ts +2 -0
  29. package/dist/commands/wiki.d.ts.map +1 -0
  30. package/dist/commands/wiki.js +400 -0
  31. package/dist/commands/wiki.js.map +1 -0
  32. package/dist/lib/catalog.d.ts +22 -0
  33. package/dist/lib/catalog.d.ts.map +1 -0
  34. package/dist/lib/catalog.js +49 -0
  35. package/dist/lib/catalog.js.map +1 -0
  36. package/dist/lib/yaml.d.ts +4 -0
  37. package/dist/lib/yaml.d.ts.map +1 -1
  38. package/dist/lib/yaml.js.map +1 -1
  39. package/package.json +1 -1
package/README.md CHANGED
@@ -32,6 +32,31 @@ El wizard detecta y configura el proyecto en cinco pasos:
32
32
 
33
33
  ---
34
34
 
35
+ ## Funcionalidades
36
+
37
+ | Funcionalidad | Descripción | Estado | Runtime |
38
+ |---|---|---|---|
39
+ | SDD (Spec-Driven Development) | Flujo spec-first: ninguna tarea de código arranca sin una spec `APPROVED`. El `orchestrator` rechaza spawnear agentes sin spec aprobada; el skill `/spec` redacta specs en `docs/specs/`. | ✅ | Claude Code, OpenCode, Codex, Kiro |
40
+ | Agentes Tier 1 (universal) | Agentes definidos por output, no por stack: `orchestrator`, `backend-engineer`, `frontend-engineer`, `test-engineer`, `docs-writer`, `compliance-reviewer`, `security-auditor`. Sirven en cualquier proyecto. | ✅ | Claude Code, OpenCode, Codex, Kiro |
41
+ | Agentes Tier 2 (stack) | Mismo rol que Tier 1 con instrucciones del stack: Hono+Drizzle, FastAPI, Express, NestJS, Django, Go-Gin, Laravel, Rails, Next.js, Expo, Astro, SvelteKit, Nuxt/Vue, WordPress, Playwright. | ✅ | Claude Code, OpenCode, Codex, Kiro |
42
+ | Agentes Tier 3 (dominio) | Agentes que conocen el negocio (`dsar-specialist`, `gcm-engineer`, `policy-engineer`, `banner-engineer`). Viven en el proyecto y se registran en `agents.specialized`. | 🚧 | Claude Code, OpenCode, Codex, Kiro |
43
+ | Hooks de guardrail (sin Python) | Guardrails de pre-edit/branch-guard, detección de debug, secretos y prod-safety, ejecutados por el runtime. | 🚧 | Claude Code, Codex, Kiro |
44
+ | Operaciones reversibles | Manifest SHA-256 + dry-run para instalaciones reversibles y verificables. | 🚧 | Claude Code, OpenCode, Codex, Kiro |
45
+ | Multi-runtime | Un mismo proyecto forge se adapta a varios runtimes con sus marcadores de detección y niveles de soporte. | ✅ | Claude Code (completo), OpenCode, Codex, Kiro |
46
+ | Auto-detección de stack | Detección por marcadores (`CLAUDE.md`+`.claude/`, `AGENTS.md`+`.opencode/`, `.codex/`, `.kiro/`) para activar profiles y adapters. | 🚧 | Claude Code, OpenCode, Codex, Kiro |
47
+ | Skills | Biblioteca de skills invocables (`spec`, `new-feature`, `security-audit`, `db-migrate`, `local2prod`, `browser-test`, `wiki-*`, etc.). | ✅ | Claude Code, OpenCode, Codex, Kiro |
48
+ | Compliance (GDPR/LGPD/CCPA) | `compliance-reviewer` (Tier 1, model opus) revisa cada PR contra los marcos de compliance activos con poder de veto vinculante antes de mergear. | ✅ | Claude Code, OpenCode, Codex, Kiro |
49
+ | forge wiki (knowledge base) | Knowledge base del proyecto: ingesta fuentes, compila páginas, mantiene índice y responde queries citando páginas (`wiki-ingest` / `wiki-lint` / `wiki-query`). | 🚧 | Claude Code, OpenCode, Codex, Kiro |
50
+ | Browser testing | Automatización de navegador (agent-browser sobre CDP) para verificar UI, flujos críticos, evidencia y diffs visuales/responsive (`/browser-test`). | ✅ | Claude Code, OpenCode, Codex, Kiro |
51
+ | DB migrations | Flujo seguro de migraciones compatible con Prisma, Drizzle, ActiveRecord, Alembic y Goose (`/db-migrate`). | ✅ | Claude Code, OpenCode, Codex, Kiro |
52
+ | Deploy a producción | Publicación con gate `READY/SUCCESS` sobre Vercel, Railway, Fly.io, GitHub Actions y pipelines custom (`/local2prod`). | ✅ | Claude Code, OpenCode, Codex, Kiro |
53
+ | Migración v1→v2 | Portado de proyectos forge v1 a v2. Comando `migrate` aún sin portar. | ❌ | Claude Code, Kiro |
54
+ | Scaffold / Teardown | Generación y desmontaje de estructura de proyecto. Comandos sin portar a la nueva CLI. | ❌ | Claude Code, OpenCode, Codex, Kiro |
55
+
56
+ Leyenda: ✅ disponible · 🚧 parcial · ❌ pendiente.
57
+
58
+ ---
59
+
35
60
  ## Comandos
36
61
 
37
62
  | Comando | Qué hace |
@@ -42,6 +67,8 @@ El wizard detecta y configura el proyecto en cinco pasos:
42
67
  | `forge validate` | Valida que los archivos generados cumplan el esquema esperado |
43
68
  | `forge doctor` | Health-check del entorno: Node.js, git, runtime de IA activo, permisos |
44
69
 
70
+ > **Dashboard post-install.** Cuando `forge init` corre con Bun, al terminar abre un dashboard interactivo navegable con OpenTUI: panel con paneles para explorar agentes instalados, skills, profiles activos y estado del manifest sin salir de la terminal. Con Node.js el wizard cae al flujo de prompts estándar.
71
+
45
72
  ---
46
73
 
47
74
  ## Runtimes soportados
@@ -69,6 +96,28 @@ Cada stack instala agentes especializados con reglas de arquitectura, convencion
69
96
 
70
97
  ---
71
98
 
99
+ ## Sistema de TIERs
100
+
101
+ forge organiza agentes y configuración en tres niveles que se componen de lo general a lo específico. Cada tier hereda y especializa al anterior, y la resolución de colisiones favorece siempre al tier más concreto.
102
+
103
+ **Tier 1 — core (universal).** Agentes definidos por su output, no por el stack: `orchestrator`, `backend-engineer`, `frontend-engineer`, `test-engineer`, `docs-writer`, `compliance-reviewer`, `security-auditor`. Sirven en cualquier proyecto sin modificación y son la base sobre la que se montan los demás tiers.
104
+
105
+ **Tier 2 — profile (stack).** Los mismos roles que Tier 1 pero con instrucciones específicas del stack (Hono+Drizzle, FastAPI, Django, Rails, Laravel, Go-Gin, Next.js, Expo, Astro, SvelteKit, WordPress, Playwright…). Un proyecto puede activar varios profiles a la vez; ante una colisión, gana el profile.
106
+
107
+ **Tier 3 — project (dominio).** Agentes que conocen el negocio concreto del proyecto (`dsar-specialist`, `gcm-engineer`, `policy-engineer`, `banner-engineer`). Viven dentro del repositorio y se registran en `agents.specialized`.
108
+
109
+ Detalle completo en [docs/tiers.md](docs/tiers.md).
110
+
111
+ ---
112
+
113
+ ## Skills
114
+
115
+ forge incluye 12 skills invocables que encapsulan flujos completos: `spec` (redacta specs SDD), `new-feature` (kickoff de feature spec-first), `security-audit`, `db-migrate`, `local2prod` (deploy con gate de producción), `browser-test`, `phase-kickoff`, `obsidian-sync`, `aitmpl-search` y la familia `wiki-*` (`wiki-ingest`, `wiki-lint`, `wiki-query`) para la knowledge base del proyecto. Se invocan como slash commands (`/spec`, `/new-feature`, `/db-migrate`, …) y se mapean por runtime.
116
+
117
+ Catálogo completo en [docs/skills.md](docs/skills.md).
118
+
119
+ ---
120
+
72
121
  ## Sin Python requerido
73
122
 
74
123
  Toda la CLI corre en Node.js. Los hooks de guardrail son JavaScript puro.
@@ -79,11 +128,21 @@ No hay `pip install`, no hay `requirements.txt`, no hay dependencias de sistema
79
128
 
80
129
  ## Comparativa
81
130
 
82
- | Herramienta | Agentes especializados | Hooks de guardrail | Manifest con SHA-256 | Multi-runtime |
83
- |-------------|------------------------|-------------------|----------------------|---------------|
84
- | **forge** | | | | Claude Code, OpenCode, Codex, Kiro |
85
- | `cc-sdd` | No plantillas SDD | No | No | Claude Code |
86
- | `autoskills` | No skills genéricos | No | No | Claude Code |
131
+ | Capacidad | forge | autoskills | cc-sdd |
132
+ |---|---|---|---|
133
+ | Enfoque principal | Framework de agentic development end-to-end (agentes + skills + profiles + wiki + compliance) | Librería/colección de skills reutilizables | Spec-Driven Development para Claude Code |
134
+ | SDD spec-first con gate | spec `APPROVED` obligatoria, veto del orchestrator | | núcleo del producto |
135
+ | Agentes especializados por tier | Tier 1/2/3 (universal, stack, dominio) | | |
136
+ | Profiles por stack | ✅ 15+ stacks (Hono, FastAPI, Django, Rails, Laravel, Go, WordPress, Expo…) | 🚧 parcial | ❌ |
137
+ | Skills invocables | ✅ 12+ skills | ✅ foco central | 🚧 limitado |
138
+ | Multi-runtime | ✅ Claude Code, OpenCode, Codex, Kiro | 🚧 principalmente Claude Code | 🚧 Claude Code + parcial |
139
+ | Compliance con veto (GDPR/LGPD/CCPA) | ✅ `compliance-reviewer` vinculante | ❌ | ❌ |
140
+ | Hooks de guardrail (branch/secrets/prod) | 🚧 parcial, sin Python | ❌ | ❌ |
141
+ | Knowledge base / wiki del proyecto | ✅ ingest/lint/query con citas | ❌ | ❌ |
142
+ | Operaciones reversibles (manifest SHA-256, dry-run) | 🚧 parcial | ❌ | ❌ |
143
+ | Auto-detección de stack | 🚧 parcial | ❌ | ❌ |
144
+ | Deploy con gate de producción | ✅ multi-provider | ❌ | ❌ |
145
+ | Posicionamiento | Plataforma completa de orquestación de agentes, compliance-first y multi-runtime | Catálogo de skills sueltas | Especialista en disciplina de specs |
87
146
 
88
147
  ---
89
148
 
package/dist/cli.js CHANGED
@@ -4,17 +4,33 @@ 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.0';
7
+ import { migrate } from './commands/migrate.js';
8
+ import { wiki } from './commands/wiki.js';
9
+ import { skills } from './commands/skills.js';
10
+ import { aitmplSearch } from './commands/aitmpl-search.js';
11
+ import { scaffold } from './commands/scaffold.js';
12
+ import { teardown } from './commands/teardown.js';
13
+ const VERSION = '2.8.0';
8
14
  const HELP = `forge v${VERSION} — Agentic development framework
9
15
 
10
16
  Usage: forge <command> [options]
11
17
 
12
- Commands:
13
- init Initialize forge in a project (wizard + generates agent files)
14
- audit Audit project against the forge standard
15
- generate Generate runtime config files from project.yaml
16
- validate Validate project.yaml schema (exit 1 on error, CI-safe)
17
- doctor Check environment: Python, pyyaml, forge root, project.yaml
18
+ Setup
19
+ init Initialize forge in a project (wizard + post-install dashboard)
20
+ generate Generate runtime config files from project.yaml
21
+ migrate Migrate project.yaml from the v1 schema to v2 (--dry-run, --backup)
22
+ scaffold Scaffold a new Tier 2 profile (profiles/<stack>/agents/<engineer>.md)
23
+ teardown Cleanly uninstall forge from a project (manifest-driven)
24
+
25
+ Inspect
26
+ audit Audit project against the forge standard
27
+ validate Validate project.yaml schema (exit 1 on error, CI-safe)
28
+ doctor Check environment, installed runtimes and project.yaml completeness
29
+ skills List available forge skills grouped by category
30
+ aitmpl-search Search the curated offline catalog (frameworks, MCP servers, profiles)
31
+
32
+ Knowledge
33
+ wiki Manage the project knowledge base (status | ingest | query | lint)
18
34
 
19
35
  Options:
20
36
  -v, --version Show version
@@ -24,9 +40,9 @@ Run forge <command> --help for command-specific options.
24
40
 
25
41
  Examples:
26
42
  npx @cristiancorreau/forge init
27
- npx @cristiancorreau/forge audit --json
28
- npx @cristiancorreau/forge generate --runtime claude-code
29
- npx @cristiancorreau/forge validate
43
+ npx @cristiancorreau/forge skills
44
+ npx @cristiancorreau/forge migrate --dry-run
45
+ npx @cristiancorreau/forge wiki status
30
46
  npx @cristiancorreau/forge doctor
31
47
  `;
32
48
  const [, , cmd, ...rest] = process.argv;
@@ -47,6 +63,24 @@ switch (cmd) {
47
63
  case 'doctor':
48
64
  exitCode = await doctor(rest);
49
65
  break;
66
+ case 'migrate':
67
+ exitCode = await migrate(rest);
68
+ break;
69
+ case 'wiki':
70
+ exitCode = await wiki(rest);
71
+ break;
72
+ case 'skills':
73
+ exitCode = await skills(rest);
74
+ break;
75
+ case 'aitmpl-search':
76
+ exitCode = await aitmplSearch(rest);
77
+ break;
78
+ case 'scaffold':
79
+ exitCode = await scaffold(rest);
80
+ break;
81
+ case 'teardown':
82
+ exitCode = await teardown(rest);
83
+ break;
50
84
  case '-v':
51
85
  case '--version':
52
86
  console.log(VERSION);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,IAAI,GAAG,UAAU,OAAO;;;;;;;;;;;;;;;;;;;;;;;CAuB7B,CAAC;AAEF,MAAM,CAAC,EAAE,AAAD,EAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAExC,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB,QAAQ,GAAG,EAAE,CAAC;IACZ,KAAK,MAAM;QACT,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM;IACR,KAAK,OAAO;QACV,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM;IACR,KAAK,UAAU;QACb,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM;IACR,KAAK,UAAU;QACb,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM;IACR,KAAK,QAAQ;QACX,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM;IACR,KAAK,IAAI,CAAC;IACV,KAAK,WAAW;QACd,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM;IACR,KAAK,SAAS,CAAC;IACf,KAAK,IAAI,CAAC;IACV,KAAK,QAAQ;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM;IACR;QACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,iCAAiC,CAAC,CAAC;QACxE,QAAQ,GAAG,CAAC,CAAC;AACjB,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,IAAI,GAAG,UAAU,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiC7B,CAAC;AAEF,MAAM,CAAC,EAAE,AAAD,EAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAExC,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB,QAAQ,GAAG,EAAE,CAAC;IACZ,KAAK,MAAM;QACT,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM;IACR,KAAK,OAAO;QACV,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM;IACR,KAAK,UAAU;QACb,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM;IACR,KAAK,UAAU;QACb,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM;IACR,KAAK,QAAQ;QACX,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM;IACR,KAAK,SAAS;QACZ,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM;IACR,KAAK,MAAM;QACT,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM;IACR,KAAK,QAAQ;QACX,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM;IACR,KAAK,eAAe;QAClB,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM;IACR,KAAK,UAAU;QACb,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM;IACR,KAAK,UAAU;QACb,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM;IACR,KAAK,IAAI,CAAC;IACV,KAAK,WAAW;QACd,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM;IACR,KAAK,SAAS,CAAC;IACf,KAAK,IAAI,CAAC;IACV,KAAK,QAAQ;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM;IACR;QACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,iCAAiC,CAAC,CAAC;QACxE,QAAQ,GAAG,CAAC,CAAC;AACjB,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function aitmplSearch(args: string[]): Promise<number>;
2
+ //# sourceMappingURL=aitmpl-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aitmpl-search.d.ts","sourceRoot":"","sources":["../../src/commands/aitmpl-search.ts"],"names":[],"mappings":"AAmuBA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA4ElE"}