@cristiancorreau/forge 2.9.6 → 2.9.7

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 (36) hide show
  1. package/dist/commands/doctor.d.ts.map +1 -1
  2. package/dist/commands/doctor.js +2 -1
  3. package/dist/commands/doctor.js.map +1 -1
  4. package/dist/commands/init.js +1 -1
  5. package/dist/lib/paths.d.ts +1 -2
  6. package/dist/lib/paths.d.ts.map +1 -1
  7. package/dist/lib/paths.js +12 -16
  8. package/dist/lib/paths.js.map +1 -1
  9. package/dist/version.d.ts +1 -1
  10. package/dist/version.js +1 -1
  11. package/package.json +1 -1
  12. package/assets/adapters/claude-code/generate-claude-md.py +0 -304
  13. package/assets/adapters/codex/generate-codex-config.py +0 -269
  14. package/assets/adapters/kiro/generate-steering.py +0 -367
  15. package/assets/adapters/opencode/generate-agents-md.py +0 -262
  16. package/assets/core/hooks/pre-bash-check.py +0 -202
  17. package/assets/core/hooks/pre-edit-check.py +0 -317
  18. package/assets/forge.py +0 -1265
  19. package/assets/requirements.txt +0 -2
  20. package/assets/scripts/aitmpl-search.py +0 -808
  21. package/assets/scripts/forge-add-opportunities.py +0 -92
  22. package/assets/scripts/forge-audit.py +0 -1061
  23. package/assets/scripts/forge-generate-all.py +0 -283
  24. package/assets/scripts/forge-init.py +0 -900
  25. package/assets/scripts/forge-migrate-project-yaml.py +0 -397
  26. package/assets/scripts/forge-scaffold-profile.py +0 -181
  27. package/assets/scripts/forge-teardown.py +0 -193
  28. package/assets/scripts/forge-validate-project-yaml.py +0 -457
  29. package/assets/scripts/forge-wizard.py +0 -1003
  30. package/assets/scripts/setup-codex.sh +0 -229
  31. package/assets/scripts/team-install.sh +0 -147
  32. package/assets/scripts/token-stats.py +0 -201
  33. package/dist/lib/python.d.ts +0 -4
  34. package/dist/lib/python.d.ts.map +0 -1
  35. package/dist/lib/python.js +0 -46
  36. package/dist/lib/python.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAwCA,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAuL7D"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAwCA,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwL7D"}
@@ -60,7 +60,8 @@ export async function doctor(_args) {
60
60
  // Core assets
61
61
  const coreOk = existsSync(join(root, 'core', 'agents'))
62
62
  && existsSync(join(root, 'core', 'schemas'))
63
- && existsSync(join(root, 'scripts'));
63
+ && existsSync(join(root, 'profiles'))
64
+ && existsSync(join(root, 'adapters'));
64
65
  if (coreOk) {
65
66
  const assetsLine = `${icons.ok} forge assets: completos`;
66
67
  console.log(' ' + assetsLine);
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -410,7 +410,7 @@ export async function init(args) {
410
410
  ...allAgents.map(a => `.claude/agents/${a}.md`),
411
411
  ];
412
412
  const ts = new Date().toISOString();
413
- saveManifest(projectRoot, buildManifest(runtime, installedFiles, projectRoot, '2.9.6', ts));
413
+ saveManifest(projectRoot, buildManifest(runtime, installedFiles, projectRoot, '2.9.7', ts));
414
414
  },
415
415
  },
416
416
  ]);
@@ -2,9 +2,8 @@
2
2
  * Resolves the forge root directory in priority order:
3
3
  * 1. FORGE_HOME env var
4
4
  * 2. assets/ next to the compiled CLI (npm package mode)
5
- * 3. Walk up from __dirname looking for forge.py (dev mode / legacy .agentic/)
5
+ * 3. Walk up from __dirname (dev mode)
6
6
  * 4. .agentic/ or forge/ in cwd (consumer project with submodule)
7
7
  */
8
8
  export declare function resolveForgeRoot(): string;
9
- export declare function resolveScript(name: string): string;
10
9
  //# sourceMappingURL=paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CA6BzC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOlD"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAWA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CA6BzC"}
package/dist/lib/paths.js CHANGED
@@ -2,48 +2,44 @@ import { existsSync } from 'fs';
2
2
  import { join, dirname } from 'path';
3
3
  import { fileURLToPath } from 'url';
4
4
  const __dirname = dirname(fileURLToPath(import.meta.url));
