@entelligentsia/forgecli 1.0.14 → 1.0.21

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 (363) hide show
  1. package/CHANGELOG.md +185 -0
  2. package/README.md +7 -1
  3. package/dist/CHANGELOG-forge-plugin.md +61 -0
  4. package/dist/bin/config.js +4 -4
  5. package/dist/bin/config.js.map +1 -1
  6. package/dist/bin/update-cli.d.ts +1 -1
  7. package/dist/bin/update-cli.js +1 -1
  8. package/dist/bin/update-cli.js.map +1 -1
  9. package/dist/extensions/forgecli/ask-user-tool.js +1 -1
  10. package/dist/extensions/forgecli/ask-user-tool.js.map +1 -1
  11. package/dist/extensions/forgecli/commands/add-pipeline.d.ts +19 -0
  12. package/dist/extensions/forgecli/commands/add-pipeline.js +143 -0
  13. package/dist/extensions/forgecli/commands/add-pipeline.js.map +1 -0
  14. package/dist/extensions/forgecli/commands/add-task.d.ts +20 -0
  15. package/dist/extensions/forgecli/commands/add-task.js +154 -0
  16. package/dist/extensions/forgecli/commands/add-task.js.map +1 -0
  17. package/dist/extensions/forgecli/commands/approve.d.ts +22 -0
  18. package/dist/extensions/forgecli/commands/approve.js +152 -0
  19. package/dist/extensions/forgecli/commands/approve.js.map +1 -0
  20. package/dist/extensions/forgecli/commands/collate.d.ts +22 -0
  21. package/dist/extensions/forgecli/commands/collate.js +134 -0
  22. package/dist/extensions/forgecli/commands/collate.js.map +1 -0
  23. package/dist/extensions/forgecli/commands/commit.d.ts +22 -0
  24. package/dist/extensions/forgecli/commands/commit.js +152 -0
  25. package/dist/extensions/forgecli/commands/commit.js.map +1 -0
  26. package/dist/extensions/forgecli/commands/config-command.d.ts +8 -0
  27. package/dist/extensions/forgecli/commands/config-command.js +67 -0
  28. package/dist/extensions/forgecli/commands/config-command.js.map +1 -0
  29. package/dist/extensions/forgecli/commands/enhance.d.ts +45 -0
  30. package/dist/extensions/forgecli/commands/enhance.js +219 -0
  31. package/dist/extensions/forgecli/commands/enhance.js.map +1 -0
  32. package/dist/extensions/forgecli/commands/implement.d.ts +22 -0
  33. package/dist/extensions/forgecli/commands/implement.js +170 -0
  34. package/dist/extensions/forgecli/commands/implement.js.map +1 -0
  35. package/dist/extensions/forgecli/commands/plan.d.ts +22 -0
  36. package/dist/extensions/forgecli/commands/plan.js +167 -0
  37. package/dist/extensions/forgecli/commands/plan.js.map +1 -0
  38. package/dist/extensions/forgecli/commands/quiz-agent.d.ts +17 -0
  39. package/dist/extensions/forgecli/commands/quiz-agent.js +98 -0
  40. package/dist/extensions/forgecli/commands/quiz-agent.js.map +1 -0
  41. package/dist/extensions/forgecli/commands/read-command.d.ts +2 -0
  42. package/dist/extensions/forgecli/commands/read-command.js +100 -0
  43. package/dist/extensions/forgecli/commands/read-command.js.map +1 -0
  44. package/dist/extensions/forgecli/commands/regenerate.d.ts +40 -0
  45. package/dist/extensions/forgecli/commands/regenerate.js +426 -0
  46. package/dist/extensions/forgecli/commands/regenerate.js.map +1 -0
  47. package/dist/extensions/forgecli/commands/remove-command.d.ts +17 -0
  48. package/dist/extensions/forgecli/commands/remove-command.js +124 -0
  49. package/dist/extensions/forgecli/commands/remove-command.js.map +1 -0
  50. package/dist/extensions/forgecli/commands/report-bug.d.ts +25 -0
  51. package/dist/extensions/forgecli/commands/report-bug.js +159 -0
  52. package/dist/extensions/forgecli/commands/report-bug.js.map +1 -0
  53. package/dist/extensions/forgecli/commands/retrospective.d.ts +20 -0
  54. package/dist/extensions/forgecli/commands/retrospective.js +126 -0
  55. package/dist/extensions/forgecli/commands/retrospective.js.map +1 -0
  56. package/dist/extensions/forgecli/commands/review-code.d.ts +35 -0
  57. package/dist/extensions/forgecli/commands/review-code.js +196 -0
  58. package/dist/extensions/forgecli/commands/review-code.js.map +1 -0
  59. package/dist/extensions/forgecli/commands/review-plan.d.ts +35 -0
  60. package/dist/extensions/forgecli/commands/review-plan.js +200 -0
  61. package/dist/extensions/forgecli/commands/review-plan.js.map +1 -0
  62. package/dist/extensions/forgecli/commands/sprint-intake.d.ts +10 -0
  63. package/dist/extensions/forgecli/commands/sprint-intake.js +91 -0
  64. package/dist/extensions/forgecli/commands/sprint-intake.js.map +1 -0
  65. package/dist/extensions/forgecli/commands/sprint-plan.d.ts +14 -0
  66. package/dist/extensions/forgecli/commands/sprint-plan.js +122 -0
  67. package/dist/extensions/forgecli/commands/sprint-plan.js.map +1 -0
  68. package/dist/extensions/forgecli/commands/status-command.d.ts +19 -0
  69. package/dist/extensions/forgecli/commands/status-command.js +140 -0
  70. package/dist/extensions/forgecli/commands/status-command.js.map +1 -0
  71. package/dist/extensions/forgecli/commands/store-query.d.ts +22 -0
  72. package/dist/extensions/forgecli/commands/store-query.js +107 -0
  73. package/dist/extensions/forgecli/commands/store-query.js.map +1 -0
  74. package/dist/extensions/forgecli/commands/store-repair.d.ts +17 -0
  75. package/dist/extensions/forgecli/commands/store-repair.js +123 -0
  76. package/dist/extensions/forgecli/commands/store-repair.js.map +1 -0
  77. package/dist/extensions/forgecli/commands/test-orchestrate.d.ts +2 -0
  78. package/dist/extensions/forgecli/commands/test-orchestrate.js +182 -0
  79. package/dist/extensions/forgecli/commands/test-orchestrate.js.map +1 -0
  80. package/dist/extensions/forgecli/commands/transcripts-command.d.ts +87 -0
  81. package/dist/extensions/forgecli/commands/transcripts-command.js +418 -0
  82. package/dist/extensions/forgecli/commands/transcripts-command.js.map +1 -0
  83. package/dist/extensions/forgecli/commands/validate.d.ts +22 -0
  84. package/dist/extensions/forgecli/commands/validate.js +152 -0
  85. package/dist/extensions/forgecli/commands/validate.js.map +1 -0
  86. package/dist/extensions/forgecli/config/config-layer.d.ts +53 -0
  87. package/dist/extensions/forgecli/config/config-layer.js +72 -0
  88. package/dist/extensions/forgecli/config/config-layer.js.map +1 -0
  89. package/dist/extensions/forgecli/config/config-writer.d.ts +16 -0
  90. package/dist/extensions/forgecli/config/config-writer.js +69 -0
  91. package/dist/extensions/forgecli/config/config-writer.js.map +1 -0
  92. package/dist/extensions/forgecli/config/model-registry.d.ts +61 -0
  93. package/dist/extensions/forgecli/config/model-registry.js +127 -0
  94. package/dist/extensions/forgecli/config/model-registry.js.map +1 -0
  95. package/dist/extensions/forgecli/config/model-resolver.d.ts +32 -0
  96. package/dist/extensions/forgecli/config/model-resolver.js +65 -0
  97. package/dist/extensions/forgecli/config/model-resolver.js.map +1 -0
  98. package/dist/extensions/forgecli/config/model-validator.d.ts +29 -0
  99. package/dist/extensions/forgecli/config/model-validator.js +107 -0
  100. package/dist/extensions/forgecli/config/model-validator.js.map +1 -0
  101. package/dist/extensions/forgecli/config-layer.d.ts +0 -16
  102. package/dist/extensions/forgecli/config-layer.js +0 -5
  103. package/dist/extensions/forgecli/config-layer.js.map +1 -1
  104. package/dist/extensions/forgecli/config-tui/component.js +1 -1
  105. package/dist/extensions/forgecli/config-tui/component.js.map +1 -1
  106. package/dist/extensions/forgecli/config-tui/handler.js +1 -1
  107. package/dist/extensions/forgecli/config-tui/handler.js.map +1 -1
  108. package/dist/extensions/forgecli/config-tui/screens/override-editor.js +1 -1
  109. package/dist/extensions/forgecli/config-tui/screens/override-editor.js.map +1 -1
  110. package/dist/extensions/forgecli/config-tui/screens/overrides-list-phases.js +1 -1
  111. package/dist/extensions/forgecli/config-tui/screens/overrides-list-phases.js.map +1 -1
  112. package/dist/extensions/forgecli/config-tui/screens/show-resolved.js +1 -1
  113. package/dist/extensions/forgecli/config-tui/screens/show-resolved.js.map +1 -1
  114. package/dist/extensions/forgecli/config-tui/state/buffer.d.ts +2 -2
  115. package/dist/extensions/forgecli/config-tui/state/model.d.ts +1 -1
  116. package/dist/extensions/forgecli/config-tui/state/reducer.js.map +1 -1
  117. package/dist/extensions/forgecli/config-tui/state/selectors.d.ts +2 -2
  118. package/dist/extensions/forgecli/config-tui/state/selectors.js +1 -1
  119. package/dist/extensions/forgecli/config-tui/state/selectors.js.map +1 -1
  120. package/dist/extensions/forgecli/context-governor-compaction.d.ts +94 -0
  121. package/dist/extensions/forgecli/context-governor-compaction.js +327 -0
  122. package/dist/extensions/forgecli/context-governor-compaction.js.map +1 -0
  123. package/dist/extensions/forgecli/context-governor.d.ts +169 -0
  124. package/dist/extensions/forgecli/context-governor.js +592 -0
  125. package/dist/extensions/forgecli/context-governor.js.map +1 -0
  126. package/dist/extensions/forgecli/dashboard/component.d.ts +17 -5
  127. package/dist/extensions/forgecli/dashboard/component.js +160 -115
  128. package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
  129. package/dist/extensions/forgecli/dashboard/register.js +7 -21
  130. package/dist/extensions/forgecli/dashboard/register.js.map +1 -1
  131. package/dist/extensions/forgecli/dashboard/theme.d.ts +27 -0
  132. package/dist/extensions/forgecli/dashboard/theme.js +91 -0
  133. package/dist/extensions/forgecli/dashboard/theme.js.map +1 -0
  134. package/dist/extensions/forgecli/fix-bug.js +59 -5
  135. package/dist/extensions/forgecli/fix-bug.js.map +1 -1
  136. package/dist/extensions/forgecli/forge-artifact-tool.js +3 -2
  137. package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
  138. package/dist/extensions/forgecli/forge-cli-schema.json +0 -4
  139. package/dist/extensions/forgecli/forge-commands.js +1 -1
  140. package/dist/extensions/forgecli/forge-commands.js.map +1 -1
  141. package/dist/extensions/forgecli/forge-init/forge-init.d.ts +26 -0
  142. package/dist/extensions/forgecli/forge-init/forge-init.js +514 -0
  143. package/dist/extensions/forgecli/forge-init/forge-init.js.map +1 -0
  144. package/dist/extensions/forgecli/forge-init/init-context.d.ts +99 -0
  145. package/dist/extensions/forgecli/forge-init/init-context.js +178 -0
  146. package/dist/extensions/forgecli/forge-init/init-context.js.map +1 -0
  147. package/dist/extensions/forgecli/forge-init/init-progress.d.ts +39 -0
  148. package/dist/extensions/forgecli/forge-init/init-progress.js +117 -0
  149. package/dist/extensions/forgecli/forge-init/init-progress.js.map +1 -0
  150. package/dist/extensions/forgecli/forge-init/phase4-register.js +1 -1
  151. package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -1
  152. package/dist/extensions/forgecli/forge-init/run-phases.js +2 -2
  153. package/dist/extensions/forgecli/forge-init/run-phases.js.map +1 -1
  154. package/dist/extensions/forgecli/forge-subagent.d.ts +42 -1
  155. package/dist/extensions/forgecli/forge-subagent.js +59 -18
  156. package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
  157. package/dist/extensions/forgecli/forge-tools.d.ts +0 -25
  158. package/dist/extensions/forgecli/forge-tools.js +8 -37
  159. package/dist/extensions/forgecli/forge-tools.js.map +1 -1
  160. package/dist/extensions/forgecli/governor-config.d.ts +19 -0
  161. package/dist/extensions/forgecli/governor-config.js +58 -0
  162. package/dist/extensions/forgecli/governor-config.js.map +1 -0
  163. package/dist/extensions/forgecli/health-check.js +1 -1
  164. package/dist/extensions/forgecli/health-check.js.map +1 -1
  165. package/dist/extensions/forgecli/hook-dispatcher.d.ts +3 -1
  166. package/dist/extensions/forgecli/hook-dispatcher.js +39 -5
  167. package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
  168. package/dist/extensions/forgecli/hooks/post-init-hook.js +11 -6
  169. package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -1
  170. package/dist/extensions/forgecli/hooks/post-sprint-hook.js +11 -6
  171. package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -1
  172. package/dist/extensions/forgecli/hooks/write-guard.js +1 -1
  173. package/dist/extensions/forgecli/hooks/write-guard.js.map +1 -1
  174. package/dist/extensions/forgecli/index.js +70 -36
  175. package/dist/extensions/forgecli/index.js.map +1 -1
  176. package/dist/extensions/forgecli/kickoff.d.ts +9 -0
  177. package/dist/extensions/forgecli/kickoff.js +15 -0
  178. package/dist/extensions/forgecli/kickoff.js.map +1 -1
  179. package/dist/extensions/forgecli/lib/forge-config.d.ts +1 -1
  180. package/dist/extensions/forgecli/lib/forge-config.js +1 -1
  181. package/dist/extensions/forgecli/lib/forge-config.js.map +1 -1
  182. package/dist/extensions/forgecli/lib/forge-root.d.ts +10 -0
  183. package/dist/extensions/forgecli/lib/forge-root.js +62 -0
  184. package/dist/extensions/forgecli/lib/forge-root.js.map +1 -0
  185. package/dist/extensions/forgecli/lib/halt-advisor.d.ts +19 -14
  186. package/dist/extensions/forgecli/lib/halt-advisor.js +36 -13
  187. package/dist/extensions/forgecli/lib/halt-advisor.js.map +1 -1
  188. package/dist/extensions/forgecli/lib/run-cjs.d.ts +26 -0
  189. package/dist/extensions/forgecli/lib/run-cjs.js +42 -0
  190. package/dist/extensions/forgecli/lib/run-cjs.js.map +1 -0
  191. package/dist/extensions/forgecli/orchestrator-status-bar.d.ts +3 -2
  192. package/dist/extensions/forgecli/orchestrator-status-bar.js +90 -60
  193. package/dist/extensions/forgecli/orchestrator-status-bar.js.map +1 -1
  194. package/dist/extensions/forgecli/orchestrator-tree.d.ts +4 -0
  195. package/dist/extensions/forgecli/orchestrator-tree.js +21 -3
  196. package/dist/extensions/forgecli/orchestrator-tree.js.map +1 -1
  197. package/dist/extensions/forgecli/orchestrators/calibrate.d.ts +64 -0
  198. package/dist/extensions/forgecli/orchestrators/calibrate.js +481 -0
  199. package/dist/extensions/forgecli/orchestrators/calibrate.js.map +1 -0
  200. package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +93 -0
  201. package/dist/extensions/forgecli/orchestrators/fix-bug.js +1705 -0
  202. package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -0
  203. package/dist/extensions/forgecli/orchestrators/halt-advisor.d.ts +59 -0
  204. package/dist/extensions/forgecli/orchestrators/halt-advisor.js +113 -0
  205. package/dist/extensions/forgecli/orchestrators/halt-advisor.js.map +1 -0
  206. package/dist/extensions/forgecli/orchestrators/materialize.d.ts +16 -0
  207. package/dist/extensions/forgecli/orchestrators/materialize.js +195 -0
  208. package/dist/extensions/forgecli/orchestrators/materialize.js.map +1 -0
  209. package/dist/extensions/forgecli/orchestrators/migrate.d.ts +22 -0
  210. package/dist/extensions/forgecli/orchestrators/migrate.js +260 -0
  211. package/dist/extensions/forgecli/orchestrators/migrate.js.map +1 -0
  212. package/dist/extensions/forgecli/orchestrators/orchestrator-preflight.d.ts +46 -0
  213. package/dist/extensions/forgecli/orchestrators/orchestrator-preflight.js +64 -0
  214. package/dist/extensions/forgecli/orchestrators/orchestrator-preflight.js.map +1 -0
  215. package/dist/extensions/forgecli/orchestrators/run-sprint.d.ts +27 -0
  216. package/dist/extensions/forgecli/orchestrators/run-sprint.js +734 -0
  217. package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -0
  218. package/dist/extensions/forgecli/orchestrators/run-task.d.ts +215 -0
  219. package/dist/extensions/forgecli/orchestrators/run-task.js +1491 -0
  220. package/dist/extensions/forgecli/orchestrators/run-task.js.map +1 -0
  221. package/dist/extensions/forgecli/paths/paths.d.ts +8 -0
  222. package/dist/extensions/forgecli/paths/paths.js +17 -0
  223. package/dist/extensions/forgecli/paths/paths.js.map +1 -1
  224. package/dist/extensions/forgecli/phase-vocab.d.ts +31 -0
  225. package/dist/extensions/forgecli/phase-vocab.js +82 -0
  226. package/dist/extensions/forgecli/phase-vocab.js.map +1 -0
  227. package/dist/extensions/forgecli/run-sprint.d.ts +3 -1
  228. package/dist/extensions/forgecli/run-sprint.js +1 -0
  229. package/dist/extensions/forgecli/run-sprint.js.map +1 -1
  230. package/dist/extensions/forgecli/run-task.d.ts +34 -1
  231. package/dist/extensions/forgecli/run-task.js +144 -6
  232. package/dist/extensions/forgecli/run-task.js.map +1 -1
  233. package/dist/extensions/forgecli/session-registry.d.ts +2 -2
  234. package/dist/extensions/forgecli/session-registry.js +6 -2
  235. package/dist/extensions/forgecli/session-registry.js.map +1 -1
  236. package/dist/extensions/forgecli/skill-curation/friction-emit.d.ts +99 -0
  237. package/dist/extensions/forgecli/skill-curation/friction-emit.js +245 -0
  238. package/dist/extensions/forgecli/skill-curation/friction-emit.js.map +1 -0
  239. package/dist/extensions/forgecli/skill-curation/skill-curation-flag.d.ts +21 -0
  240. package/dist/extensions/forgecli/skill-curation/skill-curation-flag.js +71 -0
  241. package/dist/extensions/forgecli/skill-curation/skill-curation-flag.js.map +1 -0
  242. package/dist/extensions/forgecli/skill-curation/skill-curator-subagent.d.ts +102 -0
  243. package/dist/extensions/forgecli/skill-curation/skill-curator-subagent.js +339 -0
  244. package/dist/extensions/forgecli/skill-curation/skill-curator-subagent.js.map +1 -0
  245. package/dist/extensions/forgecli/skill-curation/skill-retriever.d.ts +84 -0
  246. package/dist/extensions/forgecli/skill-curation/skill-retriever.js +246 -0
  247. package/dist/extensions/forgecli/skill-curation/skill-retriever.js.map +1 -0
  248. package/dist/extensions/forgecli/skill-curation/skill-usage-tracker.d.ts +91 -0
  249. package/dist/extensions/forgecli/skill-curation/skill-usage-tracker.js +224 -0
  250. package/dist/extensions/forgecli/skill-curation/skill-usage-tracker.js.map +1 -0
  251. package/dist/extensions/forgecli/store/store-error-remediation.d.ts +65 -0
  252. package/dist/extensions/forgecli/store/store-error-remediation.js +307 -0
  253. package/dist/extensions/forgecli/store/store-error-remediation.js.map +1 -0
  254. package/dist/extensions/forgecli/store/store-resolver.d.ts +56 -0
  255. package/dist/extensions/forgecli/store/store-resolver.js +263 -0
  256. package/dist/extensions/forgecli/store/store-resolver.js.map +1 -0
  257. package/dist/extensions/forgecli/store/store-validator.d.ts +16 -0
  258. package/dist/extensions/forgecli/store/store-validator.js +32 -0
  259. package/dist/extensions/forgecli/store/store-validator.js.map +1 -0
  260. package/dist/extensions/forgecli/store/transition-guard.d.ts +20 -0
  261. package/dist/extensions/forgecli/store/transition-guard.js +89 -0
  262. package/dist/extensions/forgecli/store/transition-guard.js.map +1 -0
  263. package/dist/extensions/forgecli/subagent/orchestrator-transcript.js +5 -0
  264. package/dist/extensions/forgecli/subagent/orchestrator-transcript.js.map +1 -1
  265. package/dist/extensions/forgecli/thread-switcher.d.ts +4 -1
  266. package/dist/extensions/forgecli/thread-switcher.js +36 -21
  267. package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
  268. package/dist/extensions/forgecli/transcript-archive-types.d.ts +171 -0
  269. package/dist/extensions/forgecli/transcript-archive-types.js +130 -0
  270. package/dist/extensions/forgecli/transcript-archive-types.js.map +1 -0
  271. package/dist/extensions/forgecli/transcript-archive.d.ts +127 -0
  272. package/dist/extensions/forgecli/transcript-archive.js +656 -0
  273. package/dist/extensions/forgecli/transcript-archive.js.map +1 -0
  274. package/dist/extensions/forgecli/transcript-replay.d.ts +28 -0
  275. package/dist/extensions/forgecli/transcript-replay.js +153 -0
  276. package/dist/extensions/forgecli/transcript-replay.js.map +1 -0
  277. package/dist/extensions/forgecli/transcripts-tui/component.d.ts +36 -0
  278. package/dist/extensions/forgecli/transcripts-tui/component.js +112 -0
  279. package/dist/extensions/forgecli/transcripts-tui/component.js.map +1 -0
  280. package/dist/extensions/forgecli/transcripts-tui/index.d.ts +4 -0
  281. package/dist/extensions/forgecli/transcripts-tui/index.js +5 -0
  282. package/dist/extensions/forgecli/transcripts-tui/index.js.map +1 -0
  283. package/dist/extensions/forgecli/transcripts-tui/screens/browse.d.ts +21 -0
  284. package/dist/extensions/forgecli/transcripts-tui/screens/browse.js +172 -0
  285. package/dist/extensions/forgecli/transcripts-tui/screens/browse.js.map +1 -0
  286. package/dist/extensions/forgecli/transcripts-tui/screens/types.d.ts +22 -0
  287. package/dist/extensions/forgecli/transcripts-tui/screens/types.js +4 -0
  288. package/dist/extensions/forgecli/transcripts-tui/screens/types.js.map +1 -0
  289. package/dist/extensions/forgecli/transcripts-tui/state/index.d.ts +4 -0
  290. package/dist/extensions/forgecli/transcripts-tui/state/index.js +5 -0
  291. package/dist/extensions/forgecli/transcripts-tui/state/index.js.map +1 -0
  292. package/dist/extensions/forgecli/transcripts-tui/state/init.d.ts +8 -0
  293. package/dist/extensions/forgecli/transcripts-tui/state/init.js +18 -0
  294. package/dist/extensions/forgecli/transcripts-tui/state/init.js.map +1 -0
  295. package/dist/extensions/forgecli/transcripts-tui/state/model.d.ts +56 -0
  296. package/dist/extensions/forgecli/transcripts-tui/state/model.js +6 -0
  297. package/dist/extensions/forgecli/transcripts-tui/state/model.js.map +1 -0
  298. package/dist/extensions/forgecli/transcripts-tui/state/reducer.d.ts +2 -0
  299. package/dist/extensions/forgecli/transcripts-tui/state/reducer.js +51 -0
  300. package/dist/extensions/forgecli/transcripts-tui/state/reducer.js.map +1 -0
  301. package/dist/extensions/forgecli/transcripts-tui/state/selectors.d.ts +10 -0
  302. package/dist/extensions/forgecli/transcripts-tui/state/selectors.js +62 -0
  303. package/dist/extensions/forgecli/transcripts-tui/state/selectors.js.map +1 -0
  304. package/dist/extensions/forgecli/transcripts-tui/theme.d.ts +20 -0
  305. package/dist/extensions/forgecli/transcripts-tui/theme.js +47 -0
  306. package/dist/extensions/forgecli/transcripts-tui/theme.js.map +1 -0
  307. package/dist/extensions/forgecli/tui/banner.d.ts +10 -0
  308. package/dist/extensions/forgecli/tui/banner.js +36 -0
  309. package/dist/extensions/forgecli/tui/banner.js.map +1 -0
  310. package/dist/extensions/forgecli/tui/forge-header.d.ts +12 -0
  311. package/dist/extensions/forgecli/tui/forge-header.js +114 -0
  312. package/dist/extensions/forgecli/tui/forge-header.js.map +1 -0
  313. package/dist/extensions/forgecli/tui/input-router.d.ts +33 -0
  314. package/dist/extensions/forgecli/tui/input-router.js +136 -0
  315. package/dist/extensions/forgecli/tui/input-router.js.map +1 -0
  316. package/dist/extensions/forgecli/tui/orchestrator-status-bar.d.ts +26 -0
  317. package/dist/extensions/forgecli/tui/orchestrator-status-bar.js +213 -0
  318. package/dist/extensions/forgecli/tui/orchestrator-status-bar.js.map +1 -0
  319. package/dist/extensions/forgecli/tui/thread-switcher.d.ts +18 -0
  320. package/dist/extensions/forgecli/tui/thread-switcher.js +194 -0
  321. package/dist/extensions/forgecli/tui/thread-switcher.js.map +1 -0
  322. package/dist/extensions/forgecli/update/forge-update-command.d.ts +100 -0
  323. package/dist/extensions/forgecli/update/forge-update-command.js +435 -0
  324. package/dist/extensions/forgecli/update/forge-update-command.js.map +1 -0
  325. package/dist/extensions/forgecli/update/migration-engine.d.ts +117 -0
  326. package/dist/extensions/forgecli/update/migration-engine.js +563 -0
  327. package/dist/extensions/forgecli/update/migration-engine.js.map +1 -0
  328. package/dist/extensions/forgecli/update/update-check.d.ts +37 -0
  329. package/dist/extensions/forgecli/update/update-check.js +185 -0
  330. package/dist/extensions/forgecli/update/update-check.js.map +1 -0
  331. package/dist/extensions/forgecli/update/update-tools.d.ts +23 -0
  332. package/dist/extensions/forgecli/update/update-tools.js +135 -0
  333. package/dist/extensions/forgecli/update/update-tools.js.map +1 -0
  334. package/dist/extensions/forgecli/update/whats-new-widget.d.ts +26 -0
  335. package/dist/extensions/forgecli/update/whats-new-widget.js +376 -0
  336. package/dist/extensions/forgecli/update/whats-new-widget.js.map +1 -0
  337. package/dist/extensions/forgecli/update/whats-new.d.ts +120 -0
  338. package/dist/extensions/forgecli/update/whats-new.js +470 -0
  339. package/dist/extensions/forgecli/update/whats-new.js.map +1 -0
  340. package/dist/extensions/forgecli/viewport/events.d.ts +113 -0
  341. package/dist/extensions/forgecli/viewport/events.js +290 -0
  342. package/dist/extensions/forgecli/viewport/events.js.map +1 -0
  343. package/dist/extensions/forgecli/viewport/renderer.d.ts +102 -0
  344. package/dist/extensions/forgecli/viewport/renderer.js +277 -0
  345. package/dist/extensions/forgecli/viewport/renderer.js.map +1 -0
  346. package/dist/extensions/forgecli/viewport/theme.d.ts +11 -0
  347. package/dist/extensions/forgecli/viewport/theme.js +131 -0
  348. package/dist/extensions/forgecli/viewport/theme.js.map +1 -0
  349. package/dist/extensions/forgecli/wf-engine/engine.js +1 -1
  350. package/dist/extensions/forgecli/wf-engine/engine.js.map +1 -1
  351. package/dist/forge-payload/.base-pack/workflows/implement_plan.md +9 -0
  352. package/dist/forge-payload/.base-pack/workflows/plan_task.md +7 -0
  353. package/dist/forge-payload/.base-pack/workflows/review_code.md +4 -3
  354. package/dist/forge-payload/.base-pack/workflows/review_plan.md +4 -3
  355. package/dist/forge-payload/.base-pack/workflows/validate_task.md +4 -3
  356. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  357. package/dist/forge-payload/.schemas/migrations.json +132 -27
  358. package/dist/forge-payload/meta/workflows/meta-review-implementation.md +4 -3
  359. package/dist/forge-payload/meta/workflows/meta-review-plan.md +4 -3
  360. package/dist/forge-payload/meta/workflows/meta-validate.md +4 -3
  361. package/dist/forge-payload/tools/collate.cjs +32 -0
  362. package/dist/forge-payload/tools/postflight-gate.cjs +56 -10
  363. package/package.json +5 -3
