@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
@@ -0,0 +1,22 @@
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+ export interface StoreQueryResult {
3
+ stdout: string;
4
+ ok: boolean;
5
+ errorMessage?: string;
6
+ }
7
+ /**
8
+ * Run store-cli in query or nlp mode.
9
+ * - Args starting with "--" → query branch: `store-cli query ...flags`
10
+ * - Otherwise → nlp branch: `store-cli nlp "<args>"`
11
+ *
12
+ * Returns raw stdout for display. Does NOT JSON-parse — caller renders as-is.
13
+ * Exported so orchestrators can call directly without going through sendUserMessage.
14
+ */
15
+ export declare function runStoreQuery(args: string, forgeRoot: string, cwd: string): Promise<StoreQueryResult>;
16
+ /**
17
+ * Register /forge:store-query.
18
+ * forgeRoot is nullable — null means we're outside a Forge project.
19
+ */
20
+ export declare function registerStoreQuery(pi: ExtensionAPI, opts: {
21
+ forgeRoot: string | null;
22
+ }): void;
@@ -0,0 +1,107 @@
1
+ // store-query.ts — native atomic handler for /forge:store-query (FORGE-S23-T10)
2
+ //
3
+ // Dispatches to store-cli query (flags path) or store-cli nlp (intent path)
4
+ // and emits raw stdout via ctx.ui.notify.
5
+ //
6
+ // Archetype: Atomic (no LLM in loop — pack-04 §Atomic).
7
+ // Iron Laws:
8
+ // IL1 — new code lives in forge-cli/ only
9
+ // IL6 — no shell-string interpolation (argv-array throughout)
10
+ // IL7 — silent continuation past failures is never acceptable
11
+ import { execFile } from "node:child_process";
12
+ import * as path from "node:path";
13
+ import { promisify } from "node:util";
14
+ import { resolveToolDir } from "../store/store-resolver.js";
15
+ const execFileAsync = promisify(execFile);
16
+ // ── Usage message ─────────────────────────────────────────────────────────────
17
+ const USAGE = `Usage: /forge:search <intent or flags>
18
+
19
+ Examples:
20
+ /forge:search open bugs in S12
21
+ /forge:search FORGE-BUG-047
22
+ /forge:search --sprint FORGE-S12 --status in-progress
23
+ /forge:search --keyword auth
24
+ /forge:search schema`;
25
+ /**
26
+ * Run store-cli in query or nlp mode.
27
+ * - Args starting with "--" → query branch: `store-cli query ...flags`
28
+ * - Otherwise → nlp branch: `store-cli nlp "<args>"`
29
+ *
30
+ * Returns raw stdout for display. Does NOT JSON-parse — caller renders as-is.
31
+ * Exported so orchestrators can call directly without going through sendUserMessage.
32
+ */
33
+ export async function runStoreQuery(args, forgeRoot, cwd) {
34
+ const trimmed = args.trim();
35
+ const toolDir = resolveToolDir(forgeRoot);
36
+ const storeCliPath = path.join(toolDir, "store-cli.cjs");
37
+ let argv;
38
+ let timeoutMs;
39
+ if (trimmed.startsWith("--")) {
40
+ // Query branch: pass flags verbatim as argv tokens
41
+ const tokens = trimmed.split(/\s+/).filter(Boolean);
42
+ argv = ["query", ...tokens];
43
+ timeoutMs = 10_000;
44
+ }
45
+ else {
46
+ // NLP branch: pass entire trimmed arg string as single argument
47
+ argv = ["nlp", trimmed];
48
+ timeoutMs = 30_000;
49
+ }
50
+ try {
51
+ const result = await execFileAsync("node", [storeCliPath, ...argv], {
52
+ cwd,
53
+ encoding: "utf8",
54
+ timeout: timeoutMs,
55
+ });
56
+ return { stdout: result.stdout, ok: true };
57
+ }
58
+ catch (err) {
59
+ const e = err;
60
+ // execFile rejects on non-zero exit; stdout may still contain partial results
61
+ const stderr = e.stderr || e.message || String(err);
62
+ const stdout = e.stdout || "";
63
+ return {
64
+ stdout,
65
+ ok: false,
66
+ errorMessage: stderr.slice(0, 500),
67
+ };
68
+ }
69
+ }
70
+ // ── Register ─────────────────────────────────────────────────────────────────
71
+ /**
72
+ * Register /forge:store-query.
73
+ * forgeRoot is nullable — null means we're outside a Forge project.
74
+ */
75
+ export function registerStoreQuery(pi, opts) {
76
+ pi.registerCommand("forge:search", {
77
+ description: "Query the Forge store by natural language or exact flags. " +
78
+ "Use flags (--sprint, --task, --keyword) for exact queries; " +
79
+ "use plain text for NLP intent queries.",
80
+ async handler(args, ctx) {
81
+ const cwd = process.cwd();
82
+ // Outside-project guard
83
+ if (!opts.forgeRoot) {
84
+ ctx.ui.notify("× forge:search — not inside a Forge project. Run /forge:init first.", "error");
85
+ return;
86
+ }
87
+ const trimmed = args.trim();
88
+ if (!trimmed) {
89
+ ctx.ui.notify(USAGE, "info");
90
+ return;
91
+ }
92
+ ctx.ui.setStatus?.("forge:search", "Querying store…");
93
+ const result = await runStoreQuery(trimmed, opts.forgeRoot, cwd);
94
+ ctx.ui.setStatus?.("forge:search", undefined);
95
+ if (!result.ok && result.errorMessage) {
96
+ ctx.ui.notify(`× forge:search — ${result.errorMessage}`, "error");
97
+ // Still show partial stdout if available
98
+ if (result.stdout.trim()) {
99
+ ctx.ui.notify(result.stdout.trim(), "info");
100
+ }
101
+ return;
102
+ }
103
+ ctx.ui.notify(result.stdout.trim() || "(no results)", "info");
104
+ },
105
+ });
106
+ }
107
+ //# sourceMappingURL=store-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-query.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/commands/store-query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+ export interface ParsedStoreRepairArgs {
3
+ dryRun: boolean;
4
+ seed: string;
5
+ sourceLabel: string;
6
+ }
7
+ export declare function parseStoreRepairArgs(rawArgs: string, cwd: string): ParsedStoreRepairArgs;
8
+ export interface ComposeStoreRepairKickoffOpts {
9
+ commandMd: string;
10
+ parsed: ParsedStoreRepairArgs;
11
+ }
12
+ export declare function composeStoreRepairKickoff(opts: ComposeStoreRepairKickoffOpts): string;
13
+ export interface RegisterStoreRepairOptions {
14
+ forgeRoot: string | null;
15
+ cwd?: string;
16
+ }
17
+ export declare function registerStoreRepair(pi: ExtensionAPI, options: RegisterStoreRepairOptions): void;
@@ -0,0 +1,123 @@
1
+ // forge:store-repair — native kickoff handler (FORGE-S23-T11).
2
+ //
3
+ // Replaces the auto-generated stub previously installed by
4
+ // registerAllForgeCommands (forge-commands.ts). Kickoff Shim archetype
5
+ // (Pack-04 + Pack-06): single LLM handoff in current context, no fork.
6
+ //
7
+ // --dry-run flag is forwarded in the kickoff body so the LLM calls
8
+ // validate-store --dry-run and skips write phases accordingly.
9
+ //
10
+ // Workflow source: <forgeRoot>/commands/store-repair.md (command file).
11
+ // File-existence check only — command files lack Pack-06 workflow markers.
12
+ //
13
+ // Iron Laws:
14
+ // IL1 — code only under forge-cli/src/extensions/forgecli/.
15
+ // IL4 — no JSON.stringify-into-subagent dispatch.
16
+ // IL6 — no shell-string interpolation; no spawn calls here.
17
+ // IL7 — every failure path emits ctx.ui.notify and returns; no silent
18
+ // continuation.
19
+ import * as fs from "node:fs";
20
+ import * as path from "node:path";
21
+ import { sendKickoff } from "../kickoff.js";
22
+ export function parseStoreRepairArgs(rawArgs, cwd) {
23
+ const trimmed = (rawArgs ?? "").trim();
24
+ const result = {
25
+ dryRun: false,
26
+ seed: "",
27
+ sourceLabel: "",
28
+ };
29
+ if (!trimmed) {
30
+ result.sourceLabel = "(no args — full repair run)";
31
+ return result;
32
+ }
33
+ const tokens = trimmed.split(/\s+/);
34
+ const remaining = [];
35
+ for (const tok of tokens) {
36
+ if (tok === "--dry-run") {
37
+ result.dryRun = true;
38
+ }
39
+ else {
40
+ remaining.push(tok);
41
+ }
42
+ }
43
+ const tail = remaining.join(" ").trim();
44
+ if (tail.startsWith("@")) {
45
+ const ref = tail.slice(1).trim();
46
+ const filePath = path.isAbsolute(ref) ? ref : path.resolve(cwd, ref);
47
+ result.seed = fs.readFileSync(filePath, "utf8");
48
+ result.sourceLabel = `(seed from file: ${ref})`;
49
+ }
50
+ else if (tail) {
51
+ result.seed = tail;
52
+ result.sourceLabel = "(seed from inline text)";
53
+ }
54
+ else {
55
+ result.sourceLabel = result.dryRun ? "(--dry-run mode)" : "(no args — full repair run)";
56
+ }
57
+ return result;
58
+ }
59
+ export function composeStoreRepairKickoff(opts) {
60
+ const { commandMd, parsed } = opts;
61
+ const sections = ["# /forge:repair", ""];
62
+ sections.push("## Dispatch", "");
63
+ sections.push("Diagnose and repair the Forge JSON store. Run the repair workflow below. Specifically:");
64
+ sections.push("");
65
+ if (parsed.dryRun) {
66
+ sections.push("**`--dry-run` mode.** Preview all repairs without writing anything. " +
67
+ "In Phase 2 (LLM repair) and Phase 3 (final validation), show what would change but skip all writes. " +
68
+ "Skip Phase 4 verification (nothing changed).");
69
+ }
70
+ else {
71
+ sections.push("Full repair mode: diagnose, propose fixes, apply approved repairs, verify.");
72
+ }
73
+ sections.push("", "Use `forge_store` for all store reads and writes (never raw file writes to `.forge/store/`).");
74
+ sections.push("", "---", "", "## Command", "", commandMd.trim(), "", "---");
75
+ if (parsed.seed) {
76
+ sections.push("", `## Additional Context — ${parsed.sourceLabel}`, "", parsed.seed.trim());
77
+ }
78
+ return sections.join("\n");
79
+ }
80
+ // ── Registration ──────────────────────────────────────────────────────────
81
+ const COMMAND_NAME = "store-repair";
82
+ export function registerStoreRepair(pi, options) {
83
+ pi.registerCommand("forge:repair", {
84
+ description: "Diagnose and repair corrupted Forge store records. " +
85
+ "Usage: /forge:repair [--dry-run]. " +
86
+ "--dry-run shows what would be repaired without making changes.",
87
+ async handler(args, ctx) {
88
+ const { forgeRoot } = options;
89
+ const cwd = options.cwd ?? process.cwd();
90
+ if (!forgeRoot) {
91
+ ctx.ui.notify("× forge:repair — no Forge project at cwd; run /forge:init to bootstrap", "warning");
92
+ return;
93
+ }
94
+ const commandPath = path.join(forgeRoot, "commands", `${COMMAND_NAME}.md`);
95
+ let commandMd;
96
+ try {
97
+ commandMd = fs.readFileSync(commandPath, "utf8");
98
+ }
99
+ catch (err) {
100
+ const e = err;
101
+ if (e.code === "ENOENT") {
102
+ ctx.ui.notify(`× forge:repair — command file not found at commands/${COMMAND_NAME}.md; run /forge:init or /forge:rebuild first.`, "error");
103
+ }
104
+ else {
105
+ ctx.ui.notify(`× forge:repair — failed to read command file: ${e.message ?? "unknown error"}`, "error");
106
+ }
107
+ return;
108
+ }
109
+ let parsed;
110
+ try {
111
+ parsed = parseStoreRepairArgs(args, cwd);
112
+ }
113
+ catch (err) {
114
+ const e = err;
115
+ ctx.ui.notify(`× forge:repair — failed to parse args: ${e.message ?? "unknown"}`, "error");
116
+ return;
117
+ }
118
+ const kickoff = composeStoreRepairKickoff({ commandMd, parsed });
119
+ sendKickoff(pi, kickoff);
120
+ },
121
+ });
122
+ }
123
+ //# sourceMappingURL=store-repair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-repair.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/commands/store-repair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+ export declare function registerTestOrchestrate(pi: ExtensionAPI): void;
@@ -0,0 +1,182 @@
1
+ // test-orchestrate.ts — /test-orchestrate slash command for subagent harness e2e.
2
+ //
3
+ // Spawns a forge subagent via runForgeSubagent() and delegates the user-provided
4
+ // prompt to it. Multi-turn allowed (subagent loops until no more tool calls).
5
+ // Streams live updates back to UI via setStatus + ctx.ui.notify.
6
+ //
7
+ // Usage:
8
+ // /test-orchestrate <prompt>
9
+ // /test-orchestrate @path/to/prompt-file.md
10
+ //
11
+ // Persona: inline minimal generic-assistant persona. Replace with
12
+ // loadForgePersona("engineer", cwd) once persona frontmatter is backfilled.
13
+ import * as fs from "node:fs";
14
+ import * as path from "node:path";
15
+ import { getFinalOutput, loadForgePersona, runForgeSubagent } from "../forge-subagent.js";
16
+ const STATUS_KEY = "test-orchestrate";
17
+ const GENERIC_PERSONA = {
18
+ name: "test-scribe",
19
+ description: "Generic assistant for /test-orchestrate harness",
20
+ systemPrompt: [
21
+ "You are a test subagent invoked through the Forge subagent harness.",
22
+ "Use the available tools (read, write, edit, bash) as needed to fulfill the user's request.",
23
+ "Be terse. Show evidence (file paths, command output) over narration.",
24
+ "If the task asks for a file, write it. If it asks for analysis, summarize in <200 words.",
25
+ ].join(" "),
26
+ filePath: "<inline>",
27
+ };
28
+ function parseArgs(args, cwd) {
29
+ const trimmed = args.trim();
30
+ if (!trimmed) {
31
+ return { mode: "text", text: "", persona: GENERIC_PERSONA, cwd };
32
+ }
33
+ // @path/to/file → read file as task body
34
+ if (trimmed.startsWith("@")) {
35
+ const rel = trimmed.slice(1);
36
+ const abs = path.isAbsolute(rel) ? rel : path.resolve(cwd, rel);
37
+ const text = fs.readFileSync(abs, "utf-8");
38
+ return { mode: "file", text, persona: GENERIC_PERSONA, cwd };
39
+ }
40
+ // --persona <name> <task>
41
+ const personaMatch = trimmed.match(/^--persona\s+(\S+)\s+(.+)$/s);
42
+ if (personaMatch) {
43
+ const personaName = personaMatch[1];
44
+ const text = personaMatch[2];
45
+ const persona = loadForgePersona(personaName, cwd);
46
+ return { mode: "persona-file", text, persona, cwd };
47
+ }
48
+ return { mode: "text", text: trimmed, persona: GENERIC_PERSONA, cwd };
49
+ }
50
+ export function registerTestOrchestrate(pi) {
51
+ pi.registerCommand("test-orchestrate", {
52
+ description: "Spawn a forge subagent via the SDK harness and delegate a prompt. " +
53
+ "Usage: /test-orchestrate <prompt> | @<file> | --persona <name> <prompt>",
54
+ async handler(args, ctx) {
55
+ const cwd = process.cwd();
56
+ let parsed;
57
+ try {
58
+ parsed = parseArgs(args, cwd);
59
+ }
60
+ catch (err) {
61
+ const e = err;
62
+ ctx.ui.notify(`× /test-orchestrate — ${e.message ?? "arg parse failed"}`, "error");
63
+ return;
64
+ }
65
+ if (!parsed.text.trim()) {
66
+ ctx.ui.notify("× /test-orchestrate — prompt required (usage: /test-orchestrate <prompt> | @<file> | --persona <name> <prompt>)", "error");
67
+ return;
68
+ }
69
+ const ac = new AbortController();
70
+ ctx.ui.setStatus?.(STATUS_KEY, `subagent: ${parsed.persona.name} starting…`);
71
+ // Rolling tail of recent events for the live monitor widget.
72
+ const TAIL_MAX = 12;
73
+ const TEXT_WINDOW = 80; // chars of streaming text shown
74
+ const tail = [];
75
+ let turn = 0;
76
+ let lastToolName = "";
77
+ let textBuffer = ""; // accumulator for current message_update text_delta
78
+ const refreshWidget = () => {
79
+ const header = `▶ subagent ${parsed.persona.name} · turn ${turn}`;
80
+ const lines = [header, ...tail.slice(-TAIL_MAX)];
81
+ if (textBuffer) {
82
+ const tailText = textBuffer.slice(-TEXT_WINDOW).replace(/\n/g, " ⏎ ");
83
+ lines.push(`▌ ${tailText}`);
84
+ }
85
+ ctx.ui.setWidget?.(STATUS_KEY, lines);
86
+ };
87
+ const push = (line) => {
88
+ tail.push(line);
89
+ if (tail.length > TAIL_MAX * 2)
90
+ tail.splice(0, tail.length - TAIL_MAX);
91
+ refreshWidget();
92
+ };
93
+ try {
94
+ const result = await runForgeSubagent({
95
+ persona: parsed.persona,
96
+ task: parsed.text,
97
+ cwd,
98
+ signal: ac.signal,
99
+ modelRegistry: ctx.modelRegistry,
100
+ onEvent: (event) => {
101
+ switch (event.type) {
102
+ case "agent_start":
103
+ push("◉ agent_start");
104
+ break;
105
+ case "message_start":
106
+ textBuffer = "";
107
+ push("▸ message_start");
108
+ break;
109
+ case "message_update": {
110
+ const ame = event.assistantMessageEvent;
111
+ if (ame?.type === "text_delta" && typeof ame.delta === "string") {
112
+ textBuffer += ame.delta;
113
+ refreshWidget();
114
+ }
115
+ else if (ame?.type === "thinking_delta") {
116
+ push("💭 thinking…");
117
+ }
118
+ break;
119
+ }
120
+ case "tool_execution_start":
121
+ lastToolName = event.toolName;
122
+ push(`🔧 tool_call · ${lastToolName}`);
123
+ ctx.ui.setStatus?.(STATUS_KEY, `subagent: ${parsed.persona.name} · turn ${turn} · tool: ${lastToolName}`);
124
+ break;
125
+ case "tool_execution_update":
126
+ refreshWidget();
127
+ break;
128
+ case "tool_execution_end": {
129
+ const verdict = event.isError ? "✗" : "✓";
130
+ push(`${verdict} tool_end · ${lastToolName}`);
131
+ break;
132
+ }
133
+ case "message_end":
134
+ push("◼ message_end");
135
+ break;
136
+ case "turn_end": {
137
+ turn++;
138
+ const u = event.message?.usage;
139
+ const usageStr = u
140
+ ? ` · ↑${u.input ?? 0} ↓${u.output ?? 0}` +
141
+ (u.cost?.total ? ` $${u.cost.total.toFixed(4)}` : "")
142
+ : "";
143
+ push(`── turn ${turn}${usageStr} ──`);
144
+ textBuffer = "";
145
+ break;
146
+ }
147
+ case "agent_end":
148
+ push("◉ agent_end");
149
+ break;
150
+ }
151
+ },
152
+ });
153
+ ctx.ui.setStatus?.(STATUS_KEY, undefined);
154
+ ctx.ui.setWidget?.(STATUS_KEY, undefined);
155
+ if (result.exitCode !== 0) {
156
+ ctx.ui.notify(`× /test-orchestrate — subagent exited ${result.exitCode}` +
157
+ (result.errorMessage ? `: ${result.errorMessage}` : "") +
158
+ (result.stopReason ? ` [${result.stopReason}]` : ""), "error");
159
+ return;
160
+ }
161
+ const finalOutput = getFinalOutput(result.messages);
162
+ const usage = result.usage;
163
+ const summary = [
164
+ `〇 /test-orchestrate — ${parsed.persona.name} done.`,
165
+ `Turns: ${usage.turns} ↑${usage.input} ↓${usage.output} R${usage.cacheRead} W${usage.cacheWrite} $${usage.cost.toFixed(4)}`,
166
+ `Model: ${result.model ?? "unknown"}`,
167
+ "",
168
+ "── Output ──",
169
+ finalOutput || "(no assistant text returned)",
170
+ ].join("\n");
171
+ ctx.ui.notify(summary, "info");
172
+ }
173
+ catch (err) {
174
+ const e = err;
175
+ ctx.ui.setStatus?.(STATUS_KEY, undefined);
176
+ ctx.ui.setWidget?.(STATUS_KEY, undefined);
177
+ ctx.ui.notify(`× /test-orchestrate — harness error: ${e.message ?? "unknown"}`, "error");
178
+ }
179
+ },
180
+ });
181
+ }
182
+ //# sourceMappingURL=test-orchestrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-orchestrate.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/commands/test-orchestrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import type { ExtensionAPI, ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
2
+ import { digestPhasePayload } from "../transcript-archive.js";
3
+ export { digestPhasePayload };
4
+ import type { IndexEntry, ProjectsRegistry, RunManifest } from "../transcript-archive-types.js";
5
+ export interface ListRow {
6
+ runId: string;
7
+ projectKey: string;
8
+ projectName: string;
9
+ entityId: string;
10
+ entityKind: string;
11
+ sprintId?: string;
12
+ startedAt: string;
13
+ outcome: string;
14
+ input: number;
15
+ output: number;
16
+ cost: number;
17
+ durationMs?: number;
18
+ }
19
+ export interface ListFilter {
20
+ entityId?: string;
21
+ project?: string;
22
+ sinceDays?: number;
23
+ }
24
+ /**
25
+ * Assemble list rows from the index, refreshed against each run's manifest
26
+ * when readable — the index line is append-only and can be stale for
27
+ * resumed runs (manifest is the source of truth; index is the timeline).
28
+ */
29
+ export declare function collectListRows(filter?: ListFilter): ListRow[];
30
+ export declare function formatList(rows: ListRow[]): string[];
31
+ export interface ResolvedRun {
32
+ entry: IndexEntry;
33
+ manifest: RunManifest;
34
+ runDir: string;
35
+ /** Other runs that matched an entityId lookup (newest first, incl. this). */
36
+ siblingCount: number;
37
+ }
38
+ /**
39
+ * Resolve `show` target: exact runId match first, else latest run for the
40
+ * entityId (or sprintId back-reference). Null when nothing matches or the
41
+ * manifest is unreadable.
42
+ */
43
+ export declare function resolveRun(idArg: string): ResolvedRun | null;
44
+ export declare function formatShow(manifest: RunManifest, digest?: {
45
+ role: string;
46
+ file: string;
47
+ lines: string[];
48
+ }): string[];
49
+ export type TimelineBy = "day" | "model" | "phase" | "outcome";
50
+ export interface TimelineRow {
51
+ key: string;
52
+ runs: number;
53
+ phases: number;
54
+ input: number;
55
+ output: number;
56
+ cost: number;
57
+ }
58
+ /**
59
+ * Aggregate archived runs along one dimension. Day/outcome come from the
60
+ * (manifest-refreshed) list rows; model/phase need the per-run manifests.
61
+ */
62
+ export declare function collectTimeline(filter: ListFilter, by: TimelineBy): TimelineRow[];
63
+ export declare function formatTimeline(rows: TimelineRow[], by: TimelineBy): string[];
64
+ export declare function formatProjects(registry: ProjectsRegistry): string[];
65
+ export interface ParsedArgs {
66
+ subcommand: "list" | "show" | "timeline" | "projects";
67
+ positional: string[];
68
+ project?: string;
69
+ sinceDays?: number;
70
+ by?: TimelineBy;
71
+ json: boolean;
72
+ error?: string;
73
+ }
74
+ export declare function parseTranscriptsArgs(args: string): ParsedArgs;
75
+ /**
76
+ * Browse → replay re-entry loop. Overlays run strictly SEQUENTIALLY (each
77
+ * pushOverlay/popOverlay pair completes before the next overlay opens) so
78
+ * the input-router depth stays at exactly 1 — never stacked. Closing the
79
+ * replay dashboard (Esc) lands back in the browser; quitting the browser
80
+ * (q / Esc) ends the loop.
81
+ */
82
+ export declare function openTranscriptsBrowser(ctx: ExtensionCommandContext): Promise<void>;
83
+ /**
84
+ * Register /forge:transcripts. Takes no forgeRoot — the archive is central
85
+ * and the command must work outside any Forge project (cross-project recall).
86
+ */
87
+ export declare function registerTranscriptsCommand(pi: ExtensionAPI, _opts?: Record<string, never>): void;