@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
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// access to `LayeredConfig.errors` to surface the N-B-E issue. Callers that
|
|
9
9
|
// need `LayeredConfig` must call `loadLayeredConfig()` directly; this module
|
|
10
10
|
// optimises only the walk-up discovery phase.
|
|
11
|
-
import { discoverForgeConfig } from "
|
|
11
|
+
import { discoverForgeConfig } from "./forge-root.js";
|
|
12
12
|
/** Module-level cache keyed by the `cwd` argument (or `""` for the default). */
|
|
13
13
|
const cache = new Map();
|
|
14
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forge-config.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/forge-config.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,yEAAyE;AACzE,wDAAwD;AACxD,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,8CAA8C;AAE9C,OAAO,EAAE,mBAAmB,EAAoB,MAAM,
|
|
1
|
+
{"version":3,"file":"forge-config.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/forge-config.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,yEAAyE;AACzE,wDAAwD;AACxD,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,8CAA8C;AAE9C,OAAO,EAAE,mBAAmB,EAAoB,MAAM,iBAAiB,CAAC;AAExE,gFAAgF;AAChF,MAAM,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACpE,MAAM,GAAG,GAAG,GAAG,CAAC;IAChB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACxC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB;IACpC,KAAK,CAAC,KAAK,EAAE,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ForgeConfig {
|
|
2
|
+
forgeRoot: string;
|
|
3
|
+
configPath: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Discover the forge plugin root AND return the config path so callers can
|
|
7
|
+
* read other config fields (e.g. `project.name`) without re-scanning.
|
|
8
|
+
* Returns null when no `.forge/config.json` is found or it lacks `paths.forgeRoot`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function discoverForgeConfig(cwd?: string): ForgeConfig | null;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// Forge root resolver — walks up from cwd looking for `.forge/config.json`,
|
|
2
|
+
// then resolves `paths.forgeRoot` (relative paths are resolved against the
|
|
3
|
+
// project dir — the parent of `.forge/` — not cwd). Returns null when no
|
|
4
|
+
// config is found or when the config is missing/malformed/unreadable. All filesystem reads are wrapped
|
|
5
|
+
// in try/catch so a malformed config can never crash the extension.
|
|
6
|
+
//
|
|
7
|
+
// Pattern modelled on `findNearestProjectAgentsDir` in
|
|
8
|
+
// `subagent/agents.ts:96-106`.
|
|
9
|
+
import * as fs from "node:fs";
|
|
10
|
+
import * as path from "node:path";
|
|
11
|
+
import { isFile } from "./shared-fs-utils.js";
|
|
12
|
+
function findNearestForgeConfig(cwd) {
|
|
13
|
+
let currentDir = cwd;
|
|
14
|
+
while (true) {
|
|
15
|
+
const candidate = path.join(currentDir, ".forge", "config.json");
|
|
16
|
+
if (isFile(candidate))
|
|
17
|
+
return candidate;
|
|
18
|
+
const parentDir = path.dirname(currentDir);
|
|
19
|
+
if (parentDir === currentDir)
|
|
20
|
+
return null;
|
|
21
|
+
currentDir = parentDir;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Discover the forge plugin root AND return the config path so callers can
|
|
26
|
+
* read other config fields (e.g. `project.name`) without re-scanning.
|
|
27
|
+
* Returns null when no `.forge/config.json` is found or it lacks `paths.forgeRoot`.
|
|
28
|
+
*/
|
|
29
|
+
export function discoverForgeConfig(cwd = process.cwd()) {
|
|
30
|
+
const configPath = findNearestForgeConfig(cwd);
|
|
31
|
+
if (!configPath)
|
|
32
|
+
return null;
|
|
33
|
+
let raw;
|
|
34
|
+
try {
|
|
35
|
+
raw = fs.readFileSync(configPath, "utf8");
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
let config;
|
|
41
|
+
try {
|
|
42
|
+
config = JSON.parse(raw);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const forgeRootValue = config && typeof config === "object" && "paths" in config
|
|
48
|
+
? config.paths?.forgeRoot
|
|
49
|
+
: undefined;
|
|
50
|
+
if (typeof forgeRootValue !== "string" || forgeRootValue.length === 0) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
// `configPath` is `<projectDir>/.forge/config.json`. Relative `forgeRoot`
|
|
54
|
+
// values in Forge configs are written relative to the project dir (the
|
|
55
|
+
// parent of `.forge/`), not the `.forge/` dir itself. Example dogfood
|
|
56
|
+
// config: `paths.forgeRoot = "./forge/forge"` resolving to
|
|
57
|
+
// `<projectDir>/forge/forge`.
|
|
58
|
+
const projectDir = path.dirname(path.dirname(configPath));
|
|
59
|
+
const resolved = path.isAbsolute(forgeRootValue) ? forgeRootValue : path.resolve(projectDir, forgeRootValue);
|
|
60
|
+
return { forgeRoot: resolved, configPath };
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=forge-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forge-root.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/forge-root.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,2EAA2E;AAC3E,yEAAyE;AACzE,uGAAuG;AACvG,oEAAoE;AACpE,EAAE;AACF,uDAAuD;AACvD,+BAA+B;AAE/B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,SAAS,sBAAsB,CAAC,GAAW;IAC1C,IAAI,UAAU,GAAG,GAAG,CAAC;IACrB,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAExC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QAC1C,UAAU,GAAG,SAAS,CAAC;IACxB,CAAC;AACF,CAAC;AAOD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC9D,MAAM,UAAU,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACJ,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,cAAc,GACnB,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM;QACxD,CAAC,CAAE,MAA8C,CAAC,KAAK,EAAE,SAAS;QAClE,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACb,CAAC;IAED,0EAA0E;IAC1E,uEAAuE;IACvE,sEAAsE;IACtE,2DAA2D;IAC3D,8BAA8B;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAE7G,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import type { PersonaModel } from "../config-layer.js";
|
|
2
|
-
export interface ModelRegistryLike {
|
|
3
|
-
getAvailable(): Array<{
|
|
4
|
-
provider: string;
|
|
5
|
-
model: string;
|
|
6
|
-
}>;
|
|
7
|
-
}
|
|
1
|
+
import type { MergedConfig, PersonaModel } from "../config-layer.js";
|
|
8
2
|
export interface UiLike {
|
|
9
3
|
notify(message: string, level?: string): void;
|
|
10
4
|
}
|
|
11
5
|
export interface CtxLike {
|
|
12
6
|
ui: UiLike;
|
|
13
|
-
modelRegistry?: ModelRegistryLike;
|
|
14
7
|
}
|
|
15
8
|
export interface GateFailure {
|
|
16
9
|
phase: string;
|
|
@@ -37,14 +30,26 @@ export interface RunHaltAdvisorOptions {
|
|
|
37
30
|
*
|
|
38
31
|
* Priority:
|
|
39
32
|
* 1. Explicit `advisorModel` config slot from forge-cli layered config.
|
|
40
|
-
*
|
|
41
|
-
*
|
|
33
|
+
* Contract (rev. 2026-06-04): the advisor model is the HEAVY model the runtime
|
|
34
|
+
* resolves point-in-time. There is NO dedicated advisorModel config entry —
|
|
35
|
+
* "heavy" is the approve/architect slot resolved through the existing routing
|
|
36
|
+
* cascade (L4 phase override → L3/L2 project → L1 user/global → default),
|
|
37
|
+
* exactly as the approve phase itself would resolve. When the cascade bottoms
|
|
38
|
+
* out at inherit, the session's current model (pi default) is used. In the
|
|
39
|
+
* Claude Code plugin route the equivalent is the opus-class session model.
|
|
40
|
+
*
|
|
41
|
+
* Returns undefined (advisor skipped, non-fatal) only when nothing is routed
|
|
42
|
+
* AND no current model is available.
|
|
42
43
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
44
|
+
* (History: the original FORGE-S26-T18 implementation used a dedicated
|
|
45
|
+
* advisorModel config slot with a blind registry fallback that produced
|
|
46
|
+
* "anthropic/undefined" on the CART-S03-T01 halt — both retired.)
|
|
46
47
|
*/
|
|
47
|
-
export declare function resolveAdvisorModel(
|
|
48
|
+
export declare function resolveAdvisorModel(merged: MergedConfig, currentModel?: {
|
|
49
|
+
provider?: string;
|
|
50
|
+
model?: string;
|
|
51
|
+
id?: string;
|
|
52
|
+
}, pipelineName?: string): PersonaModel | undefined;
|
|
48
53
|
/**
|
|
49
54
|
* Spawn a read-only advisor subagent to explain the gate failure and guide recovery.
|
|
50
55
|
*
|
|
@@ -6,28 +6,51 @@
|
|
|
6
6
|
//
|
|
7
7
|
// Design constraints:
|
|
8
8
|
// - Advisor is READ-ONLY: no store writes, no artifact mutations.
|
|
9
|
-
// - Model
|
|
10
|
-
//
|
|
11
|
-
//
|
|
9
|
+
// - Model: the HEAVY model the runtime resolves point-in-time — the
|
|
10
|
+
// approve/architect slot through the existing routing cascade
|
|
11
|
+
// (project > user > pi default). NO dedicated advisorModel config entry.
|
|
12
|
+
// If nothing is routed and no current model exists, the advisor is
|
|
13
|
+
// skipped silently (non-fatal).
|
|
12
14
|
// - runHaltAdvisor is best-effort: failures must not mask the primary halt.
|
|
13
15
|
import { runForgeSubagent, loadForgePersona } from "../forge-subagent.js";
|
|
16
|
+
import { resolveModelForPhase } from "../model-resolver.js";
|
|
14
17
|
/**
|
|
15
18
|
* Resolve the advisor model for halt-recovery.
|
|
16
19
|
*
|
|
17
20
|
* Priority:
|
|
18
21
|
* 1. Explicit `advisorModel` config slot from forge-cli layered config.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
22
|
+
* Contract (rev. 2026-06-04): the advisor model is the HEAVY model the runtime
|
|
23
|
+
* resolves point-in-time. There is NO dedicated advisorModel config entry —
|
|
24
|
+
* "heavy" is the approve/architect slot resolved through the existing routing
|
|
25
|
+
* cascade (L4 phase override → L3/L2 project → L1 user/global → default),
|
|
26
|
+
* exactly as the approve phase itself would resolve. When the cascade bottoms
|
|
27
|
+
* out at inherit, the session's current model (pi default) is used. In the
|
|
28
|
+
* Claude Code plugin route the equivalent is the opus-class session model.
|
|
21
29
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
30
|
+
* Returns undefined (advisor skipped, non-fatal) only when nothing is routed
|
|
31
|
+
* AND no current model is available.
|
|
32
|
+
*
|
|
33
|
+
* (History: the original FORGE-S26-T18 implementation used a dedicated
|
|
34
|
+
* advisorModel config slot with a blind registry fallback that produced
|
|
35
|
+
* "anthropic/undefined" on the CART-S03-T01 halt — both retired.)
|
|
25
36
|
*/
|
|
26
|
-
export function resolveAdvisorModel(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
37
|
+
export function resolveAdvisorModel(merged, currentModel, pipelineName = "default") {
|
|
38
|
+
// Heavy slot: the approve phase / architect persona routing resolution.
|
|
39
|
+
try {
|
|
40
|
+
const heavy = resolveModelForPhase(pipelineName, "approve", "architect", merged ?? {});
|
|
41
|
+
if (heavy.model)
|
|
42
|
+
return heavy.model;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// resolution errors are non-fatal — fall through to the current model
|
|
46
|
+
}
|
|
47
|
+
// Inherit → pi's current model (provider-neutral, known-good).
|
|
48
|
+
if (currentModel?.provider) {
|
|
49
|
+
const model = currentModel.model ?? currentModel.id;
|
|
50
|
+
if (model)
|
|
51
|
+
return { provider: currentModel.provider, model };
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
31
54
|
}
|
|
32
55
|
/**
|
|
33
56
|
* Spawn a read-only advisor subagent to explain the gate failure and guide recovery.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"halt-advisor.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/halt-advisor.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,uEAAuE;AACvE,qEAAqE;AACrE,6EAA6E;AAC7E,EAAE;AACF,sBAAsB;AACtB,oEAAoE;AACpE,
|
|
1
|
+
{"version":3,"file":"halt-advisor.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/halt-advisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* runCjs — shared execFileAsync wrapper for all .cjs tool invocations.
|
|
3
|
+
*
|
|
4
|
+
* Implements DRY: AbortSignal propagation, timeout, cwd binding, and
|
|
5
|
+
* stdout/stderr capture are applied consistently across all tools.
|
|
6
|
+
*
|
|
7
|
+
* Timeout guidance: collate 30s (large stores); store/validate 10s; config 5s.
|
|
8
|
+
*
|
|
9
|
+
* @param toolPath Absolute path to the .cjs tool.
|
|
10
|
+
* @param argv Arguments to pass after "node <toolPath>".
|
|
11
|
+
* @param signal AbortSignal from tool execute — propagated to subprocess.
|
|
12
|
+
* @param timeoutMs Subprocess timeout in milliseconds.
|
|
13
|
+
* @param projectRoot Directory containing .forge/ — cwd for the subprocess so
|
|
14
|
+
* findProjectRoot() in the .cjs tool resolves correctly.
|
|
15
|
+
*/
|
|
16
|
+
export declare function runCjs(toolPath: string, argv: string[], signal: AbortSignal | undefined, timeoutMs: number, projectRoot: string): Promise<{
|
|
17
|
+
stdout: string;
|
|
18
|
+
stderr: string;
|
|
19
|
+
}>;
|
|
20
|
+
/** Token-compression telemetry attached to tool results (details.compression). */
|
|
21
|
+
export interface CompressionStats {
|
|
22
|
+
tool: string;
|
|
23
|
+
before: number;
|
|
24
|
+
after: number;
|
|
25
|
+
saved: number;
|
|
26
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// run-cjs.ts — shared subprocess wrapper for plugin .cjs tool invocations.
|
|
2
|
+
//
|
|
3
|
+
// Extracted from forge-tools.ts to break the forge-tools ↔ forge-artifact-tool
|
|
4
|
+
// import cycle: both tool modules now depend downward on lib/ instead of on
|
|
5
|
+
// each other.
|
|
6
|
+
//
|
|
7
|
+
// Iron Law 6 compliance: execFile with argv arrays only. No shell strings.
|
|
8
|
+
import { execFileAsync } from "./exec-helpers.js";
|
|
9
|
+
/**
|
|
10
|
+
* runCjs — shared execFileAsync wrapper for all .cjs tool invocations.
|
|
11
|
+
*
|
|
12
|
+
* Implements DRY: AbortSignal propagation, timeout, cwd binding, and
|
|
13
|
+
* stdout/stderr capture are applied consistently across all tools.
|
|
14
|
+
*
|
|
15
|
+
* Timeout guidance: collate 30s (large stores); store/validate 10s; config 5s.
|
|
16
|
+
*
|
|
17
|
+
* @param toolPath Absolute path to the .cjs tool.
|
|
18
|
+
* @param argv Arguments to pass after "node <toolPath>".
|
|
19
|
+
* @param signal AbortSignal from tool execute — propagated to subprocess.
|
|
20
|
+
* @param timeoutMs Subprocess timeout in milliseconds.
|
|
21
|
+
* @param projectRoot Directory containing .forge/ — cwd for the subprocess so
|
|
22
|
+
* findProjectRoot() in the .cjs tool resolves correctly.
|
|
23
|
+
*/
|
|
24
|
+
export async function runCjs(toolPath, argv, signal, timeoutMs, projectRoot) {
|
|
25
|
+
const opts = {
|
|
26
|
+
cwd: projectRoot,
|
|
27
|
+
encoding: "utf8",
|
|
28
|
+
timeout: timeoutMs,
|
|
29
|
+
};
|
|
30
|
+
// AbortSignal is optional — only pass when defined (execFile rejects if
|
|
31
|
+
// signal is undefined and the type expects AbortSignal | undefined).
|
|
32
|
+
if (signal !== undefined) {
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
|
+
opts.signal = signal;
|
|
35
|
+
}
|
|
36
|
+
const result = await execFileAsync("node", [toolPath, ...argv], opts);
|
|
37
|
+
return {
|
|
38
|
+
stdout: typeof result.stdout === "string" ? result.stdout : result.stdout.toString("utf8"),
|
|
39
|
+
stderr: typeof result.stderr === "string" ? result.stderr : result.stderr.toString("utf8"),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=run-cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-cjs.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/lib/run-cjs.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,+EAA+E;AAC/E,4EAA4E;AAC5E,cAAc;AACd,EAAE;AACF,2EAA2E;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC3B,QAAgB,EAChB,IAAc,EACd,MAA+B,EAC/B,SAAiB,EACjB,WAAmB;IAEnB,MAAM,IAAI,GAAwC;QACjD,GAAG,EAAE,WAAW;QAChB,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,SAAS;KAClB,CAAC;IACF,wEAAwE;IACxE,qEAAqE;IACrE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,8DAA8D;QAC7D,IAAY,CAAC,MAAM,GAAG,MAAM,CAAC;IAC/B,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACtE,OAAO;QACN,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1F,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;KAC1F,CAAC;AACH,CAAC"}
|
|
@@ -5,6 +5,7 @@ export declare class OrchestratorStatusBar implements Component {
|
|
|
5
5
|
private tree;
|
|
6
6
|
private theme;
|
|
7
7
|
private active;
|
|
8
|
+
private disposed;
|
|
8
9
|
private invalidationCb?;
|
|
9
10
|
private spinnerTimer?;
|
|
10
11
|
private spinnerIdx;
|
|
@@ -16,10 +17,10 @@ export declare class OrchestratorStatusBar implements Component {
|
|
|
16
17
|
setActive(active: boolean): void;
|
|
17
18
|
isActive(): boolean;
|
|
18
19
|
private ensureSpinnerTimer;
|
|
20
|
+
private stopSpinnerTimer;
|
|
19
21
|
render(width: number): string[];
|
|
20
22
|
invalidate(): void;
|
|
21
|
-
|
|
22
|
-
dispose: () => void;
|
|
23
|
+
dispose(): void;
|
|
23
24
|
/** Walk depth-first to find the deepest running/cancelling leaf. */
|
|
24
25
|
private findDeepestRunningLeaf;
|
|
25
26
|
}
|
|
@@ -1,51 +1,66 @@
|
|
|
1
1
|
// orchestrator-status-bar.ts — One-line status bar for running orchestrations.
|
|
2
2
|
//
|
|
3
|
-
// Two render modes:
|
|
3
|
+
// Two render modes, distinguished by focus indicator:
|
|
4
4
|
//
|
|
5
|
-
// INACTIVE (
|
|
6
|
-
// [
|
|
5
|
+
// INACTIVE (outline ○ prefix — navigation hint):
|
|
6
|
+
// ○ [CART-S03-T01 · writeback:1 ⠋] "preview…" ↓ dashboard
|
|
7
7
|
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
8
|
+
// ○ signals "you can ↓ here". Colour carries status: green=completed,
|
|
9
|
+
// red=failed, accent=running, muted=other terminal.
|
|
10
10
|
//
|
|
11
|
-
// ACTIVE (
|
|
12
|
-
//
|
|
11
|
+
// ACTIVE (filled ● prefix — focus confirmation):
|
|
12
|
+
// ● [CART-S03-T01 · writeback:1 ⠋] "preview…" ⏎ open · esc back
|
|
13
13
|
//
|
|
14
|
-
//
|
|
15
|
-
// Esc returns focus to the editor.
|
|
14
|
+
// ● signals "you're here". ↑/Esc returns focus to the prompt.
|
|
16
15
|
//
|
|
17
|
-
//
|
|
16
|
+
// Visual semantics (two dimensions on one circle):
|
|
17
|
+
// Shape: ○ = not focused, ● = focused
|
|
18
|
+
// Colour: accent=running, success=completed, error=failed, muted=terminal
|
|
19
|
+
// ⠋ spinner: shows activity (only for running/cancelling nodes)
|
|
20
|
+
//
|
|
21
|
+
// Focus lifecycle: ↓ activates → ↑/Esc deactivates → prompt gets focus.
|
|
22
|
+
// All activation/deactivation is handled by the ForgeInputRouter listener
|
|
23
|
+
// in thread-switcher.ts (not by this widget's handleInput, which is dead
|
|
24
|
+
// code for setWidget components since pi-tui routes input to the prompt
|
|
25
|
+
// editor before setWidget components).
|
|
26
|
+
//
|
|
27
|
+
// Iron Laws conformance:
|
|
28
|
+
// IL1 — All visible strings route through theme.fg()/bg()/bold(). No raw glyphs.
|
|
29
|
+
// IL7 — Spinner timer guarded by disposed flag to prevent stale callbacks.
|
|
18
30
|
import { truncateToWidth } from "@earendil-works/pi-tui";
|
|
19
|
-
import { matchesKey, Key } from "@earendil-works/pi-tui";
|
|
20
31
|
import { fmtTokenMeter } from "./viewport-renderer.js";
|
|
21
32
|
// ── Braille spinner ────────────────────────────────────────────────────────
|
|
22
33
|
const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
23
34
|
const SPINNER_INTERVAL_MS = 100;
|
|
24
|
-
// ──
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
// ── Focus indicator colour: derives the theme colour from the root's
|
|
36
|
+
// aggregate status. The shape (○/●) carries focus; the colour carries
|
|
37
|
+
// status. Both dimensions on the same circle glyph.
|
|
38
|
+
//
|
|
39
|
+
// ○ green = not focused, completed ● green = focused, completed
|
|
40
|
+
// ○ red = not focused, failed ● red = focused, failed
|
|
41
|
+
// ○ dim = not focused, terminal ● dim = focused, terminal
|
|
42
|
+
// ○ accent = not focused, running ● accent = focused, running
|
|
43
|
+
function focusIndicatorColour(roots, theme) {
|
|
44
|
+
// Derive the aggregate status from all visible roots.
|
|
45
|
+
// Running/cancelling wins over terminal; failed wins over completed.
|
|
46
|
+
const hasRunning = roots.some((r) => r.status === "running" || r.status === "cancelling");
|
|
47
|
+
if (hasRunning)
|
|
48
|
+
return "accent";
|
|
49
|
+
const hasFailed = roots.some((r) => r.status === "failed" || r.status === "escalated");
|
|
50
|
+
if (hasFailed)
|
|
51
|
+
return "error";
|
|
52
|
+
const hasCompleted = roots.some((r) => r.status === "completed");
|
|
53
|
+
if (hasCompleted)
|
|
54
|
+
return "success";
|
|
55
|
+
// Terminal but not failed/completed (cancelled, pending, etc.).
|
|
56
|
+
return "muted";
|
|
43
57
|
}
|
|
44
58
|
// ── OrchestratorStatusBar ──────────────────────────────────────────────────
|
|
45
59
|
export class OrchestratorStatusBar {
|
|
46
60
|
tree;
|
|
47
61
|
theme;
|
|
48
62
|
active = false;
|
|
63
|
+
disposed = false; // IL7: guards interval callbacks after dispose
|
|
49
64
|
invalidationCb;
|
|
50
65
|
spinnerTimer;
|
|
51
66
|
spinnerIdx = 0;
|
|
@@ -54,7 +69,12 @@ export class OrchestratorStatusBar {
|
|
|
54
69
|
constructor(tree, theme) {
|
|
55
70
|
this.tree = tree;
|
|
56
71
|
this.theme = theme;
|
|
57
|
-
const onChange = () =>
|
|
72
|
+
const onChange = () => {
|
|
73
|
+
if (!this.disposed) {
|
|
74
|
+
this.ensureSpinnerTimer(); // restart spinner if roots became active
|
|
75
|
+
this.invalidationCb?.();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
58
78
|
this.tree.on("change", onChange);
|
|
59
79
|
this.tree.on("tree", onChange);
|
|
60
80
|
this.tree.on("tail", onChange);
|
|
@@ -70,7 +90,10 @@ export class OrchestratorStatusBar {
|
|
|
70
90
|
}
|
|
71
91
|
setActive(active) {
|
|
72
92
|
this.active = active;
|
|
73
|
-
this.
|
|
93
|
+
if (!this.disposed) {
|
|
94
|
+
this.ensureSpinnerTimer(); // restart spinner if needed
|
|
95
|
+
this.invalidationCb?.();
|
|
96
|
+
}
|
|
74
97
|
}
|
|
75
98
|
isActive() {
|
|
76
99
|
return this.active;
|
|
@@ -78,26 +101,38 @@ export class OrchestratorStatusBar {
|
|
|
78
101
|
ensureSpinnerTimer() {
|
|
79
102
|
if (this.spinnerTimer)
|
|
80
103
|
return;
|
|
104
|
+
// Only start the timer when there are running/cancelling roots to animate.
|
|
105
|
+
const anyActive = this.tree.getActiveRoots().some((r) => r.status === "running" || r.status === "cancelling");
|
|
106
|
+
if (!anyActive)
|
|
107
|
+
return; // no spinner needed yet
|
|
81
108
|
this.spinnerTimer = setInterval(() => {
|
|
109
|
+
// IL7: guard against firing after dispose.
|
|
110
|
+
if (this.disposed) {
|
|
111
|
+
this.stopSpinnerTimer();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
82
114
|
const anyActive = this.tree.getActiveRoots().some((r) => r.status === "running" || r.status === "cancelling");
|
|
83
115
|
if (!anyActive) {
|
|
84
116
|
// One last render to settle spinner, then stop.
|
|
85
117
|
this.invalidationCb?.();
|
|
86
|
-
|
|
87
|
-
clearInterval(this.spinnerTimer);
|
|
88
|
-
this.spinnerTimer = undefined;
|
|
118
|
+
this.stopSpinnerTimer();
|
|
89
119
|
return;
|
|
90
120
|
}
|
|
91
121
|
this.spinnerIdx = (this.spinnerIdx + 1) % SPINNER_FRAMES.length;
|
|
92
122
|
this.invalidationCb?.();
|
|
93
123
|
}, SPINNER_INTERVAL_MS);
|
|
94
124
|
}
|
|
125
|
+
stopSpinnerTimer() {
|
|
126
|
+
if (this.spinnerTimer) {
|
|
127
|
+
clearInterval(this.spinnerTimer);
|
|
128
|
+
this.spinnerTimer = undefined;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
95
131
|
render(width) {
|
|
96
132
|
const roots = this.tree.getActiveRoots();
|
|
97
133
|
if (roots.length === 0)
|
|
98
134
|
return []; // Hidden when nothing is running.
|
|
99
135
|
const dim = (s) => this.theme.fg("dim", s);
|
|
100
|
-
const accent = (s) => this.theme.fg("accent", s);
|
|
101
136
|
const bold = (s) => this.theme.bold(this.theme.fg("accent", s));
|
|
102
137
|
// Build a segment for each active root.
|
|
103
138
|
const segments = [];
|
|
@@ -105,7 +140,6 @@ export class OrchestratorStatusBar {
|
|
|
105
140
|
// Find the deepest running leaf or the root itself.
|
|
106
141
|
const leaf = this.findDeepestRunningLeaf(root.id);
|
|
107
142
|
const displayNode = leaf ?? root;
|
|
108
|
-
const glyph = nodeGlyph(displayNode.status, this.theme);
|
|
109
143
|
// Label: root label, with current phase as suffix if different.
|
|
110
144
|
let label = root.label;
|
|
111
145
|
if (leaf && leaf.id !== root.id) {
|
|
@@ -116,23 +150,28 @@ export class OrchestratorStatusBar {
|
|
|
116
150
|
const usage = this.tree.getSubtreeUsage(root.id);
|
|
117
151
|
const meter = fmtTokenMeter(usage);
|
|
118
152
|
const meterPart = meter ? dim(` ${meter}`) : "";
|
|
119
|
-
//
|
|
153
|
+
// IL1: spinner (worm) shows activity — only for running/cancelling.
|
|
154
|
+
// Not shown for terminal states (completed, failed, etc.).
|
|
120
155
|
const spin = (displayNode.status === "running" || displayNode.status === "cancelling")
|
|
121
|
-
? ` ${SPINNER_FRAMES[this.spinnerIdx]}`
|
|
156
|
+
? ` ${this.theme.fg("accent", SPINNER_FRAMES[this.spinnerIdx])}`
|
|
122
157
|
: "";
|
|
123
158
|
// Turn preview (truncated).
|
|
124
159
|
const preview = displayNode.lastTurnPreview
|
|
125
160
|
? dim(` "${truncateToWidth(displayNode.lastTurnPreview, 60)}"`)
|
|
126
161
|
: "";
|
|
127
|
-
const segment = `${
|
|
162
|
+
const segment = `${bold(`[${label}]`)}${spin}${preview}${meterPart}`;
|
|
128
163
|
segments.push(segment);
|
|
129
164
|
}
|
|
130
165
|
// Right-side hint depends on active state.
|
|
131
166
|
const hint = this.active
|
|
132
167
|
? dim(" ⏎ open · esc back")
|
|
133
168
|
: dim(" ↓ dashboard");
|
|
134
|
-
//
|
|
135
|
-
|
|
169
|
+
// Focus indicator: ○/● coloured by aggregate status.
|
|
170
|
+
// Shape: ○ when inactive ("↓ here"), ● when active ("you're here").
|
|
171
|
+
// Colour: accent=running, success=completed, error=failed, muted=terminal.
|
|
172
|
+
const indicatorColour = focusIndicatorColour(roots, this.theme);
|
|
173
|
+
const indicatorGlyph = this.active ? "●" : "○";
|
|
174
|
+
const prefix = this.theme.fg(indicatorColour, indicatorGlyph) + " ";
|
|
136
175
|
const joined = segments.join(dim(" │ "));
|
|
137
176
|
const line = `${prefix}${joined}${hint}`;
|
|
138
177
|
return [truncateToWidth(line, width)];
|
|
@@ -140,27 +179,18 @@ export class OrchestratorStatusBar {
|
|
|
140
179
|
invalidate() {
|
|
141
180
|
// Re-render driven by external invalidationCb → tui.requestRender().
|
|
142
181
|
}
|
|
143
|
-
handleInput(
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
this.active = false; // deactivate, return to editor
|
|
152
|
-
}
|
|
153
|
-
this.invalidationCb?.();
|
|
154
|
-
}
|
|
155
|
-
dispose = () => {
|
|
156
|
-
if (this.spinnerTimer) {
|
|
157
|
-
clearInterval(this.spinnerTimer);
|
|
158
|
-
this.spinnerTimer = undefined;
|
|
159
|
-
}
|
|
182
|
+
// Note: handleInput is dead code for setWidget("belowEditor") components —
|
|
183
|
+
// pi-tui routes input to the prompt editor, not to belowEditor widgets.
|
|
184
|
+
// All key handling (↓ focus, ↑/Esc unfocus, Enter open dashboard) is in
|
|
185
|
+
// the ForgeInputRouter listener in thread-switcher.ts.
|
|
186
|
+
// Keeping the method for Component interface conformance; it does nothing.
|
|
187
|
+
dispose() {
|
|
188
|
+
this.disposed = true; // IL7: set before clearing timer so callback sees it
|
|
189
|
+
this.stopSpinnerTimer();
|
|
160
190
|
for (const fn of this.disposeFns)
|
|
161
191
|
fn();
|
|
162
192
|
this.disposeFns = [];
|
|
163
|
-
}
|
|
193
|
+
}
|
|
164
194
|
/** Walk depth-first to find the deepest running/cancelling leaf. */
|
|
165
195
|
findDeepestRunningLeaf(id) {
|
|
166
196
|
const node = this.tree.getNode(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator-status-bar.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/orchestrator-status-bar.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"orchestrator-status-bar.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/orchestrator-status-bar.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,10 @@ export interface StartNodeOptions {
|
|
|
43
43
|
kind?: NodeKind;
|
|
44
44
|
promptPreview?: string;
|
|
45
45
|
}
|
|
46
|
+
export declare const MAX_TAIL_ENTRY_CHARS = 4096;
|
|
47
|
+
export declare const MAX_PROMPT_PREVIEW_CHARS = 16384;
|
|
48
|
+
/** Cap an entry for storage. Marks the cut so views can surface it. */
|
|
49
|
+
export declare function capTailEntry(raw: string, max?: number): string;
|
|
46
50
|
export declare class OrchestratorTree extends EventEmitter {
|
|
47
51
|
private nodes;
|
|
48
52
|
private roots;
|