@entelligentsia/forgecli 0.21.0 → 1.0.2

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 (297) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +31 -33
  3. package/dist/CHANGELOG-forge-plugin.md +118 -0
  4. package/dist/CHANGELOG-pi.md +24 -1
  5. package/dist/bin/forgecli.d.ts +2 -0
  6. package/dist/bin/forgecli.js +6 -0
  7. package/dist/bin/forgecli.js.map +1 -0
  8. package/dist/extensions/forgecli/add-pipeline.js +1 -1
  9. package/dist/extensions/forgecli/add-pipeline.js.map +1 -1
  10. package/dist/extensions/forgecli/add-task.js +1 -1
  11. package/dist/extensions/forgecli/add-task.js.map +1 -1
  12. package/dist/extensions/forgecli/approve.js +17 -2
  13. package/dist/extensions/forgecli/approve.js.map +1 -1
  14. package/dist/extensions/forgecli/calibrate.js +11 -8
  15. package/dist/extensions/forgecli/calibrate.js.map +1 -1
  16. package/dist/extensions/forgecli/collate.js +1 -1
  17. package/dist/extensions/forgecli/collate.js.map +1 -1
  18. package/dist/extensions/forgecli/commit.js +17 -2
  19. package/dist/extensions/forgecli/commit.js.map +1 -1
  20. package/dist/extensions/forgecli/enhance.js +1 -1
  21. package/dist/extensions/forgecli/enhance.js.map +1 -1
  22. package/dist/extensions/forgecli/forge-artifact-tool.d.ts +6 -8
  23. package/dist/extensions/forgecli/forge-artifact-tool.js +80 -195
  24. package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
  25. package/dist/extensions/forgecli/forge-commands.js +57 -18
  26. package/dist/extensions/forgecli/forge-commands.js.map +1 -1
  27. package/dist/extensions/forgecli/forge-init/phase4-register.js +6 -7
  28. package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -1
  29. package/dist/extensions/forgecli/forge-init/run-phases.d.ts +4 -0
  30. package/dist/extensions/forgecli/forge-init/run-phases.js +304 -0
  31. package/dist/extensions/forgecli/forge-init/run-phases.js.map +1 -0
  32. package/dist/extensions/forgecli/forge-init/verifiers.d.ts +14 -5
  33. package/dist/extensions/forgecli/forge-init/verifiers.js +79 -62
  34. package/dist/extensions/forgecli/forge-init/verifiers.js.map +1 -1
  35. package/dist/extensions/forgecli/forge-init.js +131 -76
  36. package/dist/extensions/forgecli/forge-init.js.map +1 -1
  37. package/dist/extensions/forgecli/forge-subagent.d.ts +9 -0
  38. package/dist/extensions/forgecli/forge-subagent.js +11 -6
  39. package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
  40. package/dist/extensions/forgecli/forge-tools.d.ts +28 -4
  41. package/dist/extensions/forgecli/forge-tools.js +122 -73
  42. package/dist/extensions/forgecli/forge-tools.js.map +1 -1
  43. package/dist/extensions/forgecli/health-check.js +3 -3
  44. package/dist/extensions/forgecli/health-check.js.map +1 -1
  45. package/dist/extensions/forgecli/hook-dispatcher.d.ts +1 -1
  46. package/dist/extensions/forgecli/hooks/check-update.d.ts +8 -0
  47. package/dist/extensions/forgecli/hooks/check-update.js +29 -1
  48. package/dist/extensions/forgecli/hooks/check-update.js.map +1 -1
  49. package/dist/extensions/forgecli/hooks/post-init-hook.js +6 -6
  50. package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -1
  51. package/dist/extensions/forgecli/hooks/post-sprint-hook.js +6 -6
  52. package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -1
  53. package/dist/extensions/forgecli/hooks/triage-error.js +1 -0
  54. package/dist/extensions/forgecli/hooks/triage-error.js.map +1 -1
  55. package/dist/extensions/forgecli/implement.js +20 -2
  56. package/dist/extensions/forgecli/implement.js.map +1 -1
  57. package/dist/extensions/forgecli/index.js +39 -32
  58. package/dist/extensions/forgecli/index.js.map +1 -1
  59. package/dist/extensions/forgecli/lib/pipeline-guard.d.ts +41 -0
  60. package/dist/extensions/forgecli/lib/pipeline-guard.js +100 -0
  61. package/dist/extensions/forgecli/lib/pipeline-guard.js.map +1 -0
  62. package/dist/extensions/forgecli/loaders/persona-skill-loader.js +2 -2
  63. package/dist/extensions/forgecli/loaders/persona-skill-loader.js.map +1 -1
  64. package/dist/extensions/forgecli/migrate.d.ts +3 -0
  65. package/dist/extensions/forgecli/migrate.js +4 -2
  66. package/dist/extensions/forgecli/migrate.js.map +1 -1
  67. package/dist/extensions/forgecli/plan.js +21 -2
  68. package/dist/extensions/forgecli/plan.js.map +1 -1
  69. package/dist/extensions/forgecli/quiz-agent.js +7 -7
  70. package/dist/extensions/forgecli/quiz-agent.js.map +1 -1
  71. package/dist/extensions/forgecli/regenerate.js +49 -18
  72. package/dist/extensions/forgecli/regenerate.js.map +1 -1
  73. package/dist/extensions/forgecli/remove-command.js +1 -1
  74. package/dist/extensions/forgecli/remove-command.js.map +1 -1
  75. package/dist/extensions/forgecli/report-bug.js +1 -1
  76. package/dist/extensions/forgecli/report-bug.js.map +1 -1
  77. package/dist/extensions/forgecli/retrospective.js +9 -9
  78. package/dist/extensions/forgecli/retrospective.js.map +1 -1
  79. package/dist/extensions/forgecli/review-code.d.ts +13 -0
  80. package/dist/extensions/forgecli/review-code.js +62 -3
  81. package/dist/extensions/forgecli/review-code.js.map +1 -1
  82. package/dist/extensions/forgecli/review-plan.d.ts +13 -0
  83. package/dist/extensions/forgecli/review-plan.js +65 -3
  84. package/dist/extensions/forgecli/review-plan.js.map +1 -1
  85. package/dist/extensions/forgecli/skill-curator-subagent.d.ts +2 -1
  86. package/dist/extensions/forgecli/skill-curator-subagent.js +2 -1
  87. package/dist/extensions/forgecli/skill-curator-subagent.js.map +1 -1
  88. package/dist/extensions/forgecli/sprint-intake.js +6 -6
  89. package/dist/extensions/forgecli/sprint-intake.js.map +1 -1
  90. package/dist/extensions/forgecli/sprint-plan.js +9 -9
  91. package/dist/extensions/forgecli/sprint-plan.js.map +1 -1
  92. package/dist/extensions/forgecli/status-command.js +1 -1
  93. package/dist/extensions/forgecli/status-command.js.map +1 -1
  94. package/dist/extensions/forgecli/store-query.js +11 -11
  95. package/dist/extensions/forgecli/store-query.js.map +1 -1
  96. package/dist/extensions/forgecli/store-repair.js +7 -7
  97. package/dist/extensions/forgecli/store-repair.js.map +1 -1
  98. package/dist/extensions/forgecli/validate.js +17 -2
  99. package/dist/extensions/forgecli/validate.js.map +1 -1
  100. package/dist/forge-payload/.base-pack/commands/check-agent.md +22 -0
  101. package/dist/forge-payload/.base-pack/commands/new-sprint.md +22 -0
  102. package/dist/forge-payload/.base-pack/commands/plan-sprint.md +22 -0
  103. package/dist/forge-payload/.base-pack/commands/quiz-agent.md +2 -18
  104. package/dist/forge-payload/.base-pack/commands/retro.md +22 -0
  105. package/dist/forge-payload/.base-pack/commands/retrospective.md +2 -18
  106. package/dist/forge-payload/.base-pack/commands/sprint-intake.md +2 -18
  107. package/dist/forge-payload/.base-pack/commands/sprint-plan.md +2 -18
  108. package/dist/forge-payload/.base-pack/workflows/_fragments/friction-emit.md +2 -2
  109. package/dist/forge-payload/.base-pack/workflows/_fragments/generation-instructions.md +4 -4
  110. package/dist/forge-payload/.base-pack/workflows/_fragments/iron-laws.md +1 -1
  111. package/dist/forge-payload/.base-pack/workflows/architect_approve.md +13 -1
  112. package/dist/forge-payload/.base-pack/workflows/commit_task.md +12 -1
  113. package/dist/forge-payload/.base-pack/workflows/enhance.md +6 -6
  114. package/dist/forge-payload/.base-pack/workflows/fix_bug.md +1 -1
  115. package/dist/forge-payload/.base-pack/workflows/implement_plan.md +14 -2
  116. package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +2 -2
  117. package/dist/forge-payload/.base-pack/workflows/orchestrate_task.md +20 -4
  118. package/dist/forge-payload/.base-pack/workflows/plan_task.md +14 -2
  119. package/dist/forge-payload/.base-pack/workflows/review_code.md +37 -7
  120. package/dist/forge-payload/.base-pack/workflows/review_plan.md +36 -6
  121. package/dist/forge-payload/.base-pack/workflows/run_sprint.md +2 -2
  122. package/dist/forge-payload/.base-pack/workflows/validate_task.md +37 -7
  123. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  124. package/dist/forge-payload/.schemas/config.schema.json +0 -5
  125. package/dist/forge-payload/.schemas/enum-catalog.json +9 -13
  126. package/dist/forge-payload/.schemas/migrations.json +54 -0
  127. package/dist/forge-payload/agents/tomoshibi.md +150 -6
  128. package/dist/forge-payload/commands/add-pipeline.md +1 -1
  129. package/dist/forge-payload/commands/add-task.md +1 -1
  130. package/dist/forge-payload/commands/calibrate.md +4 -350
  131. package/dist/forge-payload/commands/check-agent.md +38 -0
  132. package/dist/forge-payload/commands/config.md +3 -113
  133. package/dist/forge-payload/commands/enhance.md +5 -32
  134. package/dist/forge-payload/commands/health.md +155 -13
  135. package/dist/forge-payload/commands/init.md +25 -31
  136. package/dist/forge-payload/commands/migrate.md +6 -154
  137. package/dist/forge-payload/commands/quiz-agent.md +2 -34
  138. package/dist/forge-payload/commands/rebuild.md +664 -0
  139. package/dist/forge-payload/commands/regenerate.md +2 -774
  140. package/dist/forge-payload/commands/remove.md +10 -13
  141. package/dist/forge-payload/commands/repair.md +187 -0
  142. package/dist/forge-payload/commands/search.md +73 -0
  143. package/dist/forge-payload/commands/status.md +105 -0
  144. package/dist/forge-payload/commands/store-query.md +2 -69
  145. package/dist/forge-payload/commands/store-repair.md +2 -183
  146. package/dist/forge-payload/commands/update-tools.md +4 -50
  147. package/dist/forge-payload/commands/update.md +64 -58
  148. package/dist/forge-payload/hooks/check-update.cjs +1 -1
  149. package/dist/forge-payload/hooks/post-init.cjs +2 -2
  150. package/dist/forge-payload/hooks/post-sprint.cjs +2 -2
  151. package/dist/forge-payload/hooks/triage-error.cjs +11 -10
  152. package/dist/forge-payload/init/phases/phase-1-collect.md +138 -0
  153. package/dist/forge-payload/init/phases/phase-2-discover.md +127 -0
  154. package/dist/forge-payload/init/phases/phase-3-materialize.md +113 -0
  155. package/dist/forge-payload/init/phases/phase-4-register.md +159 -0
  156. package/dist/forge-payload/integrity.json +21 -24
  157. package/dist/forge-payload/meta/fragments/tool-discipline.md +22 -0
  158. package/dist/forge-payload/meta/templates/meta-retro.md +28 -0
  159. package/dist/forge-payload/meta/workflows/_fragments/friction-emit.md +2 -2
  160. package/dist/forge-payload/meta/workflows/_fragments/generation-instructions.md +4 -4
  161. package/dist/forge-payload/meta/workflows/_fragments/iron-laws.md +1 -1
  162. package/dist/forge-payload/meta/workflows/meta-approve.md +13 -1
  163. package/dist/forge-payload/meta/workflows/meta-check-agent.md +138 -0
  164. package/dist/forge-payload/meta/workflows/meta-commit.md +12 -1
  165. package/dist/forge-payload/meta/workflows/meta-enhance.md +5 -5
  166. package/dist/forge-payload/meta/workflows/meta-fix-bug.md +1 -1
  167. package/dist/forge-payload/meta/workflows/meta-implement.md +13 -1
  168. package/dist/forge-payload/meta/workflows/meta-migrate.md +3 -3
  169. package/dist/forge-payload/meta/workflows/meta-new-sprint.md +84 -0
  170. package/dist/forge-payload/meta/workflows/meta-orchestrate.md +20 -4
  171. package/dist/forge-payload/meta/workflows/meta-plan-sprint.md +152 -0
  172. package/dist/forge-payload/meta/workflows/meta-plan-task.md +13 -1
  173. package/dist/forge-payload/meta/workflows/meta-retro.md +73 -0
  174. package/dist/forge-payload/meta/workflows/meta-review-implementation.md +37 -7
  175. package/dist/forge-payload/meta/workflows/meta-review-plan.md +36 -6
  176. package/dist/forge-payload/meta/workflows/meta-validate.md +37 -7
  177. package/dist/forge-payload/schemas/config.schema.json +0 -5
  178. package/dist/forge-payload/schemas/enum-catalog.json +9 -13
  179. package/dist/forge-payload/schemas/structure-manifest.json +6 -8
  180. package/dist/forge-payload/tools/artifact.cjs +295 -0
  181. package/dist/forge-payload/tools/banners.cjs +3 -4
  182. package/dist/forge-payload/tools/build-context-pack.cjs +1 -1
  183. package/dist/forge-payload/tools/check-structure.cjs +8 -3
  184. package/dist/forge-payload/tools/store-cli.cjs +67 -7
  185. package/dist/forge-payload/tools/substitute-placeholders.cjs +1 -1
  186. package/dist/forge-payload/tools/verify-apply.cjs +75 -0
  187. package/dist/forge-payload/tools/verify-phase.cjs +259 -0
  188. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  189. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +0 -17
  190. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  191. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +21 -38
  192. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  193. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  194. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +5 -4
  195. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  196. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +2 -1
  197. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  198. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +5 -2
  199. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  200. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  201. package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +24 -1
  202. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.d.ts.map +1 -1
  203. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js +2 -3
  204. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js.map +1 -1
  205. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.d.ts +1 -0
  206. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.d.ts.map +1 -1
  207. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.js +52 -22
  208. package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.js.map +1 -1
  209. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  210. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js +16 -4
  211. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  212. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  213. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +45 -50
  214. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  215. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
  216. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js +43 -81
  217. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
  218. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  219. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.js +27 -12
  220. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.js.map +1 -1
  221. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  222. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js +2 -3
  223. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  224. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
  225. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js +3 -3
  226. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
  227. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
  228. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js +5 -5
  229. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
  230. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.d.ts +2 -0
  231. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.d.ts.map +1 -1
  232. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js +37 -0
  233. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js.map +1 -1
  234. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  235. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js +9 -8
  236. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  237. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
  238. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js +20 -35
  239. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js.map +1 -1
  240. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +3 -0
  241. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  242. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js +64 -7
  243. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
  244. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  245. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +15 -3
  246. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  247. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.d.ts +3 -1
  248. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.d.ts.map +1 -1
  249. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.js +14 -8
  250. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.js.map +1 -1
  251. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.d.ts +30 -0
  252. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.d.ts.map +1 -0
  253. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.js +124 -0
  254. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.js.map +1 -0
  255. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.d.ts +2 -0
  256. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.d.ts.map +1 -0
  257. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.js +31 -0
  258. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.js.map +1 -0
  259. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts +7 -27
  260. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts.map +1 -1
  261. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js +75 -115
  262. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js.map +1 -1
  263. package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +6 -0
  264. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +1 -1
  265. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  266. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package.json +1 -1
  267. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package.json +1 -1
  268. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +12 -14
  269. package/node_modules/@earendil-works/pi-coding-agent/package.json +5 -5
  270. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts +3 -0
  271. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts.map +1 -0
  272. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js +53 -0
  273. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -0
  274. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
  275. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +4 -1
  276. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  277. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +2 -0
  278. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  279. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +13 -1
  280. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  281. package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
  282. package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
  283. package/node_modules/@earendil-works/pi-tui/package.json +2 -2
  284. package/package.json +6 -6
  285. package/dist/extensions/forgecli/forge-init/phase-descriptors.d.ts +0 -72
  286. package/dist/extensions/forgecli/forge-init/phase-descriptors.js +0 -359
  287. package/dist/extensions/forgecli/forge-init/phase-descriptors.js.map +0 -1
  288. package/dist/extensions/forgecli/forge-init/prompts.d.ts +0 -10
  289. package/dist/extensions/forgecli/forge-init/prompts.js +0 -91
  290. package/dist/extensions/forgecli/forge-init/prompts.js.map +0 -1
  291. package/dist/extensions/forgecli/lib/store-error-remediation.d.ts +0 -65
  292. package/dist/extensions/forgecli/lib/store-error-remediation.js +0 -298
  293. package/dist/extensions/forgecli/lib/store-error-remediation.js.map +0 -1
  294. package/dist/forge-payload/hooks/check-update.js +0 -378
  295. package/dist/forge-payload/hooks/forge-permissions.js +0 -164
  296. package/dist/forge-payload/hooks/triage-error.js +0 -77
  297. package/dist/forge-payload/hooks/validate-write.js +0 -250
