@compilr-dev/cli 0.5.0 → 0.5.2
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/LICENSE +108 -0
- package/README.md +237 -69
- package/dist/.tsbuildinfo.app +1 -0
- package/dist/.tsbuildinfo.data +1 -0
- package/dist/.tsbuildinfo.domain +1 -0
- package/dist/.tsbuildinfo.foundation +1 -0
- package/dist/agent.d.ts +61 -4
- package/dist/agent.js +241 -245
- package/dist/anchors/index.d.ts +1 -1
- package/dist/anchors/index.js +1 -1
- package/dist/anchors/project-anchors.d.ts +2 -2
- package/dist/anchors/project-anchors.js +1 -1
- package/dist/auth/api-client.d.ts +124 -0
- package/dist/auth/api-client.js +261 -0
- package/dist/auth/index.d.ts +172 -0
- package/dist/auth/index.js +545 -0
- package/dist/auth/storage.d.ts +52 -0
- package/dist/auth/storage.js +118 -0
- package/dist/changelog/index.d.ts +16 -0
- package/dist/changelog/index.js +24 -0
- package/dist/changelog/releases.d.ts +17 -0
- package/dist/changelog/releases.js +63 -0
- package/dist/commands-v2/handlers/auth.d.ts +10 -0
- package/dist/commands-v2/handlers/auth.js +118 -0
- package/dist/commands-v2/handlers/background.d.ts +14 -0
- package/dist/commands-v2/handlers/background.js +276 -0
- package/dist/commands-v2/handlers/context.js +286 -81
- package/dist/commands-v2/handlers/core.d.ts +1 -0
- package/dist/commands-v2/handlers/core.js +133 -8
- package/dist/commands-v2/handlers/debug.js +18 -0
- package/dist/commands-v2/handlers/delegations.d.ts +8 -0
- package/dist/commands-v2/handlers/delegations.js +29 -0
- package/dist/commands-v2/handlers/files.d.ts +8 -0
- package/dist/commands-v2/handlers/files.js +162 -0
- package/dist/commands-v2/handlers/filter.d.ts +9 -0
- package/dist/commands-v2/handlers/filter.js +130 -0
- package/dist/commands-v2/handlers/games.d.ts +7 -0
- package/dist/commands-v2/handlers/games.js +57 -0
- package/dist/commands-v2/handlers/index.d.ts +13 -0
- package/dist/commands-v2/handlers/index.js +39 -0
- package/dist/commands-v2/handlers/mcp.d.ts +8 -0
- package/dist/commands-v2/handlers/mcp.js +39 -0
- package/dist/commands-v2/handlers/notifications.d.ts +9 -0
- package/dist/commands-v2/handlers/notifications.js +34 -0
- package/dist/commands-v2/handlers/project.js +295 -31
- package/dist/commands-v2/handlers/reset.d.ts +11 -0
- package/dist/commands-v2/handlers/reset.js +118 -0
- package/dist/commands-v2/handlers/session.d.ts +161 -0
- package/dist/commands-v2/handlers/session.js +805 -0
- package/dist/commands-v2/handlers/settings.d.ts +2 -0
- package/dist/commands-v2/handlers/settings.js +217 -35
- package/dist/commands-v2/handlers/tasks.d.ts +5 -0
- package/dist/commands-v2/handlers/tasks.js +36 -0
- package/dist/commands-v2/handlers/team.d.ts +9 -0
- package/dist/commands-v2/handlers/team.js +549 -0
- package/dist/commands-v2/handlers/terminals.d.ts +9 -0
- package/dist/commands-v2/handlers/terminals.js +34 -0
- package/dist/commands-v2/index.d.ts +3 -2
- package/dist/commands-v2/index.js +4 -1
- package/dist/commands-v2/registry.d.ts +15 -0
- package/dist/commands-v2/registry.js +34 -0
- package/dist/commands-v2/types.d.ts +81 -3
- package/dist/commands.js +13 -0
- package/dist/compilr-diff-companion.vsix +0 -0
- package/dist/db/index.js +98 -4
- package/dist/db/repositories/document-repository.d.ts +2 -0
- package/dist/db/repositories/document-repository.js +6 -1
- package/dist/db/repositories/index.d.ts +2 -0
- package/dist/db/repositories/index.js +1 -0
- package/dist/db/repositories/plan-repository.d.ts +101 -0
- package/dist/db/repositories/plan-repository.js +275 -0
- package/dist/db/repositories/project-repository.d.ts +6 -0
- package/dist/db/repositories/project-repository.js +41 -0
- package/dist/db/repositories/work-item-repository.d.ts +15 -0
- package/dist/db/repositories/work-item-repository.js +69 -4
- package/dist/db/schema.d.ts +40 -3
- package/dist/db/schema.js +66 -3
- package/dist/episodes/index.d.ts +20 -0
- package/dist/episodes/index.js +27 -0
- package/dist/episodes/recorder.d.ts +51 -0
- package/dist/episodes/recorder.js +195 -0
- package/dist/episodes/significant-work.d.ts +21 -0
- package/dist/episodes/significant-work.js +56 -0
- package/dist/episodes/store.d.ts +38 -0
- package/dist/episodes/store.js +199 -0
- package/dist/episodes/types.d.ts +35 -0
- package/dist/episodes/types.js +6 -0
- package/dist/episodes/work-at-risk.d.ts +12 -0
- package/dist/episodes/work-at-risk.js +38 -0
- package/dist/episodes/work-summary-anchor.d.ts +23 -0
- package/dist/episodes/work-summary-anchor.js +73 -0
- package/dist/games/coins.d.ts +66 -0
- package/dist/games/coins.js +165 -0
- package/dist/games/game-base.d.ts +84 -0
- package/dist/games/game-base.js +204 -0
- package/dist/games/index.d.ts +16 -0
- package/dist/games/index.js +49 -0
- package/dist/games/scores.d.ts +69 -0
- package/dist/games/scores.js +191 -0
- package/dist/games/tetris/board.d.ts +59 -0
- package/dist/games/tetris/board.js +170 -0
- package/dist/games/tetris/index.d.ts +109 -0
- package/dist/games/tetris/index.js +610 -0
- package/dist/games/tetris/pieces.d.ts +44 -0
- package/dist/games/tetris/pieces.js +271 -0
- package/dist/games/tetris/renderer.d.ts +26 -0
- package/dist/games/tetris/renderer.js +77 -0
- package/dist/guide/guide-content.d.ts +23 -0
- package/dist/guide/guide-content.js +196 -0
- package/dist/guide/index.d.ts +8 -0
- package/dist/guide/index.js +7 -0
- package/dist/guide/shared-content.d.ts +37 -0
- package/dist/guide/shared-content.js +1272 -0
- package/dist/guide/tutorial-helpers.d.ts +57 -0
- package/dist/guide/tutorial-helpers.js +147 -0
- package/dist/handlers/ask-user-handlers.d.ts +32 -0
- package/dist/handlers/ask-user-handlers.js +104 -0
- package/dist/handlers/delegation-handlers.d.ts +34 -0
- package/dist/handlers/delegation-handlers.js +291 -0
- package/dist/handlers/permission-handler.d.ts +30 -0
- package/dist/handlers/permission-handler.js +205 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.js +448 -271
- package/dist/input-handlers/memory-handler.d.ts +1 -1
- package/dist/input-handlers/memory-handler.js +2 -1
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.js +12 -0
- package/dist/models/model-registry.d.ts +38 -0
- package/dist/models/model-registry.js +69 -0
- package/dist/models/model-tiers.d.ts +28 -0
- package/dist/models/model-tiers.js +71 -0
- package/dist/models/model-validation.d.ts +25 -0
- package/dist/models/model-validation.js +291 -0
- package/dist/models/ollama-models.d.ts +73 -0
- package/dist/models/ollama-models.js +178 -0
- package/dist/models/provider-types.d.ts +6 -0
- package/dist/models/provider-types.js +1 -0
- package/dist/models/providers.d.ts +35 -0
- package/dist/models/providers.js +58 -0
- package/dist/models/types.d.ts +4 -0
- package/dist/models/types.js +4 -0
- package/dist/multi-agent/activity.d.ts +21 -0
- package/dist/multi-agent/activity.js +34 -0
- package/dist/multi-agent/agent-selection.d.ts +55 -0
- package/dist/multi-agent/agent-selection.js +90 -0
- package/dist/multi-agent/artifacts.d.ts +197 -0
- package/dist/multi-agent/artifacts.js +379 -0
- package/dist/multi-agent/checkpointer.d.ts +138 -0
- package/dist/multi-agent/checkpointer.js +471 -0
- package/dist/multi-agent/collision-utils.d.ts +16 -0
- package/dist/multi-agent/collision-utils.js +28 -0
- package/dist/multi-agent/context-resolver.d.ts +97 -0
- package/dist/multi-agent/context-resolver.js +316 -0
- package/dist/multi-agent/custom-agents.d.ts +83 -0
- package/dist/multi-agent/custom-agents.js +227 -0
- package/dist/multi-agent/delegation-tracker.d.ts +157 -0
- package/dist/multi-agent/delegation-tracker.js +243 -0
- package/dist/multi-agent/file-lock-hook.d.ts +29 -0
- package/dist/multi-agent/file-lock-hook.js +97 -0
- package/dist/multi-agent/file-locks.d.ts +58 -0
- package/dist/multi-agent/file-locks.js +194 -0
- package/dist/multi-agent/index.d.ts +24 -0
- package/dist/multi-agent/index.js +30 -0
- package/dist/multi-agent/mention-parser.d.ts +64 -0
- package/dist/multi-agent/mention-parser.js +146 -0
- package/dist/multi-agent/notification-manager.d.ts +84 -0
- package/dist/multi-agent/notification-manager.js +224 -0
- package/dist/multi-agent/pending-requests.d.ts +122 -0
- package/dist/multi-agent/pending-requests.js +155 -0
- package/dist/multi-agent/session-registry.d.ts +139 -0
- package/dist/multi-agent/session-registry.js +514 -0
- package/dist/multi-agent/shared-context.d.ts +293 -0
- package/dist/multi-agent/shared-context.js +671 -0
- package/dist/multi-agent/skill-requirements.d.ts +66 -0
- package/dist/multi-agent/skill-requirements.js +178 -0
- package/dist/multi-agent/task-assignment.d.ts +69 -0
- package/dist/multi-agent/task-assignment.js +123 -0
- package/dist/multi-agent/task-suggestion.d.ts +31 -0
- package/dist/multi-agent/task-suggestion.js +72 -0
- package/dist/multi-agent/team-agent.d.ts +201 -0
- package/dist/multi-agent/team-agent.js +488 -0
- package/dist/multi-agent/team.d.ts +286 -0
- package/dist/multi-agent/team.js +610 -0
- package/dist/multi-agent/tool-config.d.ts +110 -0
- package/dist/multi-agent/tool-config.js +661 -0
- package/dist/multi-agent/types.d.ts +211 -0
- package/dist/multi-agent/types.js +617 -0
- package/dist/prompts/plan-mode-prompt.d.ts +11 -0
- package/dist/prompts/plan-mode-prompt.js +95 -0
- package/dist/repl-helpers.js +5 -2
- package/dist/repl-v2.d.ts +401 -2
- package/dist/repl-v2.js +2588 -65
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.js +6 -0
- package/dist/session/project-session-manager.d.ts +158 -0
- package/dist/session/project-session-manager.js +650 -0
- package/dist/settings/index.d.ts +133 -13
- package/dist/settings/index.js +329 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +4 -0
- package/dist/settings/paths.js +6 -0
- package/dist/shared-handlers.d.ts +62 -0
- package/dist/shared-handlers.js +48 -0
- package/dist/system-prompt/builder.d.ts +5 -0
- package/dist/system-prompt/builder.js +4 -0
- package/dist/system-prompt/index.d.ts +18 -0
- package/dist/system-prompt/index.js +18 -0
- package/dist/system-prompt/modules.d.ts +5 -0
- package/dist/system-prompt/modules.js +4 -0
- package/dist/tabbed-menu.js +2 -1
- package/dist/templates/compilr-md-import.d.ts +16 -0
- package/dist/templates/compilr-md-import.js +241 -0
- package/dist/templates/compilr-md.js +10 -61
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +34 -73
- package/dist/tool-names.d.ts +113 -0
- package/dist/tool-names.js +239 -0
- package/dist/tools/ask-user-simple.d.ts +1 -1
- package/dist/tools/ask-user-simple.js +2 -1
- package/dist/tools/ask-user.d.ts +1 -1
- package/dist/tools/ask-user.js +2 -1
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +1 -1
- package/dist/tools/db-tools.d.ts +13 -61
- package/dist/tools/db-tools.js +12 -13
- package/dist/tools/delegate-background.d.ts +27 -0
- package/dist/tools/delegate-background.js +115 -0
- package/dist/tools/delegate.d.ts +22 -0
- package/dist/tools/delegate.js +97 -0
- package/dist/tools/delegation-status.d.ts +16 -0
- package/dist/tools/delegation-status.js +128 -0
- package/dist/tools/guide-tool.d.ts +12 -0
- package/dist/tools/guide-tool.js +59 -0
- package/dist/tools/handoff.d.ts +25 -0
- package/dist/tools/handoff.js +99 -0
- package/dist/tools/meta-tools.d.ts +26 -0
- package/dist/tools/meta-tools.js +47 -0
- package/dist/tools/platform-adapter.d.ts +35 -0
- package/dist/tools/platform-adapter.js +404 -0
- package/dist/tools/project-db.d.ts +5 -73
- package/dist/tools/project-db.js +5 -336
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +240 -48
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- package/dist/ui/base/index.d.ts +1 -1
- package/dist/ui/base/index.js +1 -1
- package/dist/ui/base/overlay-base-v2.d.ts +10 -0
- package/dist/ui/base/overlay-base-v2.js +14 -0
- package/dist/ui/base/render-utils.d.ts +19 -0
- package/dist/ui/base/render-utils.js +25 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
- package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
- package/dist/ui/constants/labels.d.ts +14 -0
- package/dist/ui/constants/labels.js +52 -0
- package/dist/ui/conversation-store.d.ts +55 -0
- package/dist/ui/conversation-store.js +107 -0
- package/dist/ui/conversation.js +11 -13
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.js +3 -9
- package/dist/ui/file-autocomplete.d.ts +24 -0
- package/dist/ui/file-autocomplete.js +56 -0
- package/dist/ui/footer-renderer.d.ts +69 -0
- package/dist/ui/footer-renderer.js +431 -0
- package/dist/ui/footer.d.ts +74 -7
- package/dist/ui/footer.js +173 -16
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +19 -0
- package/dist/ui/input-prompt.js +206 -14
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -0
- package/dist/ui/live-region-facade.d.ts +42 -0
- package/dist/ui/live-region-facade.js +205 -0
- package/dist/ui/live-region.d.ts +0 -4
- package/dist/ui/live-region.js +6 -14
- package/dist/ui/mascot/renderer.d.ts +1 -1
- package/dist/ui/mascot/renderer.js +37 -2
- package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
- package/dist/ui/overlay/data/tutorial-content.js +9 -0
- package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
- package/dist/ui/overlay/data/tutorial-registry.js +116 -0
- package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
- package/dist/ui/overlay/data/tutorial-types.js +6 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
- package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
- package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
- package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
- package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
- package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
- package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
- package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
- package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
- package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
- package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
- package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
- package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
- package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
- package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
- package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
- package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
- package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
- package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
- package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
- package/dist/ui/overlay/index.d.ts +20 -1
- package/dist/ui/overlay/index.js +19 -0
- package/dist/ui/overlay/types.d.ts +5 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.js +4 -16
- package/dist/ui/permission-overlay.js +6 -5
- package/dist/ui/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.js +3 -19
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -0
- package/dist/ui/terminal-line-builders.d.ts +17 -0
- package/dist/ui/terminal-line-builders.js +42 -0
- package/dist/ui/terminal-render-item.d.ts +16 -0
- package/dist/ui/terminal-render-item.js +267 -0
- package/dist/ui/terminal-renderer.d.ts +7 -8
- package/dist/ui/terminal-renderer.js +7 -8
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +144 -276
- package/dist/ui/terminal-ui.js +384 -1861
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +71 -13
- package/dist/ui/tool-formatters.js +696 -1
- package/dist/ui/turn-metrics.d.ts +56 -0
- package/dist/ui/turn-metrics.js +75 -0
- package/dist/ui/types.d.ts +28 -0
- package/dist/ui/types.js +1 -0
- package/dist/ui/vscode-diff-ipc.d.ts +102 -0
- package/dist/ui/vscode-diff-ipc.js +385 -0
- package/dist/utils/credentials.d.ts +24 -5
- package/dist/utils/credentials.js +123 -9
- package/dist/utils/format-tokens.d.ts +13 -0
- package/dist/utils/format-tokens.js +18 -0
- package/dist/utils/git-config.d.ts +26 -0
- package/dist/utils/git-config.js +54 -0
- package/dist/utils/message-utils.d.ts +61 -0
- package/dist/utils/message-utils.js +72 -0
- package/dist/utils/model-tiers.d.ts +8 -1
- package/dist/utils/model-tiers.js +38 -16
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.js +3 -2
- package/dist/utils/project-detection.d.ts +58 -0
- package/dist/utils/project-detection.js +424 -0
- package/dist/utils/project-memory.js +2 -1
- package/dist/utils/project-status.d.ts +2 -2
- package/dist/utils/startup-perf.d.ts +18 -0
- package/dist/utils/startup-perf.js +60 -0
- package/dist/utils/token-tracker.d.ts +62 -0
- package/dist/utils/token-tracker.js +150 -0
- package/dist/utils/token-types.d.ts +23 -0
- package/dist/utils/token-types.js +18 -0
- package/dist/utils/types/config-types.d.ts +32 -0
- package/dist/utils/types/config-types.js +8 -0
- package/dist/utils/update-checker.d.ts +28 -0
- package/dist/utils/update-checker.js +106 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.js +10 -0
- package/dist/utils/vscode-detect.d.ts +39 -0
- package/dist/utils/vscode-detect.js +137 -0
- package/package.json +27 -13
- package/dist/commands/handler-types.d.ts +0 -68
- package/dist/commands/handler-types.js +0 -8
- package/dist/commands/handlers/agent-commands.d.ts +0 -13
- package/dist/commands/handlers/agent-commands.js +0 -305
- package/dist/commands/handlers/design-commands.d.ts +0 -15
- package/dist/commands/handlers/design-commands.js +0 -334
- package/dist/commands/handlers/index.d.ts +0 -20
- package/dist/commands/handlers/index.js +0 -43
- package/dist/commands/handlers/overlay-commands.d.ts +0 -21
- package/dist/commands/handlers/overlay-commands.js +0 -287
- package/dist/commands/handlers/project-commands.d.ts +0 -11
- package/dist/commands/handlers/project-commands.js +0 -167
- package/dist/commands/handlers/simple-commands.d.ts +0 -19
- package/dist/commands/handlers/simple-commands.js +0 -144
- package/dist/commands/registry.d.ts +0 -50
- package/dist/commands/registry.js +0 -75
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -149
- package/dist/repl.js +0 -1151
- package/dist/templates/claude-md.d.ts +0 -7
- package/dist/templates/claude-md.js +0 -189
- package/dist/test-autocomplete.d.ts +0 -7
- package/dist/test-autocomplete.js +0 -85
- package/dist/test-tabbed-menu.d.ts +0 -7
- package/dist/test-tabbed-menu.js +0 -25
- package/dist/tool-selector.d.ts +0 -71
- package/dist/tool-selector.js +0 -184
- package/dist/tools/anchor-tools.d.ts +0 -31
- package/dist/tools/anchor-tools.js +0 -255
- package/dist/tools/backlog-wrappers.d.ts +0 -54
- package/dist/tools/backlog-wrappers.js +0 -338
- package/dist/tools/document-db.d.ts +0 -43
- package/dist/tools/document-db.js +0 -220
- package/dist/tools/workitem-db.d.ts +0 -103
- package/dist/tools/workitem-db.js +0 -549
- package/dist/ui/agents-overlay-v2.d.ts +0 -43
- package/dist/ui/agents-overlay-v2.js +0 -809
- package/dist/ui/agents-overlay.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -863
- package/dist/ui/anchors-overlay.d.ts +0 -12
- package/dist/ui/anchors-overlay.js +0 -775
- package/dist/ui/arch-type-overlay.d.ts +0 -15
- package/dist/ui/arch-type-overlay.js +0 -201
- package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
- package/dist/ui/ask-user-overlay-v2.js +0 -555
- package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
- package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
- package/dist/ui/backlog-overlay.d.ts +0 -32
- package/dist/ui/backlog-overlay.js +0 -652
- package/dist/ui/commands-overlay-v2.d.ts +0 -33
- package/dist/ui/commands-overlay-v2.js +0 -441
- package/dist/ui/commands-overlay.d.ts +0 -16
- package/dist/ui/commands-overlay.js +0 -439
- package/dist/ui/config-overlay.d.ts +0 -35
- package/dist/ui/config-overlay.js +0 -707
- package/dist/ui/docs-overlay.d.ts +0 -17
- package/dist/ui/docs-overlay.js +0 -303
- package/dist/ui/footer-v2.d.ts +0 -222
- package/dist/ui/footer-v2.js +0 -1349
- package/dist/ui/help-overlay-v2.d.ts +0 -34
- package/dist/ui/help-overlay-v2.js +0 -309
- package/dist/ui/help-overlay.d.ts +0 -16
- package/dist/ui/help-overlay.js +0 -316
- package/dist/ui/init-overlay-v2.d.ts +0 -34
- package/dist/ui/init-overlay-v2.js +0 -600
- package/dist/ui/init-overlay.d.ts +0 -34
- package/dist/ui/init-overlay.js +0 -604
- package/dist/ui/input-prompt-v2.d.ts +0 -180
- package/dist/ui/input-prompt-v2.js +0 -999
- package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
- package/dist/ui/iteration-limit-overlay-v2.js +0 -114
- package/dist/ui/keys-overlay-v2.d.ts +0 -41
- package/dist/ui/keys-overlay-v2.js +0 -248
- package/dist/ui/mascot-overlay-v2.d.ts +0 -41
- package/dist/ui/mascot-overlay-v2.js +0 -138
- package/dist/ui/mascot-overlay.d.ts +0 -21
- package/dist/ui/mascot-overlay.js +0 -146
- package/dist/ui/model-overlay-v2.d.ts +0 -49
- package/dist/ui/model-overlay-v2.js +0 -118
- package/dist/ui/model-overlay.d.ts +0 -27
- package/dist/ui/model-overlay.js +0 -221
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -169
- package/dist/ui/new-overlay.d.ts +0 -34
- package/dist/ui/new-overlay.js +0 -604
- package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
- package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
- package/dist/ui/overlay/overlay-types.d.ts +0 -128
- package/dist/ui/overlay/overlay-types.js +0 -22
- package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
- package/dist/ui/overlays/help-overlay-v2.js +0 -198
- package/dist/ui/overlays/index.d.ts +0 -11
- package/dist/ui/overlays/index.js +0 -11
- package/dist/ui/permission-overlay-v2.d.ts +0 -36
- package/dist/ui/permission-overlay-v2.js +0 -380
- package/dist/ui/projects-overlay.d.ts +0 -19
- package/dist/ui/projects-overlay.js +0 -484
- package/dist/ui/theme-overlay-v2.d.ts +0 -42
- package/dist/ui/theme-overlay-v2.js +0 -135
- package/dist/ui/theme-overlay.d.ts +0 -24
- package/dist/ui/theme-overlay.js +0 -127
- package/dist/ui/tools-overlay-v2.d.ts +0 -47
- package/dist/ui/tools-overlay-v2.js +0 -218
- package/dist/ui/tools-overlay.d.ts +0 -34
- package/dist/ui/tools-overlay.js +0 -230
- package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
- package/dist/ui/tutorial-overlay-v2.js +0 -1035
- package/dist/ui/tutorial-overlay.d.ts +0 -11
- package/dist/ui/tutorial-overlay.js +0 -1034
- package/dist/ui/workflow-overlay.d.ts +0 -22
- package/dist/ui/workflow-overlay.js +0 -636
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Footer renderer.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from TerminalUI — owns render state (line height tracking,
|
|
5
|
+
* spinner animation) and the render pipeline (clear, render, line builders).
|
|
6
|
+
* Reads application state through the host's getRenderData() snapshot.
|
|
7
|
+
*/
|
|
8
|
+
import * as terminal from './terminal.js';
|
|
9
|
+
import { getPhysicalLineCount, getVisibleLength } from './line-utils.js';
|
|
10
|
+
import { getStyles } from '../themes/index.js';
|
|
11
|
+
import { formatTokens } from './base/index.js';
|
|
12
|
+
import { formatInputText } from './terminal-autocomplete-utils.js';
|
|
13
|
+
import { buildTodoLine, formatDuration } from './terminal-line-builders.js';
|
|
14
|
+
import { getDefaultShellManager } from '@compilr-dev/sdk';
|
|
15
|
+
import { MASCOT } from './terminal-types.js';
|
|
16
|
+
import { MODE_INFO } from './types.js';
|
|
17
|
+
import { getPendingRequestsManager } from '../multi-agent/index.js';
|
|
18
|
+
import { getSessionRegistry } from '../multi-agent/session-registry.js';
|
|
19
|
+
import { getNotificationManager } from '../multi-agent/notification-manager.js';
|
|
20
|
+
export class FooterRenderer {
|
|
21
|
+
lastRenderHeight = 0;
|
|
22
|
+
cursorLineFromBottom = 0;
|
|
23
|
+
spinnerFrame = 0;
|
|
24
|
+
spinnerTimer = null;
|
|
25
|
+
spinnerFrames = MASCOT.crt;
|
|
26
|
+
host;
|
|
27
|
+
constructor(host) {
|
|
28
|
+
this.host = host;
|
|
29
|
+
}
|
|
30
|
+
// ===========================================================================
|
|
31
|
+
// Clear / Render
|
|
32
|
+
// ===========================================================================
|
|
33
|
+
clear() {
|
|
34
|
+
if (this.lastRenderHeight === 0) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
terminal.moveCursorToLineStart();
|
|
38
|
+
// Move cursor to TOP of footer
|
|
39
|
+
// cursorRowFromTop = which row the cursor is on (1-indexed from top of footer)
|
|
40
|
+
const cursorRowFromTop = this.lastRenderHeight - this.cursorLineFromBottom;
|
|
41
|
+
const rowsToMoveUp = cursorRowFromTop - 1;
|
|
42
|
+
if (rowsToMoveUp > 0) {
|
|
43
|
+
terminal.moveCursorUp(rowsToMoveUp);
|
|
44
|
+
}
|
|
45
|
+
terminal.clearToEndOfScreen();
|
|
46
|
+
this.lastRenderHeight = 0;
|
|
47
|
+
this.cursorLineFromBottom = 0;
|
|
48
|
+
}
|
|
49
|
+
render() {
|
|
50
|
+
if (!this.host.isFooterRenderAllowed()) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const data = this.host.getRenderData();
|
|
54
|
+
const termWidth = terminal.getTerminalWidth();
|
|
55
|
+
const s = getStyles();
|
|
56
|
+
// Build all lines in order
|
|
57
|
+
const lines = [];
|
|
58
|
+
// 0. LiveRegion (if has items) - rendered at top of footer
|
|
59
|
+
if (data.liveRegion.hasItems()) {
|
|
60
|
+
const liveLines = data.liveRegion.render({
|
|
61
|
+
width: termWidth,
|
|
62
|
+
verbose: data.liveVerbose,
|
|
63
|
+
showTokens: true,
|
|
64
|
+
});
|
|
65
|
+
for (const line of liveLines) {
|
|
66
|
+
lines.push({
|
|
67
|
+
content: line,
|
|
68
|
+
physicalLines: getPhysicalLineCount(line, termWidth),
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
// Blank line after live region for spacing
|
|
72
|
+
if (liveLines.length > 0) {
|
|
73
|
+
lines.push({ content: '', physicalLines: 1 });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// 1. Header: Spinner (when running) or "Todos" (when idle with todos)
|
|
77
|
+
if (data.agentRunning) {
|
|
78
|
+
const spinnerLine = this.buildSpinnerLine(data);
|
|
79
|
+
lines.push({
|
|
80
|
+
content: spinnerLine,
|
|
81
|
+
physicalLines: getPhysicalLineCount(spinnerLine, termWidth),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
else if (data.todos.length > 0) {
|
|
85
|
+
const headerLine = s.muted('Todos');
|
|
86
|
+
lines.push({
|
|
87
|
+
content: headerLine,
|
|
88
|
+
physicalLines: 1,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// 2. Todo list (show if there are todos AND showTodos is true)
|
|
92
|
+
// Sort: in_progress → pending → completed (completed sink to bottom)
|
|
93
|
+
// Stable sort preserves original order within each status group.
|
|
94
|
+
if (data.todos.length > 0 && data.showTodos) {
|
|
95
|
+
const indexed = data.todos.map((todo, i) => ({ todo, taskNumber: i + 1 }));
|
|
96
|
+
const statusOrder = { in_progress: 0, pending: 1, completed: 2 };
|
|
97
|
+
const sorted = [...indexed].sort((a, b) => (statusOrder[a.todo.status] ?? 1) - (statusOrder[b.todo.status] ?? 1));
|
|
98
|
+
for (const { todo, taskNumber } of sorted) {
|
|
99
|
+
const todoLine = buildTodoLine(todo, taskNumber);
|
|
100
|
+
lines.push({
|
|
101
|
+
content: todoLine,
|
|
102
|
+
physicalLines: getPhysicalLineCount(todoLine, termWidth),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// Blank line after todos for spacing
|
|
106
|
+
lines.push({ content: '', physicalLines: 1 });
|
|
107
|
+
}
|
|
108
|
+
// 3. Queued inputs (show multiline as single line with ↵ indicator)
|
|
109
|
+
for (const queued of data.queuedInputs) {
|
|
110
|
+
const displayText = queued.replace(/\n/g, ' ↵ ');
|
|
111
|
+
const queuedLine = s.muted(`queued: "${displayText}"`);
|
|
112
|
+
lines.push({
|
|
113
|
+
content: queuedLine,
|
|
114
|
+
physicalLines: getPhysicalLineCount(queuedLine, termWidth),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
// 4. Top separator
|
|
118
|
+
const separator = '─'.repeat(termWidth);
|
|
119
|
+
lines.push({ content: separator, physicalLines: 1 });
|
|
120
|
+
// 5. Input prompt (multiline support)
|
|
121
|
+
const continuationPrompt = s.muted(' \\ ');
|
|
122
|
+
const continuationPromptLen = getVisibleLength(continuationPrompt);
|
|
123
|
+
const cursorLineIndex = lines.length + data.currentLine; // Index where cursor is
|
|
124
|
+
for (let i = 0; i < data.lines.length; i++) {
|
|
125
|
+
const linePrompt = i === 0 ? data.promptPrefix : continuationPrompt;
|
|
126
|
+
const linePromptLen = i === 0 ? data.promptPrefixLen : continuationPromptLen;
|
|
127
|
+
const lineContent = data.lines[i];
|
|
128
|
+
// Show ghost text on first line when input is empty and no autocomplete
|
|
129
|
+
let fullLine;
|
|
130
|
+
let totalLen;
|
|
131
|
+
if (i === 0 &&
|
|
132
|
+
lineContent === '' &&
|
|
133
|
+
data.lines.length === 1 &&
|
|
134
|
+
data.suggestion &&
|
|
135
|
+
!data.ac.isActive()) {
|
|
136
|
+
// Build: [prompt][suggestion]...[↵ send]
|
|
137
|
+
const rightHint = '↵ send';
|
|
138
|
+
const leftContent = linePrompt + s.muted(data.suggestion);
|
|
139
|
+
const leftLen = linePromptLen + data.suggestion.length;
|
|
140
|
+
const rightLen = rightHint.length;
|
|
141
|
+
const padding = Math.max(1, termWidth - leftLen - rightLen);
|
|
142
|
+
fullLine = leftContent + ' '.repeat(padding) + s.muted(rightHint);
|
|
143
|
+
totalLen = termWidth; // Full width
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Format special prefixes: $agent, @path, /command
|
|
147
|
+
const formattedContent = formatInputText(lineContent);
|
|
148
|
+
fullLine = linePrompt + formattedContent;
|
|
149
|
+
totalLen = linePromptLen + getVisibleLength(lineContent);
|
|
150
|
+
}
|
|
151
|
+
const physicalLines = totalLen === 0 ? 1 : Math.ceil(totalLen / termWidth) || 1;
|
|
152
|
+
lines.push({
|
|
153
|
+
content: fullLine,
|
|
154
|
+
physicalLines,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
// 6. Bottom separator
|
|
158
|
+
lines.push({ content: separator, physicalLines: 1 });
|
|
159
|
+
// 7. Mode indicator
|
|
160
|
+
const modeLine = this.buildModeLine(data, termWidth);
|
|
161
|
+
lines.push({
|
|
162
|
+
content: modeLine,
|
|
163
|
+
physicalLines: getPhysicalLineCount(modeLine, termWidth),
|
|
164
|
+
});
|
|
165
|
+
// 7b. Status bar indicators (single horizontal line)
|
|
166
|
+
const statusItems = data.statusBar.getItems();
|
|
167
|
+
if (statusItems.length > 0) {
|
|
168
|
+
const pendingCount = getPendingRequestsManager().getCount();
|
|
169
|
+
const terminalCount = getSessionRegistry()?.getProjectScopedSessionCount() ?? 0;
|
|
170
|
+
const notifCount = getNotificationManager()?.getUnreadCount() ?? 0;
|
|
171
|
+
const segments = [];
|
|
172
|
+
for (let idx = 0; idx < statusItems.length; idx++) {
|
|
173
|
+
const item = statusItems[idx];
|
|
174
|
+
const isSelected = data.statusBar.navActive && data.statusBar.selectedIndex === idx;
|
|
175
|
+
let label;
|
|
176
|
+
if (item.id === 'notifications') {
|
|
177
|
+
label = `[!] ${String(notifCount)} notif`;
|
|
178
|
+
}
|
|
179
|
+
else if (item.id === 'pending') {
|
|
180
|
+
label = `pending: ${String(pendingCount)}`;
|
|
181
|
+
}
|
|
182
|
+
else if (item.id === 'terminals') {
|
|
183
|
+
label = `terminals: ${String(terminalCount)}`;
|
|
184
|
+
}
|
|
185
|
+
else if (item.id === 'mcp') {
|
|
186
|
+
label = 'mcp: connecting...';
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
label = `bg: ${String(data.statusBar.backgroundAgentCount)}`;
|
|
190
|
+
}
|
|
191
|
+
if (isSelected) {
|
|
192
|
+
segments.push(s.inverse(` ${label} `));
|
|
193
|
+
}
|
|
194
|
+
else if (data.statusBar.navActive) {
|
|
195
|
+
segments.push(s.muted(label));
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
segments.push(s.warning(label));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
let statusLine = segments.join(' ');
|
|
202
|
+
if (data.statusBar.navActive) {
|
|
203
|
+
statusLine += ' ' + s.muted('[Enter]');
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
statusLine += ' ' + s.muted('[↓]');
|
|
207
|
+
}
|
|
208
|
+
lines.push({
|
|
209
|
+
content: statusLine,
|
|
210
|
+
physicalLines: getPhysicalLineCount(statusLine, termWidth),
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
// 8. Autocomplete dropdown (if active) - agent > file > command priority
|
|
214
|
+
const agentAutocompleteLines = data.ac.buildAgentLines(termWidth);
|
|
215
|
+
const fileAutocompleteLines = data.ac.buildFileLines(termWidth);
|
|
216
|
+
const autocompleteLines = agentAutocompleteLines.length > 0
|
|
217
|
+
? agentAutocompleteLines
|
|
218
|
+
: fileAutocompleteLines.length > 0
|
|
219
|
+
? fileAutocompleteLines
|
|
220
|
+
: data.ac.buildCommandLines(termWidth);
|
|
221
|
+
for (const line of autocompleteLines) {
|
|
222
|
+
lines.push({
|
|
223
|
+
content: line,
|
|
224
|
+
physicalLines: getPhysicalLineCount(line, termWidth),
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
// Calculate total physical height
|
|
228
|
+
let totalPhysicalLines = 0;
|
|
229
|
+
for (const line of lines) {
|
|
230
|
+
totalPhysicalLines += line.physicalLines;
|
|
231
|
+
}
|
|
232
|
+
// Clear existing footer
|
|
233
|
+
this.clear();
|
|
234
|
+
// Write all lines
|
|
235
|
+
for (let i = 0; i < lines.length; i++) {
|
|
236
|
+
terminal.write(lines[i].content);
|
|
237
|
+
if (i < lines.length - 1) {
|
|
238
|
+
terminal.write('\n');
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Calculate cursor position (for multiline, position on the line where cursor is)
|
|
242
|
+
let rowsAfterCursor = 0;
|
|
243
|
+
for (let i = cursorLineIndex + 1; i < lines.length; i++) {
|
|
244
|
+
rowsAfterCursor += lines[i].physicalLines;
|
|
245
|
+
}
|
|
246
|
+
if (rowsAfterCursor > 0) {
|
|
247
|
+
terminal.moveCursorUp(rowsAfterCursor);
|
|
248
|
+
}
|
|
249
|
+
// Calculate column within current line
|
|
250
|
+
const currentLinePromptLen = data.currentLine === 0 ? data.promptPrefixLen : continuationPromptLen;
|
|
251
|
+
const totalPos = currentLinePromptLen + data.cursorPos;
|
|
252
|
+
const cursorCol = (totalPos % termWidth) + 1;
|
|
253
|
+
terminal.moveCursorToColumn(cursorCol);
|
|
254
|
+
terminal.showCursor();
|
|
255
|
+
this.lastRenderHeight = totalPhysicalLines;
|
|
256
|
+
this.cursorLineFromBottom = rowsAfterCursor;
|
|
257
|
+
}
|
|
258
|
+
// ===========================================================================
|
|
259
|
+
// Render state reset
|
|
260
|
+
// ===========================================================================
|
|
261
|
+
resetRenderState() {
|
|
262
|
+
this.lastRenderHeight = 0;
|
|
263
|
+
this.cursorLineFromBottom = 0;
|
|
264
|
+
}
|
|
265
|
+
// ===========================================================================
|
|
266
|
+
// Spinner animation
|
|
267
|
+
// ===========================================================================
|
|
268
|
+
startSpinnerAnimation(onTick) {
|
|
269
|
+
if (this.spinnerTimer)
|
|
270
|
+
return;
|
|
271
|
+
this.spinnerTimer = setInterval(() => {
|
|
272
|
+
this.spinnerFrame++;
|
|
273
|
+
onTick();
|
|
274
|
+
}, 200); // Slower, more relaxed animation
|
|
275
|
+
}
|
|
276
|
+
stopSpinnerAnimation() {
|
|
277
|
+
if (this.spinnerTimer) {
|
|
278
|
+
clearInterval(this.spinnerTimer);
|
|
279
|
+
this.spinnerTimer = null;
|
|
280
|
+
}
|
|
281
|
+
this.spinnerFrame = 0;
|
|
282
|
+
}
|
|
283
|
+
// ===========================================================================
|
|
284
|
+
// Line builders (private)
|
|
285
|
+
// ===========================================================================
|
|
286
|
+
buildSpinnerLine(data) {
|
|
287
|
+
const s = getStyles();
|
|
288
|
+
const frame = this.spinnerFrames[this.spinnerFrame % this.spinnerFrames.length];
|
|
289
|
+
const text = data.currentTool ?? data.spinnerText ?? 'Thinking...';
|
|
290
|
+
// Build hints (Claude Code style: ctrl+c to interrupt · time · tokens · thinking)
|
|
291
|
+
const hints = ['esc to interrupt'];
|
|
292
|
+
// Show "ctrl+b to background" hint if bash running for more than 3 seconds
|
|
293
|
+
if (data.activeBashInfo && (Date.now() - data.activeBashInfo.startTime) > 3000) {
|
|
294
|
+
hints.push('ctrl+b to background');
|
|
295
|
+
}
|
|
296
|
+
// Add elapsed time
|
|
297
|
+
if (data.turnMetrics.startTime > 0) {
|
|
298
|
+
const elapsedMs = Date.now() - data.turnMetrics.startTime;
|
|
299
|
+
hints.push(formatDuration(elapsedMs));
|
|
300
|
+
}
|
|
301
|
+
// Add token counts (↓ input ↑ output) with thinking/cache tokens and API call count
|
|
302
|
+
if (data.turnMetrics.inputTokens > 0 || data.turnMetrics.outputTokens > 0) {
|
|
303
|
+
const inputStr = formatTokens(data.turnMetrics.inputTokens);
|
|
304
|
+
const outputStr = formatTokens(data.turnMetrics.outputTokens);
|
|
305
|
+
let tokenDisplay = `↓ ${inputStr} ↑ ${outputStr}`;
|
|
306
|
+
// Build parenthetical for thinking/cache tokens
|
|
307
|
+
const extras = [];
|
|
308
|
+
if (data.turnMetrics.thinkingTokens > 0) {
|
|
309
|
+
extras.push(`think: ${formatTokens(data.turnMetrics.thinkingTokens)}`);
|
|
310
|
+
}
|
|
311
|
+
if (data.turnMetrics.cacheReadTokens > 0) {
|
|
312
|
+
extras.push(`cache: ${formatTokens(data.turnMetrics.cacheReadTokens)}`);
|
|
313
|
+
}
|
|
314
|
+
if (extras.length > 0) {
|
|
315
|
+
tokenDisplay += ` (${extras.join(', ')})`;
|
|
316
|
+
}
|
|
317
|
+
// Add API call count if multiple calls
|
|
318
|
+
if (data.turnMetrics.apiCalls > 1) {
|
|
319
|
+
tokenDisplay += ` (${String(data.turnMetrics.apiCalls)} calls)`;
|
|
320
|
+
}
|
|
321
|
+
hints.push(tokenDisplay);
|
|
322
|
+
}
|
|
323
|
+
// Add "thinking" indicator when extended thinking is active
|
|
324
|
+
if (data.turnMetrics.isThinking) {
|
|
325
|
+
hints.push('thinking');
|
|
326
|
+
}
|
|
327
|
+
// Add background task count
|
|
328
|
+
const bgTaskCount = getDefaultShellManager().listRunning().length;
|
|
329
|
+
if (bgTaskCount > 0) {
|
|
330
|
+
hints.push(`bg: ${String(bgTaskCount)}`);
|
|
331
|
+
}
|
|
332
|
+
if (data.todos.length > 0 && data.showTodos) {
|
|
333
|
+
hints.push('ctrl+t to hide todos');
|
|
334
|
+
}
|
|
335
|
+
else if (data.todos.length > 0 && !data.showTodos) {
|
|
336
|
+
hints.push('ctrl+t to show todos');
|
|
337
|
+
}
|
|
338
|
+
const hintsText = hints.length > 0 ? ` (${hints.join(' · ')})` : '';
|
|
339
|
+
// Format: [CRT scanner] text (hints)
|
|
340
|
+
return s.muted(`${frame} ${text}${hintsText}`);
|
|
341
|
+
}
|
|
342
|
+
buildModeLine(data, termWidth) {
|
|
343
|
+
const s = getStyles();
|
|
344
|
+
const modeInfo = MODE_INFO[data.mode];
|
|
345
|
+
// Build mode part (left)
|
|
346
|
+
let modePart;
|
|
347
|
+
let modePartLen;
|
|
348
|
+
switch (data.mode) {
|
|
349
|
+
case 'normal':
|
|
350
|
+
modePart = s.muted(`mode: ${modeInfo.label}`);
|
|
351
|
+
modePartLen = `mode: ${modeInfo.label}`.length;
|
|
352
|
+
break;
|
|
353
|
+
case 'auto-accept':
|
|
354
|
+
modePart = s.warning(`mode: ${modeInfo.label}`);
|
|
355
|
+
modePartLen = `mode: ${modeInfo.label}`.length;
|
|
356
|
+
break;
|
|
357
|
+
case 'plan':
|
|
358
|
+
if (data.activePlanName) {
|
|
359
|
+
modePart = s.info(`mode: ${modeInfo.label}`) + s.secondary(` [${data.activePlanName}]`);
|
|
360
|
+
modePartLen = `mode: ${modeInfo.label} [${data.activePlanName}]`.length;
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
modePart = s.info(`mode: ${modeInfo.label}`);
|
|
364
|
+
modePartLen = `mode: ${modeInfo.label}`.length;
|
|
365
|
+
}
|
|
366
|
+
break;
|
|
367
|
+
default:
|
|
368
|
+
modePart = s.muted(`mode: ${modeInfo.label}`);
|
|
369
|
+
modePartLen = `mode: ${modeInfo.label}`.length;
|
|
370
|
+
}
|
|
371
|
+
// Add background task count indicator after mode (if any running)
|
|
372
|
+
const bgCount = getDefaultShellManager().listRunning().length;
|
|
373
|
+
if (bgCount > 0) {
|
|
374
|
+
modePart += ' ' + s.info(`[bg: ${String(bgCount)}]`);
|
|
375
|
+
modePartLen += 1 + `[bg: ${String(bgCount)}]`.length;
|
|
376
|
+
}
|
|
377
|
+
// Add conversation filter indicator (if active)
|
|
378
|
+
if (data.conversationFilterActive) {
|
|
379
|
+
const filterText = '[/f: on]';
|
|
380
|
+
modePart += ' ' + s.secondary(filterText);
|
|
381
|
+
modePartLen += 1 + filterText.length;
|
|
382
|
+
}
|
|
383
|
+
// Add restored history hint (if available, only when not running)
|
|
384
|
+
if (!data.agentRunning && data.hasRestoredHistory) {
|
|
385
|
+
const histHint = '[ctrl+r: history]';
|
|
386
|
+
modePart += ' ' + s.muted(histHint);
|
|
387
|
+
modePartLen += 1 + histHint.length;
|
|
388
|
+
}
|
|
389
|
+
// Build agent part (center) - only if not default
|
|
390
|
+
let agentPart = '';
|
|
391
|
+
let agentPartLen = 0;
|
|
392
|
+
if (data.activeTeamAgent && data.activeTeamAgent.id !== 'default') {
|
|
393
|
+
const agent = data.activeTeamAgent;
|
|
394
|
+
agentPart = s.secondary(`${agent.mascot} $${agent.id}`) + s.muted(` (${agent.displayName})`);
|
|
395
|
+
agentPartLen = `${agent.mascot} $${agent.id} (${agent.displayName})`.length;
|
|
396
|
+
}
|
|
397
|
+
// Build project part (right)
|
|
398
|
+
let projectPart = '';
|
|
399
|
+
let projectPartLen = 0;
|
|
400
|
+
if (data.projectName) {
|
|
401
|
+
const projectText = `Project: ${data.projectName}`;
|
|
402
|
+
projectPart = s.muted(projectText);
|
|
403
|
+
projectPartLen = projectText.length;
|
|
404
|
+
}
|
|
405
|
+
// Calculate layout
|
|
406
|
+
const totalContentLen = modePartLen + agentPartLen + projectPartLen;
|
|
407
|
+
const availableSpace = termWidth - totalContentLen;
|
|
408
|
+
if (availableSpace < 4) {
|
|
409
|
+
// Not enough space - just put mode on left, project on right, skip agent
|
|
410
|
+
if (!data.projectName) {
|
|
411
|
+
return modePart;
|
|
412
|
+
}
|
|
413
|
+
const padding = Math.max(2, termWidth - modePartLen - projectPartLen);
|
|
414
|
+
return modePart + ' '.repeat(padding) + projectPart;
|
|
415
|
+
}
|
|
416
|
+
// Distribute space: split between left-center and center-right gaps
|
|
417
|
+
if (agentPartLen > 0) {
|
|
418
|
+
const leftGap = Math.floor(availableSpace / 2);
|
|
419
|
+
const rightGap = availableSpace - leftGap;
|
|
420
|
+
return modePart + ' '.repeat(Math.max(2, leftGap)) + agentPart + ' '.repeat(Math.max(2, rightGap)) + projectPart;
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
// No agent, just mode and project
|
|
424
|
+
if (!data.projectName) {
|
|
425
|
+
return modePart;
|
|
426
|
+
}
|
|
427
|
+
const padding = Math.max(2, termWidth - modePartLen - projectPartLen);
|
|
428
|
+
return modePart + ' '.repeat(padding) + projectPart;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
package/dist/ui/footer.d.ts
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
+
* @deprecated DEAD CODE — This class is never instantiated. Do NOT modify this file.
|
|
3
|
+
*
|
|
4
|
+
* The active footer/render pipeline is in TerminalUI (src/ui/terminal-ui.ts).
|
|
5
|
+
* TerminalUI has its own inline render loop with numbered sections (1-8),
|
|
6
|
+
* status bar items, mode indicator, etc. All footer changes should go there.
|
|
7
|
+
*
|
|
8
|
+
* This file is kept only because it is type-imported by terminal-renderer.ts
|
|
9
|
+
* and memory-handler.ts. It can be safely deleted once those imports are removed.
|
|
10
|
+
*
|
|
11
|
+
* --- Original description ---
|
|
2
12
|
* Footer Orchestrator
|
|
3
13
|
*
|
|
4
14
|
* Manages all persistent UI elements below the scrolling zone:
|
|
5
15
|
* - TodoZone (spinner + todo list)
|
|
6
16
|
* - Queued input display
|
|
7
17
|
* - InputPrompt
|
|
8
|
-
*
|
|
9
|
-
* Handles:
|
|
10
|
-
* - Coordinated rendering via single render loop
|
|
11
|
-
* - Event forwarding from InputPrompt
|
|
12
|
-
* - Clearing for scrolling output
|
|
13
|
-
* - State management for agent running/idle modes
|
|
14
18
|
*/
|
|
15
19
|
import { EventEmitter } from 'events';
|
|
16
20
|
import type { TodoItem, AgentMode } from './types.js';
|
|
@@ -40,6 +44,7 @@ export declare class Footer extends EventEmitter {
|
|
|
40
44
|
private cursorLineFromBottom;
|
|
41
45
|
private projectName;
|
|
42
46
|
private externalRendererEnabled;
|
|
47
|
+
private activeTeamAgent;
|
|
43
48
|
private readonly renderInterval;
|
|
44
49
|
private renderTimer;
|
|
45
50
|
private needsRender;
|
|
@@ -77,6 +82,31 @@ export declare class Footer extends EventEmitter {
|
|
|
77
82
|
* Get the current project name
|
|
78
83
|
*/
|
|
79
84
|
getProjectName(): string | null;
|
|
85
|
+
/**
|
|
86
|
+
* Set the active team agent (displayed in footer)
|
|
87
|
+
* Pass null to clear (default agent or no team)
|
|
88
|
+
*/
|
|
89
|
+
setActiveTeamAgent(agent: {
|
|
90
|
+
id: string;
|
|
91
|
+
displayName: string;
|
|
92
|
+
mascot: string;
|
|
93
|
+
} | null): void;
|
|
94
|
+
/**
|
|
95
|
+
* Set the callback to get available team agents for $ autocomplete
|
|
96
|
+
*/
|
|
97
|
+
setAgentSuggestionsCallback(callback: (() => {
|
|
98
|
+
id: string;
|
|
99
|
+
displayName: string;
|
|
100
|
+
mascot: string;
|
|
101
|
+
}[]) | undefined): void;
|
|
102
|
+
/**
|
|
103
|
+
* Get the active team agent
|
|
104
|
+
*/
|
|
105
|
+
getActiveTeamAgent(): {
|
|
106
|
+
id: string;
|
|
107
|
+
displayName: string;
|
|
108
|
+
mascot: string;
|
|
109
|
+
} | null;
|
|
80
110
|
/**
|
|
81
111
|
* Update the todo list
|
|
82
112
|
*/
|
|
@@ -95,9 +125,26 @@ export declare class Footer extends EventEmitter {
|
|
|
95
125
|
*/
|
|
96
126
|
setSpinnerText(text: string | null): void;
|
|
97
127
|
/**
|
|
98
|
-
* Add tokens to the spinner counter
|
|
128
|
+
* Add tokens to the spinner counter (legacy)
|
|
99
129
|
*/
|
|
100
130
|
addTokens(count: number): void;
|
|
131
|
+
/**
|
|
132
|
+
* Add input/output tokens separately (new API for live display)
|
|
133
|
+
*/
|
|
134
|
+
addTokensDetailed(inputTokens: number, outputTokens: number): void;
|
|
135
|
+
/**
|
|
136
|
+
* Get current token counts
|
|
137
|
+
*/
|
|
138
|
+
getTokenCounts(): {
|
|
139
|
+
input: number;
|
|
140
|
+
output: number;
|
|
141
|
+
total: number;
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Set whether extended thinking mode is active
|
|
145
|
+
* Shows "thinking" indicator in status line
|
|
146
|
+
*/
|
|
147
|
+
setThinking(thinking: boolean): void;
|
|
101
148
|
/**
|
|
102
149
|
* Called when a subagent starts
|
|
103
150
|
*/
|
|
@@ -248,6 +295,26 @@ export declare class Footer extends EventEmitter {
|
|
|
248
295
|
* Render mode indicator line
|
|
249
296
|
*/
|
|
250
297
|
private renderModeIndicator;
|
|
298
|
+
/**
|
|
299
|
+
* Render agent indicator line (only when team agent is active and not default)
|
|
300
|
+
* Returns empty string if no team agent or default agent.
|
|
301
|
+
* Format: "[◈_◈] $arch (Solution Architect) /team to switch"
|
|
302
|
+
*/
|
|
303
|
+
private renderAgentIndicator;
|
|
304
|
+
/**
|
|
305
|
+
* Render pending requests indicator (Phase 3b: Background Agents)
|
|
306
|
+
* Shows count of pending requests from background agents if any.
|
|
307
|
+
* Format: "⚠ 2 pending requests [/pending to view]"
|
|
308
|
+
* Returns empty string if no pending requests.
|
|
309
|
+
*/
|
|
310
|
+
private renderPendingRequestsIndicator;
|
|
311
|
+
/**
|
|
312
|
+
* Render terminal count indicator (multi-terminal awareness).
|
|
313
|
+
* Shows count of active terminal sessions if more than 1.
|
|
314
|
+
* Format: "+ 2 terminals [/terminals]"
|
|
315
|
+
* Returns empty string if only this terminal is active.
|
|
316
|
+
*/
|
|
317
|
+
private renderTerminalCountIndicator;
|
|
251
318
|
/**
|
|
252
319
|
* Calculate how many terminal rows a line takes (accounting for wrapping)
|
|
253
320
|
* Uses unified line-utils for consistent calculation across all components.
|