@entelligentsia/forgecli 1.0.21 → 1.0.36

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 (218) hide show
  1. package/CHANGELOG.md +346 -0
  2. package/README.md +2 -0
  3. package/dist/CHANGELOG-forge-plugin.md +281 -0
  4. package/dist/bin/argv.d.ts +2 -2
  5. package/dist/bin/argv.js +25 -0
  6. package/dist/bin/argv.js.map +1 -1
  7. package/dist/bin/forge.js +12 -0
  8. package/dist/bin/forge.js.map +1 -1
  9. package/dist/bin/init.d.ts +23 -0
  10. package/dist/bin/init.js +123 -0
  11. package/dist/bin/init.js.map +1 -0
  12. package/dist/bin/uninstall.d.ts +20 -0
  13. package/dist/bin/uninstall.js +141 -0
  14. package/dist/bin/uninstall.js.map +1 -0
  15. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.d.ts +40 -0
  16. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js +593 -0
  17. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js.map +1 -0
  18. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.d.ts +46 -0
  19. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js +245 -0
  20. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js.map +1 -0
  21. package/dist/extensions/forgecli/claude-bootstrap/uninstall.d.ts +23 -0
  22. package/dist/extensions/forgecli/claude-bootstrap/uninstall.js +215 -0
  23. package/dist/extensions/forgecli/claude-bootstrap/uninstall.js.map +1 -0
  24. package/dist/extensions/forgecli/dashboard/component.js +10 -7
  25. package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
  26. package/dist/extensions/forgecli/forge-tools.d.ts +1 -0
  27. package/dist/extensions/forgecli/forge-tools.js +73 -0
  28. package/dist/extensions/forgecli/forge-tools.js.map +1 -1
  29. package/dist/extensions/forgecli/lib/forge-root.d.ts +5 -0
  30. package/dist/extensions/forgecli/lib/forge-root.js +14 -1
  31. package/dist/extensions/forgecli/lib/forge-root.js.map +1 -1
  32. package/dist/extensions/forgecli/orchestrators/bug/bug-body.d.ts +1 -0
  33. package/dist/extensions/forgecli/orchestrators/bug/bug-body.js +65 -0
  34. package/dist/extensions/forgecli/orchestrators/bug/bug-body.js.map +1 -0
  35. package/dist/extensions/forgecli/orchestrators/bug/bug-id.d.ts +23 -0
  36. package/dist/extensions/forgecli/orchestrators/bug/bug-id.js +140 -0
  37. package/dist/extensions/forgecli/orchestrators/bug/bug-id.js.map +1 -0
  38. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.d.ts +54 -0
  39. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js +349 -0
  40. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js.map +1 -0
  41. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.d.ts +8 -0
  42. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js +60 -0
  43. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js.map +1 -0
  44. package/dist/extensions/forgecli/orchestrators/bug/bug-state.d.ts +14 -0
  45. package/dist/extensions/forgecli/orchestrators/bug/bug-state.js +100 -0
  46. package/dist/extensions/forgecli/orchestrators/bug/bug-state.js.map +1 -0
  47. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.d.ts +72 -0
  48. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js +204 -0
  49. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js.map +1 -0
  50. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.d.ts +38 -0
  51. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js +166 -0
  52. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js.map +1 -0
  53. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.d.ts +3 -0
  54. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js +55 -0
  55. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js.map +1 -0
  56. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.d.ts +7 -0
  57. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js +293 -0
  58. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js.map +1 -0
  59. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.d.ts +2 -0
  60. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js +501 -0
  61. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js.map +1 -0
  62. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.d.ts +41 -0
  63. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js +5 -0
  64. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js.map +1 -0
  65. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.d.ts +43 -0
  66. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js +85 -0
  67. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js.map +1 -0
  68. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.d.ts +8 -0
  69. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js +37 -0
  70. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js.map +1 -0
  71. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.d.ts +28 -0
  72. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js +45 -0
  73. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js.map +1 -0
  74. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.d.ts +26 -0
  75. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js +75 -0
  76. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js.map +1 -0
  77. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.d.ts +24 -0
  78. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js +37 -0
  79. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js.map +1 -0
  80. package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +9 -92
  81. package/dist/extensions/forgecli/orchestrators/fix-bug.js +23 -1695
  82. package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -1
  83. package/dist/extensions/forgecli/orchestrators/run-sprint.d.ts +3 -12
  84. package/dist/extensions/forgecli/orchestrators/run-sprint.js +97 -270
  85. package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -1
  86. package/dist/extensions/forgecli/orchestrators/run-task.d.ts +10 -214
  87. package/dist/extensions/forgecli/orchestrators/run-task.js +31 -1481
  88. package/dist/extensions/forgecli/orchestrators/run-task.js.map +1 -1
  89. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.d.ts +33 -0
  90. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js +135 -0
  91. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js.map +1 -0
  92. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.d.ts +18 -0
  93. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js +55 -0
  94. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js.map +1 -0
  95. package/dist/extensions/forgecli/orchestrators/task/run-task-command.d.ts +9 -0
  96. package/dist/extensions/forgecli/orchestrators/task/run-task-command.js +174 -0
  97. package/dist/extensions/forgecli/orchestrators/task/run-task-command.js.map +1 -0
  98. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.d.ts +2 -0
  99. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js +494 -0
  100. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js.map +1 -0
  101. package/dist/extensions/forgecli/orchestrators/task/run-task-types.d.ts +62 -0
  102. package/dist/extensions/forgecli/orchestrators/task/run-task-types.js +5 -0
  103. package/dist/extensions/forgecli/orchestrators/task/run-task-types.js.map +1 -0
  104. package/dist/extensions/forgecli/orchestrators/task/task-body.d.ts +4 -0
  105. package/dist/extensions/forgecli/orchestrators/task/task-body.js +48 -0
  106. package/dist/extensions/forgecli/orchestrators/task/task-body.js.map +1 -0
  107. package/dist/extensions/forgecli/orchestrators/task/task-events.d.ts +63 -0
  108. package/dist/extensions/forgecli/orchestrators/task/task-events.js +185 -0
  109. package/dist/extensions/forgecli/orchestrators/task/task-events.js.map +1 -0
  110. package/dist/extensions/forgecli/orchestrators/task/task-gates.d.ts +34 -0
  111. package/dist/extensions/forgecli/orchestrators/task/task-gates.js +78 -0
  112. package/dist/extensions/forgecli/orchestrators/task/task-gates.js.map +1 -0
  113. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.d.ts +42 -0
  114. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js +370 -0
  115. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js.map +1 -0
  116. package/dist/extensions/forgecli/orchestrators/task/task-phases.d.ts +14 -0
  117. package/dist/extensions/forgecli/orchestrators/task/task-phases.js +26 -0
  118. package/dist/extensions/forgecli/orchestrators/task/task-phases.js.map +1 -0
  119. package/dist/extensions/forgecli/orchestrators/task/task-record.d.ts +9 -0
  120. package/dist/extensions/forgecli/orchestrators/task/task-record.js +58 -0
  121. package/dist/extensions/forgecli/orchestrators/task/task-record.js.map +1 -0
  122. package/dist/extensions/forgecli/orchestrators/task/task-state.d.ts +14 -0
  123. package/dist/extensions/forgecli/orchestrators/task/task-state.js +35 -0
  124. package/dist/extensions/forgecli/orchestrators/task/task-state.js.map +1 -0
  125. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.d.ts +36 -0
  126. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js +152 -0
  127. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js.map +1 -0
  128. package/dist/extensions/forgecli/update/forge-update-command.js +10 -7
  129. package/dist/extensions/forgecli/update/forge-update-command.js.map +1 -1
  130. package/dist/forge-payload/.base-pack/commands/approve.md +2 -2
  131. package/dist/forge-payload/.base-pack/commands/check-agent.md +2 -2
  132. package/dist/forge-payload/.base-pack/commands/collate.md +2 -2
  133. package/dist/forge-payload/.base-pack/commands/commit.md +2 -2
  134. package/dist/forge-payload/.base-pack/commands/enhance.md +2 -2
  135. package/dist/forge-payload/.base-pack/commands/fix-bug.md +2 -2
  136. package/dist/forge-payload/.base-pack/commands/implement.md +2 -2
  137. package/dist/forge-payload/.base-pack/commands/init.md +278 -0
  138. package/dist/forge-payload/.base-pack/commands/new-sprint.md +2 -2
  139. package/dist/forge-payload/.base-pack/commands/plan-sprint.md +2 -2
  140. package/dist/forge-payload/.base-pack/commands/plan.md +2 -2
  141. package/dist/forge-payload/.base-pack/commands/retro.md +2 -2
  142. package/dist/forge-payload/.base-pack/commands/review-code.md +2 -2
  143. package/dist/forge-payload/.base-pack/commands/review-plan.md +2 -2
  144. package/dist/forge-payload/.base-pack/commands/run-sprint.md +2 -2
  145. package/dist/forge-payload/.base-pack/commands/run-task.md +2 -2
  146. package/dist/forge-payload/.base-pack/commands/validate.md +2 -2
  147. package/dist/forge-payload/.base-pack/workflows/_fragments/event-emission-schema.md +4 -0
  148. package/dist/forge-payload/.base-pack/workflows/_fragments/event-vocabulary.md +88 -0
  149. package/dist/forge-payload/.base-pack/workflows/collator_agent.md +5 -6
  150. package/dist/forge-payload/.base-pack/workflows/commit_task.md +41 -38
  151. package/dist/forge-payload/.base-pack/workflows/implement_plan.md +3 -3
  152. package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +1 -1
  153. package/dist/forge-payload/.base-pack/workflows-js/wfl-fix-bug.js +42 -6
  154. package/dist/forge-payload/.base-pack/workflows-js/wfl-init.js +449 -0
  155. package/dist/forge-payload/.base-pack/workflows-js/wfl-run-task.js +32 -1
  156. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  157. package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
  158. package/dist/forge-payload/.schemas/event.schema.json +8 -3
  159. package/dist/forge-payload/.schemas/migrations.json +141 -0
  160. package/dist/forge-payload/commands/add-pipeline.md +1 -1
  161. package/dist/forge-payload/commands/add-task.md +3 -3
  162. package/dist/forge-payload/commands/ask.md +1 -1
  163. package/dist/forge-payload/commands/check-agent.md +1 -1
  164. package/dist/forge-payload/commands/config.md +1 -1
  165. package/dist/forge-payload/commands/health.md +1 -1
  166. package/dist/forge-payload/commands/init.md +62 -7
  167. package/dist/forge-payload/commands/rebuild.md +3 -3
  168. package/dist/forge-payload/commands/remove.md +1 -1
  169. package/dist/forge-payload/commands/repair.md +1 -1
  170. package/dist/forge-payload/commands/report-bug.md +1 -1
  171. package/dist/forge-payload/commands/status.md +1 -1
  172. package/dist/forge-payload/commands/update.md +3 -3
  173. package/dist/forge-payload/hooks/lib/common.cjs +228 -0
  174. package/dist/forge-payload/hooks/lib/plugin-detection.cjs +106 -0
  175. package/dist/forge-payload/hooks/lib/update-msg.cjs +23 -0
  176. package/dist/forge-payload/hooks/lib/update-url.cjs +46 -0
  177. package/dist/forge-payload/hooks/lib/write-registry.js +53 -0
  178. package/dist/forge-payload/init/discovery/discover-database.md +32 -0
  179. package/dist/forge-payload/init/discovery/discover-processes.md +31 -0
  180. package/dist/forge-payload/init/discovery/discover-routing.md +31 -0
  181. package/dist/forge-payload/init/discovery/discover-stack.md +33 -0
  182. package/dist/forge-payload/init/discovery/discover-testing.md +34 -0
  183. package/dist/forge-payload/init/generation/generate-commands.md +171 -0
  184. package/dist/forge-payload/init/generation/generate-kb-doc.md +60 -0
  185. package/dist/forge-payload/init/generation/generate-knowledge-base.md +56 -0
  186. package/dist/forge-payload/init/generation/generate-persona.md +73 -0
  187. package/dist/forge-payload/init/generation/generate-personas.md +54 -0
  188. package/dist/forge-payload/init/generation/generate-skill.md +66 -0
  189. package/dist/forge-payload/init/generation/generate-skills.md +36 -0
  190. package/dist/forge-payload/init/generation/generate-template.md +60 -0
  191. package/dist/forge-payload/init/generation/generate-templates.md +39 -0
  192. package/dist/forge-payload/init/generation/generate-tools.md +133 -0
  193. package/dist/forge-payload/init/generation/generate-workflows.md +78 -0
  194. package/dist/forge-payload/init/phases/phase-1-collect.md +10 -2
  195. package/dist/forge-payload/init/phases/phase-3-materialize.md +1 -1
  196. package/dist/forge-payload/init/phases/phase-4-register.md +8 -0
  197. package/dist/forge-payload/init/workflow-gen-plan.json +17 -0
  198. package/dist/forge-payload/integrity.json +16 -16
  199. package/dist/forge-payload/meta/store-schema/event.schema.md +7 -0
  200. package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +4 -0
  201. package/dist/forge-payload/meta/workflows/_fragments/event-vocabulary.md +88 -0
  202. package/dist/forge-payload/meta/workflows/meta-collate.md +5 -6
  203. package/dist/forge-payload/meta/workflows/meta-commit.md +46 -43
  204. package/dist/forge-payload/meta/workflows/meta-fix-bug.md +7 -2
  205. package/dist/forge-payload/meta/workflows/meta-implement.md +3 -3
  206. package/dist/forge-payload/meta/workflows/meta-migrate.md +1 -1
  207. package/dist/forge-payload/meta/workflows/meta-orchestrate.md +4 -1
  208. package/dist/forge-payload/schemas/enum-catalog.json +2 -2
  209. package/dist/forge-payload/schemas/event.schema.json +8 -3
  210. package/dist/forge-payload/schemas/structure-manifest.json +5 -12
  211. package/dist/forge-payload/tools/commit-task.cjs +218 -0
  212. package/dist/forge-payload/tools/forge-preflight.cjs +268 -0
  213. package/dist/forge-payload/tools/lib/paths.cjs +12 -11
  214. package/dist/forge-payload/tools/lib/pricing.cjs +31 -11
  215. package/dist/forge-payload/tools/query-logger.cjs +34 -0
  216. package/dist/forge-payload/tools/store-cli.cjs +6 -1
  217. package/dist/forge-payload/tools/substitute-placeholders.cjs +5 -6
  218. package/package.json +2 -2
