@entelligentsia/forgecli 1.0.25 → 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 (390) hide show
  1. package/CHANGELOG.md +258 -0
  2. package/README.md +2 -0
  3. package/dist/CHANGELOG-forge-plugin.md +163 -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/add-pipeline.d.ts +19 -0
  16. package/dist/extensions/forgecli/add-pipeline.js +143 -0
  17. package/dist/extensions/forgecli/add-pipeline.js.map +1 -0
  18. package/dist/extensions/forgecli/add-task.d.ts +20 -0
  19. package/dist/extensions/forgecli/add-task.js +154 -0
  20. package/dist/extensions/forgecli/add-task.js.map +1 -0
  21. package/dist/extensions/forgecli/approve.d.ts +22 -0
  22. package/dist/extensions/forgecli/approve.js +152 -0
  23. package/dist/extensions/forgecli/approve.js.map +1 -0
  24. package/dist/extensions/forgecli/banner.d.ts +10 -0
  25. package/dist/extensions/forgecli/banner.js +36 -0
  26. package/dist/extensions/forgecli/banner.js.map +1 -0
  27. package/dist/extensions/forgecli/calibrate.d.ts +64 -0
  28. package/dist/extensions/forgecli/calibrate.js +481 -0
  29. package/dist/extensions/forgecli/calibrate.js.map +1 -0
  30. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.d.ts +40 -0
  31. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js +593 -0
  32. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js.map +1 -0
  33. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.d.ts +46 -0
  34. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js +245 -0
  35. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js.map +1 -0
  36. package/dist/extensions/forgecli/claude-bootstrap/uninstall.d.ts +23 -0
  37. package/dist/extensions/forgecli/claude-bootstrap/uninstall.js +215 -0
  38. package/dist/extensions/forgecli/claude-bootstrap/uninstall.js.map +1 -0
  39. package/dist/extensions/forgecli/collate.d.ts +22 -0
  40. package/dist/extensions/forgecli/collate.js +134 -0
  41. package/dist/extensions/forgecli/collate.js.map +1 -0
  42. package/dist/extensions/forgecli/commit.d.ts +22 -0
  43. package/dist/extensions/forgecli/commit.js +152 -0
  44. package/dist/extensions/forgecli/commit.js.map +1 -0
  45. package/dist/extensions/forgecli/config-command.d.ts +8 -0
  46. package/dist/extensions/forgecli/config-command.js +67 -0
  47. package/dist/extensions/forgecli/config-command.js.map +1 -0
  48. package/dist/extensions/forgecli/config-layer.d.ts +53 -0
  49. package/dist/extensions/forgecli/config-layer.js +72 -0
  50. package/dist/extensions/forgecli/config-layer.js.map +1 -0
  51. package/dist/extensions/forgecli/config-writer.d.ts +16 -0
  52. package/dist/extensions/forgecli/config-writer.js +69 -0
  53. package/dist/extensions/forgecli/config-writer.js.map +1 -0
  54. package/dist/extensions/forgecli/dashboard/component.js +10 -7
  55. package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
  56. package/dist/extensions/forgecli/enhance.d.ts +27 -0
  57. package/dist/extensions/forgecli/enhance.js +199 -0
  58. package/dist/extensions/forgecli/enhance.js.map +1 -0
  59. package/dist/extensions/forgecli/fix-bug.d.ts +85 -0
  60. package/dist/extensions/forgecli/fix-bug.js +1580 -0
  61. package/dist/extensions/forgecli/fix-bug.js.map +1 -0
  62. package/dist/extensions/forgecli/forge-header.d.ts +12 -0
  63. package/dist/extensions/forgecli/forge-header.js +114 -0
  64. package/dist/extensions/forgecli/forge-header.js.map +1 -0
  65. package/dist/extensions/forgecli/forge-init.d.ts +26 -0
  66. package/dist/extensions/forgecli/forge-init.js +514 -0
  67. package/dist/extensions/forgecli/forge-init.js.map +1 -0
  68. package/dist/extensions/forgecli/forge-root.d.ts +10 -0
  69. package/dist/extensions/forgecli/forge-root.js +62 -0
  70. package/dist/extensions/forgecli/forge-root.js.map +1 -0
  71. package/dist/extensions/forgecli/forge-update-command.d.ts +100 -0
  72. package/dist/extensions/forgecli/forge-update-command.js +435 -0
  73. package/dist/extensions/forgecli/forge-update-command.js.map +1 -0
  74. package/dist/extensions/forgecli/friction-emit.d.ts +99 -0
  75. package/dist/extensions/forgecli/friction-emit.js +245 -0
  76. package/dist/extensions/forgecli/friction-emit.js.map +1 -0
  77. package/dist/extensions/forgecli/implement.d.ts +22 -0
  78. package/dist/extensions/forgecli/implement.js +170 -0
  79. package/dist/extensions/forgecli/implement.js.map +1 -0
  80. package/dist/extensions/forgecli/init-context.d.ts +99 -0
  81. package/dist/extensions/forgecli/init-context.js +178 -0
  82. package/dist/extensions/forgecli/init-context.js.map +1 -0
  83. package/dist/extensions/forgecli/init-progress.d.ts +39 -0
  84. package/dist/extensions/forgecli/init-progress.js +117 -0
  85. package/dist/extensions/forgecli/init-progress.js.map +1 -0
  86. package/dist/extensions/forgecli/input-router.d.ts +33 -0
  87. package/dist/extensions/forgecli/input-router.js +136 -0
  88. package/dist/extensions/forgecli/input-router.js.map +1 -0
  89. package/dist/extensions/forgecli/lib/halt-advisor.d.ts +59 -0
  90. package/dist/extensions/forgecli/lib/halt-advisor.js +113 -0
  91. package/dist/extensions/forgecli/lib/halt-advisor.js.map +1 -0
  92. package/dist/extensions/forgecli/lib/orchestrator-preflight.d.ts +46 -0
  93. package/dist/extensions/forgecli/lib/orchestrator-preflight.js +64 -0
  94. package/dist/extensions/forgecli/lib/orchestrator-preflight.js.map +1 -0
  95. package/dist/extensions/forgecli/materialize.d.ts +16 -0
  96. package/dist/extensions/forgecli/materialize.js +195 -0
  97. package/dist/extensions/forgecli/materialize.js.map +1 -0
  98. package/dist/extensions/forgecli/migrate.d.ts +22 -0
  99. package/dist/extensions/forgecli/migrate.js +260 -0
  100. package/dist/extensions/forgecli/migrate.js.map +1 -0
  101. package/dist/extensions/forgecli/migration-engine.d.ts +117 -0
  102. package/dist/extensions/forgecli/migration-engine.js +563 -0
  103. package/dist/extensions/forgecli/migration-engine.js.map +1 -0
  104. package/dist/extensions/forgecli/model-registry.d.ts +61 -0
  105. package/dist/extensions/forgecli/model-registry.js +127 -0
  106. package/dist/extensions/forgecli/model-registry.js.map +1 -0
  107. package/dist/extensions/forgecli/model-resolver.d.ts +32 -0
  108. package/dist/extensions/forgecli/model-resolver.js +65 -0
  109. package/dist/extensions/forgecli/model-resolver.js.map +1 -0
  110. package/dist/extensions/forgecli/model-validator.d.ts +29 -0
  111. package/dist/extensions/forgecli/model-validator.js +107 -0
  112. package/dist/extensions/forgecli/model-validator.js.map +1 -0
  113. package/dist/extensions/forgecli/orchestrator-status-bar.d.ts +26 -0
  114. package/dist/extensions/forgecli/orchestrator-status-bar.js +213 -0
  115. package/dist/extensions/forgecli/orchestrator-status-bar.js.map +1 -0
  116. package/dist/extensions/forgecli/orchestrators/bug/bug-body.d.ts +1 -0
  117. package/dist/extensions/forgecli/orchestrators/bug/bug-body.js +65 -0
  118. package/dist/extensions/forgecli/orchestrators/bug/bug-body.js.map +1 -0
  119. package/dist/extensions/forgecli/orchestrators/bug/bug-id.d.ts +23 -0
  120. package/dist/extensions/forgecli/orchestrators/bug/bug-id.js +140 -0
  121. package/dist/extensions/forgecli/orchestrators/bug/bug-id.js.map +1 -0
  122. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.d.ts +54 -0
  123. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js +349 -0
  124. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js.map +1 -0
  125. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.d.ts +8 -0
  126. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js +60 -0
  127. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js.map +1 -0
  128. package/dist/extensions/forgecli/orchestrators/bug/bug-state.d.ts +14 -0
  129. package/dist/extensions/forgecli/orchestrators/bug/bug-state.js +100 -0
  130. package/dist/extensions/forgecli/orchestrators/bug/bug-state.js.map +1 -0
  131. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.d.ts +72 -0
  132. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js +204 -0
  133. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js.map +1 -0
  134. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.d.ts +38 -0
  135. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js +166 -0
  136. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js.map +1 -0
  137. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.d.ts +3 -0
  138. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js +55 -0
  139. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js.map +1 -0
  140. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.d.ts +7 -0
  141. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js +293 -0
  142. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js.map +1 -0
  143. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.d.ts +2 -0
  144. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js +501 -0
  145. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js.map +1 -0
  146. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.d.ts +41 -0
  147. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js +5 -0
  148. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js.map +1 -0
  149. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.d.ts +43 -0
  150. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js +85 -0
  151. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js.map +1 -0
  152. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.d.ts +8 -0
  153. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js +37 -0
  154. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js.map +1 -0
  155. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.d.ts +28 -0
  156. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js +45 -0
  157. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js.map +1 -0
  158. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.d.ts +26 -0
  159. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js +75 -0
  160. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js.map +1 -0
  161. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.d.ts +24 -0
  162. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js +37 -0
  163. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js.map +1 -0
  164. package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +9 -93
  165. package/dist/extensions/forgecli/orchestrators/fix-bug.js +23 -1721
  166. package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -1
  167. package/dist/extensions/forgecli/orchestrators/run-sprint.d.ts +3 -12
  168. package/dist/extensions/forgecli/orchestrators/run-sprint.js +48 -270
  169. package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -1
  170. package/dist/extensions/forgecli/orchestrators/run-task.d.ts +10 -214
  171. package/dist/extensions/forgecli/orchestrators/run-task.js +31 -1481
  172. package/dist/extensions/forgecli/orchestrators/run-task.js.map +1 -1
  173. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.d.ts +33 -0
  174. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js +135 -0
  175. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js.map +1 -0
  176. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.d.ts +18 -0
  177. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js +55 -0
  178. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js.map +1 -0
  179. package/dist/extensions/forgecli/orchestrators/task/run-task-command.d.ts +9 -0
  180. package/dist/extensions/forgecli/orchestrators/task/run-task-command.js +174 -0
  181. package/dist/extensions/forgecli/orchestrators/task/run-task-command.js.map +1 -0
  182. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.d.ts +2 -0
  183. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js +494 -0
  184. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js.map +1 -0
  185. package/dist/extensions/forgecli/orchestrators/task/run-task-types.d.ts +62 -0
  186. package/dist/extensions/forgecli/orchestrators/task/run-task-types.js +5 -0
  187. package/dist/extensions/forgecli/orchestrators/task/run-task-types.js.map +1 -0
  188. package/dist/extensions/forgecli/orchestrators/task/task-body.d.ts +4 -0
  189. package/dist/extensions/forgecli/orchestrators/task/task-body.js +48 -0
  190. package/dist/extensions/forgecli/orchestrators/task/task-body.js.map +1 -0
  191. package/dist/extensions/forgecli/orchestrators/task/task-events.d.ts +63 -0
  192. package/dist/extensions/forgecli/orchestrators/task/task-events.js +185 -0
  193. package/dist/extensions/forgecli/orchestrators/task/task-events.js.map +1 -0
  194. package/dist/extensions/forgecli/orchestrators/task/task-gates.d.ts +34 -0
  195. package/dist/extensions/forgecli/orchestrators/task/task-gates.js +78 -0
  196. package/dist/extensions/forgecli/orchestrators/task/task-gates.js.map +1 -0
  197. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.d.ts +42 -0
  198. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js +370 -0
  199. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js.map +1 -0
  200. package/dist/extensions/forgecli/orchestrators/task/task-phases.d.ts +14 -0
  201. package/dist/extensions/forgecli/orchestrators/task/task-phases.js +26 -0
  202. package/dist/extensions/forgecli/orchestrators/task/task-phases.js.map +1 -0
  203. package/dist/extensions/forgecli/orchestrators/task/task-record.d.ts +9 -0
  204. package/dist/extensions/forgecli/orchestrators/task/task-record.js +58 -0
  205. package/dist/extensions/forgecli/orchestrators/task/task-record.js.map +1 -0
  206. package/dist/extensions/forgecli/orchestrators/task/task-state.d.ts +14 -0
  207. package/dist/extensions/forgecli/orchestrators/task/task-state.js +35 -0
  208. package/dist/extensions/forgecli/orchestrators/task/task-state.js.map +1 -0
  209. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.d.ts +36 -0
  210. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js +152 -0
  211. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js.map +1 -0
  212. package/dist/extensions/forgecli/plan.d.ts +22 -0
  213. package/dist/extensions/forgecli/plan.js +167 -0
  214. package/dist/extensions/forgecli/plan.js.map +1 -0
  215. package/dist/extensions/forgecli/quiz-agent.d.ts +17 -0
  216. package/dist/extensions/forgecli/quiz-agent.js +98 -0
  217. package/dist/extensions/forgecli/quiz-agent.js.map +1 -0
  218. package/dist/extensions/forgecli/read-command.d.ts +2 -0
  219. package/dist/extensions/forgecli/read-command.js +100 -0
  220. package/dist/extensions/forgecli/read-command.js.map +1 -0
  221. package/dist/extensions/forgecli/regenerate.d.ts +40 -0
  222. package/dist/extensions/forgecli/regenerate.js +438 -0
  223. package/dist/extensions/forgecli/regenerate.js.map +1 -0
  224. package/dist/extensions/forgecli/remove-command.d.ts +17 -0
  225. package/dist/extensions/forgecli/remove-command.js +124 -0
  226. package/dist/extensions/forgecli/remove-command.js.map +1 -0
  227. package/dist/extensions/forgecli/report-bug.d.ts +25 -0
  228. package/dist/extensions/forgecli/report-bug.js +159 -0
  229. package/dist/extensions/forgecli/report-bug.js.map +1 -0
  230. package/dist/extensions/forgecli/retrospective.d.ts +20 -0
  231. package/dist/extensions/forgecli/retrospective.js +126 -0
  232. package/dist/extensions/forgecli/retrospective.js.map +1 -0
  233. package/dist/extensions/forgecli/review-code.d.ts +35 -0
  234. package/dist/extensions/forgecli/review-code.js +196 -0
  235. package/dist/extensions/forgecli/review-code.js.map +1 -0
  236. package/dist/extensions/forgecli/review-plan.d.ts +35 -0
  237. package/dist/extensions/forgecli/review-plan.js +200 -0
  238. package/dist/extensions/forgecli/review-plan.js.map +1 -0
  239. package/dist/extensions/forgecli/run-sprint.d.ts +27 -0
  240. package/dist/extensions/forgecli/run-sprint.js +716 -0
  241. package/dist/extensions/forgecli/run-sprint.js.map +1 -0
  242. package/dist/extensions/forgecli/run-task.d.ts +204 -0
  243. package/dist/extensions/forgecli/run-task.js +1403 -0
  244. package/dist/extensions/forgecli/run-task.js.map +1 -0
  245. package/dist/extensions/forgecli/skill-curation-flag.d.ts +21 -0
  246. package/dist/extensions/forgecli/skill-curation-flag.js +71 -0
  247. package/dist/extensions/forgecli/skill-curation-flag.js.map +1 -0
  248. package/dist/extensions/forgecli/skill-curator-subagent.d.ts +102 -0
  249. package/dist/extensions/forgecli/skill-curator-subagent.js +339 -0
  250. package/dist/extensions/forgecli/skill-curator-subagent.js.map +1 -0
  251. package/dist/extensions/forgecli/skill-retriever.d.ts +84 -0
  252. package/dist/extensions/forgecli/skill-retriever.js +246 -0
  253. package/dist/extensions/forgecli/skill-retriever.js.map +1 -0
  254. package/dist/extensions/forgecli/skill-usage-tracker.d.ts +91 -0
  255. package/dist/extensions/forgecli/skill-usage-tracker.js +224 -0
  256. package/dist/extensions/forgecli/skill-usage-tracker.js.map +1 -0
  257. package/dist/extensions/forgecli/sprint-intake.d.ts +10 -0
  258. package/dist/extensions/forgecli/sprint-intake.js +91 -0
  259. package/dist/extensions/forgecli/sprint-intake.js.map +1 -0
  260. package/dist/extensions/forgecli/sprint-plan.d.ts +14 -0
  261. package/dist/extensions/forgecli/sprint-plan.js +122 -0
  262. package/dist/extensions/forgecli/sprint-plan.js.map +1 -0
  263. package/dist/extensions/forgecli/status-command.d.ts +19 -0
  264. package/dist/extensions/forgecli/status-command.js +140 -0
  265. package/dist/extensions/forgecli/status-command.js.map +1 -0
  266. package/dist/extensions/forgecli/store-error-remediation.d.ts +65 -0
  267. package/dist/extensions/forgecli/store-error-remediation.js +307 -0
  268. package/dist/extensions/forgecli/store-error-remediation.js.map +1 -0
  269. package/dist/extensions/forgecli/store-query.d.ts +22 -0
  270. package/dist/extensions/forgecli/store-query.js +107 -0
  271. package/dist/extensions/forgecli/store-query.js.map +1 -0
  272. package/dist/extensions/forgecli/store-repair.d.ts +17 -0
  273. package/dist/extensions/forgecli/store-repair.js +123 -0
  274. package/dist/extensions/forgecli/store-repair.js.map +1 -0
  275. package/dist/extensions/forgecli/store-resolver.d.ts +56 -0
  276. package/dist/extensions/forgecli/store-resolver.js +263 -0
  277. package/dist/extensions/forgecli/store-resolver.js.map +1 -0
  278. package/dist/extensions/forgecli/store-validator.d.ts +16 -0
  279. package/dist/extensions/forgecli/store-validator.js +32 -0
  280. package/dist/extensions/forgecli/store-validator.js.map +1 -0
  281. package/dist/extensions/forgecli/test-orchestrate.d.ts +2 -0
  282. package/dist/extensions/forgecli/test-orchestrate.js +182 -0
  283. package/dist/extensions/forgecli/test-orchestrate.js.map +1 -0
  284. package/dist/extensions/forgecli/thread-switcher.d.ts +5 -0
  285. package/dist/extensions/forgecli/thread-switcher.js +189 -0
  286. package/dist/extensions/forgecli/thread-switcher.js.map +1 -0
  287. package/dist/extensions/forgecli/transition-guard.d.ts +20 -0
  288. package/dist/extensions/forgecli/transition-guard.js +89 -0
  289. package/dist/extensions/forgecli/transition-guard.js.map +1 -0
  290. package/dist/extensions/forgecli/update/forge-update-command.js +10 -7
  291. package/dist/extensions/forgecli/update/forge-update-command.js.map +1 -1
  292. package/dist/extensions/forgecli/update-check.d.ts +37 -0
  293. package/dist/extensions/forgecli/update-check.js +185 -0
  294. package/dist/extensions/forgecli/update-check.js.map +1 -0
  295. package/dist/extensions/forgecli/update-tools.d.ts +23 -0
  296. package/dist/extensions/forgecli/update-tools.js +135 -0
  297. package/dist/extensions/forgecli/update-tools.js.map +1 -0
  298. package/dist/extensions/forgecli/validate.d.ts +22 -0
  299. package/dist/extensions/forgecli/validate.js +152 -0
  300. package/dist/extensions/forgecli/validate.js.map +1 -0
  301. package/dist/extensions/forgecli/viewport-events.d.ts +78 -0
  302. package/dist/extensions/forgecli/viewport-events.js +243 -0
  303. package/dist/extensions/forgecli/viewport-events.js.map +1 -0
  304. package/dist/extensions/forgecli/viewport-renderer.d.ts +83 -0
  305. package/dist/extensions/forgecli/viewport-renderer.js +233 -0
  306. package/dist/extensions/forgecli/viewport-renderer.js.map +1 -0
  307. package/dist/extensions/forgecli/viewport-theme.d.ts +11 -0
  308. package/dist/extensions/forgecli/viewport-theme.js +128 -0
  309. package/dist/extensions/forgecli/viewport-theme.js.map +1 -0
  310. package/dist/extensions/forgecli/whats-new-widget.d.ts +26 -0
  311. package/dist/extensions/forgecli/whats-new-widget.js +376 -0
  312. package/dist/extensions/forgecli/whats-new-widget.js.map +1 -0
  313. package/dist/extensions/forgecli/whats-new.d.ts +120 -0
  314. package/dist/extensions/forgecli/whats-new.js +470 -0
  315. package/dist/extensions/forgecli/whats-new.js.map +1 -0
  316. package/dist/forge-payload/.base-pack/commands/approve.md +2 -2
  317. package/dist/forge-payload/.base-pack/commands/check-agent.md +2 -2
  318. package/dist/forge-payload/.base-pack/commands/collate.md +2 -2
  319. package/dist/forge-payload/.base-pack/commands/commit.md +2 -2
  320. package/dist/forge-payload/.base-pack/commands/enhance.md +2 -2
  321. package/dist/forge-payload/.base-pack/commands/fix-bug.md +2 -2
  322. package/dist/forge-payload/.base-pack/commands/implement.md +2 -2
  323. package/dist/forge-payload/.base-pack/commands/init.md +278 -0
  324. package/dist/forge-payload/.base-pack/commands/new-sprint.md +2 -2
  325. package/dist/forge-payload/.base-pack/commands/plan-sprint.md +2 -2
  326. package/dist/forge-payload/.base-pack/commands/plan.md +2 -2
  327. package/dist/forge-payload/.base-pack/commands/retro.md +2 -2
  328. package/dist/forge-payload/.base-pack/commands/review-code.md +2 -2
  329. package/dist/forge-payload/.base-pack/commands/review-plan.md +2 -2
  330. package/dist/forge-payload/.base-pack/commands/run-sprint.md +2 -2
  331. package/dist/forge-payload/.base-pack/commands/run-task.md +2 -2
  332. package/dist/forge-payload/.base-pack/commands/validate.md +2 -2
  333. package/dist/forge-payload/.base-pack/workflows/collator_agent.md +5 -6
  334. package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +1 -1
  335. package/dist/forge-payload/.base-pack/workflows-js/wfl-init.js +449 -0
  336. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  337. package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
  338. package/dist/forge-payload/.schemas/migrations.json +85 -0
  339. package/dist/forge-payload/commands/add-pipeline.md +1 -1
  340. package/dist/forge-payload/commands/add-task.md +3 -3
  341. package/dist/forge-payload/commands/ask.md +1 -1
  342. package/dist/forge-payload/commands/check-agent.md +1 -1
  343. package/dist/forge-payload/commands/config.md +1 -1
  344. package/dist/forge-payload/commands/health.md +1 -1
  345. package/dist/forge-payload/commands/init.md +62 -7
  346. package/dist/forge-payload/commands/rebuild.md +3 -3
  347. package/dist/forge-payload/commands/remove.md +1 -1
  348. package/dist/forge-payload/commands/repair.md +1 -1
  349. package/dist/forge-payload/commands/report-bug.md +1 -1
  350. package/dist/forge-payload/commands/status.md +1 -1
  351. package/dist/forge-payload/commands/update.md +3 -3
  352. package/dist/forge-payload/hooks/lib/common.cjs +228 -0
  353. package/dist/forge-payload/hooks/lib/plugin-detection.cjs +106 -0
  354. package/dist/forge-payload/hooks/lib/update-msg.cjs +23 -0
  355. package/dist/forge-payload/hooks/lib/update-url.cjs +46 -0
  356. package/dist/forge-payload/hooks/lib/write-registry.js +53 -0
  357. package/dist/forge-payload/init/discovery/discover-database.md +32 -0
  358. package/dist/forge-payload/init/discovery/discover-processes.md +31 -0
  359. package/dist/forge-payload/init/discovery/discover-routing.md +31 -0
  360. package/dist/forge-payload/init/discovery/discover-stack.md +33 -0
  361. package/dist/forge-payload/init/discovery/discover-testing.md +34 -0
  362. package/dist/forge-payload/init/generation/generate-commands.md +171 -0
  363. package/dist/forge-payload/init/generation/generate-kb-doc.md +60 -0
  364. package/dist/forge-payload/init/generation/generate-knowledge-base.md +56 -0
  365. package/dist/forge-payload/init/generation/generate-persona.md +73 -0
  366. package/dist/forge-payload/init/generation/generate-personas.md +54 -0
  367. package/dist/forge-payload/init/generation/generate-skill.md +66 -0
  368. package/dist/forge-payload/init/generation/generate-skills.md +36 -0
  369. package/dist/forge-payload/init/generation/generate-template.md +60 -0
  370. package/dist/forge-payload/init/generation/generate-templates.md +39 -0
  371. package/dist/forge-payload/init/generation/generate-tools.md +133 -0
  372. package/dist/forge-payload/init/generation/generate-workflows.md +78 -0
  373. package/dist/forge-payload/init/phases/phase-1-collect.md +10 -2
  374. package/dist/forge-payload/init/phases/phase-3-materialize.md +1 -1
  375. package/dist/forge-payload/init/phases/phase-4-register.md +8 -0
  376. package/dist/forge-payload/init/workflow-gen-plan.json +17 -0
  377. package/dist/forge-payload/integrity.json +16 -16
  378. package/dist/forge-payload/meta/workflows/meta-collate.md +5 -6
  379. package/dist/forge-payload/meta/workflows/meta-migrate.md +1 -1
  380. package/dist/forge-payload/schemas/enum-catalog.json +2 -2
  381. package/dist/forge-payload/schemas/structure-manifest.json +3 -12
  382. package/dist/forge-payload/tools/forge-preflight.cjs +268 -0
  383. package/dist/forge-payload/tools/lib/paths.cjs +12 -11
  384. package/dist/forge-payload/tools/lib/pricing.cjs +31 -11
  385. package/dist/forge-payload/tools/query-logger.cjs +34 -0
  386. package/dist/forge-payload/tools/substitute-placeholders.cjs +5 -6
  387. package/node_modules/@mariozechner/clipboard/package.json +1 -2
  388. package/package.json +2 -2
  389. package/node_modules/@mariozechner/clipboard-linux-x64-musl/README.md +0 -3
  390. package/node_modules/@mariozechner/clipboard-linux-x64-musl/package.json +0 -25
