@cristiancorreau/forge 2.9.13 → 2.10.1

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 (59) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +20 -7
  3. package/assets/adapters/claude-code/commands/session-close.md +5 -106
  4. package/assets/adapters/claude-code/commands/session-start.md +5 -56
  5. package/assets/adapters/codex/HOOKS.md +55 -0
  6. package/assets/adapters/codex/commands/session-close.md +5 -45
  7. package/assets/adapters/codex/commands/session-start.md +6 -41
  8. package/assets/adapters/opencode/HOOKS.md +31 -3
  9. package/assets/adapters/opencode/commands/session-close.md +5 -106
  10. package/assets/adapters/opencode/commands/session-start.md +6 -57
  11. package/assets/core/hooks/hooks-registry.yaml +18 -31
  12. package/assets/core/hooks/pre-edit-check.js +108 -0
  13. package/assets/core/schemas/project.schema.json +6 -1
  14. package/assets/core/skills/README.md +9 -0
  15. package/assets/core/skills/session-close/SKILL.md +137 -0
  16. package/assets/core/skills/session-start/SKILL.md +86 -0
  17. package/assets/manifest.json +2 -2
  18. package/dist/cli.js +12 -1
  19. package/dist/cli.js.map +1 -1
  20. package/dist/commands/audit.d.ts.map +1 -1
  21. package/dist/commands/audit.js +11 -0
  22. package/dist/commands/audit.js.map +1 -1
  23. package/dist/commands/generate.d.ts.map +1 -1
  24. package/dist/commands/generate.js +28 -5
  25. package/dist/commands/generate.js.map +1 -1
  26. package/dist/commands/init.d.ts.map +1 -1
  27. package/dist/commands/init.js +128 -8
  28. package/dist/commands/init.js.map +1 -1
  29. package/dist/commands/scaffold.d.ts.map +1 -1
  30. package/dist/commands/scaffold.js +107 -4
  31. package/dist/commands/scaffold.js.map +1 -1
  32. package/dist/commands/session.d.ts +3 -0
  33. package/dist/commands/session.d.ts.map +1 -0
  34. package/dist/commands/session.js +78 -0
  35. package/dist/commands/session.js.map +1 -0
  36. package/dist/commands/validate.d.ts.map +1 -1
  37. package/dist/commands/validate.js +27 -1
  38. package/dist/commands/validate.js.map +1 -1
  39. package/dist/lib/catalog.d.ts.map +1 -1
  40. package/dist/lib/catalog.js +2 -0
  41. package/dist/lib/catalog.js.map +1 -1
  42. package/dist/lib/generators/claude-code.d.ts.map +1 -1
  43. package/dist/lib/generators/claude-code.js +14 -2
  44. package/dist/lib/generators/claude-code.js.map +1 -1
  45. package/dist/lib/generators/codex.d.ts +1 -0
  46. package/dist/lib/generators/codex.d.ts.map +1 -1
  47. package/dist/lib/generators/codex.js +13 -3
  48. package/dist/lib/generators/codex.js.map +1 -1
  49. package/dist/lib/generators/kiro.d.ts +2 -0
  50. package/dist/lib/generators/kiro.d.ts.map +1 -1
  51. package/dist/lib/generators/kiro.js +32 -0
  52. package/dist/lib/generators/kiro.js.map +1 -1
  53. package/dist/lib/generators/opencode.d.ts +9 -0
  54. package/dist/lib/generators/opencode.d.ts.map +1 -1
  55. package/dist/lib/generators/opencode.js +64 -1
  56. package/dist/lib/generators/opencode.js.map +1 -1
  57. package/dist/version.d.ts +1 -1
  58. package/dist/version.js +1 -1
  59. package/package.json +2 -2