@@ -0,0 +1,593 @@
1
+ // claude-bootstrap/bootstrap.ts — deterministic Claude Code project bootstrap (FORGE-S31-T02 + T03)
2
+ //
3
+ // Scaffolds a Claude Code project from the bundled forge-payload in seconds.
4
+ // Zero LLM tokens, zero network access, pure fs operations.
5
+ //
6
+ // Grep-negative ACs (enforced by test):
7
+ // - No fetch/https/network imports
8
+ // - No writes to .forge/store/
9
+ // - No sendUserMessage, no ctx.ui.*
10
+ //
11
+ // Idempotency contract:
12
+ // - Running against a fully-bootstrapped dir → all paths exist → all skipped →
13
+ // dir tree byte-identical to previous run.
14
+ // - Running against a partial bootstrap → only missing files/dirs created.
15
+ // - .forge/config.json, .forge/store/**, KB folder are NEVER touched.
16
+ import * as child_process from "node:child_process";
17
+ import * as crypto from "node:crypto";
18
+ import * as fs from "node:fs";
19
+ import * as path from "node:path";
20
+ import { mergeForgeHooks } from "./settings-merge.js";
21
+ // ── Private helpers ───────────────────────────────────────────────────────────
22
+ // ── Gitignore patterns (mirrors phase4-register.ts) ──────────────────────────
23
+ const GITIGNORE_FORGE_PATTERNS = [".forge/store/events/", ".forge/store/events", ".forge/store/", ".forge/"];
24
+ const GITIGNORE_APPEND_BLOCK = "\n# Forge — transient agent event logs (one file per phase, do not commit)\n.forge/store/events/\n";
25
+ /**
26
+ * Idempotent .gitignore update. Pure function — returns outcome string.
27
+ * Does not create .gitignore if absent.
28
+ */
29
+ function updateGitignorePure(gitignorePath) {
30
+ if (!fs.existsSync(gitignorePath))
31
+ return "absent";
32
+ let content;
33
+ try {
34
+ content = fs.readFileSync(gitignorePath, "utf8");
35
+ }
36
+ catch {
37
+ return "error";
38
+ }
39
+ const lines = content.split("\n");
40
+ const alreadyIgnored = lines.some((line) => {
41
+ const trimmed = line.trim();
42
+ if (!trimmed || trimmed.startsWith("#"))
43
+ return false;
44
+ return GITIGNORE_FORGE_PATTERNS.some((pat) => trimmed.includes(pat));
45
+ });
46
+ if (alreadyIgnored)
47
+ return "already-present";
48
+ try {
49
+ fs.appendFileSync(gitignorePath, GITIGNORE_APPEND_BLOCK, "utf8");
50
+ return "appended";
51
+ }
52
+ catch {
53
+ return "error";
54
+ }
55
+ }
56
+ /**
57
+ * Preflight check for claude binary reachability (Step 9).
58
+ * Non-fatal — returns result rather than throwing.
59
+ */
60
+ function runPreflight() {
61
+ const preflight = {
62
+ claudeAvailable: false,
63
+ workflowToolChecked: false,
64
+ warnings: [],
65
+ };
66
+ try {
67
+ child_process.execFileSync("claude", ["--version"], { timeout: 5000, stdio: "pipe" });
68
+ preflight.claudeAvailable = true;
69
+ }
70
+ catch {
71
+ preflight.claudeAvailable = false;
72
+ preflight.warnings.push("Claude Code not found on PATH — install Claude Code (https://code.claude.com) " +
73
+ "and ensure 'claude' is on your PATH before opening the project.");
74
+ }
75
+ // workflowToolChecked is always false — no reliable offline check exists.
76
+ // Confirmed at runtime on first /forge:init.
77
+ preflight.workflowToolChecked = false;
78
+ return preflight;
79
+ }
80
+ /** Read the bundled forge version from .claude-plugin/plugin.json */
81
+ function readPayloadVersion(payloadRoot) {
82
+ try {
83
+ const pluginPath = path.join(payloadRoot, ".claude-plugin", "plugin.json");
84
+ const raw = fs.readFileSync(pluginPath, "utf8");
85
+ const plugin = JSON.parse(raw);
86
+ return typeof plugin.version === "string" ? plugin.version : "0.0.0";
87
+ }
88
+ catch {
89
+ return "0.0.0";
90
+ }
91
+ }
92
+ /** Compute SHA-256 of a file, or empty string if unreadable. */
93
+ function fileSha256(filePath) {
94
+ try {
95
+ const content = fs.readFileSync(filePath);
96
+ return crypto.createHash("sha256").update(content).digest("hex");
97
+ }
98
+ catch {
99
+ return "";
100
+ }
101
+ }
102
+ /**
103
+ * Ensure a directory exists. Returns "created" if it was new, "skipped" if it
104
+ * already existed, or throws on permission error.
105
+ */
106
+ function ensureDir(dirPath) {
107
+ if (fs.existsSync(dirPath)) {
108
+ return "skipped";
109
+ }
110
+ fs.mkdirSync(dirPath, { recursive: true });
111
+ return "created";
112
+ }
113
+ /**
114
+ * Copy a file from src to dst.
115
+ * If dst is byte-identical to src → "skipped".
116
+ * Otherwise → overwrite and return "created".
117
+ */
118
+ function copyFile(src, dst) {
119
+ if (fs.existsSync(dst) && fileSha256(src) === fileSha256(dst)) {
120
+ return "skipped";
121
+ }
122
+ fs.copyFileSync(src, dst);
123
+ return "created";
124
+ }
125
+ /**
126
+ * Recursively copy a directory tree. Only regular files are copied; each file
127
+ * goes through copyFile (idempotent: byte-identical → skipped). Tracks created
128
+ * and skipped paths into the provided arrays.
129
+ */
130
+ function copyDirRecursive(src, dest, created, skipped) {
131
+ const destOutcome = ensureDir(dest);
132
+ if (destOutcome === "created")
133
+ created.push(dest);
134
+ else
135
+ skipped.push(dest);
136
+ const entries = fs.readdirSync(src, { withFileTypes: true });
137
+ for (const entry of entries) {
138
+ const srcPath = path.join(src, entry.name);
139
+ const destPath = path.join(dest, entry.name);
140
+ if (entry.isDirectory()) {
141
+ copyDirRecursive(srcPath, destPath, created, skipped);
142
+ }
143
+ else if (entry.isFile()) {
144
+ const outcome = copyFile(srcPath, destPath);
145
+ if (outcome === "created")
146
+ created.push(destPath);
147
+ else
148
+ skipped.push(destPath);
149
+ }
150
+ }
151
+ }
152
+ /**
153
+ * Write a JSON file. If dst already contains the same content → "skipped".
154
+ * Otherwise → overwrite and return "created".
155
+ */
156
+ function writeJsonFile(dst, content) {
157
+ const serialized = JSON.stringify(content, null, 2) + "\n";
158
+ if (fs.existsSync(dst)) {
159
+ try {
160
+ const existing = fs.readFileSync(dst, "utf8");
161
+ if (existing === serialized)
162
+ return "skipped";
163
+ }
164
+ catch {
165
+ // fall through to overwrite
166
+ }
167
+ }
168
+ fs.writeFileSync(dst, serialized, "utf8");
169
+ return "created";
170
+ }
171
+ // ── Main export ───────────────────────────────────────────────────────────────
172
+ /**
173
+ * Bootstrap a Claude Code project from the bundled forge-payload.
174
+ *
175
+ * This function is deterministic and idempotent:
176
+ * - Running against a fresh dir scaffolds everything.
177
+ * - Running against a partially-bootstrapped dir repairs only missing items.
178
+ * - Running against a fully-bootstrapped dir is a no-op (byte-identical).
179
+ *
180
+ * .forge/config.json and .forge/store/** are never touched.
181
+ */
182
+ export function bootstrapClaudeProject(opts) {
183
+ const { dir, payloadRoot } = opts;
184
+ const created = [];
185
+ const skipped = [];
186
+ const warnings = [];
187
+ const preflight = { claudeAvailable: false, workflowToolChecked: false, warnings: [] };
188
+ // ── Step 1: Validate payload root ─────────────────────────────────────────
189
+ const storeCli = path.join(payloadRoot, "tools", "store-cli.cjs");
190
+ if (!fs.existsSync(storeCli)) {
191
+ warnings.push(`Payload validation failed: store-cli.cjs missing from ${path.join(payloadRoot, "tools")}. ` +
192
+ "Run 'npm run build' to populate dist/forge-payload/tools/.");
193
+ return { ok: false, created, skipped, warnings, preflight };
194
+ }
195
+ // ── Step 2: Scaffold .forge/ skeleton + store dirs ────────────────────────
196
+ const dirsToScaffold = [
197
+ path.join(dir, ".forge"),
198
+ path.join(dir, ".forge", "store", "sprints"),
199
+ path.join(dir, ".forge", "store", "tasks"),
200
+ path.join(dir, ".forge", "store", "bugs"),
201
+ path.join(dir, ".forge", "store", "events"),
202
+ path.join(dir, ".forge", "cache"),
203
+ path.join(dir, ".forge", "schemas"),
204
+ path.join(dir, ".forge", "tools"),
205
+ path.join(dir, ".claude", "commands", "forge"),
206
+ path.join(dir, ".claude", "workflows"),
207
+ ];
208
+ try {
209
+ for (const d of dirsToScaffold) {
210
+ const outcome = ensureDir(d);
211
+ if (outcome === "created") {
212
+ created.push(d);
213
+ // Write .gitkeep into store dirs only
214
+ if (d.includes(path.join(".forge", "store"))) {
215
+ const gitkeep = path.join(d, ".gitkeep");
216
+ if (!fs.existsSync(gitkeep)) {
217
+ fs.writeFileSync(gitkeep, "", "utf8");
218
+ created.push(gitkeep);
219
+ }
220
+ }
221
+ }
222
+ else {
223
+ skipped.push(d);
224
+ }
225
+ }
226
+ }
227
+ catch (err) {
228
+ const e = err;
229
+ warnings.push(`Failed to scaffold directory structure in ${dir}: ${e.message ?? String(err)}. ` +
230
+ "Check directory permissions.");
231
+ return { ok: false, created, skipped, warnings, preflight };
232
+ }
233
+ // ── Step 3: Vendor tools + lib into .forge/tools/ ─────────────────────────
234
+ const toolsSrc = path.join(payloadRoot, "tools");
235
+ const toolsDest = path.join(dir, ".forge", "tools");
236
+ try {
237
+ // Copy *.cjs and *.js files, plus the package.json CJS scope marker
238
+ // (FORGE-BUG-030: lib/*.js are CommonJS; without the marker they resolve
239
+ // as ESM in "type":"module" host projects and crash on module.exports).
240
+ const toolFiles = fs
241
+ .readdirSync(toolsSrc)
242
+ .filter((f) => f.endsWith(".cjs") || f.endsWith(".js") || f === "package.json");
243
+ for (const f of toolFiles) {
244
+ const outcome = copyFile(path.join(toolsSrc, f), path.join(toolsDest, f));
245
+ const destPath = path.join(toolsDest, f);
246
+ if (outcome === "created")
247
+ created.push(destPath);
248
+ else
249
+ skipped.push(destPath);
250
+ }
251
+ // Copy lib/ subdirectory
252
+ const libSrc = path.join(toolsSrc, "lib");
253
+ const libDest = path.join(toolsDest, "lib");
254
+ if (fs.existsSync(libSrc)) {
255
+ const libOutcome = ensureDir(libDest);
256
+ if (libOutcome === "created")
257
+ created.push(libDest);
258
+ else
259
+ skipped.push(libDest);
260
+ const libFiles = fs.readdirSync(libSrc).filter((f) => f.endsWith(".cjs") || f.endsWith(".js"));
261
+ for (const f of libFiles) {
262
+ const outcome = copyFile(path.join(libSrc, f), path.join(libDest, f));
263
+ const destPath = path.join(libDest, f);
264
+ if (outcome === "created")
265
+ created.push(destPath);
266
+ else
267
+ skipped.push(destPath);
268
+ }
269
+ }
270
+ // Write .forge-tools-version marker
271
+ const payloadVersion = readPayloadVersion(payloadRoot);
272
+ const markerPath = path.join(toolsDest, ".forge-tools-version");
273
+ const markerOutcome = writeJsonFile(markerPath, { version: payloadVersion });
274
+ if (markerOutcome === "created")
275
+ created.push(markerPath);
276
+ else
277
+ skipped.push(markerPath);
278
+ }
279
+ catch (err) {
280
+ const e = err;
281
+ warnings.push(`tools-copy non-fatal: ${e.message ?? String(err)}`);
282
+ }
283
+ // ── Step 3b: Vendor hook scripts into .forge/tools/hooks/ ─────────────────
284
+ // settings-merge.ts wires .claude/settings.json hooks at these paths — without
285
+ // this copy every hook fires node against a nonexistent file (MODULE_NOT_FOUND).
286
+ const hooksSrc = path.join(payloadRoot, "hooks");
287
+ const hooksDest = path.join(toolsDest, "hooks");
288
+ if (fs.existsSync(hooksSrc)) {
289
+ try {
290
+ const hooksDirOutcome = ensureDir(hooksDest);
291
+ if (hooksDirOutcome === "created")
292
+ created.push(hooksDest);
293
+ else
294
+ skipped.push(hooksDest);
295
+ const hookFiles = fs.readdirSync(hooksSrc).filter((f) => f.endsWith(".cjs") || f.endsWith(".js"));
296
+ for (const f of hookFiles) {
297
+ const outcome = copyFile(path.join(hooksSrc, f), path.join(hooksDest, f));
298
+ const destPath = path.join(hooksDest, f);
299
+ if (outcome === "created")
300
+ created.push(destPath);
301
+ else
302
+ skipped.push(destPath);
303
+ }
304
+ // Copy hooks/lib/ — hook scripts require ./lib/common.cjs etc. at runtime;
305
+ // without these every PostToolUse hook fails with MODULE_NOT_FOUND.
306
+ const hooksLibSrc = path.join(hooksSrc, "lib");
307
+ const hooksLibDest = path.join(hooksDest, "lib");
308
+ if (fs.existsSync(hooksLibSrc)) {
309
+ const hooksLibOutcome = ensureDir(hooksLibDest);
310
+ if (hooksLibOutcome === "created")
311
+ created.push(hooksLibDest);
312
+ else
313
+ skipped.push(hooksLibDest);
314
+ const hooksLibFiles = fs.readdirSync(hooksLibSrc).filter((f) => f.endsWith(".cjs") || f.endsWith(".js"));
315
+ for (const f of hooksLibFiles) {
316
+ const outcome = copyFile(path.join(hooksLibSrc, f), path.join(hooksLibDest, f));
317
+ const destPath = path.join(hooksLibDest, f);
318
+ if (outcome === "created")
319
+ created.push(destPath);
320
+ else
321
+ skipped.push(destPath);
322
+ }
323
+ }
324
+ }
325
+ catch (err) {
326
+ const e = err;
327
+ warnings.push(`hooks-copy non-fatal: ${e.message ?? String(err)}`);
328
+ }
329
+ }
330
+ else {
331
+ warnings.push(`hooks/ not found in payload at ${hooksSrc} — .claude/settings.json hooks will fail with MODULE_NOT_FOUND.`);
332
+ }
333
+ // ── Step 3c: Vendor schemas into .forge/schemas/ ──────────────────────────
334
+ // validate-store.cjs and store tooling resolve schemas from .forge/schemas/.
335
+ const schemasSrc = path.join(payloadRoot, "schemas");
336
+ const schemasDest = path.join(dir, ".forge", "schemas");
337
+ if (fs.existsSync(schemasSrc)) {
338
+ try {
339
+ const schemaFiles = fs.readdirSync(schemasSrc).filter((f) => f.endsWith(".json"));
340
+ for (const f of schemaFiles) {
341
+ const outcome = copyFile(path.join(schemasSrc, f), path.join(schemasDest, f));
342
+ const destPath = path.join(schemasDest, f);
343
+ if (outcome === "created")
344
+ created.push(destPath);
345
+ else
346
+ skipped.push(destPath);
347
+ }
348
+ // Copy _defs/ subdirectory
349
+ const defsSrc = path.join(schemasSrc, "_defs");
350
+ const defsDest = path.join(schemasDest, "_defs");
351
+ if (fs.existsSync(defsSrc)) {
352
+ const defsDirOutcome = ensureDir(defsDest);
353
+ if (defsDirOutcome === "created")
354
+ created.push(defsDest);
355
+ else
356
+ skipped.push(defsDest);
357
+ const defsFiles = fs.readdirSync(defsSrc).filter((f) => f.endsWith(".json"));
358
+ for (const f of defsFiles) {
359
+ const outcome = copyFile(path.join(defsSrc, f), path.join(defsDest, f));
360
+ const destPath = path.join(defsDest, f);
361
+ if (outcome === "created")
362
+ created.push(destPath);
363
+ else
364
+ skipped.push(destPath);
365
+ }
366
+ }
367
+ }
368
+ catch (err) {
369
+ const e = err;
370
+ warnings.push(`schemas-copy non-fatal: ${e.message ?? String(err)}`);
371
+ }
372
+ }
373
+ else {
374
+ warnings.push(`schemas/ not found in payload at ${schemasSrc} — .forge/schemas/ left empty.`);
375
+ }
376
+ // ── Step 4: Vendor the full /forge:* command surface ──────────────────────
377
+ // CLI-first redesign: project-prefix namespaces (/acme:*, /hello:*) are
378
+ // retired. The union of .base-pack/commands/ (sprint-workflow shims, static
379
+ // /forge:* files) and commands/ (plugin utility commands) vendors into
380
+ // .claude/commands/forge/. On name collision (init.md, check-agent.md,
381
+ // enhance.md) the .base-pack version wins — it is the project-local,
382
+ // vendored-paths variant.
383
+ const commandsDest = path.join(dir, ".claude", "commands", "forge");
384
+ const bpCommandsSrc = path.join(payloadRoot, ".base-pack", "commands");
385
+ const utilCommandsSrc = path.join(payloadRoot, "commands");
386
+ try {
387
+ const vendoredNames = new Set();
388
+ // 4a: .base-pack/commands/ — winners
389
+ if (fs.existsSync(bpCommandsSrc)) {
390
+ const bpFiles = fs.readdirSync(bpCommandsSrc).filter((f) => f.endsWith(".md"));
391
+ for (const f of bpFiles) {
392
+ const outcome = copyFile(path.join(bpCommandsSrc, f), path.join(commandsDest, f));
393
+ const destPath = path.join(commandsDest, f);
394
+ if (outcome === "created")
395
+ created.push(destPath);
396
+ else
397
+ skipped.push(destPath);
398
+ vendoredNames.add(f);
399
+ }
400
+ }
401
+ else {
402
+ warnings.push(`.base-pack/commands/ not found at ${bpCommandsSrc} — workflow command shims missing.`);
403
+ }
404
+ // 4b: commands/ — utility commands fill the remaining names
405
+ if (fs.existsSync(utilCommandsSrc)) {
406
+ const utilFiles = fs.readdirSync(utilCommandsSrc).filter((f) => f.endsWith(".md") && !vendoredNames.has(f));
407
+ for (const f of utilFiles) {
408
+ const outcome = copyFile(path.join(utilCommandsSrc, f), path.join(commandsDest, f));
409
+ const destPath = path.join(commandsDest, f);
410
+ if (outcome === "created")
411
+ created.push(destPath);
412
+ else
413
+ skipped.push(destPath);
414
+ }
415
+ }
416
+ else {
417
+ warnings.push(`commands/ not found at ${utilCommandsSrc} — utility commands missing.`);
418
+ }
419
+ }
420
+ catch (err) {
421
+ const e = err;
422
+ warnings.push(`vendor-commands non-fatal: ${e.message ?? String(err)}`);
423
+ }
424
+ // ── Step 4c: Vendor Forge-root content into .forge/ ───────────────────────
425
+ // The vendored .forge/ IS the Forge root in plugin-less projects
426
+ // (FORGE_ROOT: ${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}). wfl:init reads
427
+ // init/phases/ rulebooks; substitute-placeholders probes .base-pack/;
428
+ // meta/ serves rebuild/migrate workflows; .claude-plugin/plugin.json is the
429
+ // version source commands report.
430
+ const FORGE_ROOT_DIRS = [
431
+ ["init", "init"],
432
+ [".base-pack", ".base-pack"],
433
+ ["meta", "meta"],
434
+ [".claude-plugin", ".claude-plugin"],
435
+ ];
436
+ for (const [srcName, destName] of FORGE_ROOT_DIRS) {
437
+ const src = path.join(payloadRoot, srcName);
438
+ if (!fs.existsSync(src)) {
439
+ warnings.push(`${srcName}/ not found in payload — .forge/${destName}/ not vendored.`);
440
+ continue;
441
+ }
442
+ try {
443
+ copyDirRecursive(src, path.join(dir, ".forge", destName), created, skipped);
444
+ }
445
+ catch (err) {
446
+ const e = err;
447
+ warnings.push(`vendor-forge-root (${srcName}) non-fatal: ${e.message ?? String(err)}`);
448
+ }
449
+ }
450
+ // ── Step 4d: Vendor Claude Code assets (agents, skills) into .claude/ ─────
451
+ const CLAUDE_ASSET_DIRS = [
452
+ ["agents", "agents"],
453
+ ["skills", "skills"],
454
+ ];
455
+ for (const [srcName, destName] of CLAUDE_ASSET_DIRS) {
456
+ const src = path.join(payloadRoot, srcName);
457
+ if (!fs.existsSync(src)) {
458
+ warnings.push(`${srcName}/ not found in payload — .claude/${destName}/ not vendored.`);
459
+ continue;
460
+ }
461
+ try {
462
+ copyDirRecursive(src, path.join(dir, ".claude", destName), created, skipped);
463
+ }
464
+ catch (err) {
465
+ const e = err;
466
+ warnings.push(`vendor-claude-assets (${srcName}) non-fatal: ${e.message ?? String(err)}`);
467
+ }
468
+ }
469
+ // ── Step 5: Install wfl-*.js drivers ──────────────────────────────────────
470
+ const wflSrc = path.join(payloadRoot, ".base-pack", "workflows-js");
471
+ const wflDest = path.join(dir, ".claude", "workflows");
472
+ if (fs.existsSync(wflSrc)) {
473
+ try {
474
+ const wflFiles = fs.readdirSync(wflSrc).filter((f) => f.startsWith("wfl-") && f.endsWith(".js"));
475
+ for (const f of wflFiles) {
476
+ const outcome = copyFile(path.join(wflSrc, f), path.join(wflDest, f));
477
+ const destPath = path.join(wflDest, f);
478
+ if (outcome === "created")
479
+ created.push(destPath);
480
+ else
481
+ skipped.push(destPath);
482
+ }
483
+ }
484
+ catch (err) {
485
+ const e = err;
486
+ warnings.push(`install-workflows non-fatal: ${e.message ?? String(err)}`);
487
+ }
488
+ }
489
+ else {
490
+ warnings.push(`wfl-*.js drivers not found at ${wflSrc} — .base-pack/workflows-js/ missing from payload.`);
491
+ }
492
+ // ── Step 6: Write bootstrap manifest ──────────────────────────────────────
493
+ const manifestPath = path.join(dir, ".forge", ".bootstrap-manifest.json");
494
+ const payloadVersion = readPayloadVersion(payloadRoot);
495
+ // Compute payload integrity hash
496
+ let payloadIntegrityHash = "";
497
+ try {
498
+ const integrityPath = path.join(payloadRoot, "integrity.json");
499
+ if (fs.existsSync(integrityPath)) {
500
+ payloadIntegrityHash = crypto.createHash("sha256").update(fs.readFileSync(integrityPath)).digest("hex");
501
+ }
502
+ }
503
+ catch {
504
+ // non-fatal
505
+ }
506
+ try {
507
+ // Preserve existing bootstrappedAt if manifest already exists (idempotency: stable hash)
508
+ let bootstrappedAt = new Date().toISOString();
509
+ if (fs.existsSync(manifestPath)) {
510
+ try {
511
+ const existing = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
512
+ // If payload version matches, keep existing timestamp for hash stability
513
+ if (existing.bootstrappedAt && existing.payloadVersion === payloadVersion) {
514
+ bootstrappedAt = existing.bootstrappedAt;
515
+ }
516
+ }
517
+ catch {
518
+ // fall through to overwrite with current timestamp
519
+ }
520
+ }
521
+ const manifest = {
522
+ bootstrappedAt,
523
+ payloadVersion,
524
+ payloadIntegrityHash,
525
+ steps: [
526
+ "scaffold",
527
+ "vendor-tools",
528
+ "vendor-hooks",
529
+ "vendor-schemas",
530
+ "vendor-commands",
531
+ "vendor-forge-root",
532
+ "vendor-claude-assets",
533
+ "install-workflows",
534
+ ],
535
+ };
536
+ const manifestOutcome = writeJsonFile(manifestPath, manifest);
537
+ if (manifestOutcome === "created")
538
+ created.push(manifestPath);
539
+ else
540
+ skipped.push(manifestPath);
541
+ }
542
+ catch (err) {
543
+ const e = err;
544
+ warnings.push(`manifest write non-fatal: ${e.message ?? String(err)}`);
545
+ }
546
+ // ── Step 7: Settings hooks wiring ─────────────────────────────────────────
547
+ const settingsPath = path.join(dir, ".claude", "settings.json");
548
+ try {
549
+ const mergeResult = mergeForgeHooks(settingsPath);
550
+ if (mergeResult.outcome === "created" || mergeResult.outcome === "merged") {
551
+ created.push(settingsPath);
552
+ }
553
+ else if (mergeResult.outcome === "already-present") {
554
+ skipped.push(settingsPath);
555
+ }
556
+ else if (mergeResult.outcome === "error") {
557
+ warnings.push(`settings-merge non-fatal: ${mergeResult.warning ?? "unknown error"}`);
558
+ }
559
+ }
560
+ catch (err) {
561
+ const e = err;
562
+ warnings.push(`settings-merge non-fatal: ${e.message ?? String(err)}`);
563
+ }
564
+ // ── Step 8: .gitignore append ─────────────────────────────────────────────
565
+ const gitignorePath = path.join(dir, ".gitignore");
566
+ try {
567
+ const gitignoreOutcome = updateGitignorePure(gitignorePath);
568
+ if (gitignoreOutcome === "appended") {
569
+ created.push(gitignorePath);
570
+ }
571
+ else if (gitignoreOutcome === "already-present" || gitignoreOutcome === "absent") {
572
+ // absent = no .gitignore, skipped silently; already-present = idempotent skip
573
+ }
574
+ else if (gitignoreOutcome === "error") {
575
+ warnings.push("gitignore-update non-fatal: could not update .gitignore — update manually.");
576
+ }
577
+ }
578
+ catch (err) {
579
+ const e = err;
580
+ warnings.push(`gitignore-update non-fatal: ${e.message ?? String(err)}`);
581
+ }
582
+ // ── Step 9: Preflight check ───────────────────────────────────────────────
583
+ const preflightResult = runPreflight();
584
+ preflight.claudeAvailable = preflightResult.claudeAvailable;
585
+ preflight.workflowToolChecked = preflightResult.workflowToolChecked;
586
+ preflight.warnings = preflightResult.warnings;
587
+ // Propagate preflight warnings to top-level warnings (non-fatal)
588
+ for (const w of preflightResult.warnings) {
589
+ warnings.push(w);
590
+ }
591
+ return { ok: true, created, skipped, warnings, preflight };
592
+ }
593
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/claude-bootstrap/bootstrap.ts"],"names":[],"mappings":"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"}