@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.
- package/CHANGELOG.md +185 -0
- package/README.md +7 -1
- package/dist/CHANGELOG-forge-plugin.md +61 -0
- package/dist/bin/config.js +4 -4
- package/dist/bin/config.js.map +1 -1
- package/dist/bin/update-cli.d.ts +1 -1
- package/dist/bin/update-cli.js +1 -1
- package/dist/bin/update-cli.js.map +1 -1
- package/dist/extensions/forgecli/ask-user-tool.js +1 -1
- package/dist/extensions/forgecli/ask-user-tool.js.map +1 -1
- package/dist/extensions/forgecli/commands/add-pipeline.d.ts +19 -0
- package/dist/extensions/forgecli/commands/add-pipeline.js +143 -0
- package/dist/extensions/forgecli/commands/add-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/commands/add-task.d.ts +20 -0
- package/dist/extensions/forgecli/commands/add-task.js +154 -0
- package/dist/extensions/forgecli/commands/add-task.js.map +1 -0
- package/dist/extensions/forgecli/commands/approve.d.ts +22 -0
- package/dist/extensions/forgecli/commands/approve.js +152 -0
- package/dist/extensions/forgecli/commands/approve.js.map +1 -0
- package/dist/extensions/forgecli/commands/collate.d.ts +22 -0
- package/dist/extensions/forgecli/commands/collate.js +134 -0
- package/dist/extensions/forgecli/commands/collate.js.map +1 -0
- package/dist/extensions/forgecli/commands/commit.d.ts +22 -0
- package/dist/extensions/forgecli/commands/commit.js +152 -0
- package/dist/extensions/forgecli/commands/commit.js.map +1 -0
- package/dist/extensions/forgecli/commands/config-command.d.ts +8 -0
- package/dist/extensions/forgecli/commands/config-command.js +67 -0
- package/dist/extensions/forgecli/commands/config-command.js.map +1 -0
- package/dist/extensions/forgecli/commands/enhance.d.ts +45 -0
- package/dist/extensions/forgecli/commands/enhance.js +219 -0
- package/dist/extensions/forgecli/commands/enhance.js.map +1 -0
- package/dist/extensions/forgecli/commands/implement.d.ts +22 -0
- package/dist/extensions/forgecli/commands/implement.js +170 -0
- package/dist/extensions/forgecli/commands/implement.js.map +1 -0
- package/dist/extensions/forgecli/commands/plan.d.ts +22 -0
- package/dist/extensions/forgecli/commands/plan.js +167 -0
- package/dist/extensions/forgecli/commands/plan.js.map +1 -0
- package/dist/extensions/forgecli/commands/quiz-agent.d.ts +17 -0
- package/dist/extensions/forgecli/commands/quiz-agent.js +98 -0
- package/dist/extensions/forgecli/commands/quiz-agent.js.map +1 -0
- package/dist/extensions/forgecli/commands/read-command.d.ts +2 -0
- package/dist/extensions/forgecli/commands/read-command.js +100 -0
- package/dist/extensions/forgecli/commands/read-command.js.map +1 -0
- package/dist/extensions/forgecli/commands/regenerate.d.ts +40 -0
- package/dist/extensions/forgecli/commands/regenerate.js +426 -0
- package/dist/extensions/forgecli/commands/regenerate.js.map +1 -0
- package/dist/extensions/forgecli/commands/remove-command.d.ts +17 -0
- package/dist/extensions/forgecli/commands/remove-command.js +124 -0
- package/dist/extensions/forgecli/commands/remove-command.js.map +1 -0
- package/dist/extensions/forgecli/commands/report-bug.d.ts +25 -0
- package/dist/extensions/forgecli/commands/report-bug.js +159 -0
- package/dist/extensions/forgecli/commands/report-bug.js.map +1 -0
- package/dist/extensions/forgecli/commands/retrospective.d.ts +20 -0
- package/dist/extensions/forgecli/commands/retrospective.js +126 -0
- package/dist/extensions/forgecli/commands/retrospective.js.map +1 -0
- package/dist/extensions/forgecli/commands/review-code.d.ts +35 -0
- package/dist/extensions/forgecli/commands/review-code.js +196 -0
- package/dist/extensions/forgecli/commands/review-code.js.map +1 -0
- package/dist/extensions/forgecli/commands/review-plan.d.ts +35 -0
- package/dist/extensions/forgecli/commands/review-plan.js +200 -0
- package/dist/extensions/forgecli/commands/review-plan.js.map +1 -0
- package/dist/extensions/forgecli/commands/sprint-intake.d.ts +10 -0
- package/dist/extensions/forgecli/commands/sprint-intake.js +91 -0
- package/dist/extensions/forgecli/commands/sprint-intake.js.map +1 -0
- package/dist/extensions/forgecli/commands/sprint-plan.d.ts +14 -0
- package/dist/extensions/forgecli/commands/sprint-plan.js +122 -0
- package/dist/extensions/forgecli/commands/sprint-plan.js.map +1 -0
- package/dist/extensions/forgecli/commands/status-command.d.ts +19 -0
- package/dist/extensions/forgecli/commands/status-command.js +140 -0
- package/dist/extensions/forgecli/commands/status-command.js.map +1 -0
- package/dist/extensions/forgecli/commands/store-query.d.ts +22 -0
- package/dist/extensions/forgecli/commands/store-query.js +107 -0
- package/dist/extensions/forgecli/commands/store-query.js.map +1 -0
- package/dist/extensions/forgecli/commands/store-repair.d.ts +17 -0
- package/dist/extensions/forgecli/commands/store-repair.js +123 -0
- package/dist/extensions/forgecli/commands/store-repair.js.map +1 -0
- package/dist/extensions/forgecli/commands/test-orchestrate.d.ts +2 -0
- package/dist/extensions/forgecli/commands/test-orchestrate.js +182 -0
- package/dist/extensions/forgecli/commands/test-orchestrate.js.map +1 -0
- package/dist/extensions/forgecli/commands/transcripts-command.d.ts +87 -0
- package/dist/extensions/forgecli/commands/transcripts-command.js +418 -0
- package/dist/extensions/forgecli/commands/transcripts-command.js.map +1 -0
- package/dist/extensions/forgecli/commands/validate.d.ts +22 -0
- package/dist/extensions/forgecli/commands/validate.js +152 -0
- package/dist/extensions/forgecli/commands/validate.js.map +1 -0
- package/dist/extensions/forgecli/config/config-layer.d.ts +53 -0
- package/dist/extensions/forgecli/config/config-layer.js +72 -0
- package/dist/extensions/forgecli/config/config-layer.js.map +1 -0
- package/dist/extensions/forgecli/config/config-writer.d.ts +16 -0
- package/dist/extensions/forgecli/config/config-writer.js +69 -0
- package/dist/extensions/forgecli/config/config-writer.js.map +1 -0
- package/dist/extensions/forgecli/config/model-registry.d.ts +61 -0
- package/dist/extensions/forgecli/config/model-registry.js +127 -0
- package/dist/extensions/forgecli/config/model-registry.js.map +1 -0
- package/dist/extensions/forgecli/config/model-resolver.d.ts +32 -0
- package/dist/extensions/forgecli/config/model-resolver.js +65 -0
- package/dist/extensions/forgecli/config/model-resolver.js.map +1 -0
- package/dist/extensions/forgecli/config/model-validator.d.ts +29 -0
- package/dist/extensions/forgecli/config/model-validator.js +107 -0
- package/dist/extensions/forgecli/config/model-validator.js.map +1 -0
- package/dist/extensions/forgecli/config-layer.d.ts +0 -16
- package/dist/extensions/forgecli/config-layer.js +0 -5
- package/dist/extensions/forgecli/config-layer.js.map +1 -1
- package/dist/extensions/forgecli/config-tui/component.js +1 -1
- package/dist/extensions/forgecli/config-tui/component.js.map +1 -1
- package/dist/extensions/forgecli/config-tui/handler.js +1 -1
- package/dist/extensions/forgecli/config-tui/handler.js.map +1 -1
- package/dist/extensions/forgecli/config-tui/screens/override-editor.js +1 -1
- package/dist/extensions/forgecli/config-tui/screens/override-editor.js.map +1 -1
- package/dist/extensions/forgecli/config-tui/screens/overrides-list-phases.js +1 -1
- package/dist/extensions/forgecli/config-tui/screens/overrides-list-phases.js.map +1 -1
- package/dist/extensions/forgecli/config-tui/screens/show-resolved.js +1 -1
- package/dist/extensions/forgecli/config-tui/screens/show-resolved.js.map +1 -1
- package/dist/extensions/forgecli/config-tui/state/buffer.d.ts +2 -2
- package/dist/extensions/forgecli/config-tui/state/model.d.ts +1 -1
- package/dist/extensions/forgecli/config-tui/state/reducer.js.map +1 -1
- package/dist/extensions/forgecli/config-tui/state/selectors.d.ts +2 -2
- package/dist/extensions/forgecli/config-tui/state/selectors.js +1 -1
- package/dist/extensions/forgecli/config-tui/state/selectors.js.map +1 -1
- package/dist/extensions/forgecli/context-governor-compaction.d.ts +94 -0
- package/dist/extensions/forgecli/context-governor-compaction.js +327 -0
- package/dist/extensions/forgecli/context-governor-compaction.js.map +1 -0
- package/dist/extensions/forgecli/context-governor.d.ts +169 -0
- package/dist/extensions/forgecli/context-governor.js +592 -0
- package/dist/extensions/forgecli/context-governor.js.map +1 -0
- package/dist/extensions/forgecli/dashboard/component.d.ts +17 -5
- package/dist/extensions/forgecli/dashboard/component.js +160 -115
- package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
- package/dist/extensions/forgecli/dashboard/register.js +7 -21
- package/dist/extensions/forgecli/dashboard/register.js.map +1 -1
- package/dist/extensions/forgecli/dashboard/theme.d.ts +27 -0
- package/dist/extensions/forgecli/dashboard/theme.js +91 -0
- package/dist/extensions/forgecli/dashboard/theme.js.map +1 -0
- package/dist/extensions/forgecli/fix-bug.js +59 -5
- package/dist/extensions/forgecli/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/forge-artifact-tool.js +3 -2
- package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
- package/dist/extensions/forgecli/forge-cli-schema.json +0 -4
- package/dist/extensions/forgecli/forge-commands.js +1 -1
- package/dist/extensions/forgecli/forge-commands.js.map +1 -1
- package/dist/extensions/forgecli/forge-init/forge-init.d.ts +26 -0
- package/dist/extensions/forgecli/forge-init/forge-init.js +514 -0
- package/dist/extensions/forgecli/forge-init/forge-init.js.map +1 -0
- package/dist/extensions/forgecli/forge-init/init-context.d.ts +99 -0
- package/dist/extensions/forgecli/forge-init/init-context.js +178 -0
- package/dist/extensions/forgecli/forge-init/init-context.js.map +1 -0
- package/dist/extensions/forgecli/forge-init/init-progress.d.ts +39 -0
- package/dist/extensions/forgecli/forge-init/init-progress.js +117 -0
- package/dist/extensions/forgecli/forge-init/init-progress.js.map +1 -0
- package/dist/extensions/forgecli/forge-init/phase4-register.js +1 -1
- package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -1
- package/dist/extensions/forgecli/forge-init/run-phases.js +2 -2
- package/dist/extensions/forgecli/forge-init/run-phases.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.d.ts +42 -1
- package/dist/extensions/forgecli/forge-subagent.js +59 -18
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/forge-tools.d.ts +0 -25
- package/dist/extensions/forgecli/forge-tools.js +8 -37
- package/dist/extensions/forgecli/forge-tools.js.map +1 -1
- package/dist/extensions/forgecli/governor-config.d.ts +19 -0
- package/dist/extensions/forgecli/governor-config.js +58 -0
- package/dist/extensions/forgecli/governor-config.js.map +1 -0
- package/dist/extensions/forgecli/health-check.js +1 -1
- package/dist/extensions/forgecli/health-check.js.map +1 -1
- package/dist/extensions/forgecli/hook-dispatcher.d.ts +3 -1
- package/dist/extensions/forgecli/hook-dispatcher.js +39 -5
- package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
- package/dist/extensions/forgecli/hooks/post-init-hook.js +11 -6
- package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -1
- package/dist/extensions/forgecli/hooks/post-sprint-hook.js +11 -6
- package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -1
- package/dist/extensions/forgecli/hooks/write-guard.js +1 -1
- package/dist/extensions/forgecli/hooks/write-guard.js.map +1 -1
- package/dist/extensions/forgecli/index.js +70 -36
- package/dist/extensions/forgecli/index.js.map +1 -1
- package/dist/extensions/forgecli/kickoff.d.ts +9 -0
- package/dist/extensions/forgecli/kickoff.js +15 -0
- package/dist/extensions/forgecli/kickoff.js.map +1 -1
- package/dist/extensions/forgecli/lib/forge-config.d.ts +1 -1
- package/dist/extensions/forgecli/lib/forge-config.js +1 -1
- package/dist/extensions/forgecli/lib/forge-config.js.map +1 -1
- package/dist/extensions/forgecli/lib/forge-root.d.ts +10 -0
- package/dist/extensions/forgecli/lib/forge-root.js +62 -0
- package/dist/extensions/forgecli/lib/forge-root.js.map +1 -0
- package/dist/extensions/forgecli/lib/halt-advisor.d.ts +19 -14
- package/dist/extensions/forgecli/lib/halt-advisor.js +36 -13
- package/dist/extensions/forgecli/lib/halt-advisor.js.map +1 -1
- package/dist/extensions/forgecli/lib/run-cjs.d.ts +26 -0
- package/dist/extensions/forgecli/lib/run-cjs.js +42 -0
- package/dist/extensions/forgecli/lib/run-cjs.js.map +1 -0
- package/dist/extensions/forgecli/orchestrator-status-bar.d.ts +3 -2
- package/dist/extensions/forgecli/orchestrator-status-bar.js +90 -60
- package/dist/extensions/forgecli/orchestrator-status-bar.js.map +1 -1
- package/dist/extensions/forgecli/orchestrator-tree.d.ts +4 -0
- package/dist/extensions/forgecli/orchestrator-tree.js +21 -3
- package/dist/extensions/forgecli/orchestrator-tree.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/calibrate.d.ts +64 -0
- package/dist/extensions/forgecli/orchestrators/calibrate.js +481 -0
- package/dist/extensions/forgecli/orchestrators/calibrate.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +93 -0
- package/dist/extensions/forgecli/orchestrators/fix-bug.js +1705 -0
- package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/halt-advisor.d.ts +59 -0
- package/dist/extensions/forgecli/orchestrators/halt-advisor.js +113 -0
- package/dist/extensions/forgecli/orchestrators/halt-advisor.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/materialize.d.ts +16 -0
- package/dist/extensions/forgecli/orchestrators/materialize.js +195 -0
- package/dist/extensions/forgecli/orchestrators/materialize.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/migrate.d.ts +22 -0
- package/dist/extensions/forgecli/orchestrators/migrate.js +260 -0
- package/dist/extensions/forgecli/orchestrators/migrate.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/orchestrator-preflight.d.ts +46 -0
- package/dist/extensions/forgecli/orchestrators/orchestrator-preflight.js +64 -0
- package/dist/extensions/forgecli/orchestrators/orchestrator-preflight.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/run-sprint.d.ts +27 -0
- package/dist/extensions/forgecli/orchestrators/run-sprint.js +734 -0
- package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/run-task.d.ts +215 -0
- package/dist/extensions/forgecli/orchestrators/run-task.js +1491 -0
- package/dist/extensions/forgecli/orchestrators/run-task.js.map +1 -0
- package/dist/extensions/forgecli/paths/paths.d.ts +8 -0
- package/dist/extensions/forgecli/paths/paths.js +17 -0
- package/dist/extensions/forgecli/paths/paths.js.map +1 -1
- package/dist/extensions/forgecli/phase-vocab.d.ts +31 -0
- package/dist/extensions/forgecli/phase-vocab.js +82 -0
- package/dist/extensions/forgecli/phase-vocab.js.map +1 -0
- package/dist/extensions/forgecli/run-sprint.d.ts +3 -1
- package/dist/extensions/forgecli/run-sprint.js +1 -0
- package/dist/extensions/forgecli/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/run-task.d.ts +34 -1
- package/dist/extensions/forgecli/run-task.js +144 -6
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/session-registry.d.ts +2 -2
- package/dist/extensions/forgecli/session-registry.js +6 -2
- package/dist/extensions/forgecli/session-registry.js.map +1 -1
- package/dist/extensions/forgecli/skill-curation/friction-emit.d.ts +99 -0
- package/dist/extensions/forgecli/skill-curation/friction-emit.js +245 -0
- package/dist/extensions/forgecli/skill-curation/friction-emit.js.map +1 -0
- package/dist/extensions/forgecli/skill-curation/skill-curation-flag.d.ts +21 -0
- package/dist/extensions/forgecli/skill-curation/skill-curation-flag.js +71 -0
- package/dist/extensions/forgecli/skill-curation/skill-curation-flag.js.map +1 -0
- package/dist/extensions/forgecli/skill-curation/skill-curator-subagent.d.ts +102 -0
- package/dist/extensions/forgecli/skill-curation/skill-curator-subagent.js +339 -0
- package/dist/extensions/forgecli/skill-curation/skill-curator-subagent.js.map +1 -0
- package/dist/extensions/forgecli/skill-curation/skill-retriever.d.ts +84 -0
- package/dist/extensions/forgecli/skill-curation/skill-retriever.js +246 -0
- package/dist/extensions/forgecli/skill-curation/skill-retriever.js.map +1 -0
- package/dist/extensions/forgecli/skill-curation/skill-usage-tracker.d.ts +91 -0
- package/dist/extensions/forgecli/skill-curation/skill-usage-tracker.js +224 -0
- package/dist/extensions/forgecli/skill-curation/skill-usage-tracker.js.map +1 -0
- package/dist/extensions/forgecli/store/store-error-remediation.d.ts +65 -0
- package/dist/extensions/forgecli/store/store-error-remediation.js +307 -0
- package/dist/extensions/forgecli/store/store-error-remediation.js.map +1 -0
- package/dist/extensions/forgecli/store/store-resolver.d.ts +56 -0
- package/dist/extensions/forgecli/store/store-resolver.js +263 -0
- package/dist/extensions/forgecli/store/store-resolver.js.map +1 -0
- package/dist/extensions/forgecli/store/store-validator.d.ts +16 -0
- package/dist/extensions/forgecli/store/store-validator.js +32 -0
- package/dist/extensions/forgecli/store/store-validator.js.map +1 -0
- package/dist/extensions/forgecli/store/transition-guard.d.ts +20 -0
- package/dist/extensions/forgecli/store/transition-guard.js +89 -0
- package/dist/extensions/forgecli/store/transition-guard.js.map +1 -0
- package/dist/extensions/forgecli/subagent/orchestrator-transcript.js +5 -0
- package/dist/extensions/forgecli/subagent/orchestrator-transcript.js.map +1 -1
- package/dist/extensions/forgecli/thread-switcher.d.ts +4 -1
- package/dist/extensions/forgecli/thread-switcher.js +36 -21
- package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
- package/dist/extensions/forgecli/transcript-archive-types.d.ts +171 -0
- package/dist/extensions/forgecli/transcript-archive-types.js +130 -0
- package/dist/extensions/forgecli/transcript-archive-types.js.map +1 -0
- package/dist/extensions/forgecli/transcript-archive.d.ts +127 -0
- package/dist/extensions/forgecli/transcript-archive.js +656 -0
- package/dist/extensions/forgecli/transcript-archive.js.map +1 -0
- package/dist/extensions/forgecli/transcript-replay.d.ts +28 -0
- package/dist/extensions/forgecli/transcript-replay.js +153 -0
- package/dist/extensions/forgecli/transcript-replay.js.map +1 -0
- package/dist/extensions/forgecli/transcripts-tui/component.d.ts +36 -0
- package/dist/extensions/forgecli/transcripts-tui/component.js +112 -0
- package/dist/extensions/forgecli/transcripts-tui/component.js.map +1 -0
- package/dist/extensions/forgecli/transcripts-tui/index.d.ts +4 -0
- package/dist/extensions/forgecli/transcripts-tui/index.js +5 -0
- package/dist/extensions/forgecli/transcripts-tui/index.js.map +1 -0
- package/dist/extensions/forgecli/transcripts-tui/screens/browse.d.ts +21 -0
- package/dist/extensions/forgecli/transcripts-tui/screens/browse.js +172 -0
- package/dist/extensions/forgecli/transcripts-tui/screens/browse.js.map +1 -0
- package/dist/extensions/forgecli/transcripts-tui/screens/types.d.ts +22 -0
- package/dist/extensions/forgecli/transcripts-tui/screens/types.js +4 -0
- package/dist/extensions/forgecli/transcripts-tui/screens/types.js.map +1 -0
- package/dist/extensions/forgecli/transcripts-tui/state/index.d.ts +4 -0
- package/dist/extensions/forgecli/transcripts-tui/state/index.js +5 -0
- package/dist/extensions/forgecli/transcripts-tui/state/index.js.map +1 -0
- package/dist/extensions/forgecli/transcripts-tui/state/init.d.ts +8 -0
- package/dist/extensions/forgecli/transcripts-tui/state/init.js +18 -0
- package/dist/extensions/forgecli/transcripts-tui/state/init.js.map +1 -0
- package/dist/extensions/forgecli/transcripts-tui/state/model.d.ts +56 -0
- package/dist/extensions/forgecli/transcripts-tui/state/model.js +6 -0
- package/dist/extensions/forgecli/transcripts-tui/state/model.js.map +1 -0
- package/dist/extensions/forgecli/transcripts-tui/state/reducer.d.ts +2 -0
- package/dist/extensions/forgecli/transcripts-tui/state/reducer.js +51 -0
- package/dist/extensions/forgecli/transcripts-tui/state/reducer.js.map +1 -0
- package/dist/extensions/forgecli/transcripts-tui/state/selectors.d.ts +10 -0
- package/dist/extensions/forgecli/transcripts-tui/state/selectors.js +62 -0
- package/dist/extensions/forgecli/transcripts-tui/state/selectors.js.map +1 -0
- package/dist/extensions/forgecli/transcripts-tui/theme.d.ts +20 -0
- package/dist/extensions/forgecli/transcripts-tui/theme.js +47 -0
- package/dist/extensions/forgecli/transcripts-tui/theme.js.map +1 -0
- package/dist/extensions/forgecli/tui/banner.d.ts +10 -0
- package/dist/extensions/forgecli/tui/banner.js +36 -0
- package/dist/extensions/forgecli/tui/banner.js.map +1 -0
- package/dist/extensions/forgecli/tui/forge-header.d.ts +12 -0
- package/dist/extensions/forgecli/tui/forge-header.js +114 -0
- package/dist/extensions/forgecli/tui/forge-header.js.map +1 -0
- package/dist/extensions/forgecli/tui/input-router.d.ts +33 -0
- package/dist/extensions/forgecli/tui/input-router.js +136 -0
- package/dist/extensions/forgecli/tui/input-router.js.map +1 -0
- package/dist/extensions/forgecli/tui/orchestrator-status-bar.d.ts +26 -0
- package/dist/extensions/forgecli/tui/orchestrator-status-bar.js +213 -0
- package/dist/extensions/forgecli/tui/orchestrator-status-bar.js.map +1 -0
- package/dist/extensions/forgecli/tui/thread-switcher.d.ts +18 -0
- package/dist/extensions/forgecli/tui/thread-switcher.js +194 -0
- package/dist/extensions/forgecli/tui/thread-switcher.js.map +1 -0
- package/dist/extensions/forgecli/update/forge-update-command.d.ts +100 -0
- package/dist/extensions/forgecli/update/forge-update-command.js +435 -0
- package/dist/extensions/forgecli/update/forge-update-command.js.map +1 -0
- package/dist/extensions/forgecli/update/migration-engine.d.ts +117 -0
- package/dist/extensions/forgecli/update/migration-engine.js +563 -0
- package/dist/extensions/forgecli/update/migration-engine.js.map +1 -0
- package/dist/extensions/forgecli/update/update-check.d.ts +37 -0
- package/dist/extensions/forgecli/update/update-check.js +185 -0
- package/dist/extensions/forgecli/update/update-check.js.map +1 -0
- package/dist/extensions/forgecli/update/update-tools.d.ts +23 -0
- package/dist/extensions/forgecli/update/update-tools.js +135 -0
- package/dist/extensions/forgecli/update/update-tools.js.map +1 -0
- package/dist/extensions/forgecli/update/whats-new-widget.d.ts +26 -0
- package/dist/extensions/forgecli/update/whats-new-widget.js +376 -0
- package/dist/extensions/forgecli/update/whats-new-widget.js.map +1 -0
- package/dist/extensions/forgecli/update/whats-new.d.ts +120 -0
- package/dist/extensions/forgecli/update/whats-new.js +470 -0
- package/dist/extensions/forgecli/update/whats-new.js.map +1 -0
- package/dist/extensions/forgecli/viewport/events.d.ts +113 -0
- package/dist/extensions/forgecli/viewport/events.js +290 -0
- package/dist/extensions/forgecli/viewport/events.js.map +1 -0
- package/dist/extensions/forgecli/viewport/renderer.d.ts +102 -0
- package/dist/extensions/forgecli/viewport/renderer.js +277 -0
- package/dist/extensions/forgecli/viewport/renderer.js.map +1 -0
- package/dist/extensions/forgecli/viewport/theme.d.ts +11 -0
- package/dist/extensions/forgecli/viewport/theme.js +131 -0
- package/dist/extensions/forgecli/viewport/theme.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/engine.js +1 -1
- package/dist/extensions/forgecli/wf-engine/engine.js.map +1 -1
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +9 -0
- package/dist/forge-payload/.base-pack/workflows/plan_task.md +7 -0
- package/dist/forge-payload/.base-pack/workflows/review_code.md +4 -3
- package/dist/forge-payload/.base-pack/workflows/review_plan.md +4 -3
- package/dist/forge-payload/.base-pack/workflows/validate_task.md +4 -3
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/migrations.json +132 -27
- package/dist/forge-payload/meta/workflows/meta-review-implementation.md +4 -3
- package/dist/forge-payload/meta/workflows/meta-review-plan.md +4 -3
- package/dist/forge-payload/meta/workflows/meta-validate.md +4 -3
- package/dist/forge-payload/tools/collate.cjs +32 -0
- package/dist/forge-payload/tools/postflight-gate.cjs +56 -10
- 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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"}
|