@@ -0,0 +1,449 @@
1
+ export const meta = {
2
+ name: 'wfl:init',
3
+ description: 'Code-orchestrated /forge:init LLM half — parallel discovery fan-out → config-writer (Phase 1 Collect), parallel KB-doc fan-out → index → context (Phase 2 Discover), deterministic materialize (Phase 3), content-register (Phase 4). JS holds the phase index, verify gates, retry caps, and fan-out; subagents execute the phase rulebooks. Args: { forgeRoot, kbFolder, startPhase, createClaudeMd, isoTimestamp, rawArguments }.',
4
+ whenToUse: "Run the LLM-orchestrated half of /forge:init after `4ge init claude .` has bootstrapped the project structure. Dispatch by name: workflow('wfl:init', { forgeRoot, kbFolder, startPhase, createClaudeMd, isoTimestamp, rawArguments }).",
5
+ phases: [
6
+ { title: 'Collect', detail: 'parallel() 5 discovery agents scan codebase domains; config-writer agent merges findings and writes config + init-progress.json; verify-phase gate with one retry cap' },
7
+ { title: 'Discover', detail: 'gate+scaffold agent verifies phase 1; parallel() 7 KB-doc agents generate architecture docs with JS-held retry-once; sequential index + context agents close the phase' },
8
+ { title: 'Materialize', detail: 'single haiku agent runs deterministic substitute-placeholders + generation-manifest + build-overlay; Phase 3 verify failure is a hard halt (no retry — rebuild/restart)' },
9
+ { title: 'Register', detail: 'single haiku agent runs content-register steps; CLAUDE.md creation gated on args.createClaudeMd === true; returns pendingActions for Tomoshibi' },
10
+ { title: 'Report', detail: 'return structured result { ok, lastPhase, stack, skillMatches, counts, confidence, pendingActions, failure? } for the command wrapper to render' },
11
+ ],
12
+ };
13
+
14
+ // wfl:init — code-orchestrated LLM half of /forge:init
15
+ //
16
+ // Why a script: init is a deterministic 4-phase FSM with mechanical verify
17
+ // gates (verify-phase.cjs --phase N), bounded retries (max 1), fan-out steps
18
+ // (5 discovery scans, 7 KB docs), and escalate-don't-continue semantics.
19
+ // JS holds the phase index, the verify-gate routing, the retry counters, and
20
+ // the fan-out; subagents only execute one phase rulebook each.
21
+ //
22
+ // WORKFLOW-API CONTRACT (forge#112 — field failure; enforced by
23
+ // wfl-drivers-parse.test.cjs):
24
+ // - Exactly ONE export: the meta literal. The body runs at top level in the
25
+ // harness's async context (top-level await/return valid; args is a global).
26
+ // - phase(title) takes ONLY a title — a callback second arg is silently
27
+ // discarded. Phase bodies run inline after the phase() call.
28
+ // - parallel() takes thunks: parallel([() => agent(...), ...]).
29
+ // - agent(prompt, opts) — model goes in opts.model; structured results
30
+ // REQUIRE opts.schema (otherwise agent() returns plain text and .ok
31
+ // reads are undefined).
32
+ //
33
+ // CLI-FIRST BOOTSTRAP ADR (doc/decisions/cli-first-bootstrap.md):
34
+ // `4ge init claude .` runs first (deterministic, zero tokens): scaffolds
35
+ // .forge/ as a complete vendored Forge root (tools, schemas, hooks, init/,
36
+ // .base-pack/, meta/) and installs THIS FILE into .claude/workflows/.
37
+ // All rulebook reads use vendored .forge/init/... paths; discovery prompts
38
+ // fall back to direct project analysis if a prompt file is absent.
39
+ //
40
+ // SIDE-EFFECT OWNERSHIP: this script has NO filesystem/shell access. Each
41
+ // per-phase subagent owns rulebook execution (artifact writes, checkpoint
42
+ // writes, verify runs). The JS driver holds ONLY control flow.
43
+ //
44
+ // Timestamps: the Workflow sandbox blocks timestamp minting (Date.now,
45
+ // Math.random, and the zero-arg Date constructor are all unavailable).
46
+ // The command wrapper supplies args.isoTimestamp.
47
+ //
48
+ // MODEL TIERING: generation/discovery → sonnet; deterministic gates and
49
+ // registration → haiku. No opus (init has no review/approve gates).
50
+
51
+ // ─────────────────────────────────────────────────────────────────────────────
52
+ // Schemas
53
+ // ─────────────────────────────────────────────────────────────────────────────
54
+
55
+ const DISCOVERY_SCHEMA = {
56
+ type: 'object',
57
+ properties: {
58
+ domain: { type: 'string', description: 'discovery domain name (stack|routing|processes|database|testing)' },
59
+ findings: { type: 'object', description: 'domain-specific structured findings' },
60
+ confidence: { type: 'number', description: '0–1 confidence in completeness of scan' },
61
+ warnings: { type: 'array', items: { type: 'string' }, description: 'ambiguities or partial coverage notes' },
62
+ },
63
+ required: ['domain', 'findings', 'confidence'],
64
+ };
65
+
66
+ const KB_DOC_SCHEMA = {
67
+ type: 'object',
68
+ properties: {
69
+ id: { type: 'string', description: 'KB doc id matching the phase-2 table row' },
70
+ ok: { type: 'boolean', description: 'true if doc written successfully' },
71
+ confidence: { type: 'number', description: '0–1 confidence in doc completeness' },
72
+ error: { type: 'string', description: 'error message if ok=false' },
73
+ },
74
+ required: ['id', 'ok', 'confidence'],
75
+ };
76
+
77
+ const PHASE_RESULT_SCHEMA = {
78
+ type: 'object',
79
+ properties: {
80
+ verifyExit: { type: 'number', description: 'exit code from verify-phase.cjs (0=pass, non-zero=fail)' },
81
+ verifyError: { type: 'string', description: 'stderr/stdout from failed verify run' },
82
+ stack: { type: 'string', description: 'technology stack summary (Phase 1 output)' },
83
+ skillMatches: {
84
+ type: 'array',
85
+ items: { type: 'string' },
86
+ description: 'skill IDs matching project tech stack (from skill-recommendations.md)',
87
+ },
88
+ confidence: { type: 'number', description: '0–1 confidence' },
89
+ ok: { type: 'boolean', description: 'true if phase completed and verify passed' },
90
+ },
91
+ required: ['verifyExit', 'ok'],
92
+ };
93
+
94
+ const OK_SCHEMA = {
95
+ type: 'object',
96
+ properties: {
97
+ ok: { type: 'boolean', description: 'true if all steps completed' },
98
+ error: { type: 'string', description: 'error message if ok=false' },
99
+ },
100
+ required: ['ok'],
101
+ };
102
+
103
+ const REGISTER_SCHEMA = {
104
+ type: 'object',
105
+ properties: {
106
+ ok: { type: 'boolean', description: 'true if all register steps completed' },
107
+ error: { type: 'string', description: 'error message if ok=false' },
108
+ pendingActions: { type: 'array', items: { type: 'string' }, description: 'orchestrator-owned follow-ups, e.g. ["refresh-kb-links"]' },
109
+ },
110
+ required: ['ok'],
111
+ };
112
+
113
+ // ─────────────────────────────────────────────────────────────────────────────
114
+ // Model tiering
115
+ // ─────────────────────────────────────────────────────────────────────────────
116
+
117
+ const ROLE_TIER = {
118
+ 'discovery': 'sonnet',
119
+ 'config': 'sonnet',
120
+ 'kb-doc': 'sonnet',
121
+ 'index': 'sonnet',
122
+ 'context': 'sonnet',
123
+ 'gate': 'haiku',
124
+ 'materialize': 'haiku',
125
+ 'register': 'haiku',
126
+ };
127
+
128
+ // ─────────────────────────────────────────────────────────────────────────────
129
+ // Helpers
130
+ // ─────────────────────────────────────────────────────────────────────────────
131
+
132
+ function halt(lastPhase, reason, extra) {
133
+ return { ok: false, lastPhase, failure: reason, ...extra };
134
+ }
135
+
136
+ const VENDORED = 'Use only .forge/tools/ paths for all tool invocations (vendored-tools world).';
137
+
138
+ // ─────────────────────────────────────────────────────────────────────────────
139
+ // Main workflow body (top-level async context; top-level return is valid)
140
+ // ─────────────────────────────────────────────────────────────────────────────
141
+
142
+ const {
143
+ forgeRoot,
144
+ kbFolder = 'engineering',
145
+ startPhase = 1,
146
+ createClaudeMd = null,
147
+ isoTimestamp,
148
+ rawArguments = '',
149
+ } = args || {};
150
+
151
+ // ─────────────────────────────────────────────────────────────────────────────
152
+ // Phase 1 — Collect (startPhase <= 1)
153
+ // ─────────────────────────────────────────────────────────────────────────────
154
+ let phase1Result;
155
+ if (startPhase <= 1) {
156
+ phase('Collect');
157
+
158
+ // Fan-out: 5 parallel discovery agents
159
+ const DOMAINS = ['stack', 'routing', 'processes', 'database', 'testing'];
160
+ const discoveryResults = await parallel(
161
+ DOMAINS.map((domain) => () =>
162
+ agent(`
163
+ You are a codebase discovery agent for the "${domain}" domain.
164
+ 1. Read \`.forge/init/discovery/discover-${domain}.md\` if it exists and follow
165
+ its instructions against the current project.
166
+ 2. If that file does NOT exist, read \`.forge/init/phases/phase-1-collect.md\`
167
+ Step 2 for context, then perform a best-effort "${domain}" discovery of the
168
+ project directly (read manifests, source files, configs) and add a warning
169
+ noting the missing discovery prompt file.
170
+ Set domain="${domain}" in your structured output. ${VENDORED}
171
+ `, { model: ROLE_TIER['discovery'], label: `discover:${domain}`, phase: 'Collect', schema: DISCOVERY_SCHEMA })
172
+ )
173
+ );
174
+
175
+ // Config-writer agent: merge findings, write config, verify Phase 1
176
+ const configResult = await agent(`
177
+ You are the Forge init config-writer agent. You have received the following
178
+ discovery findings from 5 parallel discovery agents:
179
+
180
+ ${JSON.stringify(discoveryResults.filter(Boolean), null, 2)}
181
+
182
+ Execute the Phase 1 Collect rulebook steps:
183
+ 1. Read \`.forge/init/phases/phase-1-collect.md\` for the full step list.
184
+ 2. Call \`node .forge/tools/manage-config.cjs\` to write the config. If kbFolder
185
+ is non-default, set paths.engineering="${kbFolder}". Set mode=full.
186
+ 3. Compute skill-recommendation matches from .forge/meta/skill-recommendations.md
187
+ and the output of \`node .forge/tools/list-skills.js\`. Do NOT install —
188
+ report matches in skillMatches only.
189
+ 4. Write .forge/init-progress.json: { "lastPhase": 1, "timestamp": "${isoTimestamp}" }.
190
+ 5. Run: node .forge/tools/verify-phase.cjs --phase 1
191
+ 6. In your structured output set verifyExit=<exit code>,
192
+ verifyError=<stderr if non-zero>, stack=<one-line stack summary>,
193
+ skillMatches=[<matched skill ids>], confidence=<0-1>, ok=(verifyExit===0).
194
+ ${VENDORED}
195
+ kbFolder="${kbFolder}", isoTimestamp="${isoTimestamp}".
196
+ `, { model: ROLE_TIER['config'], label: 'config-writer', phase: 'Collect', schema: PHASE_RESULT_SCHEMA });
197
+
198
+ // Verify routing: one retry on failure
199
+ if (configResult && configResult.verifyExit !== 0) {
200
+ const retryResult = await agent(`
201
+ Phase 1 of Forge init verify failed. Error:
202
+ ${configResult.verifyError || '(no error text)'}
203
+
204
+ Read the error carefully. Fix the config by re-running
205
+ \`node .forge/tools/manage-config.cjs\` with the correct values, then
206
+ re-run \`node .forge/tools/verify-phase.cjs --phase 1\`.
207
+ In your structured output set verifyExit=<exit code>, ok=(verifyExit===0).
208
+ ${VENDORED}
209
+ `, { model: ROLE_TIER['config'], label: 'config-writer:retry', phase: 'Collect', schema: PHASE_RESULT_SCHEMA });
210
+ if (!retryResult || retryResult.verifyExit !== 0) {
211
+ return halt(1, 'Phase 1 verify failed after retry', {
212
+ verifyError: retryResult ? retryResult.verifyError : 'retry agent returned null',
213
+ });
214
+ }
215
+ phase1Result = { ...configResult, ...retryResult };
216
+ } else if (configResult) {
217
+ phase1Result = configResult;
218
+ } else {
219
+ return halt(1, 'config-writer agent returned null');
220
+ }
221
+
222
+ if (!phase1Result.ok) {
223
+ return halt(1, 'Phase 1 failed', {
224
+ verifyError: phase1Result.verifyError,
225
+ stack: phase1Result.stack,
226
+ });
227
+ }
228
+ } else {
229
+ phase1Result = { ok: true, lastPhase: 1, skipped: true };
230
+ }
231
+
232
+ // ─────────────────────────────────────────────────────────────────────────────
233
+ // Phase 2 — Discover (startPhase <= 2)
234
+ // ─────────────────────────────────────────────────────────────────────────────
235
+ let phase2Result;
236
+ const KB_DOC_IDS = [
237
+ 'architecture/stack',
238
+ 'architecture/processes',
239
+ 'architecture/routing',
240
+ 'architecture/database',
241
+ 'architecture/testing',
242
+ 'business-domain/domain-model',
243
+ 'business-domain/domain-concepts',
244
+ ];
245
+
246
+ if (startPhase <= 2) {
247
+ phase('Discover');
248
+
249
+ // Gate+scaffold agent: verify Phase 1 passed, mkdir scaffold
250
+ const gateResult = await agent(`
251
+ You are the Forge init Phase 2 gate agent. Execute these steps in order:
252
+ 1. Run: node .forge/tools/verify-phase.cjs --phase 1
253
+ If exit non-zero, set ok=false and error=<stderr> in your output and stop.
254
+ 2. Read \`.forge/init/phases/phase-2-discover.md\` Step 2 (scaffold mkdir
255
+ commands) and execute them. Create the KB directory structure under ${kbFolder}/.
256
+ 3. Set ok=true.
257
+ ${VENDORED}
258
+ `, { model: ROLE_TIER['gate'], label: 'phase2-gate', phase: 'Discover', schema: OK_SCHEMA });
259
+
260
+ if (!gateResult || !gateResult.ok) {
261
+ return halt(2, 'Phase 2 gate failed — Phase 1 verify did not pass', {
262
+ verifyError: gateResult ? gateResult.error : 'gate agent returned null',
263
+ });
264
+ }
265
+
266
+ // Fan-out: 7 parallel KB-doc agents
267
+ const kbDocPrompt = (docId) => `
268
+ You are a Forge KB-doc generation agent. Your doc id is: "${docId}".
269
+ 1. Read \`.forge/init/phases/phase-2-discover.md\` for the full doc spec for "${docId}".
270
+ 2. If \`.forge/init/generation/generate-kb-doc.md\` exists, read it for the
271
+ generation rulebook; otherwise follow the doc spec from step 1 directly.
272
+ 3. Generate the doc using all available project context (including
273
+ .forge/config.json written in Phase 1).
274
+ 4. Write the doc to the correct path under ${kbFolder}/.
275
+ 5. Set id="${docId}", ok=<true if written>, confidence=<0-1>, error=<if not ok>.
276
+ ${VENDORED}
277
+ `;
278
+
279
+ const kbDocResults = await parallel(
280
+ KB_DOC_IDS.map((docId) => () =>
281
+ agent(kbDocPrompt(docId), { model: ROLE_TIER['kb-doc'], label: `kb-doc:${docId}`, phase: 'Discover', schema: KB_DOC_SCHEMA })
282
+ )
283
+ );
284
+
285
+ // JS-held retry-once for any failed KB-doc
286
+ const failedDocs = KB_DOC_IDS.filter((docId, i) => !kbDocResults[i] || !kbDocResults[i].ok);
287
+ if (failedDocs.length > 0) {
288
+ const retryResults = await parallel(
289
+ failedDocs.map((docId) => () =>
290
+ agent(`
291
+ KB-doc "${docId}" failed on first attempt. Retry it:
292
+ ${kbDocPrompt(docId)}
293
+ `, { model: ROLE_TIER['kb-doc'], label: `kb-doc-retry:${docId}`, phase: 'Discover', schema: KB_DOC_SCHEMA })
294
+ )
295
+ );
296
+ const stillFailed = failedDocs.filter((docId, i) => !retryResults[i] || !retryResults[i].ok);
297
+ if (stillFailed.length > 0) {
298
+ return halt(2, `KB-doc generation failed after retry for: ${stillFailed.join(', ')}`, {
299
+ failedDocs: stillFailed.join(', '),
300
+ });
301
+ }
302
+ }
303
+
304
+ // Sequential index agent (after all leaf docs — real data dependency)
305
+ const indexResult = await agent(`
306
+ You are the Forge init index agent. All 7 KB architecture docs have been generated.
307
+ Read \`.forge/init/phases/phase-2-discover.md\` Step 4 (index files).
308
+ Generate the 3 INDEX files:
309
+ - ${kbFolder}/architecture/INDEX.md
310
+ - ${kbFolder}/business-domain/INDEX.md
311
+ - ${kbFolder}/INDEX.md
312
+ Set ok=true when done, or ok=false with error=<message>.
313
+ ${VENDORED}
314
+ `, { model: ROLE_TIER['index'], label: 'index', phase: 'Discover', schema: OK_SCHEMA });
315
+
316
+ if (!indexResult || !indexResult.ok) {
317
+ return halt(2, 'Index agent failed', { error: indexResult ? indexResult.error : 'null result' });
318
+ }
319
+
320
+ // Context agent: project-context.json + calibration + init-progress.json + verify
321
+ const contextResult = await agent(`
322
+ You are the Forge init context agent. KB docs and index files are complete.
323
+ Execute \`.forge/init/phases/phase-2-discover.md\` Steps 5–6:
324
+ 5. Write project-context.json (combined structured context from all discovery
325
+ findings). Write calibration baseline.
326
+ 6. Write .forge/init-progress.json: { "lastPhase": 2, "timestamp": "${isoTimestamp}" }.
327
+ Run: node .forge/tools/verify-phase.cjs --phase 2 --kb-path "${kbFolder}"
328
+ Set verifyExit=<exit code>, verifyError=<stderr if non-zero>, ok=(verifyExit===0).
329
+ ${VENDORED}
330
+ `, { model: ROLE_TIER['context'], label: 'context', phase: 'Discover', schema: PHASE_RESULT_SCHEMA });
331
+
332
+ // Verify routing: one retry on failure
333
+ if (contextResult && contextResult.verifyExit !== 0) {
334
+ const verifyRetry = await agent(`
335
+ Phase 2 of Forge init verify failed. Error:
336
+ ${contextResult.verifyError || '(no error text)'}
337
+ Read the error, fix the missing or malformed outputs, re-run
338
+ \`node .forge/tools/verify-phase.cjs --phase 2 --kb-path "${kbFolder}"\`.
339
+ Set verifyExit=<exit code>, ok=(verifyExit===0).
340
+ ${VENDORED}
341
+ `, { model: ROLE_TIER['context'], label: 'context:retry', phase: 'Discover', schema: PHASE_RESULT_SCHEMA });
342
+ if (!verifyRetry || verifyRetry.verifyExit !== 0) {
343
+ return halt(2, 'Phase 2 verify failed after retry', {
344
+ verifyError: verifyRetry ? verifyRetry.verifyError : 'retry returned null',
345
+ });
346
+ }
347
+ phase2Result = verifyRetry;
348
+ } else if (contextResult) {
349
+ phase2Result = contextResult;
350
+ } else {
351
+ return halt(2, 'context agent returned null');
352
+ }
353
+
354
+ if (!phase2Result.ok) {
355
+ return halt(2, 'Phase 2 failed', { verifyError: phase2Result.verifyError });
356
+ }
357
+ } else {
358
+ phase2Result = { ok: true, lastPhase: 2, skipped: true };
359
+ }
360
+
361
+ // ─────────────────────────────────────────────────────────────────────────────
362
+ // Phase 3 — Materialize (startPhase <= 3)
363
+ // ─────────────────────────────────────────────────────────────────────────────
364
+ let phase3Result;
365
+ if (startPhase <= 3) {
366
+ phase('Materialize');
367
+
368
+ // Single haiku agent — deterministic shell steps
369
+ const materializeResult = await agent(`
370
+ You are the Forge init materialize agent. Read
371
+ \`.forge/init/phases/phase-3-materialize.md\` for the rulebook, then execute
372
+ these deterministic steps:
373
+ 1. Run: node .forge/tools/build-init-context.cjs
374
+ 2. Run: node .forge/tools/substitute-placeholders.cjs
375
+ 3. Record generation-manifest entries for all materialized assets.
376
+ 4. Run a build-overlay smoke check: node .forge/tools/build-overlay.cjs --check
377
+ 5. Write .forge/init-progress.json: { "lastPhase": 3, "timestamp": "${isoTimestamp}" }
378
+ 6. Run: node .forge/tools/verify-phase.cjs --phase 3
379
+ Set verifyExit=<exit code>, verifyError=<stderr if non-zero>, ok=(verifyExit===0).
380
+ ${VENDORED}
381
+ IMPORTANT: If verify-phase exits non-zero, report it faithfully — do NOT retry.
382
+ Phase 3 verify failure is a hard halt. The rulebook says: rebuild or restart init.
383
+ `, { model: ROLE_TIER['materialize'], label: 'materialize', phase: 'Materialize', schema: PHASE_RESULT_SCHEMA });
384
+
385
+ // Phase 3: hard halt on verify failure (no retry)
386
+ if (!materializeResult || materializeResult.verifyExit !== 0) {
387
+ const verifyError = materializeResult ? materializeResult.verifyError : 'materialize agent returned null';
388
+ return halt(3, [
389
+ 'Phase 3 (Materialize) verify failed. This is a hard halt — no retry.',
390
+ 'Per the phase-3-materialize.md rulebook: you must rebuild or restart /forge:init.',
391
+ 'Run: /forge:init (or `4ge init claude .` to re-scaffold, then /forge:init).',
392
+ `Verify error: ${verifyError}`,
393
+ ].join(' '), { verifyError, rebuild: true, restart: true });
394
+ }
395
+
396
+ phase3Result = materializeResult;
397
+ } else {
398
+ phase3Result = { ok: true, lastPhase: 3, skipped: true };
399
+ }
400
+
401
+ // ─────────────────────────────────────────────────────────────────────────────
402
+ // Phase 4 — Register (startPhase <= 4)
403
+ // ─────────────────────────────────────────────────────────────────────────────
404
+ let phase4Result;
405
+ if (startPhase <= 4) {
406
+ phase('Register');
407
+
408
+ const registerResult = await agent(`
409
+ You are the Forge init register agent. Execute the content-register steps:
410
+ 1. Read \`.forge/init/phases/phase-4-register.md\` for the full step list.
411
+ 2. Execute steps 1–10 and step 12 verbatim.
412
+ 3. Step 13 (CLAUDE.md file creation): ${createClaudeMd === true
413
+ ? 'createClaudeMd=true — execute this step (create the CLAUDE.md file).'
414
+ : 'createClaudeMd is not true — SKIP step 13 (the prompt was hoisted to the wrapper).'}
415
+ 4. Step 11 (Tomoshibi forge:refresh-kb-links): DO NOT execute. This is
416
+ orchestrator-owned. Set pendingActions=["refresh-kb-links"] and the
417
+ wrapper (init.md) will run it post-workflow.
418
+ 5. Delete .forge/init-progress.json (phase 4 complete — no resume needed).
419
+ 6. Set ok=true, pendingActions=["refresh-kb-links"].
420
+ ${VENDORED}
421
+ createClaudeMd=${JSON.stringify(createClaudeMd)}, isoTimestamp="${isoTimestamp}".
422
+ `, { model: ROLE_TIER['register'], label: 'register', phase: 'Register', schema: REGISTER_SCHEMA });
423
+
424
+ if (!registerResult || !registerResult.ok) {
425
+ return halt(4, registerResult ? (registerResult.error || 'Phase 4 failed') : 'register agent returned null');
426
+ }
427
+ phase4Result = registerResult;
428
+ } else {
429
+ phase4Result = { ok: true, lastPhase: 4, skipped: true };
430
+ }
431
+
432
+ // ─────────────────────────────────────────────────────────────────────────────
433
+ // Report
434
+ // ─────────────────────────────────────────────────────────────────────────────
435
+ phase('Report');
436
+
437
+ return {
438
+ ok: true,
439
+ lastPhase: 4,
440
+ stack: phase1Result && phase1Result.stack,
441
+ skillMatches: phase1Result && phase1Result.skillMatches,
442
+ counts: {
443
+ kbDocs: KB_DOC_IDS.length,
444
+ workflows: 4, // wfl-run-task, wfl-run-sprint, wfl-fix-bug, wfl-init (installed by the CLI half)
445
+ commands: 3, // run-task, run-sprint, fix-bug (init.md is the wrapper, not a base-pack command)
446
+ },
447
+ confidence: phase1Result && phase1Result.confidence,
448
+ pendingActions: (phase4Result && phase4Result.pendingActions) || ['refresh-kb-links'],
449
+ };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forge",
3
- "version": "1.2.21",
3
+ "version": "1.4.5",
4
4
  "description": "Self-enhancing AI software development lifecycle — generates project-specific SDLC instances from meta-definitions",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "1.2.21",
