@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,592 @@
1
+ // Context Governor — FORGE-S30-T03 (substrate) / FORGE-S30-T04 (Mechanism A curation)
2
+ // / FORGE-S30-T05 (Mechanism B — context budget meter + checkpoint steer)
3
+ // / FORGE-S30-T06 (Mechanism C — checkpoint-and-shed against {PHASE}-SUMMARY.json)
4
+ // / FORGE-S30-T09 (Mechanism E — proactive compactFn trigger at budget threshold).
5
+ // Defines the phase-policy table (keyed by persona/phase), the ContextGovernor
6
+ // interface wired into hook-dispatcher.ts tool_result/tool_call paths, and the
7
+ // governor factories used by T04 (live curation) and as no-op defaults.
8
+ //
9
+ // Mechanism A curation rules (T04):
10
+ // Rule 1 — Dedup/reference-ize: repeated (tool, target) call returns a pointer.
11
+ // Rule 2 — Schema-trim: forge_store results trimmed to phase-declared residentFields
12
+ // + summaries.* + identity keys. Preserved fields are byte-identical.
13
+ // Rule 3 — Span-clamp: bash/grep/find output over toolBudget chars is truncated
14
+ // with "[N lines elided]" marker.
15
+ //
16
+ // Mechanism B (T05):
17
+ // Budget meter: per-turn ctx.getContextUsage() → ctx.ui.setStatus("forge:ctx-budget", "ctx: Nk / Wk (P%)")
18
+ // Steer: one-shot note at policy.steerThreshold, injected via steerFn (optional, injected at
19
+ // governor construction by registerHookDispatcher). Single-fire invariant: steerFired flag
20
+ // is never reset after first fire.
21
+ //
22
+ // Design notes:
23
+ // - The policy table is a TypeScript literal loaded at module init — no disk I/O,
24
+ // no .forge/store/ reads or writes (Pack 07 compliance).
25
+ // - contextWindow resolution: Mechanism B uses usage.contextWindow from
26
+ // ctx.getContextUsage() directly; when usage is unavailable the meter is
27
+ // cleared and no steer/compact decision is made that turn.
28
+ // No provider names, model-family strings, or tier logic appear here.
29
+ // - Phase/summary vocabulary (summary keys, {PHASE}-SUMMARY.json filenames)
30
+ // is imported from phase-vocab.ts — the single mirror of the plugin's
31
+ // artifact-kinds.cjs catalog (FORGE-BUG-043).
32
+ // - Governor methods MUST NOT throw; failures fall through to undefined (IL7).
33
+ // - IL10: registerHookDispatcher's public signature and orchestrator event paths
34
+ // are untouched. The third arg is optional; all existing callers unaffected.
35
+ import * as fs from "node:fs";
36
+ import * as path from "node:path";
37
+ import { loadGovernorProjectConfig } from "./governor-config.js";
38
+ import { summaryFilenameFor, summaryKeyFor } from "./phase-vocab.js";
39
+ // ---------------------------------------------------------------------------
40
+ // No-op governor (default before T04/T05/T06)
41
+ // ---------------------------------------------------------------------------
42
+ /**
43
+ * Returns a ContextGovernor whose methods are pure pass-throughs.
44
+ * Used as the default in registerHookDispatcher so existing callers that do
45
+ * not pass a governor see zero behavioural change.
46
+ */
47
+ export function createNoOpGovernor() {
48
+ return {
49
+ applyToolResult(_event, _ctx) {
50
+ return undefined;
51
+ },
52
+ applyToolCall(_event, _ctx) {
53
+ return undefined;
54
+ },
55
+ };
56
+ }
57
+ // ---------------------------------------------------------------------------
58
+ // Governor factory helpers (Mechanism A)
59
+ // ---------------------------------------------------------------------------
60
+ /**
61
+ * Resolve the policy key from the extension context.
62
+ * Probes ctx for persona/phase fields (not formally in ExtensionContext; best-effort).
63
+ * Falls back to "default" if not present — safe fallback per IL7 principle.
64
+ *
65
+ * NOTE: pi never populates persona/phase on ExtensionContext in production —
66
+ * this probe only matches in test harnesses. Production paths MUST inject the
67
+ * phaseKey at construction time (createGovernor's `phaseKey` param via
68
+ * buildGovernorFactory); this fallback resolving to "default" was the dormant-
69
+ * governor defect found benchmarking CART-S02-T03.
70
+ */
71
+ function resolvePhaseKey(ctx) {
72
+ const persona = ctx.persona ?? "";
73
+ const phase = ctx.phase ?? "";
74
+ if (persona && phase)
75
+ return `${persona}/${phase}`;
76
+ return "default";
77
+ }
78
+ /**
79
+ * Read-like forge_store / forge_artifact commands eligible for dedup.
80
+ * Anything else (set-summary, write, update-status, emit, …) is a MUTATION —
81
+ * its result is a confirmation/failure report that must reach the agent
82
+ * verbatim. CART-S02-T04 friction: a forge_artifact WRITE confirmation was
83
+ * replaced by a pointer registered by an earlier READ of the same path; a
84
+ * failed write would have been silently masked (Iron Law 5 violation).
85
+ */
86
+ const DEDUP_READ_COMMANDS = new Set([
87
+ "read",
88
+ "get",
89
+ "get-task",
90
+ "get-bug",
91
+ "get-sprint",
92
+ "get-summary",
93
+ "get-bug-summary",
94
+ "list",
95
+ "describe",
96
+ "template",
97
+ ]);
98
+ /**
99
+ * Compute the dedup key for a tool result event.
100
+ * Returns null if dedup does not apply to this tool — including any
101
+ * forge_store/forge_artifact MUTATION command (reads-only rule).
102
+ * The command participates in the key so e.g. read vs list of the same
103
+ * entity never conflate. A missing command (legacy/test event shapes)
104
+ * is treated as read-like.
105
+ */
106
+ function dedupKey(event) {
107
+ const input = event.input ?? {};
108
+ if (event.toolName === "forge_store" || event.toolName === "forge_artifact") {
109
+ const command = typeof input.command === "string" ? input.command : "";
110
+ if (command && !DEDUP_READ_COMMANDS.has(command))
111
+ return null; // mutation — never dedup
112
+ const target = input.entityId ??
113
+ input.path ??
114
+ input.artifact ??
115
+ "";
116
+ return `${event.toolName}:${command}:${target}`;
117
+ }
118
+ if (event.toolName === "read") {
119
+ const target = input.file_path ?? "";
120
+ return `read:${target}`;
121
+ }
122
+ return null;
123
+ }
124
+ /**
125
+ * Apply Rule 2 — schema-trim to a forge_store result.
126
+ * Trims top-level keys to residentFields ∪ {summaries} ∪ identity keys.
127
+ * Returns the trimmed JSON string, or the original string on parse failure (IL7).
128
+ */
129
+ function applySchemaTrim(textContent, residentFields) {
130
+ let parsed;
131
+ try {
132
+ parsed = JSON.parse(textContent);
133
+ }
134
+ catch {
135
+ // Malformed JSON — pass through untouched (IL7)
136
+ return textContent;
137
+ }
138
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
139
+ return textContent;
140
+ }
141
+ // Identity fields always retained regardless of phase policy
142
+ const identityKeys = new Set(["taskId", "sprintId", "bugId", "featureId"]);
143
+ const residentSet = new Set(residentFields);
144
+ const trimmed = {};
145
+ for (const [key, value] of Object.entries(parsed)) {
146
+ const retain = identityKeys.has(key) || residentSet.has(key) || key === "summaries";
147
+ if (retain) {
148
+ trimmed[key] = value;
149
+ }
150
+ }
151
+ return JSON.stringify(trimmed);
152
+ }
153
+ /**
154
+ * Apply Rule 3 — span-clamp to a bash/grep/find/read result.
155
+ * Truncates to budgetTokens*4 chars and appends "[N lines elided]" marker.
156
+ * Under-budget results pass through untouched (AC#3).
157
+ */
158
+ function applySpanClamp(textContent, budgetTokens) {
159
+ const budgetChars = Math.floor(budgetTokens * 4);
160
+ if (textContent.length <= budgetChars) {
161
+ return textContent;
162
+ }
163
+ const kept = textContent.slice(0, budgetChars);
164
+ const elided = textContent.slice(budgetChars);
165
+ const elidedLines = elided.split("\n").length;
166
+ return `${kept}\n[${elidedLines} lines elided]`;
167
+ }
168
+ // ---------------------------------------------------------------------------
169
+ // Mechanism C helpers (module-internal — not exported; knip-safe)
170
+ // ---------------------------------------------------------------------------
171
+ /**
172
+ * Extract the entityId from a ToolResultEvent input payload.
173
+ * Returns an empty string if not present or not a string (safe fallback — IL7).
174
+ */
175
+ function resolveEntityId(event) {
176
+ const input = event.input ?? {};
177
+ const entityId = input.entityId;
178
+ return typeof entityId === "string" ? entityId : "";
179
+ }
180
+ // ---------------------------------------------------------------------------
181
+ // Mechanism B helpers (module-internal — not exported; knip-safe)
182
+ // ---------------------------------------------------------------------------
183
+ /**
184
+ * Build the one-shot steer message injected into the agent loop when the budget
185
+ * threshold is reached. Names the phase summary file (from phase-vocab, mirror
186
+ * of the plugin's artifact-kinds.cjs catalog) so the persona can act
187
+ * immediately. Phases without a summary artifact — and unknown phase keys
188
+ * (e.g. custom config.pipelines phases) — get generic checkpoint wording
189
+ * instead of a phantom or placeholder filename (FORGE-BUG-043).
190
+ * "Will not re-fire" note prevents the agent from waiting for a second prompt.
191
+ */
192
+ function buildSteerMessage(phaseKey) {
193
+ const filename = summaryFilenameFor(phaseKey);
194
+ const checkpoint = filename
195
+ ? `Checkpoint your findings to ${filename} before reading further.`
196
+ : `Checkpoint your findings durably (phase summary artifact or store record) before reading further.`;
197
+ return (`[Forge context governor] Budget threshold reached (${phaseKey}).\n` +
198
+ `${checkpoint}\n` +
199
+ `This note will not re-fire.`);
200
+ }
201
+ // ---------------------------------------------------------------------------
202
+ // Governor factory (contextWindow-aware, Mechanism A curation + Mechanism B meter)
203
+ // ---------------------------------------------------------------------------
204
+ /**
205
+ * Create a governor backed by the given policy table and model registry.
206
+ *
207
+ * Implements Mechanism A curation rules (T04):
208
+ * Rule 1 — Dedup/reference-ize
209
+ * Rule 2 — Schema-trim (forge_store results)
210
+ * Rule 3 — Span-clamp (bash/grep/find/read results)
211
+ *
212
+ * Implements Mechanism B (T05):
213
+ * Budget meter: per-turn ctx.getContextUsage() → ctx.ui.setStatus("forge:ctx-budget", ...)
214
+ * Steer: one-shot note at policy.steerThreshold, injected via steerFn
215
+ *
216
+ * Implements Mechanism C (T06):
217
+ * Checkpoint-and-shed: forge_store results for summarized entities are evicted
218
+ * and replaced with an eviction pointer; unsummarized material is retained.
219
+ * Shed criterion: summarySentinel(phaseKey, entityId) returns true.
220
+ *
221
+ * @param table Phase-policy table (keyed by "persona/phase").
222
+ * @param _modelRegistry Model registry (fallback contextWindow resolution only).
223
+ * @param steerFn Optional callback injected at construction by registerHookDispatcher.
224
+ * Receives the steer message string; called at most once per governor
225
+ * instance (single-fire invariant). Callers that omit this see no steer.
226
+ * @param summarySentinel Optional read-only probe injected at construction (Mechanism C / T06).
227
+ * Receives (phaseKey, entityId); returns true when a {PHASE}-SUMMARY.json
228
+ * has been durably written for that entity. When true, the forge_store result
229
+ * is replaced with an eviction pointer. Callers that omit this param see no
230
+ * shedding (backwards-compatible; undefined default).
231
+ * The sentinel MUST NOT write to .forge/store/ or the summary itself (Pack 07).
232
+ * Errors inside the sentinel are silently caught and cause retain, not eviction (IL7).
233
+ *
234
+ * contextWindow resolution (provider-neutral): usage.contextWindow from
235
+ * ctx.getContextUsage(), used directly when available; otherwise the budget
236
+ * meter is cleared for the turn and no steer/compact decision is made.
237
+ * @param compactFn opt callback injected at construction (Mechanism E / T09).
238
+ * Called proactively once when fraction >= policy.steerThreshold,
239
+ * via a single-fire `compactFired` flag distinct from `steerFired`.
240
+ * Callers pass `compactFn = () => session.compact()`. Errors inside
241
+ * compactFn are caught and written to stderr (IL7). Omitting this
242
+ * param is backwards-compatible — no compact trigger fires.
243
+ * @param phaseKey opt construction-time phase key override ("persona/role").
244
+ * Production paths MUST pass this (via buildGovernorFactory) —
245
+ * pi never populates persona/phase on ExtensionContext, so the
246
+ * ctx probe always resolves "default" at runtime. Omitting it
247
+ * preserves the legacy ctx-probe behaviour (test harnesses).
248
+ */
249
+ export function createGovernor(table, _modelRegistry, steerFn, summarySentinel, compactFn, phaseKey) {
250
+ // Per-governor-instance dedup registry.
251
+ // Maps "${toolName}:${command}:${target}" → { turn, pointerServed }.
252
+ // pointerServed implements pointer ALTERNATION: serve the pointer at most
253
+ // once in a row per key, then honour the next identical call with full
254
+ // content (CART-S02-T04 friction: "re-query if needed" was impossible by
255
+ // construction — every re-query returned another pointer, driving agents
256
+ // to bash-cat workarounds).
257
+ const dedupRegistry = new Map();
258
+ let currentTurn = 0;
259
+ // Mechanism B: single-fire steer invariant
260
+ let steerFired = false;
261
+ // Mechanism E (T09): single-fire compact trigger — distinct from steerFired so
262
+ // proactive compact and steer can be enabled independently.
263
+ let compactFired = false;
264
+ return {
265
+ applyToolResult(event, ctx) {
266
+ try {
267
+ currentTurn++;
268
+ // Resolve phase key and policy (shared by Mechanism B meter and Mechanism A curation).
269
+ // Construction-time override wins — pi never sets persona/phase on ctx.
270
+ const resolvedPhaseKey = phaseKey ?? resolvePhaseKey(ctx);
271
+ const policy = table[resolvedPhaseKey] ??
272
+ table["default"] ?? {
273
+ residentFields: [],
274
+ toolBudgets: {},
275
+ steerThreshold: 0.9,
276
+ };
277
+ // ------------------------------------------------------------------
278
+ // Mechanism B — budget meter + steer (prefix, before Mechanism A)
279
+ // Wrapped in its own try/catch so any failure (e.g. missing ctx method
280
+ // in older mock environments) falls through silently and Mechanism A
281
+ // curation continues unaffected (IL7).
282
+ // ------------------------------------------------------------------
283
+ try {
284
+ const statusKey = "forge:ctx-budget";
285
+ const usage = ctx.getContextUsage();
286
+ if (usage && usage.tokens !== null) {
287
+ const fraction = usage.tokens / usage.contextWindow;
288
+ const N = Math.round(usage.tokens / 1000);
289
+ const W = Math.round(usage.contextWindow / 1000);
290
+ const P = usage.percent ?? Math.round(fraction * 100);
291
+ ctx.ui.setStatus(statusKey, `ctx: ${N}k / ${W}k (${P}%)`);
292
+ if (fraction >= policy.steerThreshold && !steerFired && steerFn) {
293
+ steerFired = true;
294
+ steerFn(buildSteerMessage(resolvedPhaseKey));
295
+ }
296
+ // Mechanism E (T09): proactive compact trigger — single-fire, independent of steer.
297
+ if (fraction >= policy.steerThreshold && !compactFired && compactFn) {
298
+ compactFired = true;
299
+ try {
300
+ compactFn();
301
+ }
302
+ catch (compactErr) {
303
+ const msg = compactErr instanceof Error ? compactErr.message : String(compactErr);
304
+ process.stderr.write(`[context-governor] compactFn error (non-fatal): ${msg}\n`);
305
+ }
306
+ }
307
+ }
308
+ else {
309
+ ctx.ui.setStatus(statusKey, undefined);
310
+ }
311
+ }
312
+ catch {
313
+ // IL7: Mechanism B failures are silent; Mechanism A continues.
314
+ }
315
+ // ------------------------------------------------------------------
316
+ // Mechanism A — curation (dedup / schema-trim / span-clamp)
317
+ // ------------------------------------------------------------------
318
+ // Error results bypass ALL curation: they are small, must reach the
319
+ // agent verbatim, and must never register or serve dedup pointers
320
+ // (CART-S02-T04 friction: pointers were served on errored re-reads,
321
+ // and errored first-reads poisoned the registry).
322
+ if (event.isError) {
323
+ return undefined;
324
+ }
325
+ // Rule 1 — Dedup/reference-ize (reads-only; pointer alternation)
326
+ const key = dedupKey(event);
327
+ if (key !== null) {
328
+ const entry = dedupRegistry.get(key);
329
+ if (entry !== undefined) {
330
+ if (!entry.pointerServed) {
331
+ // Repeated read — replace with pointer (at most once in a row)
332
+ entry.pointerServed = true;
333
+ return {
334
+ content: [
335
+ {
336
+ type: "text",
337
+ text: `[unchanged since turn ${entry.turn} — call again to re-fetch]`,
338
+ },
339
+ ],
340
+ };
341
+ }
342
+ // Agent called again right after a pointer — honour the re-fetch:
343
+ // re-arm the pointer for later repeats and FALL THROUGH so the
344
+ // re-fetched content still receives Mechanism C / Rules 2–3
345
+ // curation (shed/trim/clamp), exactly like a first occurrence.
346
+ entry.pointerServed = false;
347
+ }
348
+ else {
349
+ // Register first occurrence
350
+ dedupRegistry.set(key, { turn: currentTurn, pointerServed: false });
351
+ }
352
+ }
353
+ // ------------------------------------------------------------------
354
+ // Mechanism C — checkpoint-and-shed (T06)
355
+ // Runs AFTER Rule 1 dedup registration so the first-occurrence key
356
+ // is always recorded. Only fires for forge_store events.
357
+ // Wrapped in its own try/catch (IL7): sentinel errors cause retain.
358
+ // The sentinel is a read-only probe — never writes .forge/store/ (Pack 07).
359
+ // ------------------------------------------------------------------
360
+ if (summarySentinel !== undefined && event.toolName === "forge_store") {
361
+ try {
362
+ const entityId = resolveEntityId(event);
363
+ if (entityId && summarySentinel(resolvedPhaseKey, entityId)) {
364
+ // summaryFilenameFor is null for phases without a summary artifact;
365
+ // an injected sentinel may still fire there, so fall back to naming
366
+ // the store record rather than a phantom file.
367
+ const summaryRef = summaryFilenameFor(resolvedPhaseKey) ?? "the store record summaries";
368
+ return {
369
+ content: [
370
+ {
371
+ type: "text",
372
+ text: `[summarized — see ${summaryRef} for ${entityId}]`,
373
+ },
374
+ ],
375
+ };
376
+ }
377
+ }
378
+ catch {
379
+ // IL7: sentinel errors are silent; continue to Mechanism A.
380
+ }
381
+ }
382
+ // Extract text content for Rules 2 and 3
383
+ const textBlocks = event.content.filter((c) => c.type === "text");
384
+ if (textBlocks.length === 0) {
385
+ return undefined;
386
+ }
387
+ const fullText = textBlocks.map((b) => b.text).join("");
388
+ // Rule 2 — Schema-trim (forge_store results only)
389
+ if (event.toolName === "forge_store") {
390
+ const trimmed = applySchemaTrim(fullText, policy.residentFields);
391
+ if (trimmed !== fullText) {
392
+ return { content: [{ type: "text", text: trimmed }] };
393
+ }
394
+ return undefined;
395
+ }
396
+ // Rule 3 — Span-clamp (bash/grep/find/read results)
397
+ const spannedTools = new Set(["bash", "grep", "find", "read"]);
398
+ if (spannedTools.has(event.toolName)) {
399
+ const budget = policy.toolBudgets[event.toolName] ?? policy.toolBudgets["bash"];
400
+ if (budget !== undefined) {
401
+ const clamped = applySpanClamp(fullText, budget);
402
+ if (clamped !== fullText) {
403
+ return { content: [{ type: "text", text: clamped }] };
404
+ }
405
+ }
406
+ return undefined;
407
+ }
408
+ return undefined;
409
+ }
410
+ catch (err) {
411
+ // IL7: never throw from the governor
412
+ const msg = err instanceof Error ? err.message : String(err);
413
+ process.stderr.write(`[context-governor] applyToolResult error: ${msg}\n`);
414
+ return undefined;
415
+ }
416
+ },
417
+ applyToolCall(event, _ctx) {
418
+ // T03/T04/T05/T06: no-op body for tool_call.
419
+ // T06 Mechanism C shed gate is implemented in applyToolResult above;
420
+ // applyToolCall remains no-op for Mechanism C.
421
+ void event;
422
+ return undefined;
423
+ },
424
+ };
425
+ }
426
+ // ---------------------------------------------------------------------------
427
+ // Default policy table (Mechanism D — ≥2 phases + safe default)
428
+ // ---------------------------------------------------------------------------
429
+ /**
430
+ * Load the built-in phase-policy table.
431
+ *
432
+ * Ships an entry for every governed run-task PHASE_PIPELINE key
433
+ * (`${personaNoun}/${role}` — engineer/plan, supervisor/review-plan,
434
+ * engineer/implement, supervisor/review-code, qa-engineer/validate,
435
+ * architect/approve) plus "default" for any unlisted persona/phase.
436
+ * writeback/commit intentionally stay on "default" — small phases whose
437
+ * git/store output must not be clamped.
438
+ *
439
+ * `read` budgets are deliberately more generous than `bash` — clamping file
440
+ * reads too tightly degrades implement/review quality (the agent cannot see
441
+ * whole files), while bash output (store-cli reads, test logs, greps) is the
442
+ * dominant context bloat observed in the CART-S02-T03 baseline.
443
+ *
444
+ * Legacy design-time keys ("architect/plan", "engineer/review") are retained
445
+ * for existing test fixtures; the pipeline never produces them.
446
+ *
447
+ * Values are conservative design-time decisions; a future task can promote
448
+ * specific fields to project config once per-project tuning evidence exists.
449
+ */
450
+ export function loadDefaultPolicyTable() {
451
+ return {
452
+ // ── Real run-task PHASE_PIPELINE keys ──────────────────────────────
453
+ "engineer/plan": {
454
+ residentFields: ["status", "title", "dependencies", "description"],
455
+ toolBudgets: { forge_store: 2000, bash: 1000, read: 3000 },
456
+ steerThreshold: 0.8,
457
+ },
458
+ "supervisor/review-plan": {
459
+ residentFields: ["status", "summaries", "acceptanceCriteria"],
460
+ toolBudgets: { forge_store: 1500, bash: 800, read: 3000 },
461
+ steerThreshold: 0.75,
462
+ },
463
+ "engineer/implement": {
464
+ residentFields: ["status", "title", "description", "summaries"],
465
+ toolBudgets: { forge_store: 2000, bash: 1500, read: 4000 },
466
+ steerThreshold: 0.8,
467
+ },
468
+ "supervisor/review-code": {
469
+ residentFields: ["status", "summaries", "acceptanceCriteria"],
470
+ toolBudgets: { forge_store: 1500, bash: 800, read: 3000 },
471
+ steerThreshold: 0.75,
472
+ },
473
+ "qa-engineer/validate": {
474
+ residentFields: ["status", "summaries", "acceptanceCriteria"],
475
+ toolBudgets: { forge_store: 1500, bash: 2000, read: 3000 },
476
+ steerThreshold: 0.75,
477
+ },
478
+ "architect/approve": {
479
+ residentFields: ["status", "summaries", "acceptanceCriteria"],
480
+ toolBudgets: { forge_store: 1500, bash: 1000, read: 3000 },
481
+ steerThreshold: 0.75,
482
+ },
483
+ // ── Legacy design-time keys (test fixtures only) ───────────────────
484
+ "architect/plan": {
485
+ residentFields: ["status", "title", "dependencies", "description"],
486
+ toolBudgets: { forge_store: 2000, bash: 1000 },
487
+ steerThreshold: 0.8,
488
+ },
489
+ "engineer/review": {
490
+ residentFields: ["status", "summaries", "acceptanceCriteria"],
491
+ toolBudgets: { forge_store: 1500, bash: 800 },
492
+ steerThreshold: 0.75,
493
+ },
494
+ default: {
495
+ residentFields: [],
496
+ toolBudgets: {},
497
+ steerThreshold: 0.9,
498
+ },
499
+ };
500
+ }
501
+ /**
502
+ * Read-only Mechanism C sentinel: true when the store record for entityId
503
+ * already carries a summary for the given phase. Reads
504
+ * `<storePath>/{tasks,bugs}/<entityId>.json` directly (never writes — Pack 07).
505
+ * storePath comes from paths.store in .forge/config.json (default
506
+ * ".forge/store" — FORGE-BUG-043 PR 2). Any failure returns false → retain,
507
+ * never evict (IL7).
508
+ */
509
+ function storeSummarySentinel(cwd, storePath, phaseKey, entityId) {
510
+ const summaryKey = summaryKeyFor(phaseKey);
511
+ if (!summaryKey)
512
+ return false;
513
+ for (const kind of ["tasks", "bugs"]) {
514
+ try {
515
+ const recordPath = path.join(cwd, storePath, kind, `${entityId}.json`);
516
+ const raw = fs.readFileSync(recordPath, "utf8");
517
+ const record = JSON.parse(raw);
518
+ const summary = record.summaries?.[summaryKey];
519
+ if (summary !== undefined && summary !== null)
520
+ return true;
521
+ }
522
+ catch {
523
+ // missing file / parse failure → try next kind, default retain (IL7)
524
+ }
525
+ }
526
+ return false;
527
+ }
528
+ /**
529
+ * Build an ExtensionFactory that registers a fully-wired context governor in a
530
+ * subagent session. Constructed per-phase by run-task.ts (which knows the
531
+ * persona/role) and passed via RunSubagentOptions.extensionFactories —
532
+ * the same injection channel as buildForgeCompactionFactory (Mechanism E).
533
+ *
534
+ * This is the production wiring the original FORGE-S30-T07 integration missed:
535
+ * registerHookDispatcher(pi, …, governor) in index.ts only governs the PARENT
536
+ * session, while every phase runs in an isolated createAgentSession subagent
537
+ * that the parent's hooks never see. The CART-S02-T03 benchmark confirmed the
538
+ * result: zero curation markers across a full FORGE_CTX_GOVERNOR=1 phase.
539
+ *
540
+ * Wiring supplied here:
541
+ * phaseKey — construction-time (Mechanism D policies finally reachable)
542
+ * steerFn — pi.sendUserMessage(msg, { deliverAs: "steer" }) (Mechanism B)
543
+ * summarySentinel — storeSummarySentinel against .forge/store/ (Mechanism C)
544
+ * compactFn — ctx.compact() proactive trigger (Mechanism E)
545
+ *
546
+ * steer uses the session-scoped ExtensionAPI directly; compact rides the
547
+ * ExtensionContext captured at the start of each handler invocation — it only
548
+ * fires synchronously inside applyToolResult, so the captured ctx is always
549
+ * the live one. All callbacks are guarded: failures fall through silently
550
+ * (IL7); the factory never writes to .forge/store/ (Pack 07).
551
+ */
552
+ export function buildGovernorFactory(opts) {
553
+ const { phaseKey, cwd } = opts;
554
+ // Project config (paths.store) loads ONCE at factory construction — never
555
+ // per tool event (FORGE-BUG-043 PR 2). IL7 defaults apply without a config.
556
+ const projectConfig = loadGovernorProjectConfig(cwd);
557
+ return (pi) => {
558
+ let currentCtx;
559
+ const steerFn = (message) => {
560
+ try {
561
+ pi.sendUserMessage(message, { deliverAs: "steer" });
562
+ }
563
+ catch (err) {
564
+ const msg = err instanceof Error ? err.message : String(err);
565
+ process.stderr.write(`[context-governor] steerFn error (non-fatal): ${msg}\n`);
566
+ }
567
+ };
568
+ // createGovernor already wraps compactFn invocations in try/catch (IL7).
569
+ const compactFn = () => {
570
+ currentCtx?.compact();
571
+ };
572
+ const summarySentinel = (pk, entityId) => storeSummarySentinel(cwd, projectConfig.storePath, pk, entityId);
573
+ // Registration-time stub; per-turn contextWindow resolution uses
574
+ // ctx.getContextUsage()/ctx.modelRegistry inside the handler chain.
575
+ const stubRegistry = { find: () => undefined };
576
+ const governor = createGovernor(loadDefaultPolicyTable(), stubRegistry, steerFn, summarySentinel, compactFn, phaseKey);
577
+ // Return types mirror hook-dispatcher.ts's registrations: pi's typed
578
+ // on() overloads expect its internal result types; the governor's
579
+ // structurally-equivalent locals satisfy them at runtime.
580
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
581
+ pi.on("tool_call", (event, ctx) => {
582
+ currentCtx = ctx;
583
+ return governor.applyToolCall(event, ctx);
584
+ });
585
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
586
+ pi.on("tool_result", (event, ctx) => {
587
+ currentCtx = ctx;
588
+ return governor.applyToolResult(event, ctx);
589
+ });
590
+ };
591
+ }
592
+ //# sourceMappingURL=context-governor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-governor.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/context-governor.ts"],"names":[],"mappings":"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"}