@@ -8,7 +8,7 @@
8
8
  // access to `LayeredConfig.errors` to surface the N-B-E issue. Callers that
9
9
  // need `LayeredConfig` must call `loadLayeredConfig()` directly; this module
10
10
  // optimises only the walk-up discovery phase.
11
- import { discoverForgeConfig } from "../forge-root.js";
11
+ import { discoverForgeConfig } from "./forge-root.js";
12
12
  /** Module-level cache keyed by the `cwd` argument (or `""` for the default). */
13
13
  const cache = new Map();
14
14
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"forge-config.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/forge-config.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,yEAAyE;AACzE,wDAAwD;AACxD,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,8CAA8C;AAE9C,OAAO,EAAE,mBAAmB,EAAoB,MAAM,kBAAkB,CAAC;AAEzE,gFAAgF;AAChF,MAAM,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACpE,MAAM,GAAG,GAAG,GAAG,CAAC;IAChB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACxC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB;IACpC,KAAK,CAAC,KAAK,EAAE,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"forge-config.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/forge-config.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,yEAAyE;AACzE,wDAAwD;AACxD,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,8CAA8C;AAE9C,OAAO,EAAE,mBAAmB,EAAoB,MAAM,iBAAiB,CAAC;AAExE,gFAAgF;AAChF,MAAM,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACpE,MAAM,GAAG,GAAG,GAAG,CAAC;IAChB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACxC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB;IACpC,KAAK,CAAC,KAAK,EAAE,CAAC;AACf,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface ForgeConfig {
2
+ forgeRoot: string;
3
+ configPath: string;
4
+ }
5
+ /**
6
+ * Discover the forge plugin root AND return the config path so callers can
7
+ * read other config fields (e.g. `project.name`) without re-scanning.
8
+ * Returns null when no `.forge/config.json` is found or it lacks `paths.forgeRoot`.
9
+ */
10
+ export declare function discoverForgeConfig(cwd?: string): ForgeConfig | null;
@@ -0,0 +1,62 @@
1
+ // Forge root resolver — walks up from cwd looking for `.forge/config.json`,
2
+ // then resolves `paths.forgeRoot` (relative paths are resolved against the
3
+ // project dir — the parent of `.forge/` — not cwd). Returns null when no
4
+ // config is found or when the config is missing/malformed/unreadable. All filesystem reads are wrapped
5
+ // in try/catch so a malformed config can never crash the extension.
6
+ //
7
+ // Pattern modelled on `findNearestProjectAgentsDir` in
8
+ // `subagent/agents.ts:96-106`.
9
+ import * as fs from "node:fs";
10
+ import * as path from "node:path";
11
+ import { isFile } from "./shared-fs-utils.js";
12
+ function findNearestForgeConfig(cwd) {
13
+ let currentDir = cwd;
14
+ while (true) {
15
+ const candidate = path.join(currentDir, ".forge", "config.json");
16
+ if (isFile(candidate))
17
+ return candidate;
18
+ const parentDir = path.dirname(currentDir);
19
+ if (parentDir === currentDir)
20
+ return null;
21
+ currentDir = parentDir;
22
+ }
23
+ }
24
+ /**
25
+ * Discover the forge plugin root AND return the config path so callers can
26
+ * read other config fields (e.g. `project.name`) without re-scanning.
27
+ * Returns null when no `.forge/config.json` is found or it lacks `paths.forgeRoot`.
28
+ */
29
+ export function discoverForgeConfig(cwd = process.cwd()) {
30
+ const configPath = findNearestForgeConfig(cwd);
31
+ if (!configPath)
32
+ return null;
33
+ let raw;
34
+ try {
35
+ raw = fs.readFileSync(configPath, "utf8");
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ let config;
41
+ try {
42
+ config = JSON.parse(raw);
43
+ }
44
+ catch {
45
+ return null;
46
+ }
47
+ const forgeRootValue = config && typeof config === "object" && "paths" in config
48
+ ? config.paths?.forgeRoot
49
+ : undefined;
50
+ if (typeof forgeRootValue !== "string" || forgeRootValue.length === 0) {
51
+ return null;
52
+ }
53
+ // `configPath` is `<projectDir>/.forge/config.json`. Relative `forgeRoot`
54
+ // values in Forge configs are written relative to the project dir (the
55
+ // parent of `.forge/`), not the `.forge/` dir itself. Example dogfood
56
+ // config: `paths.forgeRoot = "./forge/forge"` resolving to
57
+ // `<projectDir>/forge/forge`.
58
+ const projectDir = path.dirname(path.dirname(configPath));
59
+ const resolved = path.isAbsolute(forgeRootValue) ? forgeRootValue : path.resolve(projectDir, forgeRootValue);
60
+ return { forgeRoot: resolved, configPath };
61
+ }
62
+ //# sourceMappingURL=forge-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge-root.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/forge-root.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,2EAA2E;AAC3E,yEAAyE;AACzE,uGAAuG;AACvG,oEAAoE;AACpE,EAAE;AACF,uDAAuD;AACvD,+BAA+B;AAE/B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,SAAS,sBAAsB,CAAC,GAAW;IAC1C,IAAI,UAAU,GAAG,GAAG,CAAC;IACrB,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAExC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QAC1C,UAAU,GAAG,SAAS,CAAC;IACxB,CAAC;AACF,CAAC;AAOD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC9D,MAAM,UAAU,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACJ,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,cAAc,GACnB,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM;QACxD,CAAC,CAAE,MAA8C,CAAC,KAAK,EAAE,SAAS;QAClE,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACb,CAAC;IAED,0EAA0E;IAC1E,uEAAuE;IACvE,sEAAsE;IACtE,2DAA2D;IAC3D,8BAA8B;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAE7G,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAC5C,CAAC"}
@@ -1,16 +1,9 @@
1
- import type { PersonaModel } from "../config-layer.js";
2
- export interface ModelRegistryLike {
3
- getAvailable(): Array<{
4
- provider: string;
5
- model: string;
6
- }>;
7
- }
1
+ import type { MergedConfig, PersonaModel } from "../config-layer.js";
8
2
  export interface UiLike {
9
3
  notify(message: string, level?: string): void;
10
4
  }
11
5
  export interface CtxLike {
12
6
  ui: UiLike;
13
- modelRegistry?: ModelRegistryLike;
14
7
  }
15
8
  export interface GateFailure {
16
9
  phase: string;
@@ -37,14 +30,26 @@ export interface RunHaltAdvisorOptions {
37
30
  *
38
31
  * Priority:
39
32
  * 1. Explicit `advisorModel` config slot from forge-cli layered config.
40
- * 2. `modelRegistry.getAvailable()[0]` the first available model.
41
- * 3. undefined caller should skip the advisor.
33
+ * Contract (rev. 2026-06-04): the advisor model is the HEAVY model the runtime
34
+ * resolves point-in-time. There is NO dedicated advisorModel config entry —
35
+ * "heavy" is the approve/architect slot resolved through the existing routing
36
+ * cascade (L4 phase override → L3/L2 project → L1 user/global → default),
37
+ * exactly as the approve phase itself would resolve. When the cascade bottoms
38
+ * out at inherit, the session's current model (pi default) is used. In the
39
+ * Claude Code plugin route the equivalent is the opus-class session model.
40
+ *
41
+ * Returns undefined (advisor skipped, non-fatal) only when nothing is routed
42
+ * AND no current model is available.
42
43
  *
43
- * Note: model-registry.ts does NOT expose a capability rank, so the config
44
- * slot is the canonical way to point at a "strongest" model. getAvailable()[0]
45
- * is the safe no-config fallback. (Sub-decision resolved in PLAN.md.)
44
+ * (History: the original FORGE-S26-T18 implementation used a dedicated
45
+ * advisorModel config slot with a blind registry fallback that produced
46
+ * "anthropic/undefined" on the CART-S03-T01 halt both retired.)
46
47
  */
47
- export declare function resolveAdvisorModel(configSlot: PersonaModel | undefined, modelRegistry: ModelRegistryLike | undefined): PersonaModel | undefined;
48
+ export declare function resolveAdvisorModel(merged: MergedConfig, currentModel?: {
49
+ provider?: string;
50
+ model?: string;
51
+ id?: string;
52
+ }, pipelineName?: string): PersonaModel | undefined;
48
53
  /**
49
54
  * Spawn a read-only advisor subagent to explain the gate failure and guide recovery.
50
55
  *
@@ -6,28 +6,51 @@
6
6
  //
7
7
  // Design constraints:
8
8
  // - Advisor is READ-ONLY: no store writes, no artifact mutations.
9
- // - Model selected by resolveAdvisorModel: advisorModel config slot (L1/L2)
10
- // first; falls back to ctx.modelRegistry.getAvailable()[0]; if neither,
11
- // skips the advisor silently (non-fatal).
9
+ // - Model: the HEAVY model the runtime resolves point-in-time — the
10
+ // approve/architect slot through the existing routing cascade
11
+ // (project > user > pi default). NO dedicated advisorModel config entry.
12
+ // If nothing is routed and no current model exists, the advisor is
13
+ // skipped silently (non-fatal).
12
14
  // - runHaltAdvisor is best-effort: failures must not mask the primary halt.
13
15
  import { runForgeSubagent, loadForgePersona } from "../forge-subagent.js";
16
+ import { resolveModelForPhase } from "../model-resolver.js";
14
17
  /**
15
18
  * Resolve the advisor model for halt-recovery.
16
19
  *
17
20
  * Priority:
18
21
  * 1. Explicit `advisorModel` config slot from forge-cli layered config.
19
- * 2. `modelRegistry.getAvailable()[0]` the first available model.
20
- * 3. undefined caller should skip the advisor.
22
+ * Contract (rev. 2026-06-04): the advisor model is the HEAVY model the runtime
23
+ * resolves point-in-time. There is NO dedicated advisorModel config entry —
24
+ * "heavy" is the approve/architect slot resolved through the existing routing
25
+ * cascade (L4 phase override → L3/L2 project → L1 user/global → default),
26
+ * exactly as the approve phase itself would resolve. When the cascade bottoms
27
+ * out at inherit, the session's current model (pi default) is used. In the
28
+ * Claude Code plugin route the equivalent is the opus-class session model.
21
29
  *
22
- * Note: model-registry.ts does NOT expose a capability rank, so the config
23
- * slot is the canonical way to point at a "strongest" model. getAvailable()[0]
24
- * is the safe no-config fallback. (Sub-decision resolved in PLAN.md.)
30
+ * Returns undefined (advisor skipped, non-fatal) only when nothing is routed
31
+ * AND no current model is available.
32
+ *
33
+ * (History: the original FORGE-S26-T18 implementation used a dedicated
34
+ * advisorModel config slot with a blind registry fallback that produced
35
+ * "anthropic/undefined" on the CART-S03-T01 halt — both retired.)
25
36
  */
26
- export function resolveAdvisorModel(configSlot, modelRegistry) {
27
- if (configSlot)
28
- return configSlot;
29
- const available = modelRegistry?.getAvailable?.() ?? [];
30
- return available[0];
37
+ export function resolveAdvisorModel(merged, currentModel, pipelineName = "default") {
38
+ // Heavy slot: the approve phase / architect persona routing resolution.
39
+ try {
40
+ const heavy = resolveModelForPhase(pipelineName, "approve", "architect", merged ?? {});
41
+ if (heavy.model)
42
+ return heavy.model;
43
+ }
44
+ catch {
45
+ // resolution errors are non-fatal — fall through to the current model
46
+ }
47
+ // Inherit → pi's current model (provider-neutral, known-good).
48
+ if (currentModel?.provider) {
49
+ const model = currentModel.model ?? currentModel.id;
50
+ if (model)
51
+ return { provider: currentModel.provider, model };
52
+ }
53
+ return undefined;
31
54
  }
32
55
  /**
33
56
  * Spawn a read-only advisor subagent to explain the gate failure and guide recovery.
@@ -1 +1 @@
1
- {"version":3,"file":"halt-advisor.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/halt-advisor.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,uEAAuE;AACvE,qEAAqE;AACrE,6EAA6E;AAC7E,EAAE;AACF,sBAAsB;AACtB,oEAAoE;AACpE,8EAA8E;AAC9E,4EAA4E;AAC5E,8CAA8C;AAC9C,8EAA8E;AAE9E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAqB,MAAM,sBAAsB,CAAC;AAyC7F;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAClC,UAAoC,EACpC,aAA4C;IAE5C,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,MAAM,SAAS,GAAG,aAAa,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC;IACxD,OAAO,SAAS,CAAC,CAAC,CAA6B,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAA2B;IAC/D,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAExE,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,8CAA8C;QAC9C,OAAO;IACR,CAAC;IAED,GAAG,CAAC,EAAE,CAAC,MAAM,CACZ,oCAAoC,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,QAAQ,MAAM,EAAE,EAC/F,MAAM,CACN,CAAC;IAEF,MAAM,cAAc,GAAG;QACtB,gCAAgC,MAAM,EAAE;QACxC,EAAE;QACF,oDAAoD,WAAW,CAAC,KAAK,KAAK;QAC1E,EAAE;QACF,oBAAoB;QACpB,wBAAwB,WAAW,CAAC,UAAU,IAAI;QAClD,iBAAiB,WAAW,CAAC,MAAM,EAAE;QACrC,EAAE;QACF,4BAA4B;QAC5B,WAAW,CAAC,WAAW;QACvB,EAAE;QACF,cAAc;QACd,iFAAiF;QACjF,iFAAiF;QACjF,mEAAmE;QACnE,qEAAqE;KACrE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAI,CAAC;QACJ,IAAI,OAAqB,CAAC;QAC1B,IAAI,CAAC;YACJ,OAAO,GAAG,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACR,qEAAqE;YACrE,OAAO,GAAG;gBACT,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,uBAAuB;gBACpC,YAAY,EAAE,8DAA8D;gBAC5E,QAAQ,EAAE,EAAE;aACZ,CAAC;QACH,CAAC;QAED,MAAM,gBAAgB,CAAC;YACtB,OAAO;YACP,IAAI,EAAE,cAAc;YACpB,GAAG;YACH,SAAS;YACT,cAAc,EAAE,YAAY;SAC5B,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,GAA2B,CAAC;QACtC,GAAG,CAAC,EAAE,CAAC,MAAM,CACZ,6CAA6C,CAAC,CAAC,OAAO,IAAI,SAAS,EAAE,EACrE,SAAS,CACT,CAAC;IACH,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"halt-advisor.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/halt-advisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * runCjs — shared execFileAsync wrapper for all .cjs tool invocations.
3
+ *
4
+ * Implements DRY: AbortSignal propagation, timeout, cwd binding, and
5
+ * stdout/stderr capture are applied consistently across all tools.
6
+ *
7
+ * Timeout guidance: collate 30s (large stores); store/validate 10s; config 5s.
8
+ *
9
+ * @param toolPath Absolute path to the .cjs tool.
10
+ * @param argv Arguments to pass after "node <toolPath>".
11
+ * @param signal AbortSignal from tool execute — propagated to subprocess.
12
+ * @param timeoutMs Subprocess timeout in milliseconds.
13
+ * @param projectRoot Directory containing .forge/ — cwd for the subprocess so
14
+ * findProjectRoot() in the .cjs tool resolves correctly.
15
+ */
16
+ export declare function runCjs(toolPath: string, argv: string[], signal: AbortSignal | undefined, timeoutMs: number, projectRoot: string): Promise<{
17
+ stdout: string;
18
+ stderr: string;
19
+ }>;
20
+ /** Token-compression telemetry attached to tool results (details.compression). */
21
+ export interface CompressionStats {
22
+ tool: string;
23
+ before: number;
24
+ after: number;
25
+ saved: number;
26
+ }
@@ -0,0 +1,42 @@
1
+ // run-cjs.ts — shared subprocess wrapper for plugin .cjs tool invocations.
2
+ //
3
+ // Extracted from forge-tools.ts to break the forge-tools ↔ forge-artifact-tool
4
+ // import cycle: both tool modules now depend downward on lib/ instead of on
5
+ // each other.
6
+ //
7
+ // Iron Law 6 compliance: execFile with argv arrays only. No shell strings.
8
+ import { execFileAsync } from "./exec-helpers.js";
9
+ /**
10
+ * runCjs — shared execFileAsync wrapper for all .cjs tool invocations.
11
+ *
12
+ * Implements DRY: AbortSignal propagation, timeout, cwd binding, and
13
+ * stdout/stderr capture are applied consistently across all tools.
14
+ *
15
+ * Timeout guidance: collate 30s (large stores); store/validate 10s; config 5s.
16
+ *
17
+ * @param toolPath Absolute path to the .cjs tool.
18
+ * @param argv Arguments to pass after "node <toolPath>".
19
+ * @param signal AbortSignal from tool execute — propagated to subprocess.
20
+ * @param timeoutMs Subprocess timeout in milliseconds.
21
+ * @param projectRoot Directory containing .forge/ — cwd for the subprocess so
22
+ * findProjectRoot() in the .cjs tool resolves correctly.
23
+ */
24
+ export async function runCjs(toolPath, argv, signal, timeoutMs, projectRoot) {
25
+ const opts = {
26
+ cwd: projectRoot,
27
+ encoding: "utf8",
28
+ timeout: timeoutMs,
29
+ };
30
+ // AbortSignal is optional — only pass when defined (execFile rejects if
31
+ // signal is undefined and the type expects AbortSignal | undefined).
32
+ if (signal !== undefined) {
33
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
+ opts.signal = signal;
35
+ }
36
+ const result = await execFileAsync("node", [toolPath, ...argv], opts);
37
+ return {
38
+ stdout: typeof result.stdout === "string" ? result.stdout : result.stdout.toString("utf8"),
39
+ stderr: typeof result.stderr === "string" ? result.stderr : result.stderr.toString("utf8"),
40
+ };
41
+ }
42
+ //# sourceMappingURL=run-cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-cjs.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/run-cjs.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,+EAA+E;AAC/E,4EAA4E;AAC5E,cAAc;AACd,EAAE;AACF,2EAA2E;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC3B,QAAgB,EAChB,IAAc,EACd,MAA+B,EAC/B,SAAiB,EACjB,WAAmB;IAEnB,MAAM,IAAI,GAAwC;QACjD,GAAG,EAAE,WAAW;QAChB,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,SAAS;KAClB,CAAC;IACF,wEAAwE;IACxE,qEAAqE;IACrE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,8DAA8D;QAC7D,IAAY,CAAC,MAAM,GAAG,MAAM,CAAC;IAC/B,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACtE,OAAO;QACN,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1F,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;KAC1F,CAAC;AACH,CAAC"}
@@ -5,6 +5,7 @@ export declare class OrchestratorStatusBar implements Component {
5
5
  private tree;
6
6
  private theme;
7
7
  private active;
8
+ private disposed;
8
9
  private invalidationCb?;
9
10
  private spinnerTimer?;
10
11
  private spinnerIdx;
@@ -16,10 +17,10 @@ export declare class OrchestratorStatusBar implements Component {
16
17
  setActive(active: boolean): void;
17
18
  isActive(): boolean;
18
19
  private ensureSpinnerTimer;
20
+ private stopSpinnerTimer;
19
21
  render(width: number): string[];
20
22
  invalidate(): void;
21
- handleInput(data: string): void;
22
- dispose: () => void;
23
+ dispose(): void;
23
24
  /** Walk depth-first to find the deepest running/cancelling leaf. */
24
25
  private findDeepestRunningLeaf;
25
26
  }
@@ -1,51 +1,66 @@
1
1
  // orchestrator-status-bar.ts — One-line status bar for running orchestrations.
2
2
  //
3
- // Two render modes:
3
+ // Two render modes, distinguished by focus indicator:
4
4
  //
5
- // INACTIVE (default):
6
- // [HELLO-S01-T01 plan ⠋] "preview…" ↓ dashboard
5
+ // INACTIVE (outline ○ prefix — navigation hint):
6
+ // [CART-S03-T01 · writeback:1 ⠋] "preview…" ↓ dashboard
7
7
  //
8
- // Shows a compact summary with status, spinner, and a ↓ hint.
9
- // Press to focus the status bar.
8
+ // signals "you can here". Colour carries status: green=completed,
9
+ // red=failed, accent=running, muted=other terminal.
10
10
  //
11
- // ACTIVE (user pressed ):
12
- // [HELLO-S01-T01 plan ⠋] "preview…" ⏎ open · esc back
11
+ // ACTIVE (filled prefix — focus confirmation):
12
+ // [CART-S03-T01 · writeback:1 ⠋] "preview…" ⏎ open · esc back
13
13
  //
14
- // Cursor glyph highlights the bar. Enter opens the dashboard overlay.
15
- // Esc returns focus to the editor.
14
+ // signals "you're here". ↑/Esc returns focus to the prompt.
16
15
  //
17
- // The dashboard overlay (/forge:dashboard) remains the detailed view.
16
+ // Visual semantics (two dimensions on one circle):
17
+ // Shape: ○ = not focused, ● = focused
18
+ // Colour: accent=running, success=completed, error=failed, muted=terminal
19
+ // ⠋ spinner: shows activity (only for running/cancelling nodes)
20
+ //
21
+ // Focus lifecycle: ↓ activates → ↑/Esc deactivates → prompt gets focus.
22
+ // All activation/deactivation is handled by the ForgeInputRouter listener
23
+ // in thread-switcher.ts (not by this widget's handleInput, which is dead
24
+ // code for setWidget components since pi-tui routes input to the prompt
25
+ // editor before setWidget components).
26
+ //
27
+ // Iron Laws conformance:
28
+ // IL1 — All visible strings route through theme.fg()/bg()/bold(). No raw glyphs.
29
+ // IL7 — Spinner timer guarded by disposed flag to prevent stale callbacks.
18
30
  import { truncateToWidth } from "@earendil-works/pi-tui";
19
- import { matchesKey, Key } from "@earendil-works/pi-tui";
20
31
  import { fmtTokenMeter } from "./viewport-renderer.js";
21
32
  // ── Braille spinner ────────────────────────────────────────────────────────
22
33
  const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
23
34
  const SPINNER_INTERVAL_MS = 100;
24
- // ── Status glyph for a node ────────────────────────────────────────────────
25
- function nodeGlyph(status, theme) {
26
- switch (status) {
27
- case "completed":
28
- return theme.fg("success", "✓");
29
- case "running":
30
- return theme.fg("accent", "");
31
- case "cancelling":
32
- return theme.fg("warning", "⏳");
33
- case "cancelled":
34
- return theme.fg("muted", "⊘");
35
- case "failed":
36
- return theme.fg("error", "✗");
37
- case "escalated":
38
- return theme.fg("error", "");
39
- case "pending":
40
- default:
41
- return theme.fg("dim", "");
42
- }
35
+ // ── Focus indicator colour: derives the theme colour from the root's
36
+ // aggregate status. The shape (○/●) carries focus; the colour carries
37
+ // status. Both dimensions on the same circle glyph.
38
+ //
39
+ // ○ green = not focused, completed ● green = focused, completed
40
+ // ○ red = not focused, failed ● red = focused, failed
41
+ // ○ dim = not focused, terminal dim = focused, terminal
42
+ // ○ accent = not focused, running ● accent = focused, running
43
+ function focusIndicatorColour(roots, theme) {
44
+ // Derive the aggregate status from all visible roots.
45
+ // Running/cancelling wins over terminal; failed wins over completed.
46
+ const hasRunning = roots.some((r) => r.status === "running" || r.status === "cancelling");
47
+ if (hasRunning)
48
+ return "accent";
49
+ const hasFailed = roots.some((r) => r.status === "failed" || r.status === "escalated");
50
+ if (hasFailed)
51
+ return "error";
52
+ const hasCompleted = roots.some((r) => r.status === "completed");
53
+ if (hasCompleted)
54
+ return "success";
55
+ // Terminal but not failed/completed (cancelled, pending, etc.).
56
+ return "muted";
43
57
  }
44
58
  // ── OrchestratorStatusBar ──────────────────────────────────────────────────
45
59
  export class OrchestratorStatusBar {
46
60
  tree;
47
61
  theme;
48
62
  active = false;
63
+ disposed = false; // IL7: guards interval callbacks after dispose
49
64
  invalidationCb;
50
65
  spinnerTimer;
51
66
  spinnerIdx = 0;
@@ -54,7 +69,12 @@ export class OrchestratorStatusBar {
54
69
  constructor(tree, theme) {
55
70
  this.tree = tree;
56
71
  this.theme = theme;
57
- const onChange = () => this.invalidationCb?.();
72
+ const onChange = () => {
73
+ if (!this.disposed) {
74
+ this.ensureSpinnerTimer(); // restart spinner if roots became active
75
+ this.invalidationCb?.();
76
+ }
77
+ };
58
78
  this.tree.on("change", onChange);
59
79
  this.tree.on("tree", onChange);
60
80
  this.tree.on("tail", onChange);
@@ -70,7 +90,10 @@ export class OrchestratorStatusBar {
70
90
  }
71
91
  setActive(active) {
72
92
  this.active = active;
73
- this.invalidationCb?.();
93
+ if (!this.disposed) {
94
+ this.ensureSpinnerTimer(); // restart spinner if needed
95
+ this.invalidationCb?.();
96
+ }
74
97
  }
75
98
  isActive() {
76
99
  return this.active;
@@ -78,26 +101,38 @@ export class OrchestratorStatusBar {
78
101
  ensureSpinnerTimer() {
79
102
  if (this.spinnerTimer)
80
103
  return;
104
+ // Only start the timer when there are running/cancelling roots to animate.
105
+ const anyActive = this.tree.getActiveRoots().some((r) => r.status === "running" || r.status === "cancelling");
106
+ if (!anyActive)
107
+ return; // no spinner needed yet
81
108
  this.spinnerTimer = setInterval(() => {
109
+ // IL7: guard against firing after dispose.
110
+ if (this.disposed) {
111
+ this.stopSpinnerTimer();
112
+ return;
113
+ }
82
114
  const anyActive = this.tree.getActiveRoots().some((r) => r.status === "running" || r.status === "cancelling");
83
115
  if (!anyActive) {
84
116
  // One last render to settle spinner, then stop.
85
117
  this.invalidationCb?.();
86
- if (this.spinnerTimer)
87
- clearInterval(this.spinnerTimer);
88
- this.spinnerTimer = undefined;
118
+ this.stopSpinnerTimer();
89
119
  return;
90
120
  }
91
121
  this.spinnerIdx = (this.spinnerIdx + 1) % SPINNER_FRAMES.length;
92
122
  this.invalidationCb?.();
93
123
  }, SPINNER_INTERVAL_MS);
94
124
  }
125
+ stopSpinnerTimer() {
126
+ if (this.spinnerTimer) {
127
+ clearInterval(this.spinnerTimer);
128
+ this.spinnerTimer = undefined;
129
+ }
130
+ }
95
131
  render(width) {
96
132
  const roots = this.tree.getActiveRoots();
97
133
  if (roots.length === 0)
98
134
  return []; // Hidden when nothing is running.
99
135
  const dim = (s) => this.theme.fg("dim", s);
100
- const accent = (s) => this.theme.fg("accent", s);
101
136
  const bold = (s) => this.theme.bold(this.theme.fg("accent", s));
102
137
  // Build a segment for each active root.
103
138
  const segments = [];
@@ -105,7 +140,6 @@ export class OrchestratorStatusBar {
105
140
  // Find the deepest running leaf or the root itself.
106
141
  const leaf = this.findDeepestRunningLeaf(root.id);
107
142
  const displayNode = leaf ?? root;
108
- const glyph = nodeGlyph(displayNode.status, this.theme);
109
143
  // Label: root label, with current phase as suffix if different.
110
144
  let label = root.label;
111
145
  if (leaf && leaf.id !== root.id) {
@@ -116,23 +150,28 @@ export class OrchestratorStatusBar {
116
150
  const usage = this.tree.getSubtreeUsage(root.id);
117
151
  const meter = fmtTokenMeter(usage);
118
152
  const meterPart = meter ? dim(` ${meter}`) : "";
119
- // Spinner for running nodes.
153
+ // IL1: spinner (worm) shows activity — only for running/cancelling.
154
+ // Not shown for terminal states (completed, failed, etc.).
120
155
  const spin = (displayNode.status === "running" || displayNode.status === "cancelling")
121
- ? ` ${SPINNER_FRAMES[this.spinnerIdx]}`
156
+ ? ` ${this.theme.fg("accent", SPINNER_FRAMES[this.spinnerIdx])}`
122
157
  : "";
123
158
  // Turn preview (truncated).
124
159
  const preview = displayNode.lastTurnPreview
125
160
  ? dim(` "${truncateToWidth(displayNode.lastTurnPreview, 60)}"`)
126
161
  : "";
127
- const segment = `${glyph} ${bold(`[${label}]`)}${spin}${preview}${meterPart}`;
162
+ const segment = `${bold(`[${label}]`)}${spin}${preview}${meterPart}`;
128
163
  segments.push(segment);
129
164
  }
130
165
  // Right-side hint depends on active state.
131
166
  const hint = this.active
132
167
  ? dim(" ⏎ open · esc back")
133
168
  : dim(" ↓ dashboard");
134
- // Compose: join segments with separator, append hint.
135
- const prefix = this.active ? accent("") + " " : "";
169
+ // Focus indicator: ○/● coloured by aggregate status.
170
+ // Shape: when inactive ("↓ here"), when active ("you're here").
171
+ // Colour: accent=running, success=completed, error=failed, muted=terminal.
172
+ const indicatorColour = focusIndicatorColour(roots, this.theme);
173
+ const indicatorGlyph = this.active ? "●" : "○";
174
+ const prefix = this.theme.fg(indicatorColour, indicatorGlyph) + " ";
136
175
  const joined = segments.join(dim(" │ "));
137
176
  const line = `${prefix}${joined}${hint}`;
138
177
  return [truncateToWidth(line, width)];
@@ -140,27 +179,18 @@ export class OrchestratorStatusBar {
140
179
  invalidate() {
141
180
  // Re-render driven by external invalidationCb → tui.requestRender().
142
181
  }
143
- handleInput(data) {
144
- if (!this.active)
145
- return;
146
- if (matchesKey(data, Key.enter)) {
147
- this.active = false;
148
- this.onAction?.(); // open dashboard
149
- }
150
- else if (matchesKey(data, Key.escape) || matchesKey(data, Key.up)) {
151
- this.active = false; // deactivate, return to editor
152
- }
153
- this.invalidationCb?.();
154
- }
155
- dispose = () => {
156
- if (this.spinnerTimer) {
157
- clearInterval(this.spinnerTimer);
158
- this.spinnerTimer = undefined;
159
- }
182
+ // Note: handleInput is dead code for setWidget("belowEditor") components —
183
+ // pi-tui routes input to the prompt editor, not to belowEditor widgets.
184
+ // All key handling (↓ focus, ↑/Esc unfocus, Enter open dashboard) is in
185
+ // the ForgeInputRouter listener in thread-switcher.ts.
186
+ // Keeping the method for Component interface conformance; it does nothing.
187
+ dispose() {
188
+ this.disposed = true; // IL7: set before clearing timer so callback sees it
189
+ this.stopSpinnerTimer();
160
190
  for (const fn of this.disposeFns)
161
191
  fn();
162
192
  this.disposeFns = [];
163
- };
193
+ }
164
194
  /** Walk depth-first to find the deepest running/cancelling leaf. */
165
195
  findDeepestRunningLeaf(id) {
166
196
  const node = this.tree.getNode(id);
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator-status-bar.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/orchestrator-status-bar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator-status-bar.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/orchestrator-status-bar.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,10 @@ export interface StartNodeOptions {
43
43
  kind?: NodeKind;
44
44
  promptPreview?: string;
45
45
  }
46
+ export declare const MAX_TAIL_ENTRY_CHARS = 4096;
47
+ export declare const MAX_PROMPT_PREVIEW_CHARS = 16384;
48
+ /** Cap an entry for storage. Marks the cut so views can surface it. */
49
+ export declare function capTailEntry(raw: string, max?: number): string;
46
50
  export declare class OrchestratorTree extends EventEmitter {
47
51
  private nodes;
48
52
  private roots;