@entelligentsia/forgecli 1.0.20 → 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 +43 -0
- package/README.md +7 -1
- 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-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 +13 -2
- package/dist/extensions/forgecli/context-governor-compaction.js +66 -41
- package/dist/extensions/forgecli/context-governor-compaction.js.map +1 -1
- package/dist/extensions/forgecli/context-governor.d.ts +3 -7
- package/dist/extensions/forgecli/context-governor.js +43 -69
- package/dist/extensions/forgecli/context-governor.js.map +1 -1
- package/dist/extensions/forgecli/dashboard/component.d.ts +10 -1
- package/dist/extensions/forgecli/dashboard/component.js +84 -18
- package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
- package/dist/extensions/forgecli/dashboard/register.js +1 -1
- package/dist/extensions/forgecli/dashboard/register.js.map +1 -1
- package/dist/extensions/forgecli/forge-artifact-tool.js +1 -1
- 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 +22 -0
- package/dist/extensions/forgecli/forge-subagent.js +42 -15
- 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 +6 -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.js +2 -2
- 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 +37 -35
- 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/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-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/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/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/package.json +4 -2
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
// What's-New strip + detail widget.
|
|
2
|
+
//
|
|
3
|
+
// Startup behavior (post-FORGE-BUG-001 refactor): on session_start we emit
|
|
4
|
+
// a one-line passive notify pointing the user at `/changelog` — we do NOT
|
|
5
|
+
// auto-mount the interactive strip and we do NOT hook the input router.
|
|
6
|
+
// The strip used to live below the editor for the entire session and steal
|
|
7
|
+
// every ↓ key; users hated it.
|
|
8
|
+
//
|
|
9
|
+
// The interactive strip is now ONLY mounted in response to `/changelog`.
|
|
10
|
+
// UX once mounted:
|
|
11
|
+
//
|
|
12
|
+
// INACTIVE (default): "what's new ─ pi 30 · forge-plugin 8 · forge-cli 2 ↓ to view"
|
|
13
|
+
// ACTIVE (↓): "what's new ─ ▸● pi 30 ○ forge-plugin 8 ○ forge-cli 2 ←→ · enter · esc hide · d forget"
|
|
14
|
+
//
|
|
15
|
+
// Enter on a chip → setOutputSource(WhatsNewDetailComponent).
|
|
16
|
+
// Esc → soft hide for this session (unmounts widget, drops input handler;
|
|
17
|
+
// /changelog cache is untouched, so /changelog still replays).
|
|
18
|
+
// d → permanent forget (collapses prev baseline so /changelog returns
|
|
19
|
+
// "no recent updates" until the next version bump).
|
|
20
|
+
//
|
|
21
|
+
// Activation key (↓) requires an empty editor (no text at all), not just
|
|
22
|
+
// "no newlines" — single-line text used to be enough and that was too
|
|
23
|
+
// eager.
|
|
24
|
+
//
|
|
25
|
+
// Mount is idempotent: a second /changelog while the strip is already
|
|
26
|
+
// mounted unregisters the prior input-router handler before re-registering,
|
|
27
|
+
// so handlers don't stack.
|
|
28
|
+
import { truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
|
|
29
|
+
import { getInputRouter } from "../tui/input-router.js";
|
|
30
|
+
import { getUserCacheDir } from "../paths/paths.js";
|
|
31
|
+
import { computeAndPersistStartupPanel, computeSummaries, computeWhatsNewView, dismissWhatsNew, readSeenState, renderComponentDetail, renderSummaryPanel, resolveChangelogPaths, } from "./whats-new.js";
|
|
32
|
+
const WIDGET_KEY = "forge:whats-new";
|
|
33
|
+
// ── Detail-view component: rendered into chat viewport on Enter ──────────
|
|
34
|
+
class WhatsNewDetailComponent {
|
|
35
|
+
lines;
|
|
36
|
+
invalidationCb;
|
|
37
|
+
constructor(lines) {
|
|
38
|
+
this.lines = lines;
|
|
39
|
+
}
|
|
40
|
+
render(width) {
|
|
41
|
+
return this.lines.map((l) => (visibleWidth(l) <= width ? l : truncateToWidth(l, width)));
|
|
42
|
+
}
|
|
43
|
+
invalidate() {
|
|
44
|
+
// Static content — re-render only when caller updates `lines`.
|
|
45
|
+
}
|
|
46
|
+
setInvalidationCallback(cb) {
|
|
47
|
+
this.invalidationCb = cb;
|
|
48
|
+
}
|
|
49
|
+
updateLines(lines) {
|
|
50
|
+
this.lines = lines;
|
|
51
|
+
this.invalidationCb?.();
|
|
52
|
+
}
|
|
53
|
+
dispose = () => { };
|
|
54
|
+
}
|
|
55
|
+
// ── Strip component: single row below the editor ─────────────────────────
|
|
56
|
+
class WhatsNewStripComponent {
|
|
57
|
+
summaries;
|
|
58
|
+
theme;
|
|
59
|
+
cursorIdx = 0;
|
|
60
|
+
stripActive = false;
|
|
61
|
+
/** Component currently focused into the chat viewport. */
|
|
62
|
+
focusedComponent = null;
|
|
63
|
+
invalidationCb;
|
|
64
|
+
constructor(summaries, theme) {
|
|
65
|
+
this.summaries = summaries;
|
|
66
|
+
this.theme = theme;
|
|
67
|
+
}
|
|
68
|
+
setInvalidationCallback(cb) {
|
|
69
|
+
this.invalidationCb = cb;
|
|
70
|
+
}
|
|
71
|
+
invalidate() {
|
|
72
|
+
// Re-render driven by caller via invalidationCb → tui.requestRender().
|
|
73
|
+
}
|
|
74
|
+
hasContent() {
|
|
75
|
+
return this.summaries.length > 0;
|
|
76
|
+
}
|
|
77
|
+
getStripActive() {
|
|
78
|
+
return this.stripActive;
|
|
79
|
+
}
|
|
80
|
+
cursorSummary() {
|
|
81
|
+
return this.summaries[this.cursorIdx];
|
|
82
|
+
}
|
|
83
|
+
setStripActive(active) {
|
|
84
|
+
if (this.stripActive === active)
|
|
85
|
+
return;
|
|
86
|
+
this.stripActive = active;
|
|
87
|
+
this.invalidationCb?.();
|
|
88
|
+
}
|
|
89
|
+
moveCursor(delta) {
|
|
90
|
+
if (this.summaries.length === 0)
|
|
91
|
+
return;
|
|
92
|
+
this.cursorIdx = Math.max(0, Math.min(this.summaries.length - 1, this.cursorIdx + delta));
|
|
93
|
+
this.invalidationCb?.();
|
|
94
|
+
}
|
|
95
|
+
setFocused(id) {
|
|
96
|
+
this.focusedComponent = id;
|
|
97
|
+
this.invalidationCb?.();
|
|
98
|
+
}
|
|
99
|
+
clearSummaries() {
|
|
100
|
+
this.summaries = [];
|
|
101
|
+
this.focusedComponent = null;
|
|
102
|
+
this.invalidationCb?.();
|
|
103
|
+
}
|
|
104
|
+
render(width) {
|
|
105
|
+
if (!this.hasContent())
|
|
106
|
+
return [];
|
|
107
|
+
const dim = (s) => this.theme.fg("dim", s);
|
|
108
|
+
const accent = (s) => this.theme.fg("accent", s);
|
|
109
|
+
const bold = (s) => this.theme.bold(s);
|
|
110
|
+
const prefix = this.stripActive ? accent("what's new ─ ") : dim("what's new ─ ");
|
|
111
|
+
const hint = this.stripActive ? dim(" ←→ · enter · esc hide · d forget") : dim(" ↓ to view (empty editor)");
|
|
112
|
+
const parts = this.summaries.map((s, i) => {
|
|
113
|
+
const focusedGlyph = this.focusedComponent === s.component ? "●" : "○";
|
|
114
|
+
const inner = `${focusedGlyph} ${s.label} ${s.totalChanges}`;
|
|
115
|
+
if (this.stripActive && i === this.cursorIdx)
|
|
116
|
+
return accent(bold(`▸${inner}`));
|
|
117
|
+
return dim(inner);
|
|
118
|
+
});
|
|
119
|
+
const chips = parts.join(" ");
|
|
120
|
+
let line = `${prefix}${chips}${hint}`;
|
|
121
|
+
if (visibleWidth(line) > width)
|
|
122
|
+
line = truncateToWidth(line, width);
|
|
123
|
+
return [line];
|
|
124
|
+
}
|
|
125
|
+
dispose = () => { };
|
|
126
|
+
}
|
|
127
|
+
// ── Key recognition (mirrors thread-switcher.ts) ─────────────────────────
|
|
128
|
+
function isLeftArrow(d) {
|
|
129
|
+
return d === "\x1b[D";
|
|
130
|
+
}
|
|
131
|
+
function isRightArrow(d) {
|
|
132
|
+
return d === "\x1b[C";
|
|
133
|
+
}
|
|
134
|
+
function isDownArrow(d) {
|
|
135
|
+
return d === "\x1b[B" || d === "\x1bOB";
|
|
136
|
+
}
|
|
137
|
+
function isUpArrow(d) {
|
|
138
|
+
return d === "\x1b[A" || d === "\x1bOA";
|
|
139
|
+
}
|
|
140
|
+
function isEnter(d) {
|
|
141
|
+
return d === "\r" || d === "\n";
|
|
142
|
+
}
|
|
143
|
+
function isEsc(d) {
|
|
144
|
+
return d === "\x1b";
|
|
145
|
+
}
|
|
146
|
+
// ── Mount ────────────────────────────────────────────────────────────────
|
|
147
|
+
/**
|
|
148
|
+
* Compute startup summaries and, if any, emit a one-line passive notify
|
|
149
|
+
* pointing the user at `/changelog`. Marks versions as seen via the
|
|
150
|
+
* standard cache so subsequent sessions won't re-notify unless a new bump
|
|
151
|
+
* occurs. Returns true when a notify was emitted.
|
|
152
|
+
*
|
|
153
|
+
* Pre-FORGE-BUG-001 this mounted the interactive strip directly; that was
|
|
154
|
+
* removed because the strip captured the ↓ key for the whole session and
|
|
155
|
+
* the auto-mount happened before the user had any chance to opt in.
|
|
156
|
+
*/
|
|
157
|
+
export async function mountWhatsNewWidgetOnStartup(_pi, ctx, rt) {
|
|
158
|
+
const result = await computeAndPersistStartupPanel(rt);
|
|
159
|
+
if (!result || result.summaries.length === 0)
|
|
160
|
+
return false;
|
|
161
|
+
const parts = result.summaries.map((s) => `${s.label} ${s.totalChanges}`).join(" · ");
|
|
162
|
+
try {
|
|
163
|
+
ctx.ui.notify(`forge: what's new — ${parts}. Type /changelog to view.`, "info");
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
/* stale ctx — non-fatal */
|
|
167
|
+
}
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Module-level mount state — used to make `mountStripWithSummaries`
|
|
172
|
+
* idempotent. Calling /changelog twice used to stack input-router
|
|
173
|
+
* handlers; we now tear down the previous mount first.
|
|
174
|
+
*/
|
|
175
|
+
let currentUnregister = null;
|
|
176
|
+
/**
|
|
177
|
+
* Mount the strip with a pre-computed summary list. Idempotent — a second
|
|
178
|
+
* call unregisters the prior handler and replaces the widget surface.
|
|
179
|
+
* Only `/changelog` calls this; startup notify does not.
|
|
180
|
+
*/
|
|
181
|
+
export function mountStripWithSummaries(_pi, ctx, rt, summaries) {
|
|
182
|
+
let stripRef;
|
|
183
|
+
let tuiRef;
|
|
184
|
+
let detailRef;
|
|
185
|
+
// FORGE-BUG-001: the captured ExtensionContext goes stale after pi's
|
|
186
|
+
// session replacement events. Touching ctx.ui after that throws.
|
|
187
|
+
const safeUi = (fn) => {
|
|
188
|
+
try {
|
|
189
|
+
return fn();
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
// Idempotency: drop any prior input-router handler before re-registering.
|
|
196
|
+
if (currentUnregister) {
|
|
197
|
+
try {
|
|
198
|
+
currentUnregister();
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
/* ignore */
|
|
202
|
+
}
|
|
203
|
+
currentUnregister = null;
|
|
204
|
+
}
|
|
205
|
+
try {
|
|
206
|
+
ctx.ui.setWidget(WIDGET_KEY, (tui, theme) => {
|
|
207
|
+
tuiRef = tui;
|
|
208
|
+
const strip = new WhatsNewStripComponent(summaries, theme);
|
|
209
|
+
strip.setInvalidationCallback(() => tui.requestRender());
|
|
210
|
+
stripRef = strip;
|
|
211
|
+
return strip;
|
|
212
|
+
}, { placement: "belowEditor" });
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
if (process.env.FORGE_DEBUG_WHATS_NEW === "1") {
|
|
216
|
+
console.error("[forge-cli whats-new] setWidget failed:", err);
|
|
217
|
+
}
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const setFocusToMain = () => {
|
|
221
|
+
stripRef?.setFocused(null);
|
|
222
|
+
detailRef?.dispose?.();
|
|
223
|
+
detailRef = undefined;
|
|
224
|
+
safeUi(() => ctx.ui.setOutputSource(null));
|
|
225
|
+
};
|
|
226
|
+
const commitFocus = () => {
|
|
227
|
+
if (!stripRef)
|
|
228
|
+
return;
|
|
229
|
+
const summary = stripRef.cursorSummary();
|
|
230
|
+
if (!summary)
|
|
231
|
+
return;
|
|
232
|
+
stripRef.setFocused(summary.component);
|
|
233
|
+
const lines = renderComponentDetail(summary).split("\n");
|
|
234
|
+
if (detailRef) {
|
|
235
|
+
detailRef.updateLines(lines);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
detailRef = new WhatsNewDetailComponent(lines);
|
|
239
|
+
if (tuiRef)
|
|
240
|
+
detailRef.setInvalidationCallback(() => tuiRef?.requestRender());
|
|
241
|
+
}
|
|
242
|
+
if (detailRef)
|
|
243
|
+
safeUi(() => ctx.ui.setOutputSource(detailRef));
|
|
244
|
+
};
|
|
245
|
+
// Tear down the entire mount — used by Esc (hide for this session) and
|
|
246
|
+
// by `d` (permanent forget). Both unmount the widget surface and drop
|
|
247
|
+
// the input-router handler so ↓ stops being captured. The difference is
|
|
248
|
+
// whether dismissWhatsNew() is invoked to collapse the prev baseline.
|
|
249
|
+
const tearDown = () => {
|
|
250
|
+
setFocusToMain();
|
|
251
|
+
safeUi(() => ctx.ui.setWidget(WIDGET_KEY, undefined));
|
|
252
|
+
stripRef?.clearSummaries();
|
|
253
|
+
stripRef = undefined;
|
|
254
|
+
if (currentUnregister) {
|
|
255
|
+
try {
|
|
256
|
+
currentUnregister();
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
/* ignore */
|
|
260
|
+
}
|
|
261
|
+
currentUnregister = null;
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
const unregister = getInputRouter().register((data) => {
|
|
265
|
+
if (!stripRef || !stripRef.hasContent())
|
|
266
|
+
return undefined;
|
|
267
|
+
if (!stripRef.getStripActive()) {
|
|
268
|
+
if (!isDownArrow(data))
|
|
269
|
+
return undefined;
|
|
270
|
+
const editorText = safeUi(() => ctx.ui.getEditorText());
|
|
271
|
+
if (editorText === undefined)
|
|
272
|
+
return undefined; // stale ctx
|
|
273
|
+
// Stricter than the legacy "no newlines" check — only an
|
|
274
|
+
// empty editor activates the strip. Any in-progress text
|
|
275
|
+
// (single-line included) means ↓ belongs to the editor.
|
|
276
|
+
if (editorText !== "")
|
|
277
|
+
return undefined;
|
|
278
|
+
stripRef.setStripActive(true);
|
|
279
|
+
return { consume: true };
|
|
280
|
+
}
|
|
281
|
+
if (isLeftArrow(data)) {
|
|
282
|
+
stripRef.moveCursor(-1);
|
|
283
|
+
return { consume: true };
|
|
284
|
+
}
|
|
285
|
+
if (isRightArrow(data)) {
|
|
286
|
+
stripRef.moveCursor(1);
|
|
287
|
+
return { consume: true };
|
|
288
|
+
}
|
|
289
|
+
if (isUpArrow(data)) {
|
|
290
|
+
stripRef.setStripActive(false);
|
|
291
|
+
return { consume: true };
|
|
292
|
+
}
|
|
293
|
+
if (isEnter(data)) {
|
|
294
|
+
commitFocus();
|
|
295
|
+
return { consume: true };
|
|
296
|
+
}
|
|
297
|
+
if (isEsc(data)) {
|
|
298
|
+
// Soft hide for this session — strip disappears, ↓ is
|
|
299
|
+
// released, but the cache is untouched so /changelog can
|
|
300
|
+
// re-summon the same set.
|
|
301
|
+
tearDown();
|
|
302
|
+
return { consume: true };
|
|
303
|
+
}
|
|
304
|
+
if (isForgetKey(data)) {
|
|
305
|
+
// Permanent forget — collapse prev baseline so /changelog
|
|
306
|
+
// returns "no recent updates" until the next version bump.
|
|
307
|
+
void dismissWhatsNew(rt).catch(() => undefined);
|
|
308
|
+
tearDown();
|
|
309
|
+
return { consume: true };
|
|
310
|
+
}
|
|
311
|
+
return undefined;
|
|
312
|
+
}, { name: "whats-new-strip", skipWhenOverlayActive: true });
|
|
313
|
+
currentUnregister = unregister;
|
|
314
|
+
}
|
|
315
|
+
function isForgetKey(d) {
|
|
316
|
+
return d === "d" || d === "D";
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Compute the summaries that should populate the strip when /whats-new is
|
|
320
|
+
* invoked: prev baseline first (post auto-dismiss), then lastShown frozen
|
|
321
|
+
* baseline (post explicit dismiss). Returns empty when neither yields a
|
|
322
|
+
* set — caller falls back to a notify message.
|
|
323
|
+
*/
|
|
324
|
+
async function computeReplaySummaries(rt) {
|
|
325
|
+
const cacheDir = rt.cacheDir ?? getUserCacheDir();
|
|
326
|
+
const seen = await readSeenState(cacheDir);
|
|
327
|
+
const sources = resolveChangelogPaths(rt.pkgRoot);
|
|
328
|
+
let s = computeSummaries({ sources, current: rt.current, seen, baseline: "prev" });
|
|
329
|
+
if (s.length === 0)
|
|
330
|
+
s = computeSummaries({ sources, current: rt.current, seen, baseline: "lastShown" });
|
|
331
|
+
return s;
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Register the /changelog slash command (overrides pi's built-in): re-mounts
|
|
335
|
+
* the interactive strip widget covering pi + forge-plugin + forge-cli changelogs.
|
|
336
|
+
* `/changelog dismiss` clears the replay baseline. Headless / non-TTY callers
|
|
337
|
+
* fall through to a text notify so the command is still usable.
|
|
338
|
+
*/
|
|
339
|
+
export function registerChangelogCommand(pi, rt) {
|
|
340
|
+
pi.registerCommand("changelog", {
|
|
341
|
+
description: "Show What's New across pi, forge-plugin, and forge-cli (or /changelog dismiss to clear)",
|
|
342
|
+
async handler(args, ctx) {
|
|
343
|
+
const arg = args.trim().toLowerCase();
|
|
344
|
+
try {
|
|
345
|
+
if (arg === "dismiss" || arg === "--dismiss") {
|
|
346
|
+
await dismissWhatsNew(rt);
|
|
347
|
+
ctx.ui.notify("changelog: dismissed.", "info");
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
const summaries = await computeReplaySummaries(rt);
|
|
351
|
+
if (summaries.length === 0) {
|
|
352
|
+
ctx.ui.notify("changelog: no recent updates.", "info");
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
if (!ctx.hasUI) {
|
|
356
|
+
// Headless / RPC mode — widget surface unavailable; dump text.
|
|
357
|
+
const view = await computeWhatsNewView(rt, arg.length > 0 ? arg : null);
|
|
358
|
+
ctx.ui.notify(view, "info");
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
// Echo the overall summary into the main chat container so
|
|
362
|
+
// users have a record of the change counts, then mount the
|
|
363
|
+
// strip below the editor for arrow-key drill-down.
|
|
364
|
+
ctx.ui.notify(`${renderSummaryPanel(summaries)}\n\n(Strip is below the editor — ↓ on an empty prompt to activate, ←→ to navigate, Enter to expand, Esc to hide, d to forget.)`, "info");
|
|
365
|
+
mountStripWithSummaries(pi, ctx, rt, summaries);
|
|
366
|
+
}
|
|
367
|
+
catch (err) {
|
|
368
|
+
if (process.env.FORGE_DEBUG_WHATS_NEW === "1") {
|
|
369
|
+
console.error("[forge-cli changelog] handler failed:", err);
|
|
370
|
+
}
|
|
371
|
+
ctx.ui.notify("changelog: failed to render — set FORGE_DEBUG_WHATS_NEW=1 for details.", "warning");
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
//# sourceMappingURL=whats-new-widget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whats-new-widget.js","sourceRoot":"","sources":["../../../../src/extensions/forgecli/update/whats-new-widget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
export type ComponentId = "pi" | "forge-plugin" | "forge-cli";
|
|
2
|
+
export interface SeenState {
|
|
3
|
+
pi: string | null;
|
|
4
|
+
forgePlugin: string | null;
|
|
5
|
+
forgeCli: string | null;
|
|
6
|
+
prevPi: string | null;
|
|
7
|
+
prevForgePlugin: string | null;
|
|
8
|
+
prevForgeCli: string | null;
|
|
9
|
+
lastShownFromPi: string | null;
|
|
10
|
+
lastShownFromForgePlugin: string | null;
|
|
11
|
+
lastShownFromForgeCli: string | null;
|
|
12
|
+
lastShownAt: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ChangelogEntry {
|
|
15
|
+
version: string;
|
|
16
|
+
date: string | null;
|
|
17
|
+
sections: {
|
|
18
|
+
name: string;
|
|
19
|
+
bullets: string[];
|
|
20
|
+
}[];
|
|
21
|
+
rawBody: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ChangeSummary {
|
|
24
|
+
component: ComponentId;
|
|
25
|
+
label: string;
|
|
26
|
+
fromVersion: string | null;
|
|
27
|
+
toVersion: string;
|
|
28
|
+
totalChanges: number;
|
|
29
|
+
byCategory: Map<string, number>;
|
|
30
|
+
entries: ChangelogEntry[];
|
|
31
|
+
}
|
|
32
|
+
declare function defaultCacheDir(): string;
|
|
33
|
+
declare function cachePath(cacheDir: string): string;
|
|
34
|
+
export declare function emptySeenState(): SeenState;
|
|
35
|
+
export declare function readSeenState(cacheDir: string): Promise<SeenState>;
|
|
36
|
+
export declare function writeSeenState(cacheDir: string, state: SeenState): Promise<void>;
|
|
37
|
+
export declare function semverGt(a: string, b: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Parse a Keep-a-Changelog–style markdown body into per-version entries.
|
|
40
|
+
* Tolerates pi's `### New Features` overview sections (which precede the
|
|
41
|
+
* standard `### Added`/`### Fixed` sections) and the `[Unreleased]` block.
|
|
42
|
+
*/
|
|
43
|
+
export declare function parseChangelog(markdown: string): ChangelogEntry[];
|
|
44
|
+
/**
|
|
45
|
+
* Reduce a list of changelog entries down to the ones strictly newer than
|
|
46
|
+
* `from`, up to and including `to`. When `from` is null, returns only the
|
|
47
|
+
* `to` entry (first-install case — don't dump the whole history).
|
|
48
|
+
*/
|
|
49
|
+
export declare function entriesBetween(entries: ChangelogEntry[], from: string | null, to: string): ChangelogEntry[];
|
|
50
|
+
declare function normalizeCategory(name: string): string;
|
|
51
|
+
export declare function summarizeEntries(entries: ChangelogEntry[]): {
|
|
52
|
+
total: number;
|
|
53
|
+
byCategory: Map<string, number>;
|
|
54
|
+
};
|
|
55
|
+
export interface ChangelogSources {
|
|
56
|
+
pi: string | null;
|
|
57
|
+
forgePlugin: string | null;
|
|
58
|
+
forgeCli: string | null;
|
|
59
|
+
}
|
|
60
|
+
export declare function resolveChangelogPaths(pkgRoot: string): ChangelogSources;
|
|
61
|
+
export interface CurrentVersions {
|
|
62
|
+
pi: string;
|
|
63
|
+
forgePlugin: string;
|
|
64
|
+
forgeCli: string;
|
|
65
|
+
}
|
|
66
|
+
export type Baseline = "seen" | "prev" | "lastShown";
|
|
67
|
+
export interface ComputeOptions {
|
|
68
|
+
sources: ChangelogSources;
|
|
69
|
+
current: CurrentVersions;
|
|
70
|
+
seen: SeenState;
|
|
71
|
+
/** Which baseline to diff `current` against:
|
|
72
|
+
* - "seen" (default): auto-dismiss check at session_start.
|
|
73
|
+
* - "prev": /whats-new replay after auto-dismiss.
|
|
74
|
+
* - "lastShown": /whats-new replay after explicit dismiss — uses the
|
|
75
|
+
* `from` versions frozen at the most recent panel-mount so the
|
|
76
|
+
* last-shown set remains viewable forever.
|
|
77
|
+
*/
|
|
78
|
+
baseline?: Baseline;
|
|
79
|
+
}
|
|
80
|
+
export declare function computeSummaries(opts: ComputeOptions): ChangeSummary[];
|
|
81
|
+
declare function formatVersionRange(from: string | null, to: string): string;
|
|
82
|
+
declare function formatCategoryBreakdown(byCategory: Map<string, number>): string;
|
|
83
|
+
export declare function renderSummaryPanel(summaries: ChangeSummary[]): string;
|
|
84
|
+
export declare function renderComponentDetail(summary: ChangeSummary): string;
|
|
85
|
+
export interface WhatsNewRuntime {
|
|
86
|
+
pkgRoot: string;
|
|
87
|
+
current: CurrentVersions;
|
|
88
|
+
cacheDir?: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Compute the startup summary and, when present, update the seen state
|
|
92
|
+
* so subsequent sessions don't replay. Returns the rendered string (or
|
|
93
|
+
* null when there's nothing to show).
|
|
94
|
+
*
|
|
95
|
+
* The `prev*` fields in the seen state preserve the prior baseline so
|
|
96
|
+
* /whats-new can re-render until the user explicitly dismisses.
|
|
97
|
+
*/
|
|
98
|
+
export declare function computeAndPersistStartupPanel(rt: WhatsNewRuntime): Promise<{
|
|
99
|
+
rendered: string;
|
|
100
|
+
summaries: ChangeSummary[];
|
|
101
|
+
} | null>;
|
|
102
|
+
/**
|
|
103
|
+
* Re-compute summaries against the `prev*` baseline (so users can replay
|
|
104
|
+
* the panel after auto-dismiss). When `componentArg` matches one of the
|
|
105
|
+
* three component IDs, returns that component's full detail view instead.
|
|
106
|
+
*/
|
|
107
|
+
export declare function computeWhatsNewView(rt: WhatsNewRuntime, componentArg: string | null): Promise<string>;
|
|
108
|
+
/**
|
|
109
|
+
* Clear the `prev*` baseline so /whats-new stops replaying past changes.
|
|
110
|
+
* Current `seen` values are left untouched.
|
|
111
|
+
*/
|
|
112
|
+
export declare function dismissWhatsNew(rt: WhatsNewRuntime): Promise<string>;
|
|
113
|
+
export declare const __test__: {
|
|
114
|
+
defaultCacheDir: typeof defaultCacheDir;
|
|
115
|
+
cachePath: typeof cachePath;
|
|
116
|
+
normalizeCategory: typeof normalizeCategory;
|
|
117
|
+
formatCategoryBreakdown: typeof formatCategoryBreakdown;
|
|
118
|
+
formatVersionRange: typeof formatVersionRange;
|
|
119
|
+
};
|
|
120
|
+
export {};
|