@@ -1,3 +1,57 @@
1
+ /**
2
+ * Shared git pre-commit hook. Runtimes without native blocking hooks
3
+ * (OpenCode, Codex) rely on this executable fallback so branch guard and
4
+ * debug detection still run automatically. Install it with:
5
+ * git config core.hooksPath .githooks
6
+ *
7
+ * POSIX sh, zero Python, never blocks on documentation-only edits.
8
+ */
9
+ export function generateSharedPreCommitHook() {
10
+ return `#!/bin/sh
11
+ # forge — shared git pre-commit hook (fallback for runtimes without native hooks)
12
+ # Generated by forge v2. Enable with: git config core.hooksPath .githooks
13
+ #
14
+ # Guardrails:
15
+ # 1. Branch guard — block commits straight to main/master
16
+ # 2. Debug detection — block leftover console.log/debugger/print/dd/var_dump
17
+ set -eu
18
+
19
+ branch=$(git symbolic-ref --short HEAD 2>/dev/null || echo "")
20
+ staged=$(git diff --cached --name-only --diff-filter=ACM 2>/dev/null || echo "")
21
+
22
+ # Only documentation/config edits are exempt from the branch guard.
23
+ code_staged=$(printf '%s\\n' "$staged" | grep -vE '\\.(md|ya?ml|json|txt)$' || true)
24
+
25
+ if [ "$branch" = "main" ] || [ "$branch" = "master" ]; then
26
+ if [ -n "$code_staged" ]; then
27
+ echo "forge: BLOQUEADO — estás commiteando código en '$branch'." >&2
28
+ echo " Creá una rama de feature antes de commitear:" >&2
29
+ echo " git checkout -b feat/descripcion" >&2
30
+ echo " (solo *.md / *.yaml / *.json / *.txt pueden commitearse en main)" >&2
31
+ exit 1
32
+ fi
33
+ fi
34
+
35
+ # Debug detection on staged code files.
36
+ debug_hits=""
37
+ for f in $code_staged; do
38
+ [ -f "$f" ] || continue
39
+ hit=$(grep -nE '(console\\.log\\(|debugger;|binding\\.pry|var_dump\\(|[^a-zA-Z_]dd\\()' "$f" 2>/dev/null || true)
40
+ if [ -n "$hit" ]; then
41
+ debug_hits="$debug_hits\\n$f:\\n$hit"
42
+ fi
43
+ done
44
+
45
+ if [ -n "$debug_hits" ]; then
46
+ echo "forge: BLOQUEADO — sentencias de debug en archivos staged:" >&2
47
+ printf '%b\\n' "$debug_hits" >&2
48
+ echo " Eliminalas (o usá 'git commit --no-verify' bajo tu responsabilidad)." >&2
49
+ exit 1
50
+ fi
51
+
52
+ exit 0
53
+ `;
54
+ }
1
55
  const AGENT_DESCRIPTIONS = {
2
56
  'orchestrator': 'Coordina agentes y descompone tareas complejas',
3
57
  'backend-engineer': 'API, base de datos, lógica de negocio',
@@ -17,7 +71,16 @@ const AGENT_DESCRIPTIONS = {
17
71
  function guardrailSection() {
18
72
  return `## Guardrails de seguridad
19
73
 
20
- Las siguientes reglas aplican a TODOS los agentes sin excepción:
74
+ OpenCode no tiene hooks PreToolUse/Stop nativos. Branch guard y detección de
75
+ debug se aplican de forma **automática** mediante el git hook compartido en
76
+ \`.githooks/pre-commit\` (generado por forge). Activalo una vez con:
77
+
78
+ \`\`\`
79
+ git config core.hooksPath .githooks
80
+ \`\`\`
81
+
82
+ Las siguientes reglas aplican a TODOS los agentes sin excepción (el git hook
83
+ refuerza branch guard y debug detection en cada \`git commit\`):
21
84
 
22
85
  ### Branch guard
23
86
  - Verificar siempre la rama antes de hacer cambios: \`git branch --show-current\`
@@ -1 +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,CAAC,cAAsB;IAC7C,OAAO;;;;;;;;;;wBAUe,cAAc;;;CAGrC,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,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,yBAAyB,CAAC;EACrE,gBAAgB,EAAE,GAAG,iBAAiB,EAAE,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/lib/generators/opencode.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CR,CAAC;AACF,CAAC;AAED,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BR,CAAC;AACF,CAAC;AAED,SAAS,eAAe,CAAC,cAAsB;IAC7C,OAAO;;;;;;;;;;wBAUe,cAAc;;;CAGrC,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,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,yBAAyB,CAAC;EACrE,gBAAgB,EAAE,GAAG,iBAAiB,EAAE,CAAC;AAC3C,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.13";
2
+ export declare const VERSION = "2.10.1";
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.13';
2
+ export const VERSION = '2.10.1';
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.13",
3
+ "version": "2.10.1",
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",
@@ -28,7 +28,7 @@
28
28
  "build:all": "node scripts/build-assets.mjs && tsc",
29
29
  "dev": "tsc --watch",
30
30
  "prepublishOnly": "npm run build:all",
31
- "test": "node --test test/commands.test.mjs test/assets.test.mjs"
31
+ "test": "node --test test/commands.test.mjs test/assets.test.mjs test/hook-spec-gate.test.mjs test/claude-md-specialized.test.mjs"
32
32
  },
33
33
  "files": [
34
34
  "dist",