@@ -1,778 +1,6 @@
1
1
  ---
2
2
  name: regenerate
3
- description: Use when the engineering knowledge base has been enriched by sprints and you want to refresh the generated workflows, templates, tools, or knowledge-base docs
3
+ description: Renamed in v1.0 use /forge:rebuild
4
4
  ---
5
5
 
6
- # /forge:regenerate
7
-
8
- Re-run generation phases using the current state of the project.
9
-
10
- ## Locate the Forge plugin
11
-
12
- ```
13
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
14
- ```
15
-
16
- Read `.forge/config.json`. If it does not exist, stop and tell the user to run
17
- `/forge:init` first.
18
-
19
- Resolve tools from the plugin:
20
- ```
21
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
22
- ```
23
-
24
- All tool invocations in this command use `node "$FORGE_ROOT/tools/<tool>.cjs"`.
25
-
26
- ## Hero
27
-
28
- Open the run with the forge hero + a one-line subtitle (parses
29
- `$ARGUMENTS` to mention the target):
30
-
31
- ```sh
32
- node "$FORGE_ROOT/tools/banners.cjs" forge
33
- node "$FORGE_ROOT/tools/banners.cjs" --subtitle "Re-running generation against current meta-definitions ($ARGUMENTS or full)"
34
- ```
35
-
36
- Each category section below opens with a `banners.cjs --badge {key}` call
37
- before its "Generating ..." line. The badge map:
38
-
39
- | Category | Banner key |
40
- |----------|-----------|
41
- | personas | `bloom` |
42
- | skills | `tide` |
43
- | templates | `drift` |
44
- | workflows | `ember` |
45
- | commands | `lumen` |
46
- | knowledge-base | `oracle` |
47
-
48
- `banners.cjs` strips ANSI in `NO_COLOR` / non-tty / `--plain` contexts.
49
-
50
- ## Fast-mode awareness
51
-
52
- Regenerate respects `.forge/config.json` `mode`. Read it once at the top of
53
- the command and reuse:
54
-
55
- ```sh
56
- CONFIG_MODE=$(node "$FORGE_ROOT/tools/manage-config.cjs" get mode 2>/dev/null || echo "full")
57
- ```
58
-
59
- If `CONFIG_MODE` is not `"fast"` (i.e. `"full"` or anything else), every
60
- category below behaves exactly as it always has — no filtering, no mode
61
- write. The fast-mode handling only kicks in when `CONFIG_MODE == "fast"`.
62
-
63
- ### Materialized detection (fast mode only)
64
-
65
- A target file is **materialized** if:
66
-
67
- | Namespace | Materialized if… |
68
- |---|---|
69
- | `.forge/workflows/<id>.md` | File exists AND its first non-blank line does not begin with `<!-- FORGE FAST-MODE STUB` |
70
- | `.forge/personas/<role>.md` | File exists |
71
- | `.forge/skills/<role>-skills.md` | File exists |
72
- | `.forge/templates/<STEM>.md` | File exists |
73
- | `.claude/commands/<name>` | Always present in fast mode — no filter needed |
74
-
75
- For each meta source enumerated below, derive the target path using the
76
- existing single-file mapping rules in each category and apply the test.
77
-
78
- The stub sentinel `<!-- FORGE FAST-MODE STUB` is written by `/forge:init`
79
- Phase 7 fast branch — see `forge/init/sdlc-init.md`.
80
-
81
- ### Single-file variants in fast mode
82
-
83
- For any single-file invocation (e.g. `/forge:regenerate workflows:plan_task`)
84
- where `CONFIG_MODE == "fast"`:
85
- - If the target is materialized → regenerate as normal.
86
- - If the target is a stub or missing → emit
87
- `〇 Fast mode: <path> is a stub and will self-refresh on first use. Nothing to regenerate.`
88
- and exit 0 (no manifest changes).
89
-
90
- ### Default (no-args) in fast mode
91
-
92
- The default run filters every category through the materialized check and
93
- emits a per-category summary footer. **It does NOT write `mode`** — mode
94
- promotion is a separate, explicit decision owned by `/forge:config mode full`.
95
-
96
- ## Arguments
97
-
98
- $ARGUMENTS
99
-
100
- Parse the argument to identify the target category and optional sub-target.
101
- Sub-targets may be passed either as a second positional argument or embedded
102
- with a colon delimiter (both forms are equivalent).
103
-
104
- > **Category scope enforcement**: If this workflow (or any subagent it spawns)
105
- > calls `substitute-placeholders.cjs` directly to re-materialise base-pack
106
- > files, it MUST pass `--category <parsed-category>` to restrict writes to the
107
- > requested namespace. Without this flag the tool overwrites all five output
108
- > directories (personas, skills, workflows, templates, commands), silently
109
- > discarding any regenerated content in non-targeted categories.
110
- >
111
- > Example:
112
- > ```sh
113
- > node "$FORGE_ROOT/tools/substitute-placeholders.cjs" \
114
- > --base-pack "$FORGE_ROOT/init/base-pack" \
115
- > --config ".forge/config.json" \
116
- > --category "personas" \
117
- > --out "."
118
- > ```
119
-
120
- ```
121
- /forge:regenerate # workflows + commands + templates + personas (default)
122
- /forge:regenerate personas # .forge/personas/ — all persona files
123
- /forge:regenerate personas engineer # single persona file only
124
- /forge:regenerate personas:engineer # same — colon form (from migration entries)
125
- /forge:regenerate skills # .forge/skills/ role-specific skills
126
- /forge:regenerate skills engineer # single skill file only
127
- /forge:regenerate skills:engineer # same — colon form (from migration entries)
128
- /forge:regenerate workflows # full workflow rebuild
129
- /forge:regenerate workflows plan_task # single workflow file only
130
- /forge:regenerate workflows:plan_task # same — colon form (from migration entries)
131
- /forge:regenerate workflows sprint_plan # single workflow file only
132
- /forge:regenerate commands # .claude/commands/ slash command wrappers
133
- /forge:regenerate templates # document templates only
134
- /forge:regenerate templates PLAN_TEMPLATE # single template file only
135
- /forge:regenerate templates:PLAN_TEMPLATE # same — colon form (from migration entries)
136
- /forge:regenerate knowledge-base # all three sub-targets (merge mode)
137
- /forge:regenerate knowledge-base architecture
138
- /forge:regenerate knowledge-base:architecture # colon form (from migration entries)
139
- /forge:regenerate knowledge-base business-domain
140
- /forge:regenerate knowledge-base stack-checklist
141
- ```
142
-
143
- When parsing the argument, split on `:` first: if the argument is
144
- `"workflows:plan_task"`, treat it as category=`workflows`,
145
- sub-target=`plan_task`. If no `:` is present, the second positional word
146
- (if any) is the sub-target. The sub-target is always optional.
147
-
148
- ---
149
-
150
- ## Category: `personas` — full rebuild or single file
151
-
152
- Re-generate `.forge/personas/` from the meta-persona definitions and the current knowledge base.
153
-
154
- **If a sub-target is provided** (e.g. `/forge:regenerate personas engineer`
155
- or the colon form `personas:engineer`), regenerate only the single persona
156
- file `.forge/personas/<sub-target>.md` from `$FORGE_ROOT/meta/personas/meta-<sub-target>.md`.
157
-
158
- If `CONFIG_MODE == "fast"`: apply the single-file materialized check
159
- (persona is materialized iff `.forge/personas/<sub-target>.md` exists). If
160
- not materialized, emit the stub-or-missing message and exit 0. Otherwise
161
- proceed.
162
-
163
- Before writing, check the file for manual modifications (mirrors the workflows
164
- and templates pre-write guard — FORGE-BUG-037 / forge#106):
165
- ```sh
166
- node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/personas/<sub-target>.md
167
- ```
168
- For exit 1 (modified): warn `△ .forge/personas/<sub-target>.md has been manually
169
- modified (likely by /forge:enhance). Overwriting will discard your changes.
170
- Proceed? (yes / no / show diff)`. Collect the answer before proceeding. On
171
- `no` or `show diff` rejecting overwrite, skip this file and exit cleanly.
172
- On exit 2 (untracked) or exit 3 (missing): proceed without prompting.
173
-
174
- Then remove any existing manifest entry for this specific file (handles rename case):
175
- ```sh
176
- node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/personas/<sub-target>.md 2>/dev/null || true
177
- ```
178
- Generate the single file (no fan-out needed for one file). All manifest and hash
179
- steps below apply to that single file.
180
-
181
- **If no sub-target** — full rebuild, fanned out in parallel:
182
-
183
- 1. Build the project brief:
184
- ```sh
185
- node "$FORGE_ROOT/tools/build-init-context.cjs" \
186
- --config .forge/config.json --personas .forge/personas \
187
- --templates .forge/templates --kb "$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)" \
188
- --out .forge/init-context.md --json-out .forge/init-context.json
189
- ```
190
- 2. Enumerate `$FORGE_ROOT/meta/personas/meta-*.md` (exclude README.md).
191
- Let `M_total` = the enumerated count.
192
-
193
- **If `CONFIG_MODE == "fast"`**: filter the enumeration to only entries
194
- whose target file `.forge/personas/<role>.md` exists (materialized check).
195
- Let `N_materialized` = the filtered count.
196
- - If `N_materialized == 0`: emit `〇 Fast mode: no materialized personas to regenerate.` and return 0 (no manifest changes).
197
- - Otherwise continue with the filtered set; do NOT clear the namespace
198
- (skip step 4) — clearing would remove manifest entries for stubs/missing
199
- entries that we are intentionally leaving alone. Instead, only `remove`
200
- manifest entries for the files we are about to regenerate (mirrors the
201
- single-file pattern):
202
- ```sh
203
- for each filtered entry:
204
- node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/personas/<role>.md 2>/dev/null || true
205
- ```
206
-
207
- 3. Render the personas badge, then emit the count:
208
- ```sh
209
- node "$FORGE_ROOT/tools/banners.cjs" --badge bloom
210
- ```
211
- Then emit: `Generating personas (<N> files in parallel)...` — use `N_materialized` in fast mode, `M_total` in full mode.
212
- 4. Check each (enumerated, fast-mode-filtered) file for manual modifications
213
- before any clearing or regeneration (mirrors the workflows + templates
214
- pre-write guard — FORGE-BUG-037 / forge#106):
215
- ```sh
216
- node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/personas/<role>.md
217
- ```
218
- For any exit 1 (modified): warn `△ .forge/personas/<role>.md has been manually
219
- modified (likely by /forge:enhance). Overwriting will discard your changes.
220
- Proceed? (yes / no / show diff)`. Collect answers before proceeding. Files
221
- the user declines are removed from the regeneration set for this run. Exit
222
- 2 (untracked) and exit 3 (missing) require no prompt.
223
- 5. **Full mode only**: clear stale entries (skip in fast mode — see step 2):
224
- ```sh
225
- node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .forge/personas/
226
- ```
227
- 6. **Spawn the persona subagents in a SINGLE Agent tool message** using
228
- `$FORGE_ROOT/init/generation/generate-persona.md` as the per-subagent rulebook
229
- (same fan-out pattern as `/forge:init` Phase 4). Spawn one per filtered
230
- entry — every entry in fast mode, every meta source in full mode.
231
- 7. Collect results. For each `done:` result → emit ` 〇 <filename>.md`.
232
- Retry failures once. Any still failing: surface the id list.
233
- 8. **Replay user enhancements** (forge#107 / Approach A — layer 3 of the composition
234
- contract declared at `manage-versions.cjs:13`). After fresh base-pack content
235
- is written, restore any user-enhanced files captured by `/forge:enhance` Phase 2
236
- snapshots:
237
- ```sh
238
- node "$FORGE_ROOT/tools/manage-versions.cjs" replay --target personas
239
- ```
240
- The tool walks all snapshots in `.forge/structure-versions.json`, finds enhanced
241
- elements whose normalized path starts with `personas/`, and copies them from
242
- the archive back over the freshly-generated content. Later snapshots win on
243
- file collision. Files not captured by any snapshot remain at the fresh
244
- base-pack version.
245
- 9. Re-record manifest hashes for the (now restored) files so subsequent
246
- `generation-manifest check` calls reflect current on-disk content:
247
- ```sh
248
- for each <role> in the filtered set:
249
- node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/personas/<role>.md
250
- ```
251
- 10. Emit ` 〇 personas — <N> files written` (fast mode appends ` (M-N deferred)` when `N < M`).
252
-
253
- ---
254
-
255
- ## Category: `skills` — full rebuild or single file
256
-
257
- Re-generate `.forge/skills/` from the meta-skill templates and project config.
258
-
259
- **If a sub-target is provided** (e.g. `/forge:regenerate skills engineer`
260
- or the colon form `skills:engineer`), regenerate only the single skill file
261
- `.forge/skills/<sub-target>-skills.md` from
262
- `$FORGE_ROOT/meta/skills/meta-<sub-target>-skills.md`.
263
-
264
- If `CONFIG_MODE == "fast"`: apply the single-file materialized check
265
- (skill is materialized iff `.forge/skills/<sub-target>-skills.md` exists).
266
- If not materialized, emit the stub-or-missing message and exit 0. Otherwise
267
- proceed.
268
-
269
- Before writing, check the file for manual modifications (mirrors the workflows
270
- and templates pre-write guard — FORGE-BUG-037 / forge#106):
271
- ```sh
272
- node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/skills/<sub-target>-skills.md
273
- ```
274
- For exit 1 (modified): warn `△ .forge/skills/<sub-target>-skills.md has been
275
- manually modified (likely by /forge:enhance). Overwriting will discard your
276
- changes. Proceed? (yes / no / show diff)`. Collect the answer before
277
- proceeding. On `no` or `show diff` rejecting overwrite, skip this file and
278
- exit cleanly. On exit 2 (untracked) or exit 3 (missing): proceed without
279
- prompting.
280
-
281
- Then remove any existing manifest entry for this specific file:
282
- ```sh
283
- node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/skills/<sub-target>-skills.md 2>/dev/null || true
284
- ```
285
- Generate the single file (no fan-out needed). All manifest and hash steps below
286
- apply to that single file.
287
-
288
- **If no sub-target** — full rebuild, fanned out in parallel:
289
-
290
- 1. Build the project brief (same command as in `personas` above).
291
- 2. Enumerate `$FORGE_ROOT/meta/skills/meta-*-skills.md`. Let `M_total` =
292
- the enumerated count.
293
-
294
- **If `CONFIG_MODE == "fast"`**: filter to entries whose target file
295
- `.forge/skills/<role>-skills.md` exists. Let `N_materialized` = filtered
296
- count.
297
- - If `N_materialized == 0`: emit `〇 Fast mode: no materialized skills to regenerate.` and return 0.
298
- - Otherwise continue with the filtered set; skip step 4 (do not clear
299
- namespace), and `remove` manifest entries only for the filtered files.
300
-
301
- 3. Render the skills badge, then emit the count:
302
- ```sh
303
- node "$FORGE_ROOT/tools/banners.cjs" --badge tide
304
- ```
305
- Then emit: `Generating skills (<N> files in parallel)...`
306
- 4. Check each (enumerated, fast-mode-filtered) file for manual modifications
307
- before any clearing or regeneration (mirrors the workflows + templates
308
- pre-write guard — FORGE-BUG-037 / forge#106):
309
- ```sh
310
- node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/skills/<role>-skills.md
311
- ```
312
- For any exit 1 (modified): warn `△ .forge/skills/<role>-skills.md has been
313
- manually modified (likely by /forge:enhance). Overwriting will discard your
314
- changes. Proceed? (yes / no / show diff)`. Collect answers before proceeding.
315
- Files the user declines are removed from the regeneration set for this run.
316
- Exit 2 (untracked) and exit 3 (missing) require no prompt.
317
- 5. **Full mode only**: clear stale entries (skip in fast mode):
318
- ```sh
319
- node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .forge/skills/
320
- ```
321
- 6. **Spawn the skill subagents in a SINGLE Agent tool message** using
322
- `$FORGE_ROOT/init/generation/generate-skill.md` as the per-subagent rulebook.
323
- 7. Collect results. Retry failures once. Any still failing: surface the id list.
324
- 8. **Replay user enhancements** (forge#107 / Approach A):
325
- ```sh
326
- node "$FORGE_ROOT/tools/manage-versions.cjs" replay --target skills
327
- ```
328
- Walks snapshots; restores any enhanced `skills/<role>-skills.md` files from
329
- the archive over the freshly-generated content. Later snapshots win on
330
- collision.
331
- 9. Re-record manifest hashes for the (now restored) files:
332
- ```sh
333
- for each <role> in the filtered set:
334
- node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/skills/<role>-skills.md
335
- ```
336
- 10. For each completed file, check manifest (warn on modified), emit ` 〇 <filename>.md`.
337
- Fast mode appends `〇 skills — <N> files written (M-N deferred)` when `N < M`.
338
-
339
- ---
340
-
341
- ## Category: `workflows` — full rebuild or single file
342
-
343
- Re-generate `.forge/workflows/` from the meta-workflow definitions and the
344
- current knowledge base. Covers both atomic workflows and orchestration.
345
-
346
- **If a sub-target is provided** (e.g. `/forge:regenerate workflows plan_task`
347
- or the colon form `workflows:plan_task`), regenerate only the single workflow
348
- file `.forge/workflows/<sub-target>.md`.
349
-
350
- **Special case — `_fragments` sub-target (directory fan-out):**
351
-
352
- `_fragments` is a directory in `$FORGE_ROOT/meta/workflows/_fragments/`, not a
353
- single file. When the sub-target is `_fragments` (or when
354
- `$FORGE_ROOT/meta/workflows/<sub-target>` resolves to a directory rather than a
355
- file), use directory fan-out mode instead of single-file mode:
356
-
357
- 1. Enumerate all `.md` files in `$FORGE_ROOT/meta/workflows/_fragments/`.
358
- 2. Ensure `.forge/workflows/_fragments/` directory exists (create if absent).
359
- 3. For each fragment file, copy verbatim (no placeholder substitution) to
360
- `.forge/workflows/_fragments/<filename>`.
361
- 4. Record a manifest hash for each copied file:
362
- ```sh
363
- node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/workflows/_fragments/<filename>
364
- ```
365
- 5. Emit `〇 workflows:_fragments — N fragment files copied`.
366
-
367
- > **Note:** When invoked as `/forge:regenerate workflows:_fragments`, this command
368
- > fans out to copy all fragment files (currently four: `context-injection.md`,
369
- > `progress-reporting.md`, `event-emission-schema.md`, `finalize.md`). Verify the
370
- > result with `ls .forge/workflows/_fragments/`.
371
-
372
- For all other sub-targets (non-directory), continue with the standard single-file
373
- path below.
374
-
375
- If `CONFIG_MODE == "fast"`: apply the single-file materialized check —
376
- the workflow file must exist AND its first non-blank line must NOT begin
377
- with `<!-- FORGE FAST-MODE STUB`. If the file is a stub or missing, emit
378
- the stub-or-missing message and exit 0. Otherwise proceed.
379
-
380
- Before writing, remove any existing
381
- manifest entry for this specific file:
382
- ```sh
383
- node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/workflows/<sub-target>.md 2>/dev/null || true
384
- ```
385
- Generate the single file (no fan-out needed). Check manifest (warn on modified),
386
- write, record hash.
387
-
388
- **If no sub-target** — full rebuild using the same parallel fan-out as `/forge:init` Phase 7:
389
-
390
- 1. Build the project brief:
391
- ```sh
392
- node "$FORGE_ROOT/tools/build-init-context.cjs" \
393
- --config .forge/config.json --personas .forge/personas \
394
- --templates .forge/templates \
395
- --kb "$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)" \
396
- --out .forge/init-context.md --json-out .forge/init-context.json
397
- ```
398
- 2. Read `$FORGE_ROOT/init/workflow-gen-plan.json` (16-entry fan-out table).
399
- Let `M_total` = the entry count.
400
-
401
- **If `CONFIG_MODE == "fast"`**: filter to entries whose target file
402
- `.forge/workflows/<id>.md` is materialized (exists AND first non-blank
403
- line does not begin with `<!-- FORGE FAST-MODE STUB`).
404
- Let `N_materialized` = filtered count.
405
- - If `N_materialized == 0`: emit `〇 Fast mode: no materialized workflows to regenerate.` and return 0 (no manifest changes, orchestration skipped — orchestration only makes sense with a complete workflow set).
406
- - Otherwise continue with the filtered set.
407
-
408
- 3. Render the workflows badge, then emit the count:
409
- ```sh
410
- node "$FORGE_ROOT/tools/banners.cjs" --badge ember
411
- ```
412
- Then emit: `Generating workflows (<N> atomic + orchestration, parallel)...` —
413
- in fast mode, omit the orchestration suffix when filtering applies.
414
- 4. Check each (filtered) file for manual modifications before any clearing:
415
- ```sh
416
- node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/workflows/{filename}.md
417
- ```
418
- For any exit 1 (modified): warn `△ .forge/workflows/{filename}.md has been manually
419
- modified. Overwriting may discard manual edits not captured in any /forge:enhance snapshot. Edits captured by snapshots will be restored automatically via `manage-versions replay` after regeneration. Proceed? (yes / no / show diff)`
420
- Collect answers before proceeding.
421
- 5. **Full mode only**: clear stale entries (skip in fast mode — clearing
422
- would drop manifest entries for stubs we are intentionally leaving alone):
423
- ```sh
424
- node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .forge/workflows/
425
- ```
426
- In fast mode, only `remove` manifest entries for the filtered files
427
- that are about to be regenerated.
428
- 6. **Spawn the atomic workflow subagents in a SINGLE Agent tool message** using
429
- `$FORGE_ROOT/init/generation/generate-workflows.md` as the per-subagent rulebook
430
- (same fan-out pattern as `/forge:init` Phase 7d). Spawn one per filtered
431
- entry.
432
- 7. Collect results. Retry failures once in a single Agent call.
433
- 8. **Full mode only**: spawn orchestration subagent. **In fast mode this
434
- step is skipped** — orchestration depends on the complete workflow set
435
- being present and refreshed; running it against a partially materialised
436
- project would produce stale references. Orchestration files
437
- (`orchestrate_task.md`, `run_sprint.md`) refresh on full promotion or
438
- when workflows is fully rebuilt.
439
- ```
440
- Read $FORGE_ROOT/init/generation/generate-orchestration.md and follow it.
441
- FORGE_ROOT: {FORGE_ROOT}
442
- Input: $FORGE_ROOT/meta/workflows/meta-orchestrate.md + .forge/workflows/
443
- Output: .forge/workflows/orchestrate_task.md and .forge/workflows/run_sprint.md
444
- ```
445
- 9. **Replay user enhancements** (forge#107 / Approach A):
446
- ```sh
447
- node "$FORGE_ROOT/tools/manage-versions.cjs" replay --target workflows
448
- ```
449
- Walks snapshots; restores enhanced `workflows/<name>.md` files. Later
450
- snapshots win on collision.
451
- 10. For each written file: record hash `node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/workflows/{filename}.md`
452
- (this runs AFTER replay so the recorded hash reflects the restored content).
453
- 11. Emit ` 〇 workflows — <N> files written` (full mode: 18; fast mode:
454
- `〇 workflows — N of M files regenerated (others remain as stubs)`).
455
-
456
- **Do NOT touch:** `.claude/commands/`, `.forge/config.json`, or any knowledge base file.
457
-
458
- ---
459
-
460
- ## Category: `commands` — full rebuild
461
-
462
- Re-generate `.claude/commands/` slash command wrappers from the current
463
- `.forge/workflows/`. This is a thin generation step — each command file
464
- is just a wrapper that loads its workflow and passes arguments.
465
-
466
- Run this when:
467
- - Workflow files have been renamed (e.g. after a 0.5.0 upgrade)
468
- - A new workflow was added and its command wrapper is missing
469
- - A command wrapper is pointing at a workflow that no longer exists
470
-
471
- 1. Read `.forge/config.json` for paths
472
- 2. Enumerate `.forge/workflows/` to know what workflow files currently exist
473
- 3. Render the commands badge, then emit the count:
474
- ```sh
475
- node "$FORGE_ROOT/tools/banners.cjs" --badge lumen
476
- ```
477
- Then emit: `Generating commands (<N> files)...`
478
- 4. Clear stale entries for this namespace:
479
- ```sh
480
- node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .claude/commands/
481
- ```
482
- 5. Re-generate `.claude/commands/` following
483
- `$FORGE_ROOT/init/generation/generate-commands.md`
484
- The idempotency check will overwrite any command that references a
485
- missing or renamed workflow, and skip any that are already correct.
486
- 6. For each file being written:
487
- - Emit: ` ⋯ <filename>.md...`
488
- - Write the file
489
- - Record hash: `node "$FORGE_ROOT/tools/generation-manifest.cjs" record .claude/commands/{filename}.md`
490
- - Emit: ` 〇 <filename>.md`
491
-
492
- **DO NOT** touch any `.claude/commands/` file that is not in the output list
493
- in `generate-commands.md`. Custom commands (`supervisor-code.md`, project-specific
494
- wrappers, etc.) must never be written, overwritten, or deleted by this step.
495
- Retired Forge command files (`engineer.md`, `supervisor.md`) are cleaned up
496
- separately by Step 5b-pre in `/forge:update` — not here.
497
-
498
- ---
499
-
500
- ## Category: `templates` — full rebuild or single file
501
-
502
- Re-generate `.forge/templates/` from the meta-template definitions and the
503
- current knowledge base.
504
-
505
- **If a sub-target is provided** (e.g. `/forge:regenerate templates PLAN_TEMPLATE`
506
- or the colon form `templates:PLAN_TEMPLATE`), regenerate only the single template
507
- file `.forge/templates/<sub-target>.md`. Determine the source meta file from
508
- `$FORGE_ROOT/init/generation/generate-template.md`'s filename mapping (e.g.
509
- `PLAN_TEMPLATE` → `meta-plan.md`).
510
-
511
- If `CONFIG_MODE == "fast"`: apply the single-file materialized check
512
- (template is materialized iff `.forge/templates/<sub-target>.md` exists).
513
- If not materialized, emit the stub-or-missing message and exit 0. Otherwise
514
- proceed.
515
-
516
- Before writing, remove any existing manifest
517
- entry:
518
- ```sh
519
- node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/templates/<sub-target>.md 2>/dev/null || true
520
- ```
521
- Generate the single file (no fan-out needed). Record hash after writing.
522
-
523
- **If no sub-target** — full rebuild, fanned out in parallel:
524
-
525
- 1. Build the project brief (same command as in `personas` above).
526
- 2. Enumerate `$FORGE_ROOT/meta/templates/meta-*.md`. Let `M_total` =
527
- the enumerated count.
528
-
529
- **If `CONFIG_MODE == "fast"`**: filter to entries whose target file
530
- `.forge/templates/<STEM>.md` exists (use the same filename mapping as
531
- the single-file variant). Let `N_materialized` = filtered count.
532
- - If `N_materialized == 0`: emit `〇 Fast mode: no materialized templates to regenerate.` and return 0.
533
- - Otherwise continue with the filtered set; skip step 5 (do not clear
534
- namespace), and only `remove` manifest entries for the filtered files.
535
-
536
- 3. Render the templates badge, then emit the count:
537
- ```sh
538
- node "$FORGE_ROOT/tools/banners.cjs" --badge drift
539
- ```
540
- Then emit: `Generating templates (<N> files in parallel)...`
541
- 4. Check each (filtered) file for manual modifications (warn on modified, same pattern as workflows).
542
- 5. **Full mode only**: clear stale entries (skip in fast mode):
543
- ```sh
544
- node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .forge/templates/
545
- ```
546
- 6. **Spawn the template subagents in a SINGLE Agent tool message** using
547
- `$FORGE_ROOT/init/generation/generate-template.md` as the per-subagent rulebook.
548
- 7. Collect results. Retry failures once. Any still failing: surface the id list.
549
- 8. **Replay user enhancements** (forge#107 / Approach A):
550
- ```sh
551
- node "$FORGE_ROOT/tools/manage-versions.cjs" replay --target templates
552
- ```
553
- Walks snapshots; restores enhanced `templates/<STEM>.md` files. Later
554
- snapshots win on collision.
555
- 9. For each written file: record hash, emit ` 〇 <filename>.md` (hash reflects
556
- post-replay content).
557
- 10. Re-record the one-shot init artifact not regenerated from a meta file:
558
- ```sh
559
- if [ -f ".forge/templates/CUSTOM_COMMAND_TEMPLATE.md" ]; then
560
- node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/templates/CUSTOM_COMMAND_TEMPLATE.md
561
- fi
562
- ```
563
- Fast-mode footer: emit `〇 templates — <N> files written (M-N deferred)` when `N < M`.
564
-
565
- ---
566
-
567
- ## Category: `knowledge-base` — merge mode
568
-
569
- **This is not a full rebuild.** The knowledge base accumulates writeback from
570
- every sprint. Overwriting it from scratch destroys that accumulated knowledge.
571
-
572
- Render the knowledge-base badge, then emit the status line:
573
-
574
- ```sh
575
- node "$FORGE_ROOT/tools/banners.cjs" --badge oracle
576
- ```
577
-
578
- Then emit: `Generating knowledge-base...`
579
-
580
- Instead: re-run the relevant discovery prompts scoped to what has changed,
581
- compute a delta against the existing docs, and merge only new content in.
582
-
583
- **Per sub-target, emit merge-level status lines (not per-file):**
584
-
585
- ```
586
- ⋯ merging <sub-target> docs...
587
- 〇 <sub-target> — N additions
588
- ```
589
-
590
- **Merge rule (applies to all sub-targets):**
591
- - Additive only — never remove or overwrite existing sections or entries.
592
- - `[?]` markers from prior generation may be updated if the re-scan can now
593
- confirm or correct them.
594
- - If the re-scan detects something that contradicts existing content, flag it
595
- as a `[CONFLICT]` comment for human review — do not resolve it silently.
596
- - Show all proposed additions as a diff and prompt before writing.
597
-
598
- ---
599
-
600
- ### Sub-target: `architecture`
601
-
602
- **Trigger:** new subsystems, services, or integrations have been added to the
603
- codebase since the architecture docs were last written.
604
-
605
- **Re-run discovery (in parallel):**
606
- - `$FORGE_ROOT/init/discovery/discover-stack.md`
607
- - `$FORGE_ROOT/init/discovery/discover-processes.md`
608
- - `$FORGE_ROOT/init/discovery/discover-routing.md`
609
-
610
- **Read existing docs:**
611
- - `engineering/architecture/*.md`
612
-
613
- **Merge into:**
614
-
615
- | Discovery output | Target doc | Merge action |
616
- |-----------------|-----------|-------------|
617
- | New framework or runtime | `stack.md` | Append to technology inventory |
618
- | New service or process | `processes.md` | Append new service section |
619
- | New API route group | `routing.md` | Append route group |
620
- | New deployment target | `deployment.md` | Append environment section |
621
- | Any new sub-system with no existing doc | Create new sub-doc + link from `INDEX.md` |
622
-
623
- ---
624
-
625
- ### Sub-target: `business-domain`
626
-
627
- **Trigger:** new ORM models, schema tables, or domain types have been added
628
- to the codebase. `forge:health` will flag these as orphaned entities.
629
-
630
- **Re-run discovery:**
631
- - `$FORGE_ROOT/init/discovery/discover-database.md`
632
-
633
- **Read existing doc:**
634
- - `engineering/business-domain/entity-model.md`
635
-
636
- **Merge into `entity-model.md`:**
637
- - Entities present in discovery output but absent from the doc → append new
638
- entity sections with fields and relationships.
639
- - New fields on an existing entity → add within the existing entity section,
640
- marked `[NEW]` for team review.
641
- - Entities no longer found in the codebase → flag with `[NOT FOUND IN SCAN]`
642
- comment but do not remove (may be soft-deleted, feature-flagged, or in a
643
- migration).
644
-
645
- ---
646
-
647
- ### Sub-target: `stack-checklist`
648
-
649
- **Trigger:** new libraries or frameworks have been adopted mid-project that
650
- are not yet represented in review checklist items.
651
-
652
- **Re-run discovery:**
653
- - `$FORGE_ROOT/init/discovery/discover-stack.md`
654
- - `$FORGE_ROOT/init/discovery/discover-testing.md`
655
-
656
- **Read existing doc:**
657
- - `engineering/stack-checklist.md`
658
-
659
- **Merge into `stack-checklist.md`:**
660
- - Libraries detected but not yet in the checklist → append new checklist items.
661
- - Never remove or modify existing items (they encode accumulated review knowledge).
662
-
663
- ---
664
-
665
- ## Default (no argument)
666
-
667
- Run all five categories respecting dependencies — with maximum parallelism:
668
-
669
- 1. **Build brief** (once, synchronous):
670
- ```sh
671
- node "$FORGE_ROOT/tools/build-init-context.cjs" \
672
- --config .forge/config.json --personas .forge/personas \
673
- --templates .forge/templates \
674
- --kb "$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)" \
675
- --out .forge/init-context.md --json-out .forge/init-context.json
676
- ```
677
-
678
- 2. **Personas + Templates in parallel** (both need only KB, not each other):
679
- Spawn persona fan-out and template fan-out in a **SINGLE Agent tool message**
680
- (all persona subagents + all template subagents together). Wait for all to return.
681
-
682
- 3. **Skills + Workflows in parallel** (skills need personas; workflows need personas + templates — both now ready):
683
- Spawn skill fan-out and workflow fan-out (16 atomic) in a **SINGLE Agent tool message**.
684
- Wait for all to return.
685
-
686
- 4. **Orchestration + Commands in parallel** (both need workflows — now ready):
687
- Spawn orchestration and commands subagents in a **SINGLE Agent tool message**.
688
- Wait for both.
689
-
690
- This runs in 4 serial steps instead of 5 sequential category passes, with all
691
- fan-outs parallelised within each step.
692
-
693
- Each category honours the materialized filter described in **Fast-mode
694
- awareness** above. The default run **does NOT write `mode`** — promotion
695
- is owned by `/forge:config mode full`. Mode stays `fast` until the user
696
- runs that command.
697
-
698
- ### Fast-mode completion footer
699
-
700
- When `CONFIG_MODE == "fast"`, after all four steps succeed, emit a summary
701
- footer (use the per-category counts collected during each fan-out):
702
-
703
- ```
704
- 〇 Regenerate complete (fast mode)
705
- personas — N of M regenerated
706
- templates — N of M regenerated
707
- skills — N of M regenerated
708
- workflows — N of M regenerated (others remain as stubs)
709
- commands — always present, regenerated normally
710
-
711
- 〇 To promote to full mode: /forge:config mode full
712
- ```
713
-
714
- Full-mode projects are unaffected — the mode check short-circuits to the
715
- existing full-rebuild behaviour. No filter, no footer.
716
-
717
- ## On error
718
-
719
- If any step above fails unexpectedly, describe what went wrong and ask:
720
-
721
- > "This looks like a Forge bug. Would you like to file a report to help improve it? Run `/forge:report-bug` — I'll pre-fill the report from this conversation."
722
-
723
- ---
724
-
725
- ## Post-regeneration persona pack
726
-
727
- Rebuild the compact persona/skill reference pack at
728
- `.forge/cache/persona-pack.json`. This is consumed by `meta-orchestrate` and
729
- `meta-fix-bug` to inject persona references (not verbatim prose) into
730
- subagent prompts when `FORGE_PROMPT_MODE=reference` (the default).
731
-
732
- The pack compiles YAML frontmatter from `$FORGE_ROOT/meta/personas/meta-*.md`
733
- and `$FORGE_ROOT/meta/skills/meta-*.md`. It is safe to rebuild on every
734
- regenerate run (cost: ~50ms, 16 files).
735
-
736
- ```sh
737
- node "$FORGE_ROOT/tools/build-persona-pack.cjs" \
738
- --out .forge/cache/persona-pack.json
739
- ```
740
-
741
- - Exit 0: emit `〇 persona pack refreshed`
742
- - Exit 1: surface the stderr message (it includes the offending file path
743
- for missing-frontmatter or malformed-YAML errors) and advise the user
744
- to file a bug if the error is unexpected.
745
-
746
- ## Post-regeneration context pack
747
-
748
- Rebuild the architecture context pack at `.forge/cache/context-pack.md` and
749
- `.forge/cache/context-pack.json`. This is injected into subagent prompts by
750
- `meta-orchestrate` and `meta-fix-bug` to reduce per-phase architecture doc reads.
751
-
752
- The pack summarises `engineering/architecture/*.md` (skips `*.draft.md`). If
753
- the existing pack has `manual: true` in its frontmatter, the builder skips
754
- and leaves it intact.
755
-
756
- ```sh
757
- ENGINEERING=$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)
758
- node "$FORGE_ROOT/tools/build-context-pack.cjs" \
759
- --arch-dir "$ENGINEERING/architecture" \
760
- --out-md .forge/cache/context-pack.md \
761
- --out-json .forge/cache/context-pack.json
762
- ```
763
-
764
- - Exit 0: emit `〇 context pack refreshed`
765
- - Exit 1: surface the stderr message — most likely the architecture directory
766
- does not exist yet (run after the knowledge-base category is populated).
767
- This is non-fatal for regenerate: emit a warning and continue.
768
-
769
- ## Post-regeneration verification
770
-
771
- After all requested targets have been regenerated, verify structural completeness:
772
-
773
- ```sh
774
- node "$FORGE_ROOT/tools/check-structure.cjs" --path .
775
- ```
776
-
777
- - If exit 0: emit `〇 All expected generated files are present.`
778
- - If exit 1: list the missing files by namespace and suggest running `/forge:regenerate <namespace>` for the affected category or categories.
6
+ × /forge:regenerate was renamed to /forge:rebuild in v1.0.