@compilr-dev/cli 0.5.0 → 0.5.1
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/README.md +236 -68
- 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 +266 -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 +244 -23
- 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 +5 -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 +3 -2
- package/dist/repl-v2.d.ts +401 -2
- package/dist/repl-v2.js +2577 -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 +108 -0
- package/dist/tool-names.js +227 -0
- package/dist/tools/anchor-tools.d.ts +4 -4
- package/dist/tools/anchor-tools.js +1 -1
- package/dist/tools/artifact-tools.d.ts +42 -0
- package/dist/tools/artifact-tools.js +328 -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-wrappers.d.ts +5 -3
- package/dist/tools/backlog-wrappers.js +16 -1
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +1 -1
- package/dist/tools/db-tools.d.ts +8 -61
- package/dist/tools/db-tools.js +8 -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/document-db.d.ts +5 -5
- package/dist/tools/document-db.js +1 -1
- 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/plan-tools.d.ts +54 -0
- package/dist/tools/plan-tools.js +338 -0
- package/dist/tools/platform-adapter.d.ts +29 -0
- package/dist/tools/platform-adapter.js +394 -0
- package/dist/tools/project-db.d.ts +5 -73
- package/dist/tools/project-db.js +5 -336
- package/dist/tools/recall-work-tool.d.ts +18 -0
- package/dist/tools/recall-work-tool.js +82 -0
- package/dist/tools/workitem-db.d.ts +43 -11
- package/dist/tools/workitem-db.js +186 -5
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +237 -47
- 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 +51 -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.js +5 -1
- 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 +512 -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 +25 -12
- 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/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/input-prompt.js
CHANGED
|
@@ -14,21 +14,22 @@
|
|
|
14
14
|
* - 'change' - Input text changed
|
|
15
15
|
*/
|
|
16
16
|
import { EventEmitter } from 'events';
|
|
17
|
-
import
|
|
17
|
+
import { Chalk } from 'chalk';
|
|
18
18
|
import { getStyles } from '../themes/index.js';
|
|
19
19
|
import * as terminal from './terminal.js';
|
|
20
|
-
import {
|
|
21
|
-
import { getFileMatches, extractAtMention, replaceAtMention, } from './file-autocomplete.js';
|
|
20
|
+
import { getFileMatches, extractAtMention, replaceAtMention, extractDollarMention, replaceDollarMention, } from './file-autocomplete.js';
|
|
22
21
|
import { debugRender } from '../utils/debug-log.js';
|
|
23
22
|
import { stripAnsi as unifiedStripAnsi, getPhysicalLineCountWithOffset, } from './line-utils.js';
|
|
24
23
|
// =============================================================================
|
|
25
24
|
// Constants
|
|
26
25
|
// =============================================================================
|
|
26
|
+
// Force color output (level 3 = 24-bit true color)
|
|
27
|
+
const chalk = new Chalk({ level: 3 });
|
|
27
28
|
const MAX_VISIBLE_COMMANDS = 10;
|
|
28
29
|
// =============================================================================
|
|
29
30
|
// Default Commands (from central registry)
|
|
30
31
|
// =============================================================================
|
|
31
|
-
export const DEFAULT_COMMANDS =
|
|
32
|
+
export const DEFAULT_COMMANDS = [];
|
|
32
33
|
// =============================================================================
|
|
33
34
|
// Helper Functions
|
|
34
35
|
// =============================================================================
|
|
@@ -39,6 +40,26 @@ export const DEFAULT_COMMANDS = getAutocompleteCommands();
|
|
|
39
40
|
export function stripAnsi(str) {
|
|
40
41
|
return unifiedStripAnsi(str);
|
|
41
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Format input text with syntax highlighting for special prefixes.
|
|
45
|
+
* - $agent references: bold + secondary color
|
|
46
|
+
* - @path references: secondary color
|
|
47
|
+
* - /commands: primary color
|
|
48
|
+
*/
|
|
49
|
+
function formatInputText(text) {
|
|
50
|
+
const s = getStyles();
|
|
51
|
+
let result = text;
|
|
52
|
+
// Format $agent references - bold + secondary
|
|
53
|
+
// Match $word at word boundaries (not inside other text)
|
|
54
|
+
result = result.replace(/(?<![$\w])\$([a-zA-Z_][a-zA-Z0-9_]*)\b/g, (_match, agentId) => chalk.bold(s.secondary(`$${agentId}`)));
|
|
55
|
+
// Format @path references - secondary (not bold, paths can be long)
|
|
56
|
+
// Match @word or @path/to/file patterns
|
|
57
|
+
result = result.replace(/(?<![@\w])@([\w./-]+)/g, (_match, path) => s.secondary(`@${path}`));
|
|
58
|
+
// Format /commands at start of input - primary color
|
|
59
|
+
// Only match at start of line (after optional whitespace)
|
|
60
|
+
result = result.replace(/^(\s*)(\/[a-zA-Z][a-zA-Z0-9_-]*)/g, (_match, space, cmd) => space + s.primary(cmd));
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
42
63
|
/**
|
|
43
64
|
* Calculate physical lines for wrapped text
|
|
44
65
|
* Uses unified line-utils for consistent behavior across components.
|
|
@@ -108,6 +129,8 @@ export class InputPrompt extends EventEmitter {
|
|
|
108
129
|
promptLen;
|
|
109
130
|
showSeparators;
|
|
110
131
|
commands;
|
|
132
|
+
getAgentSuggestions;
|
|
133
|
+
getCommands;
|
|
111
134
|
// Input state
|
|
112
135
|
state = {
|
|
113
136
|
lines: [''],
|
|
@@ -129,6 +152,16 @@ export class InputPrompt extends EventEmitter {
|
|
|
129
152
|
scrollOffset: 0,
|
|
130
153
|
partial: '',
|
|
131
154
|
};
|
|
155
|
+
// Agent autocomplete (for $agents)
|
|
156
|
+
agentAutocomplete = {
|
|
157
|
+
active: false,
|
|
158
|
+
matches: [],
|
|
159
|
+
selectedIndex: 0,
|
|
160
|
+
scrollOffset: 0,
|
|
161
|
+
partial: '',
|
|
162
|
+
startPos: 0,
|
|
163
|
+
lineIndex: 0,
|
|
164
|
+
};
|
|
132
165
|
// History
|
|
133
166
|
history = [];
|
|
134
167
|
historyIndex = -1;
|
|
@@ -154,6 +187,8 @@ export class InputPrompt extends EventEmitter {
|
|
|
154
187
|
this.promptLen = stripAnsi(this.prompt).length;
|
|
155
188
|
this.showSeparators = options.showSeparators ?? true;
|
|
156
189
|
this.commands = options.commands ?? DEFAULT_COMMANDS;
|
|
190
|
+
this.getAgentSuggestions = options.getAgentSuggestions;
|
|
191
|
+
this.getCommands = options.getCommands;
|
|
157
192
|
}
|
|
158
193
|
// ===========================================================================
|
|
159
194
|
// Public API
|
|
@@ -183,6 +218,12 @@ export class InputPrompt extends EventEmitter {
|
|
|
183
218
|
clearSuggestion() {
|
|
184
219
|
this.suggestion = null;
|
|
185
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* Set the callback to get available team agents for $ autocomplete
|
|
223
|
+
*/
|
|
224
|
+
setAgentSuggestionsCallback(callback) {
|
|
225
|
+
this.getAgentSuggestions = callback;
|
|
226
|
+
}
|
|
186
227
|
/**
|
|
187
228
|
* Start input capture (non-blocking, event-driven)
|
|
188
229
|
*/
|
|
@@ -290,6 +331,15 @@ export class InputPrompt extends EventEmitter {
|
|
|
290
331
|
scrollOffset: 0,
|
|
291
332
|
partial: '',
|
|
292
333
|
};
|
|
334
|
+
this.agentAutocomplete = {
|
|
335
|
+
active: false,
|
|
336
|
+
matches: [],
|
|
337
|
+
selectedIndex: 0,
|
|
338
|
+
scrollOffset: 0,
|
|
339
|
+
partial: '',
|
|
340
|
+
startPos: 0,
|
|
341
|
+
lineIndex: 0,
|
|
342
|
+
};
|
|
293
343
|
}
|
|
294
344
|
/**
|
|
295
345
|
* Add command to history
|
|
@@ -320,7 +370,9 @@ export class InputPrompt extends EventEmitter {
|
|
|
320
370
|
lines.push(linePrompt + s.muted(this.suggestion) + hint);
|
|
321
371
|
}
|
|
322
372
|
else {
|
|
323
|
-
|
|
373
|
+
// Format special prefixes: $agent, @path, /command
|
|
374
|
+
const formattedContent = formatInputText(lineContent);
|
|
375
|
+
lines.push(linePrompt + formattedContent);
|
|
324
376
|
}
|
|
325
377
|
}
|
|
326
378
|
// Bottom separator
|
|
@@ -353,7 +405,34 @@ export class InputPrompt extends EventEmitter {
|
|
|
353
405
|
*/
|
|
354
406
|
getAutocompleteLines() {
|
|
355
407
|
const s = getStyles();
|
|
356
|
-
//
|
|
408
|
+
// Agent autocomplete takes highest priority
|
|
409
|
+
if (this.agentAutocomplete.active && this.agentAutocomplete.matches.length > 0) {
|
|
410
|
+
const lines = [];
|
|
411
|
+
const offset = this.agentAutocomplete.scrollOffset;
|
|
412
|
+
const visible = this.agentAutocomplete.matches.slice(offset, offset + MAX_VISIBLE_COMMANDS);
|
|
413
|
+
const total = this.agentAutocomplete.matches.length;
|
|
414
|
+
// Show scroll indicator if there are more items above
|
|
415
|
+
if (offset > 0) {
|
|
416
|
+
lines.push(s.muted(` ↑ ${String(offset)} more above`));
|
|
417
|
+
}
|
|
418
|
+
for (let i = 0; i < visible.length; i++) {
|
|
419
|
+
const agent = visible[i];
|
|
420
|
+
const actualIndex = offset + i;
|
|
421
|
+
const isSelected = actualIndex === this.agentAutocomplete.selectedIndex;
|
|
422
|
+
const prefix = isSelected ? s.primary('❯ ') : ' ';
|
|
423
|
+
const mascot = agent.mascot + ' ';
|
|
424
|
+
const name = isSelected ? s.primary(chalk.bold('$' + agent.id)) : '$' + agent.id;
|
|
425
|
+
const desc = s.muted(` - ${agent.displayName}`);
|
|
426
|
+
lines.push(`${prefix}${mascot}${name}${desc}`);
|
|
427
|
+
}
|
|
428
|
+
// Show scroll indicator if there are more items below
|
|
429
|
+
const remaining = total - offset - visible.length;
|
|
430
|
+
if (remaining > 0) {
|
|
431
|
+
lines.push(s.muted(` ↓ ${String(remaining)} more below`));
|
|
432
|
+
}
|
|
433
|
+
return lines;
|
|
434
|
+
}
|
|
435
|
+
// File autocomplete takes second priority
|
|
357
436
|
if (this.fileAutocomplete.active && this.fileAutocomplete.matches.length > 0) {
|
|
358
437
|
const lines = [];
|
|
359
438
|
const offset = this.fileAutocomplete.scrollOffset;
|
|
@@ -412,7 +491,8 @@ export class InputPrompt extends EventEmitter {
|
|
|
412
491
|
*/
|
|
413
492
|
isAutocompleteActive() {
|
|
414
493
|
return ((this.autocomplete.active && this.autocomplete.matches.length > 0) ||
|
|
415
|
-
(this.fileAutocomplete.active && this.fileAutocomplete.matches.length > 0)
|
|
494
|
+
(this.fileAutocomplete.active && this.fileAutocomplete.matches.length > 0) ||
|
|
495
|
+
(this.agentAutocomplete.active && this.agentAutocomplete.matches.length > 0));
|
|
416
496
|
}
|
|
417
497
|
/**
|
|
418
498
|
* Get height of rendered content
|
|
@@ -479,6 +559,15 @@ export class InputPrompt extends EventEmitter {
|
|
|
479
559
|
scrollOffset: 0,
|
|
480
560
|
partial: '',
|
|
481
561
|
};
|
|
562
|
+
this.agentAutocomplete = {
|
|
563
|
+
active: false,
|
|
564
|
+
matches: [],
|
|
565
|
+
selectedIndex: 0,
|
|
566
|
+
scrollOffset: 0,
|
|
567
|
+
partial: '',
|
|
568
|
+
startPos: 0,
|
|
569
|
+
lineIndex: 0,
|
|
570
|
+
};
|
|
482
571
|
this.historyIndex = -1;
|
|
483
572
|
this.savedInput = '';
|
|
484
573
|
this.renderedLines = 0;
|
|
@@ -498,6 +587,8 @@ export class InputPrompt extends EventEmitter {
|
|
|
498
587
|
this.autocomplete.matches = [];
|
|
499
588
|
this.autocomplete.selectedIndex = 0;
|
|
500
589
|
this.autocomplete.scrollOffset = 0;
|
|
590
|
+
this.agentAutocomplete.active = false;
|
|
591
|
+
this.agentAutocomplete.matches = [];
|
|
501
592
|
this.fileAutocomplete.active = true;
|
|
502
593
|
this.fileAutocomplete.partial = atMention;
|
|
503
594
|
this.fileAutocomplete.matches = getFileMatches(atMention);
|
|
@@ -513,11 +604,46 @@ export class InputPrompt extends EventEmitter {
|
|
|
513
604
|
this.fileAutocomplete.selectedIndex = 0;
|
|
514
605
|
this.fileAutocomplete.scrollOffset = 0;
|
|
515
606
|
this.fileAutocomplete.partial = '';
|
|
607
|
+
// Check for $ agent autocomplete (anywhere in the current line)
|
|
608
|
+
if (this.getAgentSuggestions) {
|
|
609
|
+
const currentLine = this.state.lines[this.state.currentLine];
|
|
610
|
+
const dollarMention = extractDollarMention(currentLine, this.state.cursorPos);
|
|
611
|
+
if (dollarMention !== null) {
|
|
612
|
+
const partial = dollarMention.partial.toLowerCase();
|
|
613
|
+
const allAgents = this.getAgentSuggestions();
|
|
614
|
+
// Filter agents by partial match
|
|
615
|
+
const matches = allAgents.filter(agent => agent.id.toLowerCase().startsWith(partial) ||
|
|
616
|
+
agent.displayName.toLowerCase().includes(partial));
|
|
617
|
+
if (matches.length > 0) {
|
|
618
|
+
this.agentAutocomplete.active = true;
|
|
619
|
+
this.agentAutocomplete.partial = partial;
|
|
620
|
+
this.agentAutocomplete.matches = matches;
|
|
621
|
+
this.agentAutocomplete.startPos = dollarMention.startPos;
|
|
622
|
+
this.agentAutocomplete.lineIndex = this.state.currentLine;
|
|
623
|
+
if (this.agentAutocomplete.selectedIndex >= matches.length) {
|
|
624
|
+
this.agentAutocomplete.selectedIndex = Math.max(0, matches.length - 1);
|
|
625
|
+
this.agentAutocomplete.scrollOffset = 0;
|
|
626
|
+
}
|
|
627
|
+
// Reset other autocompletes
|
|
628
|
+
this.autocomplete.active = false;
|
|
629
|
+
this.autocomplete.matches = [];
|
|
630
|
+
return;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
// Reset agent autocomplete
|
|
635
|
+
this.agentAutocomplete.active = false;
|
|
636
|
+
this.agentAutocomplete.matches = [];
|
|
637
|
+
this.agentAutocomplete.selectedIndex = 0;
|
|
638
|
+
this.agentAutocomplete.scrollOffset = 0;
|
|
639
|
+
this.agentAutocomplete.partial = '';
|
|
640
|
+
this.agentAutocomplete.startPos = 0;
|
|
641
|
+
this.agentAutocomplete.lineIndex = 0;
|
|
516
642
|
// Check for / command autocomplete
|
|
517
643
|
if (fullInput.startsWith('/') && this.state.lines.length === 1) {
|
|
518
644
|
this.autocomplete.active = true;
|
|
519
645
|
// Refresh commands dynamically to include newly created custom commands
|
|
520
|
-
const freshCommands =
|
|
646
|
+
const freshCommands = this.getCommands?.() ?? this.commands;
|
|
521
647
|
this.autocomplete.matches = filterCommands(fullInput, freshCommands);
|
|
522
648
|
if (this.autocomplete.selectedIndex >= this.autocomplete.matches.length) {
|
|
523
649
|
this.autocomplete.selectedIndex = Math.max(0, this.autocomplete.matches.length - 1);
|
|
@@ -553,6 +679,7 @@ export class InputPrompt extends EventEmitter {
|
|
|
553
679
|
const isShiftTab = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x5a;
|
|
554
680
|
const isCtrlC = key === '\x03';
|
|
555
681
|
const isCtrlO = key === '\x0f'; // Ctrl+O for toggle subagent expand
|
|
682
|
+
const isCtrlB = key === '\x02'; // Ctrl+B for background tasks
|
|
556
683
|
const isUpArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x41;
|
|
557
684
|
const isDownArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x42;
|
|
558
685
|
const isLeftArrow = data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x44;
|
|
@@ -587,30 +714,41 @@ export class InputPrompt extends EventEmitter {
|
|
|
587
714
|
this.emit('toggleSubagentExpand');
|
|
588
715
|
return;
|
|
589
716
|
}
|
|
717
|
+
// Ctrl+B - show background tasks overlay
|
|
718
|
+
if (isCtrlB) {
|
|
719
|
+
this.emit('showTasks');
|
|
720
|
+
return;
|
|
721
|
+
}
|
|
590
722
|
// Escape - close autocomplete, double Esc clears input, or emit escape for agent abort
|
|
591
723
|
if (isEscape) {
|
|
592
724
|
const now = Date.now();
|
|
593
725
|
const isDoubleEsc = now - this.lastEscTime < this.DOUBLE_ESC_THRESHOLD_MS;
|
|
594
726
|
this.lastEscTime = now;
|
|
595
|
-
if (this.
|
|
596
|
-
// First priority: close
|
|
727
|
+
if (this.agentAutocomplete.active) {
|
|
728
|
+
// First priority: close agent autocomplete
|
|
729
|
+
this.agentAutocomplete.active = false;
|
|
730
|
+
this.agentAutocomplete.matches = [];
|
|
731
|
+
this.emit('change', this.getValue());
|
|
732
|
+
}
|
|
733
|
+
else if (this.fileAutocomplete.active) {
|
|
734
|
+
// Second priority: close file autocomplete
|
|
597
735
|
this.fileAutocomplete.active = false;
|
|
598
736
|
this.fileAutocomplete.matches = [];
|
|
599
737
|
this.emit('change', this.getValue());
|
|
600
738
|
}
|
|
601
739
|
else if (this.autocomplete.active) {
|
|
602
|
-
//
|
|
740
|
+
// Third priority: close command autocomplete
|
|
603
741
|
this.autocomplete.active = false;
|
|
604
742
|
this.autocomplete.matches = [];
|
|
605
743
|
this.emit('change', this.getValue());
|
|
606
744
|
}
|
|
607
745
|
else if (isDoubleEsc && this.getValue().length > 0) {
|
|
608
|
-
//
|
|
746
|
+
// Fourth priority: double Esc clears input (if there's content)
|
|
609
747
|
this.clearInput();
|
|
610
748
|
this.emit('change', this.getValue());
|
|
611
749
|
}
|
|
612
750
|
else {
|
|
613
|
-
//
|
|
751
|
+
// Fifth priority: emit escape for agent abort
|
|
614
752
|
this.emit('escape');
|
|
615
753
|
}
|
|
616
754
|
return;
|
|
@@ -705,6 +843,21 @@ export class InputPrompt extends EventEmitter {
|
|
|
705
843
|
this.emit('change', this.getValue());
|
|
706
844
|
return;
|
|
707
845
|
}
|
|
846
|
+
// Agent autocomplete selection - replace with $agentId and add space
|
|
847
|
+
if (this.agentAutocomplete.active && this.agentAutocomplete.matches.length > 0) {
|
|
848
|
+
const selectedAgent = this.agentAutocomplete.matches[this.agentAutocomplete.selectedIndex];
|
|
849
|
+
const lineIdx = this.agentAutocomplete.lineIndex;
|
|
850
|
+
const line = this.state.lines[lineIdx];
|
|
851
|
+
const result = replaceDollarMention(line, this.state.cursorPos, selectedAgent.id);
|
|
852
|
+
this.state.lines[lineIdx] = result.input;
|
|
853
|
+
this.state.currentLine = lineIdx;
|
|
854
|
+
this.state.cursorPos = result.cursorPos;
|
|
855
|
+
this.agentAutocomplete.active = false;
|
|
856
|
+
this.agentAutocomplete.matches = [];
|
|
857
|
+
this.emit('change', this.getValue());
|
|
858
|
+
// Return - let user type message after selecting agent
|
|
859
|
+
return;
|
|
860
|
+
}
|
|
708
861
|
// File autocomplete selection - accept the path and continue
|
|
709
862
|
if (this.fileAutocomplete.active && this.fileAutocomplete.matches.length > 0) {
|
|
710
863
|
const selectedFile = this.fileAutocomplete.matches[this.fileAutocomplete.selectedIndex];
|
|
@@ -745,8 +898,11 @@ export class InputPrompt extends EventEmitter {
|
|
|
745
898
|
this.emit('command', command, args);
|
|
746
899
|
}
|
|
747
900
|
else {
|
|
901
|
+
// Strip @ prefix from file paths (autocomplete uses @ but agent doesn't need it)
|
|
902
|
+
// Matches @word or @path/to/file patterns
|
|
903
|
+
const cleanedInput = input.replace(/(?<![@\w])@([\w./-]+)/g, '$1');
|
|
748
904
|
this.clearInput();
|
|
749
|
-
this.emit('submit',
|
|
905
|
+
this.emit('submit', cleanedInput);
|
|
750
906
|
}
|
|
751
907
|
}
|
|
752
908
|
handleTab() {
|
|
@@ -758,6 +914,20 @@ export class InputPrompt extends EventEmitter {
|
|
|
758
914
|
this.emit('change', this.getValue());
|
|
759
915
|
return;
|
|
760
916
|
}
|
|
917
|
+
// Agent autocomplete completion - replace with $agentId and add space
|
|
918
|
+
if (this.agentAutocomplete.active && this.agentAutocomplete.matches.length > 0) {
|
|
919
|
+
const selectedAgent = this.agentAutocomplete.matches[this.agentAutocomplete.selectedIndex];
|
|
920
|
+
const lineIdx = this.agentAutocomplete.lineIndex;
|
|
921
|
+
const line = this.state.lines[lineIdx];
|
|
922
|
+
const result = replaceDollarMention(line, this.state.cursorPos, selectedAgent.id);
|
|
923
|
+
this.state.lines[lineIdx] = result.input;
|
|
924
|
+
this.state.currentLine = lineIdx;
|
|
925
|
+
this.state.cursorPos = result.cursorPos;
|
|
926
|
+
this.agentAutocomplete.active = false;
|
|
927
|
+
this.agentAutocomplete.matches = [];
|
|
928
|
+
this.emit('change', this.getValue());
|
|
929
|
+
return;
|
|
930
|
+
}
|
|
761
931
|
// File autocomplete completion
|
|
762
932
|
if (this.fileAutocomplete.active && this.fileAutocomplete.matches.length > 0) {
|
|
763
933
|
const selectedFile = this.fileAutocomplete.matches[this.fileAutocomplete.selectedIndex];
|
|
@@ -791,6 +961,16 @@ export class InputPrompt extends EventEmitter {
|
|
|
791
961
|
this.emit('change', this.getValue());
|
|
792
962
|
}
|
|
793
963
|
handleArrowUp() {
|
|
964
|
+
// Agent autocomplete navigation
|
|
965
|
+
if (this.agentAutocomplete.active && this.agentAutocomplete.selectedIndex > 0) {
|
|
966
|
+
this.agentAutocomplete.selectedIndex--;
|
|
967
|
+
// Adjust scroll offset if selection goes above visible area
|
|
968
|
+
if (this.agentAutocomplete.selectedIndex < this.agentAutocomplete.scrollOffset) {
|
|
969
|
+
this.agentAutocomplete.scrollOffset = this.agentAutocomplete.selectedIndex;
|
|
970
|
+
}
|
|
971
|
+
this.emit('change', this.getValue());
|
|
972
|
+
return;
|
|
973
|
+
}
|
|
794
974
|
// File autocomplete navigation
|
|
795
975
|
if (this.fileAutocomplete.active && this.fileAutocomplete.selectedIndex > 0) {
|
|
796
976
|
this.fileAutocomplete.selectedIndex--;
|
|
@@ -853,6 +1033,18 @@ export class InputPrompt extends EventEmitter {
|
|
|
853
1033
|
}
|
|
854
1034
|
}
|
|
855
1035
|
handleArrowDown() {
|
|
1036
|
+
// Agent autocomplete navigation
|
|
1037
|
+
if (this.agentAutocomplete.active &&
|
|
1038
|
+
this.agentAutocomplete.selectedIndex < this.agentAutocomplete.matches.length - 1) {
|
|
1039
|
+
this.agentAutocomplete.selectedIndex++;
|
|
1040
|
+
// Adjust scroll offset if selection goes below visible area
|
|
1041
|
+
const maxVisibleIndex = this.agentAutocomplete.scrollOffset + MAX_VISIBLE_COMMANDS - 1;
|
|
1042
|
+
if (this.agentAutocomplete.selectedIndex > maxVisibleIndex) {
|
|
1043
|
+
this.agentAutocomplete.scrollOffset = this.agentAutocomplete.selectedIndex - MAX_VISIBLE_COMMANDS + 1;
|
|
1044
|
+
}
|
|
1045
|
+
this.emit('change', this.getValue());
|
|
1046
|
+
return;
|
|
1047
|
+
}
|
|
856
1048
|
// File autocomplete navigation
|
|
857
1049
|
if (this.fileAutocomplete.active &&
|
|
858
1050
|
this.fileAutocomplete.selectedIndex < this.fileAutocomplete.matches.length - 1) {
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keyboard input handler.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from TerminalUI — owns keyboard capture, escape handling,
|
|
5
|
+
* overlay key routing, and the main keypress dispatch loop. Accesses
|
|
6
|
+
* sub-controllers (input, autocomplete, overlay, status bar) directly
|
|
7
|
+
* through the host interface.
|
|
8
|
+
*/
|
|
9
|
+
import type { InputController } from './input-controller.js';
|
|
10
|
+
import type { AutocompleteController } from './autocomplete-controller.js';
|
|
11
|
+
import type { OverlayManager } from './overlay-manager.js';
|
|
12
|
+
import type { StatusBarController } from './status-bar-controller.js';
|
|
13
|
+
import type { Overlay } from './overlay/index.js';
|
|
14
|
+
export interface KeyboardHandlerHost {
|
|
15
|
+
isGuardActive(): boolean;
|
|
16
|
+
isAgentRunning(): boolean;
|
|
17
|
+
getViewMode(): 'normal' | 'verbose-temp';
|
|
18
|
+
setViewMode(mode: 'normal' | 'verbose-temp'): void;
|
|
19
|
+
requestRender(): void;
|
|
20
|
+
emit(event: string, ...args: unknown[]): void;
|
|
21
|
+
readonly input: InputController;
|
|
22
|
+
readonly ac: AutocompleteController;
|
|
23
|
+
readonly overlay: OverlayManager;
|
|
24
|
+
readonly statusBar: StatusBarController;
|
|
25
|
+
getActiveOverlay(): Overlay | null;
|
|
26
|
+
hasActiveOverlay(): boolean;
|
|
27
|
+
hasActiveBash(): boolean;
|
|
28
|
+
backgroundBashCommand(): void;
|
|
29
|
+
hasRestoredHistory(): boolean;
|
|
30
|
+
showRestoredHistory(): void;
|
|
31
|
+
toggleVerboseView(): void;
|
|
32
|
+
toggleLiveRegionExpanded(): void;
|
|
33
|
+
toggleTodos(): void;
|
|
34
|
+
reRenderConversationVerbose(verbose: boolean): void;
|
|
35
|
+
}
|
|
36
|
+
export declare class KeyboardHandler {
|
|
37
|
+
private keyHandler;
|
|
38
|
+
private dataHandler;
|
|
39
|
+
private lastEscapeTime;
|
|
40
|
+
private lastTabTime;
|
|
41
|
+
private readonly host;
|
|
42
|
+
constructor(host: KeyboardHandlerHost);
|
|
43
|
+
startCapture(): void;
|
|
44
|
+
stopCapture(): void;
|
|
45
|
+
private handleEscape;
|
|
46
|
+
private handleOverlayKeypress;
|
|
47
|
+
/**
|
|
48
|
+
* Handle escape sequences for overlays directly from raw stdin data.
|
|
49
|
+
*
|
|
50
|
+
* Bypasses readline's keypress events which can be corrupted when the
|
|
51
|
+
* emitKeys generator is left suspended after a standalone escape key.
|
|
52
|
+
* Uses parseKeyEvent (from ui-core) to reliably parse the raw bytes.
|
|
53
|
+
*/
|
|
54
|
+
private handleOverlayEscapeSequence;
|
|
55
|
+
private applyAutocomplete;
|
|
56
|
+
private handleKeypress;
|
|
57
|
+
}
|