5
+ // A directory is a forge root if it contains core/agents (the defining asset).
6
+ function isForgeRoot(dir) {
7
+ return existsSync(join(dir, 'core', 'agents'));
8
+ }
5
9
  /**
6
10
  * Resolves the forge root directory in priority order:
7
11
  * 1. FORGE_HOME env var
8
12
  * 2. assets/ next to the compiled CLI (npm package mode)
9
- * 3. Walk up from __dirname looking for forge.py (dev mode / legacy .agentic/)
13
+ * 3. Walk up from __dirname (dev mode)
10
14
  * 4. .agentic/ or forge/ in cwd (consumer project with submodule)
11
15
  */
12
16
  export function resolveForgeRoot() {
13
17
  if (process.env.FORGE_HOME) {
14
18
  const p = process.env.FORGE_HOME;
15
- if (existsSync(join(p, 'forge.py')))
19
+ if (isForgeRoot(p))
16
20
  return p;
17
- throw new Error(`FORGE_HOME="${p}" does not contain forge.py`);
21
+ throw new Error(`FORGE_HOME="${p}" is not a forge root (missing core/agents)`);
18
22
  }
19
23
  // npm package mode: __dirname is dist/lib/, assets/ is at package root (two levels up)
20
24
  const assetsPath = join(__dirname, '..', '..', 'assets');
21
- if (existsSync(join(assetsPath, 'forge.py')))
25
+ if (isForgeRoot(assetsPath))
22
26
  return assetsPath;
23
- // dev mode: walk up from __dirname to find forge.py
27
+ // dev mode: walk up from __dirname to find the repo root
24
28
  let dir = __dirname;
25
29
  for (let i = 0; i < 8; i++) {
26
- if (existsSync(join(dir, 'forge.py')))
30
+ if (isForgeRoot(dir))
27
31
  return dir;
28
32
  const parent = dirname(dir);
29
33
  if (parent === dir)
30
34
  break;
31
35
  dir = parent;
32
36
  }
33
- // consumer project: look for .agentic/ or forge/ from cwd
37
+ // consumer project: look for a vendored forge under .agentic/ or forge/
34
38
  for (const candidate of ['.agentic', 'forge']) {
35
39
  const p = join(process.cwd(), candidate);
36
- if (existsSync(join(p, 'forge.py')))
40
+ if (isForgeRoot(p))
37
41
  return p;
38
42
  }
39
43
  throw new Error('forge root not found. Set FORGE_HOME or install via: npx @cristiancorreau/forge');
40
44
  }