3
- "generated": "2026-06-06",
2
+ "version": "1.4.3",
3
+ "generated": "2026-06-07",
4
4
  "note": "Authoritative enum catalog. Source: build-enum-catalog.cjs. Regenerate via node forge/tools/build-manifest.cjs.",
5
5
  "enums": {
6
6
  "task.status": [
@@ -1,4 +1,15 @@
1
1
  {
2
+ "1.2.21": {
3
+ "version": "1.3.0",
4
+ "date": "2026-06-07",
5
+ "notes": "CLI-first bootstrap: /forge:init now dispatches workflow('wfl:init') — the dynamic JS driver added in S31-T04. init.md command wrapper hoists interactive prompts (KB folder, CLAUDE.md offer, marketplace-skills offer). Phase-1 and Phase-4 rulebooks annotated with orchestrator-owned step markers. sdlc-init.md reduced to a spec pointer. New base-pack/commands/init.md project-local wrapper authored. No change to installed projects (init.md is a plugin command, not a materialized base-pack command).",
6
+ "target": "commands:init,init:wfl-init,init:phases:phase-1-collect,init:phases:phase-4-register,init:sdlc-init,init:base-pack:commands:init",
7
+ "regenerate": [],
8
+ "breaking": false,
9
+ "manual": [
10
+ "No action required for existing initialized projects. New inits use the dynamic wfl:init driver. The Workflow tool is required; upgrade Claude Code if not available."
11
+ ]
12
+ },
2
13
  "1.2.20": {
3
14
  "version": "1.2.21",
4
15
  "date": "2026-06-06",
@@ -2913,5 +2924,79 @@
2913
2924
  ],
2914
2925
  "breaking": false,
2915
2926
  "manual": []
2927
+ },
2928
+ "1.3.0": {
2929
+ "version": "1.4.0",
2930
+ "date": "2026-06-07",
2931
+ "notes": "Fixed /forge:* command namespace (CLI-first redesign). Project-prefix command namespaces (/acme:*, /hello:*) are retired: getCommandsSubdir() now returns 'forge' unconditionally, base-pack command templates carry literal /forge: headings ({{PREFIX}} removed), and substitute-placeholders materializes commands to .claude/commands/forge/. All command .md files (plugin commands/ + base-pack commands/) resolve FORGE_ROOT with a vendored fallback: ${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge} — full parity for plugin-less projects bootstrapped by '4ge init claude' where tools/schemas/hooks are vendored under .forge/. Rulebooks (generate-commands, phase-3-materialize, phase-1-collect, meta-migrate, migrate_structural) updated to the fixed namespace.",
2932
+ "target": "tools:lib:paths,tools:substitute-placeholders,commands:*,init:base-pack:commands:*,init:generation:generate-commands,init:phases:phase-1-collect,init:phases:phase-3-materialize,meta:workflows:meta-migrate,init:base-pack:workflows:migrate_structural",
2933
+ "regenerate": [
2934
+ "commands"
2935
+ ],
2936
+ "breaking": true,
2937
+ "manual": [
2938
+ "Existing projects with prefix-namespaced commands (.claude/commands/<prefix>/): re-run materialization (or /forge:rebuild) to produce .claude/commands/forge/, then delete the old .claude/commands/<prefix>/ directory. The old commands keep working until removed but will not receive updates."
2939
+ ]
2940
+ },
2941
+ "1.4.0": {
2942
+ "version": "1.4.1",
2943
+ "date": "2026-06-07",
2944
+ "notes": "wfl-init.js Workflow-harness parse fix: the driver shipped wrapped in 'export default async function wflInit(args)' — the Workflow tool permits exactly one export (the meta literal) and evaluates the rest as an async function body, so every /forge:init dispatch failed at launch with \"SyntaxError: Unexpected keyword 'export'\". Body now runs at top level reading the global args. New regression test (wfl-drivers-parse.test.cjs) parses all four base-pack drivers exactly the way the harness does.",
2945
+ "target": "init:base-pack:workflows-js:wfl-init",
2946
+ "regenerate": [
2947
+ "workflows"
2948
+ ],
2949
+ "breaking": false,
2950
+ "manual": [
2951
+ "Projects bootstrapped with the broken driver: re-run '4ge init claude .' (idempotent repair overwrites .claude/workflows/wfl-init.js)."
2952
+ ]
2953
+ },
2954
+ "1.4.1": {
2955
+ "version": "1.4.2",
2956
+ "date": "2026-06-07",
2957
+ "notes": "wfl-init.js Workflow-API rewrite (forge#112): the driver mis-used the harness API four ways — phase(title, callback) callbacks were silently discarded so init ran 0 agents while reporting fabricated ok:true; parallel() received promises instead of thunks; agent() had model as first arg instead of opts.model; structured results lacked opts.schema. Phase bodies now run inline at top level, fan-outs use thunks, all agents use agent(prompt, {model, label, phase, schema}), and the report reflects real phase results. Rulebook reads use vendored .forge/init/... paths with direct-analysis fallback. Contract enforced by wfl-drivers-parse.test.cjs (phase-callback, thunk, arg-order, referenced-rulebook-exists gates).",
2958
+ "target": "init:base-pack:workflows-js:wfl-init",
2959
+ "regenerate": [
2960
+ "workflows"
2961
+ ],
2962
+ "breaking": false,
2963
+ "manual": [
2964
+ "Projects bootstrapped with the broken driver: re-run '4ge init claude .' (idempotent repair overwrites .claude/workflows/wfl-init.js)."
2965
+ ]
2966
+ },
2967
+ "1.4.2": {
2968
+ "version": "1.4.3",
2969
+ "date": "2026-06-07",
2970
+ "notes": "wfl-init.js verify-phase CLI alignment (forge#112 follow-up): the Phase 2 verify prompts invoked 'verify-phase.cjs --phase 2' bare, but the tool requires '--phase 2 --kb-path <path>' (exit 2 without it). Both Phase 2 invocations now pass --kb-path \"${kbFolder}\". New contract gates in wfl-drivers-parse.test.cjs assert every driver verify-phase invocation uses a supported phase (1-3) and that --phase 2 always carries --kb-path.",
2971
+ "target": "init:base-pack:workflows-js:wfl-init",
2972
+ "regenerate": [
2973
+ "workflows"
2974
+ ],
2975
+ "breaking": false,
2976
+ "manual": []
2977
+ },
2978
+ "1.4.3": {
2979
+ "version": "1.4.4",
2980
+ "date": "2026-06-07",
2981
+ "notes": "First full CLI-first field-test gap fixes (config drift + manifest scope): (1) phase-1-collect.md no longer instructs the config-writer to derive paths.commands from the project prefix — it is ALWAYS '.claude/commands/forge' (the prefix-derived instruction survived the 1.4.0 namespace redesign and produced paths.commands='.claude/commands/git' -> check-structure 0/14). (2) generate-tools.md gains an explicit step writing paths.forgeRoot='.forge' — without it the register agent improvised an absolute npm-global payload path, which breaks on version upgrades and nvm switches. (3) build-manifest.cjs excludes 10 plugin-development tools from the tools namespace — the structure manifest describes instances, and expecting dev tools produced false 49/59 'missing tools' gaps in /forge:health.",
2982
+ "target": "init:phases:phase-1-collect,init:generation:generate-tools,tools:build-manifest,schemas:structure-manifest",
2983
+ "regenerate": [],
2984
+ "breaking": false,
2985
+ "manual": [
2986
+ "Existing CLI-first projects with drifted config: run node .forge/tools/manage-config.cjs set paths.commands '\".claude/commands/forge\"' and set paths.forgeRoot '\".forge\"', then re-run '4ge init claude .' to refresh .forge/schemas/structure-manifest.json."
2987
+ ]
2988
+ },
2989
+ "1.4.4": {
2990
+ "version": "1.4.5",
2991
+ "date": "2026-06-09",
2992
+ "notes": "Collate-workflow KB-link refresh is orchestrator-owned under forge-cli. collator_agent.md (base-pack) + meta-collate.md (meta source) no longer instruct the collator subagent to invoke the forge:refresh-kb-links Skill tool: forge-cli subagents run via the Pi runtime, which has no Skill tool, so the instruction triggered a multi-call bash-probe loop before falling back. The Claude Code TUI standalone path still uses the Skill tool; under forge-cli the run-task orchestrator owns the KB refresh (runRefreshKbLinks) after the writeback phase. Prose-only change to the generated collate workflow.",
2993
+ "target": "workflows:collator_agent,meta:meta-collate",
2994
+ "regenerate": [
2995
+ "workflows:collator_agent"
2996
+ ],
2997
+ "breaking": false,
2998
+ "manual": [
2999
+ "Run /forge:update (or /forge:rebuild) to regenerate the collate workflow (collator_agent.md) with the orchestrator-owned KB-refresh guidance."
3000
+ ]
2916
3001
  }
2917
3002
  }
@@ -10,7 +10,7 @@ description: Conversational pipeline manager — add, customize, view, or remove
10
10
  ## Setup
11
11
 
12
12
  ```
13
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
13
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}"`
14
14
  ```
15
15
 
16
16
  Read project config values:
@@ -10,7 +10,7 @@ Add a task to an existing sprint without re-running the full sprint planner.
10
10
  ## Setup
11
11
 
12
12
  ```
13
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
13
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}"`
14
14
  ```
15
15
 
16
16
  Read project config values:
@@ -256,8 +256,8 @@ Display a summary (substitute `{PREFIX}` with `PROJECT_PREFIX.toLowerCase()`):
256
256
  Pipeline: {PIPELINE}
257
257
 
258
258
  ── Next steps:
259
- 1. Run /{PREFIX}:run-task {TASK_ID} to execute the full pipeline.
260
- 2. Or run /{PREFIX}:plan {TASK_ID} to plan it first.
259
+ 1. Run /forge:run-task {TASK_ID} to execute the full pipeline.
260
+ 2. Or run /forge:plan {TASK_ID} to plan it first.
261
261
  ```
262
262
 
263
263
  ---
@@ -10,7 +10,7 @@ Single conversational entry point for all Forge intent.
10
10
  ## Locate plugin root
11
11
 
12
12
  ```
13
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
13
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}"`
14
14
  ```
15
15
 
16
16
  ## Open with oracle banner
@@ -12,7 +12,7 @@ release engineering, significant refactors).
12
12
  ## Locate plugin root
13
13
 
14
14
  ```
15
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
15
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}"`
16
16
  ```
17
17
 
18
18
  ## Arguments
@@ -11,7 +11,7 @@ commands (e.g. `paths.forgeRoot` is refreshed by `/forge:update`).
11
11
  ## Locate the Forge plugin
12
12
 
13
13
  ```
14
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
14
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}"`
15
15
  ```
16
16
 
17
17
  Read `.forge/config.json`. If it does not exist, stop and emit:
@@ -32,7 +32,7 @@ Assess the health and currency of the project's SDLC knowledge base.
32
32
 
33
33
  First, resolve the plugin root and project root:
34
34
  ```
35
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
35
+ FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}"`
36
36
  ```
37
37
 
38
38
  Open the run with the oracle hero + subtitle: