@entelligentsia/forgecli 1.0.25 → 1.0.36
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 +258 -0
- package/README.md +2 -0
- package/dist/CHANGELOG-forge-plugin.md +163 -0
- package/dist/bin/argv.d.ts +2 -2
- package/dist/bin/argv.js +25 -0
- package/dist/bin/argv.js.map +1 -1
- package/dist/bin/forge.js +12 -0
- package/dist/bin/forge.js.map +1 -1
- package/dist/bin/init.d.ts +23 -0
- package/dist/bin/init.js +123 -0
- package/dist/bin/init.js.map +1 -0
- package/dist/bin/uninstall.d.ts +20 -0
- package/dist/bin/uninstall.js +141 -0
- package/dist/bin/uninstall.js.map +1 -0
- package/dist/extensions/forgecli/add-pipeline.d.ts +19 -0
- package/dist/extensions/forgecli/add-pipeline.js +143 -0
- package/dist/extensions/forgecli/add-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/add-task.d.ts +20 -0
- package/dist/extensions/forgecli/add-task.js +154 -0
- package/dist/extensions/forgecli/add-task.js.map +1 -0
- package/dist/extensions/forgecli/approve.d.ts +22 -0
- package/dist/extensions/forgecli/approve.js +152 -0
- package/dist/extensions/forgecli/approve.js.map +1 -0
- package/dist/extensions/forgecli/banner.d.ts +10 -0
- package/dist/extensions/forgecli/banner.js +36 -0
- package/dist/extensions/forgecli/banner.js.map +1 -0
- package/dist/extensions/forgecli/calibrate.d.ts +64 -0
- package/dist/extensions/forgecli/calibrate.js +481 -0
- package/dist/extensions/forgecli/calibrate.js.map +1 -0
- package/dist/extensions/forgecli/claude-bootstrap/bootstrap.d.ts +40 -0
- package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js +593 -0
- package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js.map +1 -0
- package/dist/extensions/forgecli/claude-bootstrap/settings-merge.d.ts +46 -0
- package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js +245 -0
- package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js.map +1 -0
- package/dist/extensions/forgecli/claude-bootstrap/uninstall.d.ts +23 -0
- package/dist/extensions/forgecli/claude-bootstrap/uninstall.js +215 -0
- package/dist/extensions/forgecli/claude-bootstrap/uninstall.js.map +1 -0
- package/dist/extensions/forgecli/collate.d.ts +22 -0
- package/dist/extensions/forgecli/collate.js +134 -0
- package/dist/extensions/forgecli/collate.js.map +1 -0
- package/dist/extensions/forgecli/commit.d.ts +22 -0
- package/dist/extensions/forgecli/commit.js +152 -0
- package/dist/extensions/forgecli/commit.js.map +1 -0
- package/dist/extensions/forgecli/config-command.d.ts +8 -0
- package/dist/extensions/forgecli/config-command.js +67 -0
- package/dist/extensions/forgecli/config-command.js.map +1 -0
- package/dist/extensions/forgecli/config-layer.d.ts +53 -0
- package/dist/extensions/forgecli/config-layer.js +72 -0
- package/dist/extensions/forgecli/config-layer.js.map +1 -0
- package/dist/extensions/forgecli/config-writer.d.ts +16 -0
- package/dist/extensions/forgecli/config-writer.js +69 -0
- package/dist/extensions/forgecli/config-writer.js.map +1 -0
- package/dist/extensions/forgecli/dashboard/component.js +10 -7
- package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
- package/dist/extensions/forgecli/enhance.d.ts +27 -0
- package/dist/extensions/forgecli/enhance.js +199 -0
- package/dist/extensions/forgecli/enhance.js.map +1 -0
- package/dist/extensions/forgecli/fix-bug.d.ts +85 -0
- package/dist/extensions/forgecli/fix-bug.js +1580 -0
- package/dist/extensions/forgecli/fix-bug.js.map +1 -0
- package/dist/extensions/forgecli/forge-header.d.ts +12 -0
- package/dist/extensions/forgecli/forge-header.js +114 -0
- package/dist/extensions/forgecli/forge-header.js.map +1 -0
- package/dist/extensions/forgecli/forge-init.d.ts +26 -0
- package/dist/extensions/forgecli/forge-init.js +514 -0
- package/dist/extensions/forgecli/forge-init.js.map +1 -0
- package/dist/extensions/forgecli/forge-root.d.ts +10 -0
- package/dist/extensions/forgecli/forge-root.js +62 -0
- package/dist/extensions/forgecli/forge-root.js.map +1 -0
- package/dist/extensions/forgecli/forge-update-command.d.ts +100 -0
- package/dist/extensions/forgecli/forge-update-command.js +435 -0
- package/dist/extensions/forgecli/forge-update-command.js.map +1 -0
- package/dist/extensions/forgecli/friction-emit.d.ts +99 -0
- package/dist/extensions/forgecli/friction-emit.js +245 -0
- package/dist/extensions/forgecli/friction-emit.js.map +1 -0
- package/dist/extensions/forgecli/implement.d.ts +22 -0
- package/dist/extensions/forgecli/implement.js +170 -0
- package/dist/extensions/forgecli/implement.js.map +1 -0
- package/dist/extensions/forgecli/init-context.d.ts +99 -0
- package/dist/extensions/forgecli/init-context.js +178 -0
- package/dist/extensions/forgecli/init-context.js.map +1 -0
- package/dist/extensions/forgecli/init-progress.d.ts +39 -0
- package/dist/extensions/forgecli/init-progress.js +117 -0
- package/dist/extensions/forgecli/init-progress.js.map +1 -0
- package/dist/extensions/forgecli/input-router.d.ts +33 -0
- package/dist/extensions/forgecli/input-router.js +136 -0
- package/dist/extensions/forgecli/input-router.js.map +1 -0
- package/dist/extensions/forgecli/lib/halt-advisor.d.ts +59 -0
- package/dist/extensions/forgecli/lib/halt-advisor.js +113 -0
- package/dist/extensions/forgecli/lib/halt-advisor.js.map +1 -0
- package/dist/extensions/forgecli/lib/orchestrator-preflight.d.ts +46 -0
- package/dist/extensions/forgecli/lib/orchestrator-preflight.js +64 -0
- package/dist/extensions/forgecli/lib/orchestrator-preflight.js.map +1 -0
- package/dist/extensions/forgecli/materialize.d.ts +16 -0
- package/dist/extensions/forgecli/materialize.js +195 -0
- package/dist/extensions/forgecli/materialize.js.map +1 -0
- package/dist/extensions/forgecli/migrate.d.ts +22 -0
- package/dist/extensions/forgecli/migrate.js +260 -0
- package/dist/extensions/forgecli/migrate.js.map +1 -0
- package/dist/extensions/forgecli/migration-engine.d.ts +117 -0
- package/dist/extensions/forgecli/migration-engine.js +563 -0
- package/dist/extensions/forgecli/migration-engine.js.map +1 -0
- package/dist/extensions/forgecli/model-registry.d.ts +61 -0
- package/dist/extensions/forgecli/model-registry.js +127 -0
- package/dist/extensions/forgecli/model-registry.js.map +1 -0
- package/dist/extensions/forgecli/model-resolver.d.ts +32 -0
- package/dist/extensions/forgecli/model-resolver.js +65 -0
- package/dist/extensions/forgecli/model-resolver.js.map +1 -0
- package/dist/extensions/forgecli/model-validator.d.ts +29 -0
- package/dist/extensions/forgecli/model-validator.js +107 -0
- package/dist/extensions/forgecli/model-validator.js.map +1 -0
- package/dist/extensions/forgecli/orchestrator-status-bar.d.ts +26 -0
- package/dist/extensions/forgecli/orchestrator-status-bar.js +213 -0
- package/dist/extensions/forgecli/orchestrator-status-bar.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-body.d.ts +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-body.js +65 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-body.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-id.d.ts +23 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-id.js +140 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-id.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.d.ts +54 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js +349 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phases.d.ts +8 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js +60 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-state.d.ts +14 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-state.js +100 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-state.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.d.ts +72 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js +204 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.d.ts +38 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js +166 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.d.ts +3 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js +55 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.d.ts +7 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js +293 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.d.ts +2 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js +501 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.d.ts +41 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js +5 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.d.ts +43 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js +85 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.d.ts +8 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js +37 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.d.ts +28 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js +45 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.d.ts +26 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js +75 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/summary-recovery.d.ts +24 -0
- package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js +37 -0
- package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +9 -93
- package/dist/extensions/forgecli/orchestrators/fix-bug.js +23 -1721
- package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/run-sprint.d.ts +3 -12
- package/dist/extensions/forgecli/orchestrators/run-sprint.js +48 -270
- package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/run-task.d.ts +10 -214
- package/dist/extensions/forgecli/orchestrators/run-task.js +31 -1481
- package/dist/extensions/forgecli/orchestrators/run-task.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.d.ts +33 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js +135 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.d.ts +18 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js +55 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-command.d.ts +9 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-command.js +174 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-command.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.d.ts +2 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js +494 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-types.d.ts +62 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-types.js +5 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-types.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-body.d.ts +4 -0
- package/dist/extensions/forgecli/orchestrators/task/task-body.js +48 -0
- package/dist/extensions/forgecli/orchestrators/task/task-body.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-events.d.ts +63 -0
- package/dist/extensions/forgecli/orchestrators/task/task-events.js +185 -0
- package/dist/extensions/forgecli/orchestrators/task/task-events.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-gates.d.ts +34 -0
- package/dist/extensions/forgecli/orchestrators/task/task-gates.js +78 -0
- package/dist/extensions/forgecli/orchestrators/task/task-gates.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.d.ts +42 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js +370 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phases.d.ts +14 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phases.js +26 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phases.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-record.d.ts +9 -0
- package/dist/extensions/forgecli/orchestrators/task/task-record.js +58 -0
- package/dist/extensions/forgecli/orchestrators/task/task-record.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-state.d.ts +14 -0
- package/dist/extensions/forgecli/orchestrators/task/task-state.js +35 -0
- package/dist/extensions/forgecli/orchestrators/task/task-state.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.d.ts +36 -0
- package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js +152 -0
- package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js.map +1 -0
- package/dist/extensions/forgecli/plan.d.ts +22 -0
- package/dist/extensions/forgecli/plan.js +167 -0
- package/dist/extensions/forgecli/plan.js.map +1 -0
- package/dist/extensions/forgecli/quiz-agent.d.ts +17 -0
- package/dist/extensions/forgecli/quiz-agent.js +98 -0
- package/dist/extensions/forgecli/quiz-agent.js.map +1 -0
- package/dist/extensions/forgecli/read-command.d.ts +2 -0
- package/dist/extensions/forgecli/read-command.js +100 -0
- package/dist/extensions/forgecli/read-command.js.map +1 -0
- package/dist/extensions/forgecli/regenerate.d.ts +40 -0
- package/dist/extensions/forgecli/regenerate.js +438 -0
- package/dist/extensions/forgecli/regenerate.js.map +1 -0
- package/dist/extensions/forgecli/remove-command.d.ts +17 -0
- package/dist/extensions/forgecli/remove-command.js +124 -0
- package/dist/extensions/forgecli/remove-command.js.map +1 -0
- package/dist/extensions/forgecli/report-bug.d.ts +25 -0
- package/dist/extensions/forgecli/report-bug.js +159 -0
- package/dist/extensions/forgecli/report-bug.js.map +1 -0
- package/dist/extensions/forgecli/retrospective.d.ts +20 -0
- package/dist/extensions/forgecli/retrospective.js +126 -0
- package/dist/extensions/forgecli/retrospective.js.map +1 -0
- package/dist/extensions/forgecli/review-code.d.ts +35 -0
- package/dist/extensions/forgecli/review-code.js +196 -0
- package/dist/extensions/forgecli/review-code.js.map +1 -0
- package/dist/extensions/forgecli/review-plan.d.ts +35 -0
- package/dist/extensions/forgecli/review-plan.js +200 -0
- package/dist/extensions/forgecli/review-plan.js.map +1 -0
- package/dist/extensions/forgecli/run-sprint.d.ts +27 -0
- package/dist/extensions/forgecli/run-sprint.js +716 -0
- package/dist/extensions/forgecli/run-sprint.js.map +1 -0
- package/dist/extensions/forgecli/run-task.d.ts +204 -0
- package/dist/extensions/forgecli/run-task.js +1403 -0
- package/dist/extensions/forgecli/run-task.js.map +1 -0
- package/dist/extensions/forgecli/skill-curation-flag.d.ts +21 -0
- package/dist/extensions/forgecli/skill-curation-flag.js +71 -0
- package/dist/extensions/forgecli/skill-curation-flag.js.map +1 -0
- package/dist/extensions/forgecli/skill-curator-subagent.d.ts +102 -0
- package/dist/extensions/forgecli/skill-curator-subagent.js +339 -0
- package/dist/extensions/forgecli/skill-curator-subagent.js.map +1 -0
- package/dist/extensions/forgecli/skill-retriever.d.ts +84 -0
- package/dist/extensions/forgecli/skill-retriever.js +246 -0
- package/dist/extensions/forgecli/skill-retriever.js.map +1 -0
- package/dist/extensions/forgecli/skill-usage-tracker.d.ts +91 -0
- package/dist/extensions/forgecli/skill-usage-tracker.js +224 -0
- package/dist/extensions/forgecli/skill-usage-tracker.js.map +1 -0
- package/dist/extensions/forgecli/sprint-intake.d.ts +10 -0
- package/dist/extensions/forgecli/sprint-intake.js +91 -0
- package/dist/extensions/forgecli/sprint-intake.js.map +1 -0
- package/dist/extensions/forgecli/sprint-plan.d.ts +14 -0
- package/dist/extensions/forgecli/sprint-plan.js +122 -0
- package/dist/extensions/forgecli/sprint-plan.js.map +1 -0
- package/dist/extensions/forgecli/status-command.d.ts +19 -0
- package/dist/extensions/forgecli/status-command.js +140 -0
- package/dist/extensions/forgecli/status-command.js.map +1 -0
- package/dist/extensions/forgecli/store-error-remediation.d.ts +65 -0
- package/dist/extensions/forgecli/store-error-remediation.js +307 -0
- package/dist/extensions/forgecli/store-error-remediation.js.map +1 -0
- package/dist/extensions/forgecli/store-query.d.ts +22 -0
- package/dist/extensions/forgecli/store-query.js +107 -0
- package/dist/extensions/forgecli/store-query.js.map +1 -0
- package/dist/extensions/forgecli/store-repair.d.ts +17 -0
- package/dist/extensions/forgecli/store-repair.js +123 -0
- package/dist/extensions/forgecli/store-repair.js.map +1 -0
- package/dist/extensions/forgecli/store-resolver.d.ts +56 -0
- package/dist/extensions/forgecli/store-resolver.js +263 -0
- package/dist/extensions/forgecli/store-resolver.js.map +1 -0
- package/dist/extensions/forgecli/store-validator.d.ts +16 -0
- package/dist/extensions/forgecli/store-validator.js +32 -0
- package/dist/extensions/forgecli/store-validator.js.map +1 -0
- package/dist/extensions/forgecli/test-orchestrate.d.ts +2 -0
- package/dist/extensions/forgecli/test-orchestrate.js +182 -0
- package/dist/extensions/forgecli/test-orchestrate.js.map +1 -0
- package/dist/extensions/forgecli/thread-switcher.d.ts +5 -0
- package/dist/extensions/forgecli/thread-switcher.js +189 -0
- package/dist/extensions/forgecli/thread-switcher.js.map +1 -0
- package/dist/extensions/forgecli/transition-guard.d.ts +20 -0
- package/dist/extensions/forgecli/transition-guard.js +89 -0
- package/dist/extensions/forgecli/transition-guard.js.map +1 -0
- package/dist/extensions/forgecli/update/forge-update-command.js +10 -7
- package/dist/extensions/forgecli/update/forge-update-command.js.map +1 -1
- package/dist/extensions/forgecli/update-check.d.ts +37 -0
- package/dist/extensions/forgecli/update-check.js +185 -0
- package/dist/extensions/forgecli/update-check.js.map +1 -0
- package/dist/extensions/forgecli/update-tools.d.ts +23 -0
- package/dist/extensions/forgecli/update-tools.js +135 -0
- package/dist/extensions/forgecli/update-tools.js.map +1 -0
- package/dist/extensions/forgecli/validate.d.ts +22 -0
- package/dist/extensions/forgecli/validate.js +152 -0
- package/dist/extensions/forgecli/validate.js.map +1 -0
- package/dist/extensions/forgecli/viewport-events.d.ts +78 -0
- package/dist/extensions/forgecli/viewport-events.js +243 -0
- package/dist/extensions/forgecli/viewport-events.js.map +1 -0
- package/dist/extensions/forgecli/viewport-renderer.d.ts +83 -0
- package/dist/extensions/forgecli/viewport-renderer.js +233 -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 +128 -0
- package/dist/extensions/forgecli/viewport-theme.js.map +1 -0
- package/dist/extensions/forgecli/whats-new-widget.d.ts +26 -0
- package/dist/extensions/forgecli/whats-new-widget.js +376 -0
- package/dist/extensions/forgecli/whats-new-widget.js.map +1 -0
- package/dist/extensions/forgecli/whats-new.d.ts +120 -0
- package/dist/extensions/forgecli/whats-new.js +470 -0
- package/dist/extensions/forgecli/whats-new.js.map +1 -0
- package/dist/forge-payload/.base-pack/commands/approve.md +2 -2
- package/dist/forge-payload/.base-pack/commands/check-agent.md +2 -2
- package/dist/forge-payload/.base-pack/commands/collate.md +2 -2
- package/dist/forge-payload/.base-pack/commands/commit.md +2 -2
- package/dist/forge-payload/.base-pack/commands/enhance.md +2 -2
- package/dist/forge-payload/.base-pack/commands/fix-bug.md +2 -2
- package/dist/forge-payload/.base-pack/commands/implement.md +2 -2
- package/dist/forge-payload/.base-pack/commands/init.md +278 -0
- package/dist/forge-payload/.base-pack/commands/new-sprint.md +2 -2
- package/dist/forge-payload/.base-pack/commands/plan-sprint.md +2 -2
- package/dist/forge-payload/.base-pack/commands/plan.md +2 -2
- package/dist/forge-payload/.base-pack/commands/retro.md +2 -2
- package/dist/forge-payload/.base-pack/commands/review-code.md +2 -2
- package/dist/forge-payload/.base-pack/commands/review-plan.md +2 -2
- package/dist/forge-payload/.base-pack/commands/run-sprint.md +2 -2
- package/dist/forge-payload/.base-pack/commands/run-task.md +2 -2
- package/dist/forge-payload/.base-pack/commands/validate.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/collator_agent.md +5 -6
- package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +1 -1
- package/dist/forge-payload/.base-pack/workflows-js/wfl-init.js +449 -0
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/.schemas/migrations.json +85 -0
- package/dist/forge-payload/commands/add-pipeline.md +1 -1
- package/dist/forge-payload/commands/add-task.md +3 -3
- package/dist/forge-payload/commands/ask.md +1 -1
- package/dist/forge-payload/commands/check-agent.md +1 -1
- package/dist/forge-payload/commands/config.md +1 -1
- package/dist/forge-payload/commands/health.md +1 -1
- package/dist/forge-payload/commands/init.md +62 -7
- package/dist/forge-payload/commands/rebuild.md +3 -3
- package/dist/forge-payload/commands/remove.md +1 -1
- package/dist/forge-payload/commands/repair.md +1 -1
- package/dist/forge-payload/commands/report-bug.md +1 -1
- package/dist/forge-payload/commands/status.md +1 -1
- package/dist/forge-payload/commands/update.md +3 -3
- package/dist/forge-payload/hooks/lib/common.cjs +228 -0
- package/dist/forge-payload/hooks/lib/plugin-detection.cjs +106 -0
- package/dist/forge-payload/hooks/lib/update-msg.cjs +23 -0
- package/dist/forge-payload/hooks/lib/update-url.cjs +46 -0
- package/dist/forge-payload/hooks/lib/write-registry.js +53 -0
- package/dist/forge-payload/init/discovery/discover-database.md +32 -0
- package/dist/forge-payload/init/discovery/discover-processes.md +31 -0
- package/dist/forge-payload/init/discovery/discover-routing.md +31 -0
- package/dist/forge-payload/init/discovery/discover-stack.md +33 -0
- package/dist/forge-payload/init/discovery/discover-testing.md +34 -0
- package/dist/forge-payload/init/generation/generate-commands.md +171 -0
- package/dist/forge-payload/init/generation/generate-kb-doc.md +60 -0
- package/dist/forge-payload/init/generation/generate-knowledge-base.md +56 -0
- package/dist/forge-payload/init/generation/generate-persona.md +73 -0
- package/dist/forge-payload/init/generation/generate-personas.md +54 -0
- package/dist/forge-payload/init/generation/generate-skill.md +66 -0
- package/dist/forge-payload/init/generation/generate-skills.md +36 -0
- package/dist/forge-payload/init/generation/generate-template.md +60 -0
- package/dist/forge-payload/init/generation/generate-templates.md +39 -0
- package/dist/forge-payload/init/generation/generate-tools.md +133 -0
- package/dist/forge-payload/init/generation/generate-workflows.md +78 -0
- package/dist/forge-payload/init/phases/phase-1-collect.md +10 -2
- package/dist/forge-payload/init/phases/phase-3-materialize.md +1 -1
- package/dist/forge-payload/init/phases/phase-4-register.md +8 -0
- package/dist/forge-payload/init/workflow-gen-plan.json +17 -0
- package/dist/forge-payload/integrity.json +16 -16
- package/dist/forge-payload/meta/workflows/meta-collate.md +5 -6
- package/dist/forge-payload/meta/workflows/meta-migrate.md +1 -1
- package/dist/forge-payload/schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/schemas/structure-manifest.json +3 -12
- package/dist/forge-payload/tools/forge-preflight.cjs +268 -0
- package/dist/forge-payload/tools/lib/paths.cjs +12 -11
- package/dist/forge-payload/tools/lib/pricing.cjs +31 -11
- package/dist/forge-payload/tools/query-logger.cjs +34 -0
- package/dist/forge-payload/tools/substitute-placeholders.cjs +5 -6
- package/node_modules/@mariozechner/clipboard/package.json +1 -2
- package/package.json +2 -2
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/README.md +0 -3
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/package.json +0 -25
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { SessionRegistry } from "./session-registry.js";
|
|
2
|
+
import { type UsageDelta } from "./viewport-renderer.js";
|
|
3
|
+
/** Minimal shape of the AgentSessionEvent union we care about — kept loose
|
|
4
|
+
* so the file doesn't pull in @earendil-works/pi-agent-core types at compile
|
|
5
|
+
* time for callers that only consume the factory. */
|
|
6
|
+
type SubagentEvent = {
|
|
7
|
+
type: "turn_start";
|
|
8
|
+
} | {
|
|
9
|
+
type: "turn_end";
|
|
10
|
+
message: unknown;
|
|
11
|
+
} | {
|
|
12
|
+
type: "tool_execution_start";
|
|
13
|
+
toolCallId: string;
|
|
14
|
+
toolName: string;
|
|
15
|
+
args: unknown;
|
|
16
|
+
} | {
|
|
17
|
+
type: "tool_execution_end";
|
|
18
|
+
toolCallId: string;
|
|
19
|
+
toolName: string;
|
|
20
|
+
result: unknown;
|
|
21
|
+
isError: boolean;
|
|
22
|
+
} | {
|
|
23
|
+
type: "compaction_start";
|
|
24
|
+
reason: string;
|
|
25
|
+
} | {
|
|
26
|
+
type: "auto_retry_start";
|
|
27
|
+
attempt: number;
|
|
28
|
+
maxAttempts: number;
|
|
29
|
+
errorMessage?: string;
|
|
30
|
+
} | {
|
|
31
|
+
type: string;
|
|
32
|
+
[k: string]: unknown;
|
|
33
|
+
};
|
|
34
|
+
export interface ViewportObserverOpts {
|
|
35
|
+
registry: SessionRegistry;
|
|
36
|
+
/** session key in the registry (taskId, bugId, or sprintId:ceremony, etc.) */
|
|
37
|
+
sessionId: string;
|
|
38
|
+
/** phase scope for tail buffer and per-phase usage */
|
|
39
|
+
phaseRole: string;
|
|
40
|
+
/** displayed in the per-line prefix `[<displayRole> HH:MM:SS tN]`. Usually same
|
|
41
|
+
* as `phaseRole` but kept separate so callers like run-sprint ceremony can
|
|
42
|
+
* show a friendlier role label without changing the registry key. */
|
|
43
|
+
displayRole?: string;
|
|
44
|
+
/** optional `─── phase X/Y begin · sessionId ───` header to emit immediately */
|
|
45
|
+
beginHeader?: string;
|
|
46
|
+
/** optional JSONL audit sink (the run-task debug log). */
|
|
47
|
+
writeDebug?: (rec: Record<string, unknown>) => void;
|
|
48
|
+
/** optional verbose status setter — only called when FORGE_VERBOSE=1.
|
|
49
|
+
* The observer doesn't read FORGE_VERBOSE itself; caller decides whether to
|
|
50
|
+
* wire this. */
|
|
51
|
+
setStatusVerbose?: (key: string, msg: string) => void;
|
|
52
|
+
/** optional toast for compaction/retry; ignore to suppress. */
|
|
53
|
+
notify?: (msg: string, level: "info" | "warning" | "error") => void;
|
|
54
|
+
/** keys used for `setStatusVerbose` when caller wants verbose status. */
|
|
55
|
+
verboseKeys?: {
|
|
56
|
+
messageKey?: string;
|
|
57
|
+
};
|
|
58
|
+
/** invoked after every handled event so orchestrators can refresh their own
|
|
59
|
+
* status line (e.g. FORGE_VERBOSE status with `lastTool`, elapsed seconds). */
|
|
60
|
+
afterEach?: () => void;
|
|
61
|
+
}
|
|
62
|
+
export interface AttachedObserver {
|
|
63
|
+
onEvent: (event: SubagentEvent) => void;
|
|
64
|
+
/** Mutable counters orchestrator can read after subagent returns. */
|
|
65
|
+
state: {
|
|
66
|
+
turn: number;
|
|
67
|
+
toolCount: number;
|
|
68
|
+
errCount: number;
|
|
69
|
+
lastTool: string;
|
|
70
|
+
cumUsage: UsageDelta;
|
|
71
|
+
cumCompression: {
|
|
72
|
+
calls: number;
|
|
73
|
+
tokensSaved: number;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export declare function attachViewportObserver(opts: ViewportObserverOpts): AttachedObserver;
|
|
78
|
+
export {};
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
// viewport-events.ts
|
|
2
|
+
//
|
|
3
|
+
// Reusable subagent event observer. Wires `runForgeSubagent.onEvent` to:
|
|
4
|
+
// 1. Append per-event tail lines (with tree connectors, glyphs, risky tag,
|
|
5
|
+
// thinking one-liners, batch markers) into SessionRegistry.
|
|
6
|
+
// 2. Maintain cumulative phase token usage and push it to the registry on
|
|
7
|
+
// every turn_end — drives the sticky footer in the tail view AND the
|
|
8
|
+
// aggregate Σ meter in the chip strip.
|
|
9
|
+
// 3. Surface counts (turn / tools / errors) so the orchestrator can render
|
|
10
|
+
// its end-of-phase summary.
|
|
11
|
+
//
|
|
12
|
+
// Used by run-task, fix-bug, and run-sprint (ceremony) so every subagent
|
|
13
|
+
// "bubbles" usage up the same way. Top-level viewports read aggregate usage
|
|
14
|
+
// via SessionRegistry.getAggregateUsage().
|
|
15
|
+
import { getOrchestratorTree } from "./orchestrator-tree.js";
|
|
16
|
+
import { extractThinkingOneLiner, extractTurnPreview, argHint as fmtArgHint, RISKY_TAG, readUsage, resultShape, toolGlyph, } from "./viewport-renderer.js";
|
|
17
|
+
function extractCompression(result) {
|
|
18
|
+
if (!result || typeof result !== "object")
|
|
19
|
+
return undefined;
|
|
20
|
+
const r = result;
|
|
21
|
+
const c = r.details?.compression;
|
|
22
|
+
if (!c || typeof c.before !== "number" || typeof c.after !== "number")
|
|
23
|
+
return undefined;
|
|
24
|
+
return { tool: c.tool ?? "", before: c.before, after: c.after, saved: c.saved ?? 0 };
|
|
25
|
+
}
|
|
26
|
+
export function attachViewportObserver(opts) {
|
|
27
|
+
const { registry, sessionId, phaseRole, displayRole, beginHeader, writeDebug, setStatusVerbose, notify, verboseKeys, afterEach, } = opts;
|
|
28
|
+
const role = displayRole ?? phaseRole;
|
|
29
|
+
const tree = getOrchestratorTree();
|
|
30
|
+
// Helper to resolve the correct active node ID in the OrchestratorTree.
|
|
31
|
+
const resolveNodeId = () => {
|
|
32
|
+
const exactId = `${sessionId}:${phaseRole}`;
|
|
33
|
+
const exactNode = tree.getNode(exactId);
|
|
34
|
+
if (exactNode && exactNode.status === "running")
|
|
35
|
+
return exactId;
|
|
36
|
+
const parentNode = tree.getNode(sessionId);
|
|
37
|
+
if (parentNode) {
|
|
38
|
+
const prefix = `${sessionId}:${phaseRole}:`;
|
|
39
|
+
for (const cid of parentNode.children) {
|
|
40
|
+
if (cid.startsWith(prefix)) {
|
|
41
|
+
const child = tree.getNode(cid);
|
|
42
|
+
if (child && child.status === "running") {
|
|
43
|
+
return cid;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return exactId;
|
|
49
|
+
};
|
|
50
|
+
const state = {
|
|
51
|
+
turn: 0,
|
|
52
|
+
toolCount: 0,
|
|
53
|
+
errCount: 0,
|
|
54
|
+
lastTool: "",
|
|
55
|
+
cumUsage: { input: 0, output: 0, cacheRead: 0 },
|
|
56
|
+
cumCompression: { calls: 0, tokensSaved: 0 },
|
|
57
|
+
};
|
|
58
|
+
// Per-turn tree-connector state.
|
|
59
|
+
let toolsThisTurn = 0;
|
|
60
|
+
let firstLineOfTurn = true;
|
|
61
|
+
let currentTurnPrefixWidth = 0;
|
|
62
|
+
const argsByCallId = new Map();
|
|
63
|
+
const formatTime = (ms) => {
|
|
64
|
+
const d = new Date(ms);
|
|
65
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
66
|
+
return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
|
|
67
|
+
};
|
|
68
|
+
const tailPrefix = () => `[${role} ${formatTime(Date.now())} t${state.turn}]`;
|
|
69
|
+
const appendTail = (line, opts) => {
|
|
70
|
+
registry.appendTail(sessionId, phaseRole, line, opts);
|
|
71
|
+
tree.appendTail(resolveNodeId(), line, opts);
|
|
72
|
+
};
|
|
73
|
+
const extractErrorSummary = (result) => {
|
|
74
|
+
const raw = typeof result === "string"
|
|
75
|
+
? result
|
|
76
|
+
: typeof result === "object" && result !== null
|
|
77
|
+
? JSON.stringify(result)
|
|
78
|
+
: String(result);
|
|
79
|
+
const firstLine = raw.split(/\r?\n/).find((l) => l.trim().length > 0) ?? raw;
|
|
80
|
+
return firstLine.length > 160 ? `${firstLine.slice(0, 160)}…` : firstLine;
|
|
81
|
+
};
|
|
82
|
+
const emitTurnLine = (body, lineOpts) => {
|
|
83
|
+
const isFirst = firstLineOfTurn;
|
|
84
|
+
const isClosing = lineOpts?.closing === true;
|
|
85
|
+
let branch;
|
|
86
|
+
if (isFirst && isClosing)
|
|
87
|
+
branch = "─";
|
|
88
|
+
else if (isFirst)
|
|
89
|
+
branch = "╭";
|
|
90
|
+
else if (isClosing)
|
|
91
|
+
branch = "╰";
|
|
92
|
+
else
|
|
93
|
+
branch = "│";
|
|
94
|
+
let prefix;
|
|
95
|
+
if (isFirst) {
|
|
96
|
+
prefix = tailPrefix();
|
|
97
|
+
currentTurnPrefixWidth = prefix.length;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
prefix = " ".repeat(currentTurnPrefixWidth);
|
|
101
|
+
}
|
|
102
|
+
firstLineOfTurn = false;
|
|
103
|
+
appendTail(`${prefix} ${branch} ${body}`, lineOpts?.warning ? { warning: true } : undefined);
|
|
104
|
+
};
|
|
105
|
+
if (beginHeader)
|
|
106
|
+
appendTail(`${tailPrefix()} ${beginHeader}`);
|
|
107
|
+
const onEvent = (event) => {
|
|
108
|
+
switch (event.type) {
|
|
109
|
+
case "turn_start": {
|
|
110
|
+
state.turn++;
|
|
111
|
+
state.lastTool = "";
|
|
112
|
+
toolsThisTurn = 0;
|
|
113
|
+
firstLineOfTurn = true;
|
|
114
|
+
registry.bumpTurn(sessionId);
|
|
115
|
+
tree.bumpNodeTurn(resolveNodeId());
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case "turn_end": {
|
|
119
|
+
const e = event;
|
|
120
|
+
const delta = readUsage(e.message);
|
|
121
|
+
state.cumUsage.input += delta.input;
|
|
122
|
+
state.cumUsage.output += delta.output;
|
|
123
|
+
state.cumUsage.cacheRead += delta.cacheRead;
|
|
124
|
+
registry.setPhaseUsage(sessionId, phaseRole, state.cumUsage);
|
|
125
|
+
const nodeId = resolveNodeId();
|
|
126
|
+
tree.setNodeUsage(nodeId, state.cumUsage);
|
|
127
|
+
// Capture which (provider, model) actually served this turn so
|
|
128
|
+
// the per-phase tail-view footer can display it. Cheap; the
|
|
129
|
+
// registry no-ops when the value hasn't changed.
|
|
130
|
+
const msg = e.message;
|
|
131
|
+
if (msg && (msg.provider || msg.model)) {
|
|
132
|
+
registry.setPhaseModel(sessionId, phaseRole, {
|
|
133
|
+
provider: msg.provider,
|
|
134
|
+
model: msg.model,
|
|
135
|
+
});
|
|
136
|
+
tree.setNodeModel(nodeId, msg.model ?? "", msg.provider ?? "");
|
|
137
|
+
}
|
|
138
|
+
const closingBodies = [];
|
|
139
|
+
const thinking = extractThinkingOneLiner(e.message);
|
|
140
|
+
if (thinking)
|
|
141
|
+
closingBodies.push(`✱ ${thinking}`);
|
|
142
|
+
const preview = extractTurnPreview(e.message);
|
|
143
|
+
if (preview) {
|
|
144
|
+
registry.setTurnPreview(sessionId, preview);
|
|
145
|
+
tree.setTurnPreview(nodeId, preview);
|
|
146
|
+
if (setStatusVerbose && verboseKeys?.messageKey) {
|
|
147
|
+
setStatusVerbose(verboseKeys.messageKey, ` "${preview}"`);
|
|
148
|
+
}
|
|
149
|
+
closingBodies.push(`» "${preview}"`);
|
|
150
|
+
}
|
|
151
|
+
if (toolsThisTurn > 1) {
|
|
152
|
+
closingBodies.push(`⇉ batched ${toolsThisTurn} tool calls in turn ${state.turn}`);
|
|
153
|
+
}
|
|
154
|
+
for (let i = 0; i < closingBodies.length; i++) {
|
|
155
|
+
const isLast = i === closingBodies.length - 1;
|
|
156
|
+
emitTurnLine(closingBodies[i], { closing: isLast });
|
|
157
|
+
}
|
|
158
|
+
// Bubble one consolidated event up to the registry so the
|
|
159
|
+
// top-level viewport can surface activity from any subagent
|
|
160
|
+
// with subagent-identified attribution.
|
|
161
|
+
registry.recordTurnEvent({
|
|
162
|
+
sessionId,
|
|
163
|
+
phaseRole,
|
|
164
|
+
displayRole: role,
|
|
165
|
+
turn: state.turn,
|
|
166
|
+
preview: preview ?? "",
|
|
167
|
+
thinking: thinking ?? "",
|
|
168
|
+
deltaUsage: { ...delta },
|
|
169
|
+
cumUsage: { ...state.cumUsage },
|
|
170
|
+
timestamp: Date.now(),
|
|
171
|
+
});
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
case "tool_execution_start": {
|
|
175
|
+
const e = event;
|
|
176
|
+
state.toolCount++;
|
|
177
|
+
toolsThisTurn++;
|
|
178
|
+
argsByCallId.set(e.toolCallId, e.args);
|
|
179
|
+
const hint = fmtArgHint(e.toolName, e.args);
|
|
180
|
+
const { glyph, risky } = toolGlyph(e.toolName, e.args);
|
|
181
|
+
state.lastTool = `${e.toolName}${hint ? ` ${hint}` : ""}`;
|
|
182
|
+
writeDebug?.({
|
|
183
|
+
kind: "tool_start",
|
|
184
|
+
toolName: e.toolName,
|
|
185
|
+
toolCallId: e.toolCallId,
|
|
186
|
+
args: e.args,
|
|
187
|
+
});
|
|
188
|
+
registry.recordToolStart(sessionId, e.toolCallId, e.toolName, e.args);
|
|
189
|
+
tree.incrementNodeToolCount(resolveNodeId());
|
|
190
|
+
const riskPrefix = risky ? `${RISKY_TAG} ` : "";
|
|
191
|
+
emitTurnLine(`${riskPrefix}${glyph} ${e.toolName}${hint ? ` ${hint}` : ""}`, risky ? { warning: true } : undefined);
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
case "tool_execution_end": {
|
|
195
|
+
const e = event;
|
|
196
|
+
argsByCallId.delete(e.toolCallId);
|
|
197
|
+
writeDebug?.({
|
|
198
|
+
kind: "tool_end",
|
|
199
|
+
toolName: e.toolName,
|
|
200
|
+
toolCallId: e.toolCallId,
|
|
201
|
+
isError: e.isError,
|
|
202
|
+
result: e.result,
|
|
203
|
+
});
|
|
204
|
+
registry.recordToolEnd(sessionId, e.toolCallId, e.toolName, e.isError, e.result);
|
|
205
|
+
const nodeId = resolveNodeId();
|
|
206
|
+
if (e.isError) {
|
|
207
|
+
state.errCount++;
|
|
208
|
+
tree.incrementNodeErrCount(nodeId);
|
|
209
|
+
emitTurnLine(`⚠ ${e.toolName} failed: ${extractErrorSummary(e.result)}`, { warning: true });
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
const shape = resultShape(e.toolName, e.result);
|
|
213
|
+
const comp = extractCompression(e.result);
|
|
214
|
+
const compHint = comp ? ` ⇌${comp.saved}%` : "";
|
|
215
|
+
emitTurnLine(`← ${e.toolName} ok${shape ? ` ${shape}` : ""}${compHint}`);
|
|
216
|
+
if (comp) {
|
|
217
|
+
state.cumCompression.calls++;
|
|
218
|
+
state.cumCompression.tokensSaved += comp.before - comp.after;
|
|
219
|
+
registry.setPhaseCompression(sessionId, phaseRole, state.cumCompression);
|
|
220
|
+
tree.setNodeCompression(nodeId, state.cumCompression);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
case "compaction_start": {
|
|
226
|
+
const e = event;
|
|
227
|
+
notify?.(`◌ ${role}: context compacting (${e.reason})…`, "info");
|
|
228
|
+
appendTail(`${tailPrefix()} ◌ compacting (${e.reason})`);
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
case "auto_retry_start": {
|
|
232
|
+
const e = event;
|
|
233
|
+
const err = e.errorMessage ?? "";
|
|
234
|
+
notify?.(`↻ ${role}: model retry ${e.attempt}/${e.maxAttempts}${err ? `\n${err}` : ""}`, "warning");
|
|
235
|
+
appendTail(`${tailPrefix()} ↻ retry ${e.attempt}/${e.maxAttempts}${err ? `: ${extractErrorSummary(err)}` : ""}`, { warning: true });
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
afterEach?.();
|
|
240
|
+
};
|
|
241
|
+
return { onEvent, state };
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=viewport-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewport-events.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/viewport-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { AgentMessage } from "@earendil-works/pi-agent-core";
|
|
2
|
+
export declare const RISKY_TAG = "\uD83D\uDD12";
|
|
3
|
+
export interface GlyphInfo {
|
|
4
|
+
glyph: string;
|
|
5
|
+
risky: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function toolGlyph(toolName: string, args: unknown): GlyphInfo;
|
|
8
|
+
export declare function argHint(toolName: string, args: unknown, maxLen?: number): string;
|
|
9
|
+
/**
|
|
10
|
+
* Truncate at a whitespace boundary when possible so we don't slice mid-token
|
|
11
|
+
* (e.g. `FORGE_ROOT=$(node -e` cut at the open paren). Appends `…(+Nc)` so the
|
|
12
|
+
* user knows there's more.
|
|
13
|
+
*/
|
|
14
|
+
export declare function truncateAtBoundary(s: string, max: number): string;
|
|
15
|
+
/**
|
|
16
|
+
* Extract a small "shape" hint from a tool result so users see `read ok 247L`
|
|
17
|
+
* instead of `read ok`. Defensive: result shapes vary across tools and providers.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resultShape(_toolName: string, result: unknown): string;
|
|
20
|
+
/**
|
|
21
|
+
* Pull the first sentence (or first 100 chars) from any `thinking` block on an
|
|
22
|
+
* assistant message. Returns `undefined` if no thinking content present.
|
|
23
|
+
*/
|
|
24
|
+
export declare function extractThinkingOneLiner(message: AgentMessage | undefined): string | undefined;
|
|
25
|
+
export interface UsageDelta {
|
|
26
|
+
input: number;
|
|
27
|
+
output: number;
|
|
28
|
+
cacheRead: number;
|
|
29
|
+
}
|
|
30
|
+
/** Extract usage from an assistant message; returns zeros if missing. */
|
|
31
|
+
export declare function readUsage(message: AgentMessage | undefined): UsageDelta;
|
|
32
|
+
/**
|
|
33
|
+
* Extract the last assistant-authored text from a turn_end message and
|
|
34
|
+
* collapse to a single-line preview (max 120 chars). Returns "" if the
|
|
35
|
+
* message has no text content (e.g. all-tool-call turn).
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractTurnPreview(message: unknown): string;
|
|
38
|
+
export declare function fmtTokenMeter(u: UsageDelta): string;
|
|
39
|
+
/** Format a one-shot phase-completion line for the tail buffer. */
|
|
40
|
+
export declare function fmtPhaseSummary(opts: {
|
|
41
|
+
role: string;
|
|
42
|
+
turns: number;
|
|
43
|
+
tools: number;
|
|
44
|
+
errors: number;
|
|
45
|
+
wallSeconds: number;
|
|
46
|
+
usage: UsageDelta;
|
|
47
|
+
model?: string;
|
|
48
|
+
provider?: string;
|
|
49
|
+
compression?: {
|
|
50
|
+
calls: number;
|
|
51
|
+
tokensSaved: number;
|
|
52
|
+
};
|
|
53
|
+
}): string;
|
|
54
|
+
/**
|
|
55
|
+
* Build the sticky footer line shown at the bottom of the tail view.
|
|
56
|
+
* Includes cacheRead only when nonzero — most non-Anthropic providers (ollama,
|
|
57
|
+
* glm, etc.) return 0 for cache fields and we don't want the noise.
|
|
58
|
+
*/
|
|
59
|
+
export declare function fmtTokenFooter(usage: UsageDelta | undefined, compression?: {
|
|
60
|
+
calls: number;
|
|
61
|
+
tokensSaved: number;
|
|
62
|
+
}): string;
|
|
63
|
+
/**
|
|
64
|
+
* Compact `(provider) model` label used to annotate token footers so users
|
|
65
|
+
* can see which model a phase ran with. Returns "" when neither field is
|
|
66
|
+
* populated.
|
|
67
|
+
*/
|
|
68
|
+
export declare function fmtModelLabel(info: {
|
|
69
|
+
provider?: string;
|
|
70
|
+
model?: string;
|
|
71
|
+
} | undefined): string;
|
|
72
|
+
/**
|
|
73
|
+
* Combine a model label with a token footer, separated by ` · `. Either
|
|
74
|
+
* half may be empty — the separator is only inserted when both halves are
|
|
75
|
+
* present. Returns "" when both are empty.
|
|
76
|
+
*/
|
|
77
|
+
export declare function fmtModelAndTokenFooter(info: {
|
|
78
|
+
provider?: string;
|
|
79
|
+
model?: string;
|
|
80
|
+
} | undefined, usage: UsageDelta | undefined, compression?: {
|
|
81
|
+
calls: number;
|
|
82
|
+
tokensSaved: number;
|
|
83
|
+
}): string;
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
// viewport-renderer.ts
|
|
2
|
+
//
|
|
3
|
+
// Pure-string helpers for the subagent viewport tail buffer.
|
|
4
|
+
// Centralises glyph selection, arg/result shape extraction, thinking one-liners,
|
|
5
|
+
// and running-usage formatting so run-task / run-sprint / fix-bug can share
|
|
6
|
+
// rendering without diverging.
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
/** Per-tool glyph. Falls back to a generic arrow when unknown. */
|
|
9
|
+
const TOOL_GLYPHS = {
|
|
10
|
+
bash: "$",
|
|
11
|
+
read: "⌕",
|
|
12
|
+
write: "✎",
|
|
13
|
+
edit: "✎",
|
|
14
|
+
glob: "⌕",
|
|
15
|
+
grep: "⌕",
|
|
16
|
+
notebookedit: "✎",
|
|
17
|
+
};
|
|
18
|
+
/** Bash patterns we want users to see flagged even when auto-approved. */
|
|
19
|
+
const RISKY_BASH = /\b(rm\s+-rf|git\s+push\s+--force|chmod\s+777|sudo\s|curl\s+[^|]*\|\s*sh\b|npm\s+publish\b)/;
|
|
20
|
+
export const RISKY_TAG = "🔒";
|
|
21
|
+
export function toolGlyph(toolName, args) {
|
|
22
|
+
const a = (args && typeof args === "object" ? args : {});
|
|
23
|
+
const lower = toolName.toLowerCase();
|
|
24
|
+
let glyph = TOOL_GLYPHS[lower];
|
|
25
|
+
if (!glyph) {
|
|
26
|
+
if (/store[-_]?cli|forge[-_]?store/i.test(toolName))
|
|
27
|
+
glyph = "⚙";
|
|
28
|
+
else
|
|
29
|
+
glyph = "→";
|
|
30
|
+
}
|
|
31
|
+
let risky = false;
|
|
32
|
+
if (lower === "bash" && typeof a.command === "string" && RISKY_BASH.test(a.command)) {
|
|
33
|
+
risky = true;
|
|
34
|
+
}
|
|
35
|
+
return { glyph, risky };
|
|
36
|
+
}
|
|
37
|
+
export function argHint(toolName, args, maxLen = 60) {
|
|
38
|
+
if (!args || typeof args !== "object")
|
|
39
|
+
return "";
|
|
40
|
+
const a = args;
|
|
41
|
+
const fp = (a.file_path ?? a.path);
|
|
42
|
+
if (typeof fp === "string")
|
|
43
|
+
return path.basename(fp);
|
|
44
|
+
if (typeof a.command === "string")
|
|
45
|
+
return truncateAtBoundary(a.command, maxLen);
|
|
46
|
+
if (typeof a.pattern === "string")
|
|
47
|
+
return truncateAtBoundary(a.pattern, maxLen);
|
|
48
|
+
if (typeof a.query === "string")
|
|
49
|
+
return truncateAtBoundary(a.query, maxLen);
|
|
50
|
+
return "";
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Truncate at a whitespace boundary when possible so we don't slice mid-token
|
|
54
|
+
* (e.g. `FORGE_ROOT=$(node -e` cut at the open paren). Appends `…(+Nc)` so the
|
|
55
|
+
* user knows there's more.
|
|
56
|
+
*/
|
|
57
|
+
export function truncateAtBoundary(s, max) {
|
|
58
|
+
if (s.length <= max)
|
|
59
|
+
return s;
|
|
60
|
+
const head = s.slice(0, max);
|
|
61
|
+
const lastSpace = head.lastIndexOf(" ");
|
|
62
|
+
const cut = lastSpace > Math.floor(max * 0.6) ? lastSpace : max;
|
|
63
|
+
const extra = s.length - cut;
|
|
64
|
+
// Strip trailing whitespace before the ellipsis so the body is visually
|
|
65
|
+
// clean and downstream string checks (`endsWith` / regex) behave predictably.
|
|
66
|
+
return `${s.slice(0, cut).replace(/\s+$/, "")}…(+${extra}c)`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Extract a small "shape" hint from a tool result so users see `read ok 247L`
|
|
70
|
+
* instead of `read ok`. Defensive: result shapes vary across tools and providers.
|
|
71
|
+
*/
|
|
72
|
+
export function resultShape(_toolName, result) {
|
|
73
|
+
try {
|
|
74
|
+
if (typeof result === "string") {
|
|
75
|
+
if (result.length === 0)
|
|
76
|
+
return "empty";
|
|
77
|
+
const lines = result.split(/\r?\n/).length;
|
|
78
|
+
return lines > 1 ? `${lines}L` : `${result.length}c`;
|
|
79
|
+
}
|
|
80
|
+
if (result && typeof result === "object") {
|
|
81
|
+
const r = result;
|
|
82
|
+
if (typeof r.stdout === "string") {
|
|
83
|
+
const out = r.stdout;
|
|
84
|
+
if (out.length === 0)
|
|
85
|
+
return "empty";
|
|
86
|
+
const lines = out.split(/\r?\n/).length;
|
|
87
|
+
return `${lines}L`;
|
|
88
|
+
}
|
|
89
|
+
if (typeof r.content === "string") {
|
|
90
|
+
const lines = r.content.split(/\r?\n/).length;
|
|
91
|
+
return `${lines}L`;
|
|
92
|
+
}
|
|
93
|
+
if (Array.isArray(r.content)) {
|
|
94
|
+
let total = 0;
|
|
95
|
+
for (const item of r.content) {
|
|
96
|
+
const t = item?.text;
|
|
97
|
+
if (typeof t === "string")
|
|
98
|
+
total += t.split(/\r?\n/).length;
|
|
99
|
+
}
|
|
100
|
+
if (total > 0)
|
|
101
|
+
return `${total}L`;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// fall through to no hint
|
|
107
|
+
}
|
|
108
|
+
return "";
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Pull the first sentence (or first 100 chars) from any `thinking` block on an
|
|
112
|
+
* assistant message. Returns `undefined` if no thinking content present.
|
|
113
|
+
*/
|
|
114
|
+
export function extractThinkingOneLiner(message) {
|
|
115
|
+
if (!message || message.role !== "assistant")
|
|
116
|
+
return undefined;
|
|
117
|
+
const content = message.content;
|
|
118
|
+
if (!Array.isArray(content))
|
|
119
|
+
return undefined;
|
|
120
|
+
for (const block of content) {
|
|
121
|
+
const b = block;
|
|
122
|
+
if (b?.type !== "thinking" || typeof b.thinking !== "string")
|
|
123
|
+
continue;
|
|
124
|
+
const text = b.thinking.trim();
|
|
125
|
+
if (!text)
|
|
126
|
+
continue;
|
|
127
|
+
const m = text.match(/^[^\n.!?]+/);
|
|
128
|
+
const first = (m ? m[0] : text).trim();
|
|
129
|
+
return first.length > 100 ? `${first.slice(0, 100)}…` : first;
|
|
130
|
+
}
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
/** Extract usage from an assistant message; returns zeros if missing. */
|
|
134
|
+
export function readUsage(message) {
|
|
135
|
+
const u = message?.usage;
|
|
136
|
+
return {
|
|
137
|
+
input: u?.input ?? 0,
|
|
138
|
+
output: u?.output ?? 0,
|
|
139
|
+
cacheRead: u?.cacheRead ?? 0,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Extract the last assistant-authored text from a turn_end message and
|
|
144
|
+
* collapse to a single-line preview (max 120 chars). Returns "" if the
|
|
145
|
+
* message has no text content (e.g. all-tool-call turn).
|
|
146
|
+
*/
|
|
147
|
+
export function extractTurnPreview(message) {
|
|
148
|
+
if (!message || typeof message !== "object")
|
|
149
|
+
return "";
|
|
150
|
+
const msg = message;
|
|
151
|
+
if (msg.role !== "assistant")
|
|
152
|
+
return "";
|
|
153
|
+
const content = msg.content;
|
|
154
|
+
if (!Array.isArray(content))
|
|
155
|
+
return "";
|
|
156
|
+
for (const c of content) {
|
|
157
|
+
if (!c || typeof c !== "object")
|
|
158
|
+
continue;
|
|
159
|
+
const part = c;
|
|
160
|
+
if (part.type === "text" && typeof part.text === "string" && part.text.trim()) {
|
|
161
|
+
const flat = part.text.replace(/\s+/g, " ").trim();
|
|
162
|
+
return flat.length > 120 ? `${flat.slice(0, 117)}…` : flat;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return "";
|
|
166
|
+
}
|
|
167
|
+
export function fmtTokenMeter(u) {
|
|
168
|
+
return `↑${humanTokens(u.input)}↓${humanTokens(u.output)}`;
|
|
169
|
+
}
|
|
170
|
+
function humanTokens(n) {
|
|
171
|
+
if (n < 1000)
|
|
172
|
+
return String(n);
|
|
173
|
+
if (n < 10_000)
|
|
174
|
+
return `${(n / 1000).toFixed(1)}k`;
|
|
175
|
+
if (n < 1_000_000)
|
|
176
|
+
return `${Math.round(n / 1000)}k`;
|
|
177
|
+
return `${(n / 1_000_000).toFixed(2)}M`;
|
|
178
|
+
}
|
|
179
|
+
/** Format a one-shot phase-completion line for the tail buffer. */
|
|
180
|
+
export function fmtPhaseSummary(opts) {
|
|
181
|
+
const { role, turns, tools, errors, wallSeconds, usage, model, provider, compression } = opts;
|
|
182
|
+
const errPart = errors > 0 ? ` err=${errors}` : "";
|
|
183
|
+
const modelPart = model ? ` model=${model}${provider ? `/${provider}` : ""}` : "";
|
|
184
|
+
const compPart = compression && compression.tokensSaved > 0 ? ` ⇌${humanTokens(compression.tokensSaved)}` : "";
|
|
185
|
+
return `▣ ${role}: turns=${turns} tools=${tools}${errPart} ${fmtTokenMeter(usage)}${compPart} wall=${fmtWall(wallSeconds)}${modelPart}`;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Build the sticky footer line shown at the bottom of the tail view.
|
|
189
|
+
* Includes cacheRead only when nonzero — most non-Anthropic providers (ollama,
|
|
190
|
+
* glm, etc.) return 0 for cache fields and we don't want the noise.
|
|
191
|
+
*/
|
|
192
|
+
export function fmtTokenFooter(usage, compression) {
|
|
193
|
+
if (!usage)
|
|
194
|
+
return "";
|
|
195
|
+
const cache = usage.cacheRead > 0 ? ` ⇪${humanTokens(usage.cacheRead)}` : "";
|
|
196
|
+
const comp = compression && compression.tokensSaved > 0 ? ` ⇌${humanTokens(compression.tokensSaved)}` : "";
|
|
197
|
+
return `↑${humanTokens(usage.input)} ↓${humanTokens(usage.output)}${cache}${comp}`;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Compact `(provider) model` label used to annotate token footers so users
|
|
201
|
+
* can see which model a phase ran with. Returns "" when neither field is
|
|
202
|
+
* populated.
|
|
203
|
+
*/
|
|
204
|
+
export function fmtModelLabel(info) {
|
|
205
|
+
if (!info)
|
|
206
|
+
return "";
|
|
207
|
+
const { provider, model } = info;
|
|
208
|
+
if (!provider && !model)
|
|
209
|
+
return "";
|
|
210
|
+
if (provider && model)
|
|
211
|
+
return `(${provider}) ${model}`;
|
|
212
|
+
return provider ?? model ?? "";
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Combine a model label with a token footer, separated by ` · `. Either
|
|
216
|
+
* half may be empty — the separator is only inserted when both halves are
|
|
217
|
+
* present. Returns "" when both are empty.
|
|
218
|
+
*/
|
|
219
|
+
export function fmtModelAndTokenFooter(info, usage, compression) {
|
|
220
|
+
const left = fmtModelLabel(info);
|
|
221
|
+
const right = fmtTokenFooter(usage, compression);
|
|
222
|
+
if (left && right)
|
|
223
|
+
return `${left} · ${right}`;
|
|
224
|
+
return left || right;
|
|
225
|
+
}
|
|
226
|
+
function fmtWall(seconds) {
|
|
227
|
+
if (seconds < 60)
|
|
228
|
+
return `${seconds}s`;
|
|
229
|
+
const m = Math.floor(seconds / 60);
|
|
230
|
+
const s = seconds % 60;
|
|
231
|
+
return `${m}m${String(s).padStart(2, "0")}s`;
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=viewport-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewport-renderer.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/viewport-renderer.ts"],"names":[],"mappings":"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"}
|