@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
package/dist/ui/footer.js
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 { MODE_INFO } from './types.js';
|
|
@@ -21,6 +25,8 @@ import { InputPrompt, DEFAULT_COMMANDS } from './input-prompt.js';
|
|
|
21
25
|
import { SubagentRenderer } from './subagent-renderer.js';
|
|
22
26
|
import { debugLog, debugRender } from '../utils/debug-log.js';
|
|
23
27
|
import { getPhysicalLineCount, getVisibleLength } from './line-utils.js';
|
|
28
|
+
import { getPendingRequestsManager } from '../multi-agent/index.js';
|
|
29
|
+
import { getSessionRegistry } from '../multi-agent/session-registry.js';
|
|
24
30
|
// =============================================================================
|
|
25
31
|
// Footer Class
|
|
26
32
|
// =============================================================================
|
|
@@ -39,6 +45,7 @@ export class Footer extends EventEmitter {
|
|
|
39
45
|
cursorLineFromBottom = 0; // Track cursor position for clear()
|
|
40
46
|
projectName = null; // Current active project name
|
|
41
47
|
externalRendererEnabled = false; // When true, skip internal render loop
|
|
48
|
+
activeTeamAgent = null; // Active team agent
|
|
42
49
|
// Render loop
|
|
43
50
|
renderInterval;
|
|
44
51
|
renderTimer = null;
|
|
@@ -88,6 +95,18 @@ export class Footer extends EventEmitter {
|
|
|
88
95
|
this.subagentRenderer.toggleExpand();
|
|
89
96
|
this.needsRender = true;
|
|
90
97
|
});
|
|
98
|
+
// Phase 3b: Listen to pending requests changes for footer indicator
|
|
99
|
+
const pendingManager = getPendingRequestsManager();
|
|
100
|
+
pendingManager.on('count-changed', () => {
|
|
101
|
+
this.needsRender = true;
|
|
102
|
+
});
|
|
103
|
+
// Multi-terminal: Listen to session count changes from heartbeat
|
|
104
|
+
const registry = getSessionRegistry();
|
|
105
|
+
if (registry) {
|
|
106
|
+
registry.onCountChange(() => {
|
|
107
|
+
this.needsRender = true;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
91
110
|
}
|
|
92
111
|
// ===========================================================================
|
|
93
112
|
// Public API
|
|
@@ -197,6 +216,26 @@ export class Footer extends EventEmitter {
|
|
|
197
216
|
getProjectName() {
|
|
198
217
|
return this.projectName;
|
|
199
218
|
}
|
|
219
|
+
/**
|
|
220
|
+
* Set the active team agent (displayed in footer)
|
|
221
|
+
* Pass null to clear (default agent or no team)
|
|
222
|
+
*/
|
|
223
|
+
setActiveTeamAgent(agent) {
|
|
224
|
+
this.activeTeamAgent = agent;
|
|
225
|
+
this.needsRender = true;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Set the callback to get available team agents for $ autocomplete
|
|
229
|
+
*/
|
|
230
|
+
setAgentSuggestionsCallback(callback) {
|
|
231
|
+
this.inputPrompt.setAgentSuggestionsCallback(callback);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get the active team agent
|
|
235
|
+
*/
|
|
236
|
+
getActiveTeamAgent() {
|
|
237
|
+
return this.activeTeamAgent;
|
|
238
|
+
}
|
|
200
239
|
/**
|
|
201
240
|
* Update the todo list
|
|
202
241
|
*/
|
|
@@ -227,11 +266,31 @@ export class Footer extends EventEmitter {
|
|
|
227
266
|
this.needsRender = true;
|
|
228
267
|
}
|
|
229
268
|
/**
|
|
230
|
-
* Add tokens to the spinner counter
|
|
269
|
+
* Add tokens to the spinner counter (legacy)
|
|
231
270
|
*/
|
|
232
271
|
addTokens(count) {
|
|
233
272
|
this.todoZone.addTokens(count);
|
|
234
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
* Add input/output tokens separately (new API for live display)
|
|
276
|
+
*/
|
|
277
|
+
addTokensDetailed(inputTokens, outputTokens) {
|
|
278
|
+
this.todoZone.addTokensDetailed(inputTokens, outputTokens);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Get current token counts
|
|
282
|
+
*/
|
|
283
|
+
getTokenCounts() {
|
|
284
|
+
return this.todoZone.getTokenCounts();
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Set whether extended thinking mode is active
|
|
288
|
+
* Shows "thinking" indicator in status line
|
|
289
|
+
*/
|
|
290
|
+
setThinking(thinking) {
|
|
291
|
+
this.todoZone.setThinking(thinking);
|
|
292
|
+
this.needsRender = true;
|
|
293
|
+
}
|
|
235
294
|
// ===========================================================================
|
|
236
295
|
// Subagent API
|
|
237
296
|
// ===========================================================================
|
|
@@ -438,17 +497,32 @@ export class Footer extends EventEmitter {
|
|
|
438
497
|
// 2. Todo zone (spinner + todos)
|
|
439
498
|
const todoLines = this.todoZone.render();
|
|
440
499
|
allLines.push(...todoLines);
|
|
441
|
-
// 3.
|
|
500
|
+
// 3. Agent indicator (only if team agent is active and not default)
|
|
501
|
+
const agentIndicator = this.renderAgentIndicator();
|
|
502
|
+
if (agentIndicator) {
|
|
503
|
+
allLines.push(agentIndicator);
|
|
504
|
+
}
|
|
505
|
+
// 3b. Pending requests indicator (Phase 3b)
|
|
506
|
+
const pendingIndicator = this.renderPendingRequestsIndicator();
|
|
507
|
+
if (pendingIndicator) {
|
|
508
|
+
allLines.push(pendingIndicator);
|
|
509
|
+
}
|
|
510
|
+
// 3c. Terminal count indicator (multi-terminal awareness)
|
|
511
|
+
const terminalIndicator = this.renderTerminalCountIndicator();
|
|
512
|
+
if (terminalIndicator) {
|
|
513
|
+
allLines.push(terminalIndicator);
|
|
514
|
+
}
|
|
515
|
+
// 4. Queued inputs
|
|
442
516
|
const queuedInputs = this.inputPrompt.getQueuedInputs();
|
|
443
517
|
for (const queued of queuedInputs) {
|
|
444
518
|
allLines.push(s.muted(`queued: "${queued}"`));
|
|
445
519
|
}
|
|
446
|
-
//
|
|
520
|
+
// 5. Input prompt
|
|
447
521
|
const inputLines = this.inputPrompt.render();
|
|
448
522
|
allLines.push(...inputLines);
|
|
449
|
-
//
|
|
523
|
+
// 6. Mode indicator (below input, before autocomplete)
|
|
450
524
|
allLines.push(this.renderModeIndicator());
|
|
451
|
-
//
|
|
525
|
+
// 7. Autocomplete dropdown (if active)
|
|
452
526
|
const autocompleteLines = this.inputPrompt.getAutocompleteLines();
|
|
453
527
|
allLines.push(...autocompleteLines);
|
|
454
528
|
return allLines;
|
|
@@ -467,6 +541,20 @@ export class Footer extends EventEmitter {
|
|
|
467
541
|
}
|
|
468
542
|
// Todo lines
|
|
469
543
|
linesBeforeInput += this.todoZone.render().length;
|
|
544
|
+
// Agent indicator line (if active team agent and not default)
|
|
545
|
+
if (this.activeTeamAgent && this.activeTeamAgent.id !== 'default') {
|
|
546
|
+
linesBeforeInput += 1;
|
|
547
|
+
}
|
|
548
|
+
// Pending indicator line (Phase 3b)
|
|
549
|
+
const pendingIndicator = this.renderPendingRequestsIndicator();
|
|
550
|
+
if (pendingIndicator) {
|
|
551
|
+
linesBeforeInput += 1;
|
|
552
|
+
}
|
|
553
|
+
// Terminal count indicator (multi-terminal awareness)
|
|
554
|
+
const terminalIndicator = this.renderTerminalCountIndicator();
|
|
555
|
+
if (terminalIndicator) {
|
|
556
|
+
linesBeforeInput += 1;
|
|
557
|
+
}
|
|
470
558
|
// Queued inputs
|
|
471
559
|
linesBeforeInput += this.inputPrompt.getQueuedInputs().length;
|
|
472
560
|
// cursorInfo.row is 1-indexed (row 1 = first line after separator)
|
|
@@ -577,18 +665,39 @@ export class Footer extends EventEmitter {
|
|
|
577
665
|
// 2. Todo zone (spinner + todos)
|
|
578
666
|
const todoLines = this.todoZone.render();
|
|
579
667
|
allLines.push(...todoLines);
|
|
580
|
-
// 3.
|
|
668
|
+
// 3. Agent indicator (only if team agent is active and not default)
|
|
669
|
+
let agentIndicatorLineCount = 0;
|
|
670
|
+
const agentIndicator = this.renderAgentIndicator();
|
|
671
|
+
if (agentIndicator) {
|
|
672
|
+
allLines.push(agentIndicator);
|
|
673
|
+
agentIndicatorLineCount = 1;
|
|
674
|
+
}
|
|
675
|
+
// 3b. Pending requests indicator (Phase 3b: Background Agents)
|
|
676
|
+
let pendingIndicatorLineCount = 0;
|
|
677
|
+
const pendingIndicator = this.renderPendingRequestsIndicator();
|
|
678
|
+
if (pendingIndicator) {
|
|
679
|
+
allLines.push(pendingIndicator);
|
|
680
|
+
pendingIndicatorLineCount = 1;
|
|
681
|
+
}
|
|
682
|
+
// 3c. Terminal count indicator (multi-terminal awareness)
|
|
683
|
+
let terminalIndicatorLineCount = 0;
|
|
684
|
+
const terminalIndicator = this.renderTerminalCountIndicator();
|
|
685
|
+
if (terminalIndicator) {
|
|
686
|
+
allLines.push(terminalIndicator);
|
|
687
|
+
terminalIndicatorLineCount = 1;
|
|
688
|
+
}
|
|
689
|
+
// 4. Queued inputs
|
|
581
690
|
const s = getStyles();
|
|
582
691
|
const queuedInputs = this.inputPrompt.getQueuedInputs();
|
|
583
692
|
for (const queued of queuedInputs) {
|
|
584
693
|
allLines.push(s.muted(`queued: "${queued}"`));
|
|
585
694
|
}
|
|
586
|
-
//
|
|
695
|
+
// 5. Input prompt
|
|
587
696
|
const inputLines = this.inputPrompt.render();
|
|
588
697
|
allLines.push(...inputLines);
|
|
589
|
-
//
|
|
698
|
+
// 6. Mode indicator (below input, before autocomplete)
|
|
590
699
|
allLines.push(this.renderModeIndicator());
|
|
591
|
-
//
|
|
700
|
+
// 7. Autocomplete dropdown (if active)
|
|
592
701
|
const autocompleteLines = this.inputPrompt.getAutocompleteLines();
|
|
593
702
|
allLines.push(...autocompleteLines);
|
|
594
703
|
// Calculate new height BEFORE clearing (to clear extra lines if growing)
|
|
@@ -616,7 +725,7 @@ export class Footer extends EventEmitter {
|
|
|
616
725
|
this.lastRenderHeight = newHeight;
|
|
617
726
|
debugRender('Footer:render', `lastRenderHeight set to ${String(newHeight)}`);
|
|
618
727
|
// Position cursor within input prompt
|
|
619
|
-
this.positionCursor(allLines, subagentLineCount + todoLines.length + queuedInputs.length);
|
|
728
|
+
this.positionCursor(allLines, subagentLineCount + todoLines.length + agentIndicatorLineCount + pendingIndicatorLineCount + terminalIndicatorLineCount + queuedInputs.length);
|
|
620
729
|
}
|
|
621
730
|
finally {
|
|
622
731
|
this.isRendering = false;
|
|
@@ -658,6 +767,54 @@ export class Footer extends EventEmitter {
|
|
|
658
767
|
const padding = Math.max(2, termWidth - leftVisible - rightVisible);
|
|
659
768
|
return leftPart + ' '.repeat(padding) + rightPart;
|
|
660
769
|
}
|
|
770
|
+
/**
|
|
771
|
+
* Render agent indicator line (only when team agent is active and not default)
|
|
772
|
+
* Returns empty string if no team agent or default agent.
|
|
773
|
+
* Format: "[◈_◈] $arch (Solution Architect) /team to switch"
|
|
774
|
+
*/
|
|
775
|
+
renderAgentIndicator() {
|
|
776
|
+
if (!this.activeTeamAgent || this.activeTeamAgent.id === 'default') {
|
|
777
|
+
return '';
|
|
778
|
+
}
|
|
779
|
+
const s = getStyles();
|
|
780
|
+
const agent = this.activeTeamAgent;
|
|
781
|
+
const label = `${agent.mascot} $${agent.id} (${agent.displayName})`;
|
|
782
|
+
const hint = '/team to switch';
|
|
783
|
+
return s.secondary(label) + ' ' + s.muted(hint);
|
|
784
|
+
}
|
|
785
|
+
/**
|
|
786
|
+
* Render pending requests indicator (Phase 3b: Background Agents)
|
|
787
|
+
* Shows count of pending requests from background agents if any.
|
|
788
|
+
* Format: "⚠ 2 pending requests [/pending to view]"
|
|
789
|
+
* Returns empty string if no pending requests.
|
|
790
|
+
*/
|
|
791
|
+
renderPendingRequestsIndicator() {
|
|
792
|
+
const pendingManager = getPendingRequestsManager();
|
|
793
|
+
const count = pendingManager.getCount();
|
|
794
|
+
if (count === 0) {
|
|
795
|
+
return '';
|
|
796
|
+
}
|
|
797
|
+
const s = getStyles();
|
|
798
|
+
const countText = count === 1 ? '1 pending request' : `${String(count)} pending requests`;
|
|
799
|
+
return s.warning(`⚠ ${countText}`) + ' ' + s.muted('[/pending to view]');
|
|
800
|
+
}
|
|
801
|
+
/**
|
|
802
|
+
* Render terminal count indicator (multi-terminal awareness).
|
|
803
|
+
* Shows count of active terminal sessions if more than 1.
|
|
804
|
+
* Format: "+ 2 terminals [/terminals]"
|
|
805
|
+
* Returns empty string if only this terminal is active.
|
|
806
|
+
*/
|
|
807
|
+
renderTerminalCountIndicator() {
|
|
808
|
+
const registry = getSessionRegistry();
|
|
809
|
+
if (!registry)
|
|
810
|
+
return '';
|
|
811
|
+
const count = registry.getActiveSessionCount();
|
|
812
|
+
if (count <= 1)
|
|
813
|
+
return '';
|
|
814
|
+
const s = getStyles();
|
|
815
|
+
const text = `${String(count)} terminals`;
|
|
816
|
+
return s.muted(`+ ${text}`) + ' ' + s.muted('[/terminals]');
|
|
817
|
+
}
|
|
661
818
|
/**
|
|
662
819
|
* Calculate how many terminal rows a line takes (accounting for wrapping)
|
|
663
820
|
* Uses unified line-utils for consistent calculation across all components.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input state controller.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from TerminalUI — owns all input state (lines, cursor,
|
|
5
|
+
* history, suggestion, queued inputs) and their manipulation methods.
|
|
6
|
+
* TerminalUI delegates to this controller via getter/setter wrappers.
|
|
7
|
+
*/
|
|
8
|
+
export declare class InputController {
|
|
9
|
+
lines: string[];
|
|
10
|
+
currentLine: number;
|
|
11
|
+
cursorPos: number;
|
|
12
|
+
readonly history: string[];
|
|
13
|
+
historyIndex: number;
|
|
14
|
+
savedInput: string;
|
|
15
|
+
suggestion: string | null;
|
|
16
|
+
queuedInputs: string[];
|
|
17
|
+
/** Get the full input value (all lines joined with newlines). */
|
|
18
|
+
getInputValue(): string;
|
|
19
|
+
/** Get the current line content. */
|
|
20
|
+
getCurrentLineContent(): string;
|
|
21
|
+
/** Clear input and reset to single empty line. */
|
|
22
|
+
clearInput(): void;
|
|
23
|
+
addToHistory(input: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Navigate to older history entry.
|
|
26
|
+
* @param isAutocompleteActive - when true, navigation is blocked
|
|
27
|
+
* @returns true if input changed
|
|
28
|
+
*/
|
|
29
|
+
navigateHistoryUp(isAutocompleteActive: boolean): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Navigate to newer history entry.
|
|
32
|
+
* @param isAutocompleteActive - when true, navigation is blocked
|
|
33
|
+
* @returns true if input changed
|
|
34
|
+
*/
|
|
35
|
+
navigateHistoryDown(isAutocompleteActive: boolean): boolean;
|
|
36
|
+
resetHistoryNavigation(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Move cursor to previous word boundary (Option+Left).
|
|
39
|
+
* @returns true if cursor moved (caller should trigger render)
|
|
40
|
+
*/
|
|
41
|
+
moveWordLeft(): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Move cursor to next word boundary (Option+Right).
|
|
44
|
+
* @returns true if cursor moved (caller should trigger render)
|
|
45
|
+
*/
|
|
46
|
+
moveWordRight(): boolean;
|
|
47
|
+
getQueuedInputs(): string[];
|
|
48
|
+
popQueuedInput(): string | null;
|
|
49
|
+
hasQueuedInput(): boolean;
|
|
50
|
+
clearQueue(): void;
|
|
51
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input state controller.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from TerminalUI — owns all input state (lines, cursor,
|
|
5
|
+
* history, suggestion, queued inputs) and their manipulation methods.
|
|
6
|
+
* TerminalUI delegates to this controller via getter/setter wrappers.
|
|
7
|
+
*/
|
|
8
|
+
export class InputController {
|
|
9
|
+
// Core multiline input state
|
|
10
|
+
lines = [''];
|
|
11
|
+
currentLine = 0;
|
|
12
|
+
cursorPos = 0;
|
|
13
|
+
// Command history
|
|
14
|
+
history = [];
|
|
15
|
+
historyIndex = -1;
|
|
16
|
+
savedInput = '';
|
|
17
|
+
// Ghost text suggestion
|
|
18
|
+
suggestion = null;
|
|
19
|
+
// Queued user inputs (when agent is busy)
|
|
20
|
+
queuedInputs = [];
|
|
21
|
+
// ===========================================================================
|
|
22
|
+
// Input value helpers
|
|
23
|
+
// ===========================================================================
|
|
24
|
+
/** Get the full input value (all lines joined with newlines). */
|
|
25
|
+
getInputValue() {
|
|
26
|
+
return this.lines.join('\n');
|
|
27
|
+
}
|
|
28
|
+
/** Get the current line content. */
|
|
29
|
+
getCurrentLineContent() {
|
|
30
|
+
return this.lines[this.currentLine];
|
|
31
|
+
}
|
|
32
|
+
/** Clear input and reset to single empty line. */
|
|
33
|
+
clearInput() {
|
|
34
|
+
this.lines = [''];
|
|
35
|
+
this.currentLine = 0;
|
|
36
|
+
this.cursorPos = 0;
|
|
37
|
+
}
|
|
38
|
+
// ===========================================================================
|
|
39
|
+
// History
|
|
40
|
+
// ===========================================================================
|
|
41
|
+
addToHistory(input) {
|
|
42
|
+
const trimmed = input.trim();
|
|
43
|
+
// Don't add empty or duplicate consecutive entries
|
|
44
|
+
if (trimmed && (this.history.length === 0 || this.history[this.history.length - 1] !== trimmed)) {
|
|
45
|
+
this.history.push(trimmed);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Navigate to older history entry.
|
|
50
|
+
* @param isAutocompleteActive - when true, navigation is blocked
|
|
51
|
+
* @returns true if input changed
|
|
52
|
+
*/
|
|
53
|
+
navigateHistoryUp(isAutocompleteActive) {
|
|
54
|
+
if (isAutocompleteActive)
|
|
55
|
+
return false;
|
|
56
|
+
if (this.history.length === 0)
|
|
57
|
+
return false;
|
|
58
|
+
// Save current input when starting to navigate
|
|
59
|
+
if (this.historyIndex === -1) {
|
|
60
|
+
this.savedInput = this.getInputValue();
|
|
61
|
+
}
|
|
62
|
+
// Navigate to older entry
|
|
63
|
+
if (this.historyIndex < this.history.length - 1) {
|
|
64
|
+
this.historyIndex++;
|
|
65
|
+
const historyEntry = this.history[this.history.length - 1 - this.historyIndex];
|
|
66
|
+
// History entries are single-line (newlines stripped on save)
|
|
67
|
+
this.lines = [historyEntry];
|
|
68
|
+
this.currentLine = 0;
|
|
69
|
+
this.cursorPos = historyEntry.length;
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Navigate to newer history entry.
|
|
76
|
+
* @param isAutocompleteActive - when true, navigation is blocked
|
|
77
|
+
* @returns true if input changed
|
|
78
|
+
*/
|
|
79
|
+
navigateHistoryDown(isAutocompleteActive) {
|
|
80
|
+
if (isAutocompleteActive)
|
|
81
|
+
return false;
|
|
82
|
+
if (this.historyIndex < 0)
|
|
83
|
+
return false;
|
|
84
|
+
this.historyIndex--;
|
|
85
|
+
if (this.historyIndex === -1) {
|
|
86
|
+
// Restore saved input (may be multiline)
|
|
87
|
+
this.lines = this.savedInput.split('\n');
|
|
88
|
+
if (this.lines.length === 0)
|
|
89
|
+
this.lines = [''];
|
|
90
|
+
this.currentLine = this.lines.length - 1;
|
|
91
|
+
this.cursorPos = this.lines[this.currentLine].length;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Navigate to newer entry
|
|
95
|
+
const historyEntry = this.history[this.history.length - 1 - this.historyIndex];
|
|
96
|
+
this.lines = [historyEntry];
|
|
97
|
+
this.currentLine = 0;
|
|
98
|
+
this.cursorPos = historyEntry.length;
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
resetHistoryNavigation() {
|
|
103
|
+
this.historyIndex = -1;
|
|
104
|
+
this.savedInput = '';
|
|
105
|
+
}
|
|
106
|
+
// ===========================================================================
|
|
107
|
+
// Word movement
|
|
108
|
+
// ===========================================================================
|
|
109
|
+
/**
|
|
110
|
+
* Move cursor to previous word boundary (Option+Left).
|
|
111
|
+
* @returns true if cursor moved (caller should trigger render)
|
|
112
|
+
*/
|
|
113
|
+
moveWordLeft() {
|
|
114
|
+
const line = this.lines[this.currentLine];
|
|
115
|
+
if (this.cursorPos > 0) {
|
|
116
|
+
let pos = this.cursorPos;
|
|
117
|
+
// Skip spaces
|
|
118
|
+
while (pos > 0 && line[pos - 1] === ' ')
|
|
119
|
+
pos--;
|
|
120
|
+
// Skip word
|
|
121
|
+
while (pos > 0 && line[pos - 1] !== ' ')
|
|
122
|
+
pos--;
|
|
123
|
+
this.cursorPos = pos;
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
else if (this.currentLine > 0) {
|
|
127
|
+
// Move to end of previous line
|
|
128
|
+
this.currentLine--;
|
|
129
|
+
this.cursorPos = this.lines[this.currentLine].length;
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Move cursor to next word boundary (Option+Right).
|
|
136
|
+
* @returns true if cursor moved (caller should trigger render)
|
|
137
|
+
*/
|
|
138
|
+
moveWordRight() {
|
|
139
|
+
const line = this.lines[this.currentLine];
|
|
140
|
+
if (this.cursorPos < line.length) {
|
|
141
|
+
let pos = this.cursorPos;
|
|
142
|
+
// Skip word
|
|
143
|
+
while (pos < line.length && line[pos] !== ' ')
|
|
144
|
+
pos++;
|
|
145
|
+
// Skip spaces
|
|
146
|
+
while (pos < line.length && line[pos] === ' ')
|
|
147
|
+
pos++;
|
|
148
|
+
this.cursorPos = pos;
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
else if (this.currentLine < this.lines.length - 1) {
|
|
152
|
+
// Move to start of next line
|
|
153
|
+
this.currentLine++;
|
|
154
|
+
this.cursorPos = 0;
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
// ===========================================================================
|
|
160
|
+
// Input queue
|
|
161
|
+
// ===========================================================================
|
|
162
|
+
getQueuedInputs() {
|
|
163
|
+
return [...this.queuedInputs];
|
|
164
|
+
}
|
|
165
|
+
popQueuedInput() {
|
|
166
|
+
if (this.queuedInputs.length === 0)
|
|
167
|
+
return null;
|
|
168
|
+
return this.queuedInputs.shift() ?? null;
|
|
169
|
+
}
|
|
170
|
+
hasQueuedInput() {
|
|
171
|
+
return this.queuedInputs.length > 0;
|
|
172
|
+
}
|
|
173
|
+
clearQueue() {
|
|
174
|
+
this.queuedInputs = [];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
@@ -21,6 +21,14 @@ export declare const DEFAULT_COMMANDS: CommandOption[];
|
|
|
21
21
|
* Uses unified line-utils for consistent behavior across components.
|
|
22
22
|
*/
|
|
23
23
|
export declare function stripAnsi(str: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Agent suggestion for $ autocomplete
|
|
26
|
+
*/
|
|
27
|
+
export interface AgentSuggestion {
|
|
28
|
+
id: string;
|
|
29
|
+
displayName: string;
|
|
30
|
+
mascot: string;
|
|
31
|
+
}
|
|
24
32
|
export interface InputPromptEvents {
|
|
25
33
|
submit: (input: string) => void;
|
|
26
34
|
command: (command: string, args: string) => void;
|
|
@@ -33,15 +41,22 @@ export interface InputPromptOptions {
|
|
|
33
41
|
prompt?: string;
|
|
34
42
|
showSeparators?: boolean;
|
|
35
43
|
commands?: CommandOption[];
|
|
44
|
+
/** Callback to get available team agents for $ autocomplete */
|
|
45
|
+
getAgentSuggestions?: () => AgentSuggestion[];
|
|
46
|
+
/** Callback to get available commands for / autocomplete */
|
|
47
|
+
getCommands?: () => CommandOption[];
|
|
36
48
|
}
|
|
37
49
|
export declare class InputPrompt extends EventEmitter {
|
|
38
50
|
private prompt;
|
|
39
51
|
private promptLen;
|
|
40
52
|
private readonly showSeparators;
|
|
41
53
|
private readonly commands;
|
|
54
|
+
private getAgentSuggestions?;
|
|
55
|
+
private readonly getCommands?;
|
|
42
56
|
private state;
|
|
43
57
|
private autocomplete;
|
|
44
58
|
private fileAutocomplete;
|
|
59
|
+
private agentAutocomplete;
|
|
45
60
|
private readonly history;
|
|
46
61
|
private historyIndex;
|
|
47
62
|
private savedInput;
|
|
@@ -72,6 +87,10 @@ export declare class InputPrompt extends EventEmitter {
|
|
|
72
87
|
* Clear the current suggestion
|
|
73
88
|
*/
|
|
74
89
|
clearSuggestion(): void;
|
|
90
|
+
/**
|
|
91
|
+
* Set the callback to get available team agents for $ autocomplete
|
|
92
|
+
*/
|
|
93
|
+
setAgentSuggestionsCallback(callback: (() => AgentSuggestion[]) | undefined): void;
|
|
75
94
|
/**
|
|
76
95
|
* Start input capture (non-blocking, event-driven)
|
|
77
96
|
*/
|