41
- export function resolveScript(name) {
42
- const root = resolveForgeRoot();
43
- const scriptPath = join(root, 'scripts', name);
44
- if (!existsSync(scriptPath)) {
45
- throw new Error(`Script not found: ${scriptPath}`);
46
- }
47
- return scriptPath;
48
- }
49
45
  //# sourceMappingURL=paths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,6BAA6B,CAAC,CAAC;IACjE,CAAC;IAED,uFAAuF;IACvF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAAE,OAAO,UAAU,CAAC;IAEhE,oDAAoD;IACpD,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QAClD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IAED,0DAA0D;IAC1D,KAAK,MAAM,SAAS,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QACzC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,+EAA+E;AAC/E,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,IAAI,WAAW,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,6CAA6C,CAAC,CAAC;IACjF,CAAC;IAED,uFAAuF;IACvF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,WAAW,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAE/C,yDAAyD;IACzD,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,WAAW,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IAED,wEAAwE;IACxE,KAAK,MAAM,SAAS,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QACzC,IAAI,WAAW,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;AACJ,CAAC"}
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Single source of truth for the CLI version (kept in sync with package.json). */
2
- export declare const VERSION = "2.9.6";
2
+ export declare const VERSION = "2.9.7";
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Single source of truth for the CLI version (kept in sync with package.json). */
2
- export const VERSION = '2.9.6';
2
+ export const VERSION = '2.9.7';
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cristiancorreau/forge",
3
- "version": "2.9.6",
3
+ "version": "2.9.7",
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",
@@ -1,304 +0,0 @@
1
- #!/usr/bin/env python3
2
- # Copyright 2026 Cristian Correa — Apache License 2.0
3
- # https://github.com/cristiancorreau/forge
4
- """
5
- Genera CLAUDE.md para un proyecto usando forge.
6
-
7
- Usage:
8
- python3 .agentic/adapters/claude-code/generate-claude-md.py
9
-
10
- Lee project.yaml en la raíz y genera CLAUDE.md adaptado al stack del proyecto.
11
- Si ya existe un CLAUDE.md, muestra el diff antes de sobreescribir.
12
-
13
- Requiere: pyyaml
14
- """
15
- import os
16
- import sys
17
- from pathlib import Path
18
-
19
- FORCE = "--force" in sys.argv
20
-
21
- try:
22
- import yaml
23
- except ImportError:
24
- print("ERROR: pyyaml requerido. pip install pyyaml", file=sys.stderr)
25
- sys.exit(1)
26
-
27
-
28
- def find_project_root() -> Path:
29
- here = Path.cwd()
30
- for p in [here] + list(here.parents):
31
- if (p / "project.yaml").exists():
32
- return p
33
- raise FileNotFoundError("No se encontró project.yaml")
34
-
35
-
36
- def _render_phases(config: dict) -> str:
37
- sprint = config.get("sprint", {})
38
- current = sprint.get("current", 1)
39
- phases = sprint.get("phases", [])
40
- if not phases:
41
- return (
42
- f"- **Sprint actual:** Sprint {current}\n"
43
- "- **Completadas:** —\n"
44
- "- **En curso:** —\n"
45
- "- **Pendientes:** —"
46
- )
47
- lines = [f"- **Sprint actual:** Sprint {current}"]
48
- for phase in phases:
49
- pid = phase.get("id", "?")
50
- name = phase.get("name", "")
51
- specs = phase.get("specs", [])
52
- status = phase.get("status", "pendiente")
53
- spec_list = ", ".join(specs) if specs else "—"
54
- lines.append(f"- **Fase {pid} — {name}** ({status}): {spec_list}")
55
- return "\n".join(lines)
56
-
57
-
58
- _AGENT_TRIGGER = {
59
- "orchestrator": ("tareas multi-agente, análisis de >3 archivos, descomposición de features completas", None),
60
- "backend-engineer": ("endpoints, middleware, validaciones, lógica de negocio", "api"),
61
- "api-engineer": ("endpoints REST, middleware, validaciones, migraciones de BD", "api"),
62
- "frontend-engineer": ("componentes UI, páginas, estilos, integración con API", "frontend"),
63
- "admin-engineer": ("UI de gestión interna, dashboards de admin", "admin"),
64
- "mobile-engineer": ("pantallas móviles, navegación, stores de estado", "mobile"),
65
- "fullstack-engineer": ("features full-stack end-to-end que abarcan backend y frontend", None),
66
- "test-engineer": ("tests unitarios, integración, E2E — nunca código de producción", "tests"),
67
- "docs-writer": ("specs, ADRs, READMEs, documentación — nunca código de producción", "specs"),
68
- "compliance-reviewer": ("revisión de PRs con PII, consentimientos, logs de auditoría", None),
69
- "security-auditor": ("auditoría de vulnerabilidades, revisión de dependencias, pentest", None),
70
- "migration-specialist": ("migraciones de versión de framework (ej: L6→L13)", "migrations"),
71
- "wp-engineer": ("temas WordPress, FSE, Gutenberg, child themes", "frontend"),
72
- "divi-engineer": ("layouts Divi 5, módulos custom, Divi Builder", "frontend"),
73
- "elementor-engineer": ("templates Elementor Pro, widgets custom", "frontend"),
74
- "scanner-engineer": ("scraping, crawling, extracción estructurada de datos", "scanner"),
75
- }
76
-
77
-
78
- def _build_agent_scope_table(agents_cfg: dict, paths: dict) -> str:
79
- active = agents_cfg.get("active", [])
80
- compliance = agents_cfg.get("compliance", [])
81
- agent_paths = {**(paths or {})}
82
- rows = []
83
- for agent in active + compliance:
84
- trigger, path_key = _AGENT_TRIGGER.get(agent, ("implementación", None))
85
- scope = agent_paths.get(path_key) if path_key else None
86
- scope_str = f"`{scope}`" if scope else "`/`"
87
- rows.append(f"| `{agent}` | {scope_str} | {trigger} |")
88
- if not rows:
89
- return ""
90
- header = (
91
- "## Agentes y su scope\n\n"
92
- "| Agente | Scope | Cuándo usarlo |\n"
93
- "|--------|-------|---------------|\n"
94
- )
95
- return header + "\n".join(rows) + "\n\n> Invocar el agente del scope correcto, no el orchestrator, para tareas acotadas.\n\n"
96
-
97
-
98
- def generate_claude_md(config: dict) -> str:
99
- proj = config.get("project", {})
100
- stack = config.get("stack", {})
101
- team = config.get("team", {})
102
- compliance_cfg = config.get("compliance", {})
103
- agents_cfg = config.get("agents", {})
104
- paths = config.get("paths", {})
105
-
106
- name = proj.get("name", "Mi Proyecto")
107
- description = proj.get("description", "")
108
- language = proj.get("language", "typescript")
109
- backend = stack.get("backend") or "N/A"
110
- frontend = stack.get("frontend") or "N/A"
111
- database = stack.get("database") or "N/A"
112
- frameworks = compliance_cfg.get("frameworks", [])
113
- specs_path = paths.get("specs", "docs/specs")
114
- progress_path = paths.get("progress", "docs/progress.html")
115
- agent_scope_section = _build_agent_scope_table(agents_cfg, paths)
116
-
117
- # Agentes activos
118
- active = agents_cfg.get("active", [])
119
-
120
- # Comandos según lenguaje
121
- if language == "typescript":
122
- dev_cmd = "pnpm dev"
123
- test_cmd = "pnpm test"
124
- lint_cmd = "pnpm lint"
125
- build_cmd = "pnpm build"
126
- elif language == "python":
127
- dev_cmd = "python manage.py runserver # o uvicorn main:app"
128
- test_cmd = "pytest"
129
- lint_cmd = "ruff check ."
130
- build_cmd = "# no aplica"
131
- elif language == "ruby":
132
- dev_cmd = "rails server"
133
- test_cmd = "bundle exec rspec"
134
- lint_cmd = "rubocop"
135
- build_cmd = "# no aplica"
136
- elif language == "go":
137
- dev_cmd = "go run ./cmd/..."
138
- test_cmd = "go test ./..."
139
- lint_cmd = "golangci-lint run"
140
- build_cmd = "go build ./..."
141
- elif language == "php":
142
- dev_cmd = "php artisan serve # o php -S localhost:8000 -t public"
143
- test_cmd = "vendor/bin/phpunit # o ./vendor/bin/pest"
144
- lint_cmd = "vendor/bin/phpstan analyse"
145
- build_cmd = "composer install --no-dev --optimize-autoloader"
146
- elif language == "mixed":
147
- dev_cmd = "# ver documentación del proyecto (stack mixto)"
148
- test_cmd = "# ver documentación del proyecto (stack mixto)"
149
- lint_cmd = "# ver documentación del proyecto (stack mixto)"
150
- build_cmd = "# ver documentación del proyecto (stack mixto)"
151
- else:
152
- dev_cmd = "# ver documentación del proyecto"
153
- test_cmd = "# ver documentación del proyecto"
154
- lint_cmd = "# ver documentación del proyecto"
155
- build_cmd = "# ver documentación del proyecto"
156
-
157
- compliance_section = ""
158
- if frameworks:
159
- compliance_section = f"""
160
- ## Compliance activo
161
-
162
- Este proyecto opera bajo los siguientes marcos regulatorios:
163
- {chr(10).join(f'- **{f.upper()}**' for f in frameworks)}
164
-
165
- Reglas no-negociables:
166
- - Sin datos personales en logs de stdout
167
- - Consentimiento explícito antes de cualquier tracker no esencial
168
- - Logs de auditoría append-only (sin UPDATE/DELETE)
169
- - Derechos del titular implementados (acceso, rectificación, supresión, oposición, portabilidad)
170
- """
171
-
172
- return f"""# CLAUDE.md — {name}
173
-
174
- > Generado por forge. Actualizar project.yaml para cambiar la configuración.
175
- > Si actualizás el código de manera que invalide algo aquí, actualizá este archivo en el mismo PR.
176
-
177
- ## Misión del proyecto
178
-
179
- {description}
180
-
181
- ## Stack
182
-
183
- - **Lenguaje**: {language}
184
- - **Backend**: {backend}
185
- - **Frontend**: {frontend}
186
- - **Base de datos**: {database}
187
- - **Testing**: {", ".join(stack.get("testing", []))}
188
-
189
- {agent_scope_section}## Estructura
190
-
191
- ```
192
- {proj.get("slug", "proyecto")}/
193
- ├── CLAUDE.md ← Estás acá
194
- ├── AGENTS.md ← Convenciones del agent team
195
- ├── project.yaml ← Config de forge (fuente de verdad)
196
- ├── {specs_path}/ ← Specs de features (requeridas antes de implementar)
197
- └── {progress_path} ← Dashboard de progreso del proyecto
198
- ```
199
-
200
- ## Cómo trabajar (SDD)
201
-
202
- Cuando recibás una tarea:
203
-
204
- 1. **Identificá la spec.** Si no está en `{specs_path}/`, pará y pedí que se cree.
205
- 2. **Leé la spec correspondiente.**
206
- 3. **Leé el `CLAUDE.md` del módulo** que vas a modificar (si existe).
207
- 4. **Proponé opciones** para decisiones arquitectónicas no cubiertas por la spec.
208
- 5. **Esperá aprobación** antes de generar código.
209
- 6. **Tests** junto con la implementación, no al final.
210
- 7. **Al terminar**, actualizá la spec con decisiones tomadas durante la implementación.
211
- 8. **Antes de cerrar**: `{test_cmd}`, `{lint_cmd}`.
212
- {compliance_section}
213
- ## Phases activas y estado
214
-
215
- {_render_phases(config)}
216
-
217
- > Actualizar `project.yaml` (sprint.phases) para reflejar el estado real.
218
-
219
- ## Comandos frecuentes
220
-
221
- ```bash
222
- {dev_cmd} # Desarrollo
223
- {test_cmd} # Tests
224
- {lint_cmd} # Lint
225
- {build_cmd} # Build
226
- ```
227
-
228
- ## Qué NO hacer
229
-
230
- - No implementar sin spec en `{specs_path}/`
231
- - No hardcodear tokens, passwords o secrets
232
- - No usar `any` en TypeScript sin comentario que explique por qué
233
- - No commits con `console.log` o `print` de depuración
234
- - No hacer force push a main/master
235
- """
236
-
237
-
238
- def _generate_architecture_rules(root: Path, forge: Path, config: dict):
239
- """Crea .claude/architecture.rules desde el template si no existe. Nunca sobreescribe."""
240
- dst = root / ".claude" / "architecture.rules"
241
- if dst.exists():
242
- return
243
-
244
- # Buscar el template en forge
245
- tpl_path = forge / "core" / "templates" / "claude-md" / "architecture.rules"
246
- if not tpl_path.exists():
247
- return
248
-
249
- project_name = config.get("project", {}).get("name", "Mi Proyecto")
250
- content = tpl_path.read_text(encoding="utf-8")
251
- content = content.replace("<NOMBRE_PROYECTO>", project_name)
252
-
253
- dst.parent.mkdir(parents=True, exist_ok=True)
254
- dst.write_text(content, encoding="utf-8")
255
- print(f"[OK] .claude/architecture.rules — creado desde template")
256
-
257
-
258
- def _find_forge_dir(root: Path) -> Path:
259
- """Localiza el directorio de forge relativo a este script."""
260
- # Este script está en forge/adapters/claude-code/generate-claude-md.py
261
- script_dir = Path(__file__).parent
262
- # forge_dir = forge/
263
- candidate = script_dir.parent.parent
264
- if (candidate / "core").exists():
265
- return candidate
266
- # Fallback: buscar .agentic o forge en la raíz del proyecto
267
- for name in (".agentic", "forge"):
268
- c = root / name
269
- if (c / "core").exists():
270
- return c
271
- return candidate
272
-
273
-
274
- def main():
275
- try:
276
- root = find_project_root()
277
- except FileNotFoundError as e:
278
- print(f"ERROR: {e}", file=sys.stderr)
279
- sys.exit(1)
280
-
281
- with open(root / "project.yaml") as f:
282
- config = yaml.safe_load(f)
283
-
284
- content = generate_claude_md(config)
285
- output_path = root / "CLAUDE.md"
286
-
287
- if output_path.exists() and not FORCE:
288
- print(f"CLAUDE.md ya existe en {root}. Sobreescribir? [s/N] ", end="")
289
- resp = input().strip().lower()
290
- if resp not in ("s", "si", "sí", "y", "yes"):
291
- print("Cancelado.")
292
- sys.exit(0)
293
-
294
- with open(output_path, "w") as f:
295
- f.write(content)
296
-
297
- print(f"CLAUDE.md generado en {output_path}")
298
-
299
- forge = _find_forge_dir(root)
300
- _generate_architecture_rules(root, forge, config)
301
-
302
-
303
- if __name__ == "__main__":
304
- main()