@compilr-dev/cli 0.4.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 +254 -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 +134 -4
- package/dist/agent.js +345 -166
- package/dist/anchors/index.d.ts +9 -0
- package/dist/anchors/index.js +9 -0
- package/dist/anchors/project-anchors.d.ts +79 -0
- package/dist/anchors/project-anchors.js +202 -0
- 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/index.d.ts +2 -1
- 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.d.ts +13 -0
- package/dist/commands-v2/handlers/context.js +533 -0
- package/dist/commands-v2/handlers/core.d.ts +14 -0
- package/dist/commands-v2/handlers/core.js +290 -0
- package/dist/commands-v2/handlers/debug.d.ts +11 -0
- package/dist/commands-v2/handlers/debug.js +177 -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 +25 -0
- package/dist/commands-v2/handlers/index.js +63 -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.d.ts +22 -0
- package/dist/commands-v2/handlers/project.js +1035 -0
- 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 +17 -0
- package/dist/commands-v2/handlers/settings.js +417 -0
- 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 +14 -0
- package/dist/commands-v2/index.js +18 -0
- package/dist/commands-v2/registry.d.ts +52 -0
- package/dist/commands-v2/registry.js +114 -0
- package/dist/commands-v2/types.d.ts +153 -0
- package/dist/commands-v2/types.js +7 -0
- package/dist/commands.js +123 -7
- 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 +615 -179
- package/dist/input-handlers/index.d.ts +7 -0
- package/dist/input-handlers/index.js +7 -0
- package/dist/input-handlers/memory-handler.d.ts +26 -0
- package/dist/input-handlers/memory-handler.js +69 -0
- 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.d.ts +63 -0
- package/dist/repl-helpers.js +319 -0
- package/dist/repl-v2.d.ts +554 -0
- package/dist/repl-v2.js +3286 -0
- 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 +156 -13
- package/dist/settings/index.js +377 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +114 -0
- package/dist/settings/paths.js +270 -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 -58
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +35 -75
- package/dist/themes/colors.js +3 -1
- package/dist/themes/registry.d.ts +5 -36
- package/dist/themes/registry.js +11 -95
- package/dist/themes/types.d.ts +3 -38
- package/dist/themes/types.js +2 -2
- package/dist/tool-names.d.ts +108 -0
- package/dist/tool-names.js +227 -0
- package/dist/tools/anchor-tools.d.ts +31 -0
- package/dist/tools/anchor-tools.js +255 -0
- 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 +56 -0
- package/dist/tools/backlog-wrappers.js +353 -0
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +2 -2
- package/dist/tools/db-tools.d.ts +12 -0
- package/dist/tools/db-tools.js +14 -0
- 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 +43 -0
- package/dist/tools/document-db.js +220 -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/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 +34 -0
- package/dist/tools/project-db.js +39 -0
- 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 +135 -0
- package/dist/tools/workitem-db.js +730 -0
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +238 -38
- package/dist/ui/ask-user-overlay.d.ts +2 -2
- package/dist/ui/ask-user-overlay.js +443 -535
- package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
- package/dist/ui/ask-user-simple-overlay.js +182 -209
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- package/dist/ui/base/index.d.ts +26 -0
- package/dist/ui/base/index.js +33 -0
- package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
- package/dist/ui/base/inline-overlay-utils.js +320 -0
- package/dist/ui/base/inline-overlay.d.ts +159 -0
- package/dist/ui/base/inline-overlay.js +257 -0
- package/dist/ui/base/key-utils.d.ts +15 -0
- package/dist/ui/base/key-utils.js +30 -0
- package/dist/ui/base/overlay-base-v2.d.ts +203 -0
- package/dist/ui/base/overlay-base-v2.js +260 -0
- package/dist/ui/base/overlay-base.d.ts +156 -0
- package/dist/ui/base/overlay-base.js +238 -0
- package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
- package/dist/ui/base/overlay-lifecycle.js +159 -0
- package/dist/ui/base/overlay-types.d.ts +185 -0
- package/dist/ui/base/overlay-types.js +7 -0
- package/dist/ui/base/render-utils.d.ts +27 -0
- package/dist/ui/base/render-utils.js +36 -0
- package/dist/ui/base/screen-stack.d.ts +148 -0
- package/dist/ui/base/screen-stack.js +184 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
- package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
- package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
- package/dist/ui/base/tabbed-list-overlay.js +369 -0
- 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.d.ts +75 -4
- package/dist/ui/conversation.js +376 -165
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.d.ts +1 -1
- package/dist/ui/ephemeral.js +4 -10
- package/dist/ui/features/index.d.ts +34 -0
- package/dist/ui/features/index.js +34 -0
- package/dist/ui/features/input-feature.d.ts +85 -0
- package/dist/ui/features/input-feature.js +238 -0
- package/dist/ui/features/list-feature.d.ts +155 -0
- package/dist/ui/features/list-feature.js +244 -0
- package/dist/ui/features/pagination-feature.d.ts +154 -0
- package/dist/ui/features/pagination-feature.js +238 -0
- package/dist/ui/features/search-feature.d.ts +148 -0
- package/dist/ui/features/search-feature.js +185 -0
- package/dist/ui/features/tab-feature.d.ts +194 -0
- package/dist/ui/features/tab-feature.js +307 -0
- 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 +181 -7
- package/dist/ui/footer.js +523 -74
- package/dist/ui/guardrail-overlay.d.ts +29 -0
- package/dist/ui/guardrail-overlay.js +145 -0
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +1 -3
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +135 -33
- package/dist/ui/input-prompt.js +728 -337
- package/dist/ui/iteration-limit-overlay.d.ts +2 -2
- package/dist/ui/iteration-limit-overlay.js +92 -128
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -0
- package/dist/ui/keys-overlay.d.ts +1 -0
- package/dist/ui/keys-overlay.js +203 -141
- package/dist/ui/line-utils.d.ts +88 -0
- package/dist/ui/line-utils.js +150 -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 +157 -0
- package/dist/ui/live-region.js +379 -0
- package/dist/ui/mascot/expressions.d.ts +32 -0
- package/dist/ui/mascot/expressions.js +213 -0
- package/dist/ui/mascot/index.d.ts +8 -0
- package/dist/ui/mascot/index.js +8 -0
- package/dist/ui/mascot/renderer.d.ts +19 -0
- package/dist/ui/mascot/renderer.js +132 -0
- 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.d.ts +45 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
- package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
- package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
- 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.d.ts +72 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
- package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
- package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
- 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 +52 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
- 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.d.ts +33 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
- package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
- 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 +57 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
- 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.d.ts +45 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
- 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/guardrail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
- package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
- package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
- package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
- package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
- package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
- package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
- 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/mascot-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -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 +93 -0
- package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
- package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
- package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
- package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
- 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.d.ts +36 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
- 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 +37 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
- 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/theme-overlay-v2.d.ts +42 -0
- package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
- package/dist/ui/overlay/index.d.ts +52 -0
- package/dist/ui/overlay/index.js +54 -0
- package/dist/ui/overlay/key-utils.d.ts +6 -0
- package/dist/ui/overlay/key-utils.js +6 -0
- package/dist/ui/overlay/types.d.ts +140 -0
- package/dist/ui/overlay/types.js +22 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.d.ts +0 -4
- package/dist/ui/overlays.js +4 -460
- package/dist/ui/permission-overlay.d.ts +1 -1
- package/dist/ui/permission-overlay.js +189 -300
- package/dist/ui/providers/types.d.ts +178 -0
- package/dist/ui/providers/types.js +9 -0
- package/dist/ui/render-modes.d.ts +36 -0
- package/dist/ui/render-modes.js +44 -0
- package/dist/ui/startup-menu.d.ts +36 -0
- package/dist/ui/startup-menu.js +236 -0
- package/dist/ui/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.d.ts +117 -0
- package/dist/ui/subagent-renderer.js +318 -0
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -0
- package/dist/ui/terminal-codes.d.ts +94 -0
- package/dist/ui/terminal-codes.js +124 -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 +220 -0
- package/dist/ui/terminal-renderer.js +750 -0
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +331 -0
- package/dist/ui/terminal-ui.js +819 -0
- package/dist/ui/terminal.d.ts +20 -0
- package/dist/ui/terminal.js +72 -0
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +124 -38
- package/dist/ui/tool-formatters.d.ts +16 -0
- package/dist/ui/tool-formatters.js +1027 -0
- 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/debug-log.d.ts +28 -0
- package/dist/utils/debug-log.js +57 -0
- 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 +39 -17
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.d.ts +56 -0
- package/dist/utils/path-safety.js +240 -0
- 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/dist/workflow/guided-mode-injector.d.ts +42 -0
- package/dist/workflow/guided-mode-injector.js +191 -0
- package/dist/workflow/index.d.ts +8 -0
- package/dist/workflow/index.js +8 -0
- package/dist/workflow/step-criteria.d.ts +62 -0
- package/dist/workflow/step-criteria.js +150 -0
- package/dist/workflow/step-tracker.d.ts +92 -0
- package/dist/workflow/step-tracker.js +141 -0
- package/package.json +32 -12
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -121
- package/dist/repl.js +0 -1878
- 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.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -501
- package/dist/ui/arch-type-overlay.d.ts +0 -20
- package/dist/ui/arch-type-overlay.js +0 -229
- package/dist/ui/backlog-overlay.d.ts +0 -17
- package/dist/ui/backlog-overlay.js +0 -786
- package/dist/ui/commands-overlay.d.ts +0 -11
- package/dist/ui/commands-overlay.js +0 -410
- package/dist/ui/config-overlay.d.ts +0 -34
- package/dist/ui/config-overlay.js +0 -977
- package/dist/ui/init-overlay.d.ts +0 -24
- package/dist/ui/init-overlay.js +0 -525
- package/dist/ui/input-prompt-v2.d.ts +0 -179
- package/dist/ui/input-prompt-v2.js +0 -991
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -171
- package/dist/ui/tools-overlay.d.ts +0 -26
- package/dist/ui/tools-overlay.js +0 -278
- package/dist/ui/tutorial-overlay.d.ts +0 -10
- package/dist/ui/tutorial-overlay.js +0 -936
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content Provider Interfaces
|
|
3
|
+
*
|
|
4
|
+
* Components implement these interfaces to provide content for rendering.
|
|
5
|
+
* The TerminalRenderer collects lines from providers and writes to terminal.
|
|
6
|
+
*
|
|
7
|
+
* Key principle: Providers return string[], never write to terminal directly.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Base interface for all content providers.
|
|
11
|
+
* Returns lines to render. Empty array = nothing to show.
|
|
12
|
+
*/
|
|
13
|
+
export interface ContentProvider {
|
|
14
|
+
/** Returns lines to render. Empty array = nothing to show */
|
|
15
|
+
getLines(): string[];
|
|
16
|
+
/** Optional: get cursor position within this component's content */
|
|
17
|
+
getCursorPosition?(): CursorPosition | null;
|
|
18
|
+
/** Optional: does this provider need keyboard input? */
|
|
19
|
+
hasKeyboardFocus?(): boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Cursor position within rendered content
|
|
23
|
+
*/
|
|
24
|
+
export interface CursorPosition {
|
|
25
|
+
/** Row within the provider's content (0-indexed) */
|
|
26
|
+
row: number;
|
|
27
|
+
/** Column within the row (0-indexed) */
|
|
28
|
+
col: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Menu options available in startup menu
|
|
32
|
+
*/
|
|
33
|
+
export type MenuOption = 'init' | 'projects' | 'continue' | 'chat' | 'config' | 'help' | 'exit';
|
|
34
|
+
/**
|
|
35
|
+
* Actions from menu keyboard handling
|
|
36
|
+
*/
|
|
37
|
+
export type MenuAction = 'up' | 'down' | 'select' | 'exit' | null;
|
|
38
|
+
/**
|
|
39
|
+
* Provider for the startup menu (MENU mode)
|
|
40
|
+
*/
|
|
41
|
+
export interface MenuProvider extends ContentProvider {
|
|
42
|
+
/** Returns full menu screen content */
|
|
43
|
+
getLines(): string[];
|
|
44
|
+
/** Handle keyboard input, return action taken */
|
|
45
|
+
handleKey(key: Buffer): MenuAction;
|
|
46
|
+
/** Get currently selected menu option */
|
|
47
|
+
getSelectedOption(): MenuOption;
|
|
48
|
+
/** Get highlighted index (for rendering) */
|
|
49
|
+
getHighlightedIndex(): number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Provider for subagent status display
|
|
53
|
+
*/
|
|
54
|
+
export interface SubagentProvider extends ContentProvider {
|
|
55
|
+
/** Returns subagent status lines (empty if no active subagents) */
|
|
56
|
+
getLines(): string[];
|
|
57
|
+
/** Check if any subagent is currently active */
|
|
58
|
+
hasActiveSubagent(): boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Provider for spinner/progress display
|
|
62
|
+
*/
|
|
63
|
+
export interface SpinnerProvider extends ContentProvider {
|
|
64
|
+
/** Returns spinner line when agent is running (empty when idle) */
|
|
65
|
+
getLines(): string[];
|
|
66
|
+
/** Check if agent is currently running */
|
|
67
|
+
isAgentRunning(): boolean;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Provider for todo list display
|
|
71
|
+
*/
|
|
72
|
+
export interface TodoProvider extends ContentProvider {
|
|
73
|
+
/** Returns todo list (empty when agent running or no todos) */
|
|
74
|
+
getLines(): string[];
|
|
75
|
+
/** Get count of todos */
|
|
76
|
+
getTodoCount(): number;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Provider for queued messages display
|
|
80
|
+
*/
|
|
81
|
+
export interface QueueProvider extends ContentProvider {
|
|
82
|
+
/** Returns queued messages (empty if none) */
|
|
83
|
+
getLines(): string[];
|
|
84
|
+
/** Get count of queued messages */
|
|
85
|
+
getQueueCount(): number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Actions from input keyboard handling
|
|
89
|
+
*/
|
|
90
|
+
export type InputAction = {
|
|
91
|
+
type: 'submit';
|
|
92
|
+
value: string;
|
|
93
|
+
} | {
|
|
94
|
+
type: 'command';
|
|
95
|
+
value: string;
|
|
96
|
+
} | {
|
|
97
|
+
type: 'cancel';
|
|
98
|
+
} | {
|
|
99
|
+
type: 'change';
|
|
100
|
+
} | {
|
|
101
|
+
type: 'escape';
|
|
102
|
+
} | null;
|
|
103
|
+
/**
|
|
104
|
+
* Provider for input prompt
|
|
105
|
+
*/
|
|
106
|
+
export interface InputProvider extends ContentProvider {
|
|
107
|
+
/** Returns separator + input prompt lines (may be multi-line) */
|
|
108
|
+
getLines(): string[];
|
|
109
|
+
/** Get cursor position within input content */
|
|
110
|
+
getCursorPosition(): CursorPosition;
|
|
111
|
+
/** Handle keyboard input, return action taken */
|
|
112
|
+
handleKey(key: Buffer): InputAction;
|
|
113
|
+
/** Get current input value */
|
|
114
|
+
getValue(): string;
|
|
115
|
+
/** Set input value programmatically */
|
|
116
|
+
setValue(value: string): void;
|
|
117
|
+
/** Clear input */
|
|
118
|
+
clear(): void;
|
|
119
|
+
/** Is input in queue mode (typing queued while agent runs) */
|
|
120
|
+
isQueueMode(): boolean;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Provider for mode indicator line
|
|
124
|
+
*/
|
|
125
|
+
export interface ModeProvider extends ContentProvider {
|
|
126
|
+
/** Returns mode indicator line */
|
|
127
|
+
getLines(): string[];
|
|
128
|
+
/** Get current mode name */
|
|
129
|
+
getModeName(): string;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Actions from overlay keyboard handling
|
|
133
|
+
*/
|
|
134
|
+
export type OverlayAction = {
|
|
135
|
+
type: 'close';
|
|
136
|
+
} | {
|
|
137
|
+
type: 'close';
|
|
138
|
+
result: unknown;
|
|
139
|
+
} | {
|
|
140
|
+
type: 'navigate';
|
|
141
|
+
direction: 'up' | 'down' | 'left' | 'right';
|
|
142
|
+
} | {
|
|
143
|
+
type: 'select';
|
|
144
|
+
} | {
|
|
145
|
+
type: 'scroll';
|
|
146
|
+
direction: 'up' | 'down';
|
|
147
|
+
} | {
|
|
148
|
+
type: 'tab';
|
|
149
|
+
direction: 'next' | 'prev';
|
|
150
|
+
} | null;
|
|
151
|
+
/**
|
|
152
|
+
* Provider for full-screen overlays
|
|
153
|
+
*/
|
|
154
|
+
export interface OverlayProvider extends ContentProvider {
|
|
155
|
+
/** Returns full overlay content */
|
|
156
|
+
getLines(): string[];
|
|
157
|
+
/** Check if overlay is active */
|
|
158
|
+
isActive(): boolean;
|
|
159
|
+
/** Handle keyboard input, return action taken */
|
|
160
|
+
handleKey(key: Buffer): OverlayAction;
|
|
161
|
+
/** Get cursor position if overlay needs visible cursor */
|
|
162
|
+
getCursorPosition(): CursorPosition | null;
|
|
163
|
+
/** Get overlay title (for header) */
|
|
164
|
+
getTitle(): string;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* All providers needed by TerminalRenderer
|
|
168
|
+
*/
|
|
169
|
+
export interface ProviderRegistry {
|
|
170
|
+
menu?: MenuProvider;
|
|
171
|
+
subagent?: SubagentProvider;
|
|
172
|
+
spinner?: SpinnerProvider;
|
|
173
|
+
todo?: TodoProvider;
|
|
174
|
+
queue?: QueueProvider;
|
|
175
|
+
input?: InputProvider;
|
|
176
|
+
mode?: ModeProvider;
|
|
177
|
+
overlay?: OverlayProvider;
|
|
178
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content Provider Interfaces
|
|
3
|
+
*
|
|
4
|
+
* Components implement these interfaces to provide content for rendering.
|
|
5
|
+
* The TerminalRenderer collects lines from providers and writes to terminal.
|
|
6
|
+
*
|
|
7
|
+
* Key principle: Providers return string[], never write to terminal directly.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render Modes
|
|
3
|
+
*
|
|
4
|
+
* The terminal operates in one of three mutually exclusive modes.
|
|
5
|
+
* Each mode has different rendering behavior and keyboard handling.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Terminal render modes
|
|
9
|
+
*
|
|
10
|
+
* MENU: Full-screen startup menu (no scroll regions)
|
|
11
|
+
* REPL: Scroll zone + footer (normal chat mode)
|
|
12
|
+
* OVERLAY: Full-screen overlay (config, backlog, permissions)
|
|
13
|
+
*/
|
|
14
|
+
export declare enum RenderMode {
|
|
15
|
+
MENU = "MENU",
|
|
16
|
+
REPL = "REPL",
|
|
17
|
+
OVERLAY = "OVERLAY"
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Mode transition events for debugging/logging
|
|
21
|
+
*/
|
|
22
|
+
export interface ModeTransition {
|
|
23
|
+
from: RenderMode;
|
|
24
|
+
to: RenderMode;
|
|
25
|
+
reason: string;
|
|
26
|
+
timestamp: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Valid mode transitions
|
|
30
|
+
*
|
|
31
|
+
* MENU -> REPL: User selects option (init, chat, continue, etc.)
|
|
32
|
+
* REPL -> OVERLAY: User triggers overlay (/config, /backlog, permission)
|
|
33
|
+
* OVERLAY -> REPL: User closes overlay (Esc, Enter, etc.)
|
|
34
|
+
* REPL -> MENU: User runs /menu command
|
|
35
|
+
*/
|
|
36
|
+
export declare function isValidTransition(from: RenderMode, to: RenderMode): boolean;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render Modes
|
|
3
|
+
*
|
|
4
|
+
* The terminal operates in one of three mutually exclusive modes.
|
|
5
|
+
* Each mode has different rendering behavior and keyboard handling.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Terminal render modes
|
|
9
|
+
*
|
|
10
|
+
* MENU: Full-screen startup menu (no scroll regions)
|
|
11
|
+
* REPL: Scroll zone + footer (normal chat mode)
|
|
12
|
+
* OVERLAY: Full-screen overlay (config, backlog, permissions)
|
|
13
|
+
*/
|
|
14
|
+
export var RenderMode;
|
|
15
|
+
(function (RenderMode) {
|
|
16
|
+
RenderMode["MENU"] = "MENU";
|
|
17
|
+
RenderMode["REPL"] = "REPL";
|
|
18
|
+
RenderMode["OVERLAY"] = "OVERLAY";
|
|
19
|
+
})(RenderMode || (RenderMode = {}));
|
|
20
|
+
/**
|
|
21
|
+
* Valid mode transitions
|
|
22
|
+
*
|
|
23
|
+
* MENU -> REPL: User selects option (init, chat, continue, etc.)
|
|
24
|
+
* REPL -> OVERLAY: User triggers overlay (/config, /backlog, permission)
|
|
25
|
+
* OVERLAY -> REPL: User closes overlay (Esc, Enter, etc.)
|
|
26
|
+
* REPL -> MENU: User runs /menu command
|
|
27
|
+
*/
|
|
28
|
+
export function isValidTransition(from, to) {
|
|
29
|
+
if (from === to)
|
|
30
|
+
return false;
|
|
31
|
+
switch (from) {
|
|
32
|
+
case RenderMode.MENU:
|
|
33
|
+
// Menu can go to REPL (user selects option) or OVERLAY (e.g., config from menu)
|
|
34
|
+
return to === RenderMode.REPL || to === RenderMode.OVERLAY;
|
|
35
|
+
case RenderMode.REPL:
|
|
36
|
+
// REPL can go to OVERLAY (modal opened) or MENU (/menu command)
|
|
37
|
+
return to === RenderMode.OVERLAY || to === RenderMode.MENU;
|
|
38
|
+
case RenderMode.OVERLAY:
|
|
39
|
+
// Overlay can go back to REPL (closed) or MENU (rare, but valid)
|
|
40
|
+
return to === RenderMode.REPL || to === RenderMode.MENU;
|
|
41
|
+
default:
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Startup Menu Overlay
|
|
3
|
+
*
|
|
4
|
+
* Provides a guided entry point for users with options to:
|
|
5
|
+
* - Start a new project (/new)
|
|
6
|
+
* - View & manage projects (/projects)
|
|
7
|
+
* - Continue last project
|
|
8
|
+
* - Free-form chat
|
|
9
|
+
* - Configure settings
|
|
10
|
+
* - Show help
|
|
11
|
+
* - Exit
|
|
12
|
+
*
|
|
13
|
+
* Inspired by ATLAS CLI interactiveMenu()
|
|
14
|
+
*/
|
|
15
|
+
export type MenuOption = 'init' | 'projects' | 'continue' | 'chat' | 'config' | 'help' | 'exit';
|
|
16
|
+
export interface StartupMenuResult {
|
|
17
|
+
action: MenuOption;
|
|
18
|
+
project?: {
|
|
19
|
+
id: number;
|
|
20
|
+
name: string;
|
|
21
|
+
displayName: string;
|
|
22
|
+
path: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Show the startup menu and return the user's choice
|
|
27
|
+
*/
|
|
28
|
+
export declare function showStartupMenu(version: string): Promise<StartupMenuResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Find the last active project for the "continue" option
|
|
31
|
+
*/
|
|
32
|
+
export declare function findLastActiveProject(): {
|
|
33
|
+
id: number;
|
|
34
|
+
name: string;
|
|
35
|
+
path: string;
|
|
36
|
+
} | null;
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Startup Menu Overlay
|
|
3
|
+
*
|
|
4
|
+
* Provides a guided entry point for users with options to:
|
|
5
|
+
* - Start a new project (/new)
|
|
6
|
+
* - View & manage projects (/projects)
|
|
7
|
+
* - Continue last project
|
|
8
|
+
* - Free-form chat
|
|
9
|
+
* - Configure settings
|
|
10
|
+
* - Show help
|
|
11
|
+
* - Exit
|
|
12
|
+
*
|
|
13
|
+
* Inspired by ATLAS CLI interactiveMenu()
|
|
14
|
+
*/
|
|
15
|
+
import { getStyles } from '../themes/index.js';
|
|
16
|
+
import * as terminal from './terminal.js';
|
|
17
|
+
import { projectRepository } from '../db/repositories/index.js';
|
|
18
|
+
import { setActiveProject } from '../tools/project-db.js';
|
|
19
|
+
import { printLogo } from './conversation.js';
|
|
20
|
+
// =============================================================================
|
|
21
|
+
// Menu Options
|
|
22
|
+
// =============================================================================
|
|
23
|
+
function getMenuOptions(hasLastProject, lastProjectName) {
|
|
24
|
+
return [
|
|
25
|
+
{
|
|
26
|
+
key: 'init',
|
|
27
|
+
label: 'init',
|
|
28
|
+
description: 'Start a new project',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
key: 'projects',
|
|
32
|
+
label: 'projects',
|
|
33
|
+
description: 'View & manage projects',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
key: 'continue',
|
|
37
|
+
label: 'continue',
|
|
38
|
+
description: hasLastProject
|
|
39
|
+
? `Resume: ${lastProjectName ?? 'project'}`
|
|
40
|
+
: 'No recent project',
|
|
41
|
+
disabled: !hasLastProject,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
key: 'chat',
|
|
45
|
+
label: 'chat',
|
|
46
|
+
description: 'Free-form AI chat',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
key: 'config',
|
|
50
|
+
label: 'config',
|
|
51
|
+
description: 'Configure settings',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
key: 'help',
|
|
55
|
+
label: 'help',
|
|
56
|
+
description: 'Show help and shortcuts',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
key: 'exit',
|
|
60
|
+
label: 'exit',
|
|
61
|
+
description: 'Exit CLI',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
}
|
|
65
|
+
// =============================================================================
|
|
66
|
+
// Rendering
|
|
67
|
+
// =============================================================================
|
|
68
|
+
function renderMenu(state) {
|
|
69
|
+
const s = getStyles();
|
|
70
|
+
const lines = [];
|
|
71
|
+
lines.push('');
|
|
72
|
+
lines.push(' What would you like to do?');
|
|
73
|
+
lines.push('');
|
|
74
|
+
// Menu options - left-aligned like /config overlay
|
|
75
|
+
const labelWidth = 14;
|
|
76
|
+
for (let i = 0; i < state.options.length; i++) {
|
|
77
|
+
const opt = state.options[i];
|
|
78
|
+
const isSelected = i === state.selectedIndex;
|
|
79
|
+
const prefix = isSelected ? s.primary(' ❯ ') : ' ';
|
|
80
|
+
const rawLabel = opt.label.padEnd(labelWidth);
|
|
81
|
+
const rawDesc = opt.description;
|
|
82
|
+
let label;
|
|
83
|
+
let description;
|
|
84
|
+
if (opt.disabled) {
|
|
85
|
+
label = s.muted(rawLabel);
|
|
86
|
+
description = s.muted(rawDesc);
|
|
87
|
+
}
|
|
88
|
+
else if (isSelected) {
|
|
89
|
+
label = s.primary(rawLabel);
|
|
90
|
+
description = s.foreground(rawDesc);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
label = s.foreground(rawLabel);
|
|
94
|
+
description = s.muted(rawDesc);
|
|
95
|
+
}
|
|
96
|
+
lines.push(prefix + label + description);
|
|
97
|
+
}
|
|
98
|
+
lines.push('');
|
|
99
|
+
lines.push(s.muted(' ↑/↓: navigate Enter: select'));
|
|
100
|
+
return lines;
|
|
101
|
+
}
|
|
102
|
+
// =============================================================================
|
|
103
|
+
// Main Function
|
|
104
|
+
// =============================================================================
|
|
105
|
+
/**
|
|
106
|
+
* Show the startup menu and return the user's choice
|
|
107
|
+
*/
|
|
108
|
+
export async function showStartupMenu(version) {
|
|
109
|
+
return new Promise((resolve) => {
|
|
110
|
+
// Check for last active project
|
|
111
|
+
let lastProject = null;
|
|
112
|
+
try {
|
|
113
|
+
const result = projectRepository.list({ status: 'active', limit: 1 });
|
|
114
|
+
if (result.projects.length > 0) {
|
|
115
|
+
const p = result.projects[0];
|
|
116
|
+
lastProject = { id: p.id, name: p.name, displayName: p.displayName, path: p.path };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// DB might not exist yet
|
|
121
|
+
}
|
|
122
|
+
const hasLastProject = lastProject !== null;
|
|
123
|
+
const lastProjectName = lastProject?.displayName;
|
|
124
|
+
const state = {
|
|
125
|
+
selectedIndex: 0,
|
|
126
|
+
options: getMenuOptions(hasLastProject, lastProjectName),
|
|
127
|
+
hasLastProject,
|
|
128
|
+
lastProjectName,
|
|
129
|
+
};
|
|
130
|
+
// Enable raw mode for key detection (no readline - it causes echo)
|
|
131
|
+
const wasRawMode = process.stdin.isRaw;
|
|
132
|
+
terminal.enableRawMode();
|
|
133
|
+
terminal.hideCursor();
|
|
134
|
+
let prevLineCount = 0;
|
|
135
|
+
const render = (isInitial = false) => {
|
|
136
|
+
if (isInitial) {
|
|
137
|
+
// First render: print logo and save cursor position
|
|
138
|
+
printLogo(version, lastProject?.displayName ?? null);
|
|
139
|
+
terminal.saveCursor();
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// Subsequent renders: restore cursor and clear to end of screen
|
|
143
|
+
terminal.restoreCursor();
|
|
144
|
+
terminal.clearToEndOfScreen();
|
|
145
|
+
}
|
|
146
|
+
// Render the menu
|
|
147
|
+
const lines = renderMenu(state);
|
|
148
|
+
const termWidth = terminal.getTerminalWidth();
|
|
149
|
+
const physicalLines = terminal.totalPhysicalLines(lines, termWidth);
|
|
150
|
+
// Pad to previous height to prevent shrinking
|
|
151
|
+
for (let i = physicalLines; i < prevLineCount; i++) {
|
|
152
|
+
lines.push('');
|
|
153
|
+
}
|
|
154
|
+
process.stdout.write(lines.join('\n') + '\n');
|
|
155
|
+
prevLineCount = Math.max(prevLineCount, physicalLines);
|
|
156
|
+
};
|
|
157
|
+
// Define handleKey first, then cleanup references it
|
|
158
|
+
const handleKey = (key) => {
|
|
159
|
+
const keyStr = key.toString();
|
|
160
|
+
// Arrow keys
|
|
161
|
+
if (keyStr === '\x1b[A' || keyStr === 'k') {
|
|
162
|
+
// Up
|
|
163
|
+
do {
|
|
164
|
+
state.selectedIndex = (state.selectedIndex - 1 + state.options.length) % state.options.length;
|
|
165
|
+
} while (state.options[state.selectedIndex].disabled);
|
|
166
|
+
render(false);
|
|
167
|
+
}
|
|
168
|
+
else if (keyStr === '\x1b[B' || keyStr === 'j') {
|
|
169
|
+
// Down
|
|
170
|
+
do {
|
|
171
|
+
state.selectedIndex = (state.selectedIndex + 1) % state.options.length;
|
|
172
|
+
} while (state.options[state.selectedIndex].disabled);
|
|
173
|
+
render(false);
|
|
174
|
+
}
|
|
175
|
+
else if (keyStr === '\r' || keyStr === '\n') {
|
|
176
|
+
// Enter
|
|
177
|
+
const selected = state.options[state.selectedIndex];
|
|
178
|
+
if (!selected.disabled) {
|
|
179
|
+
// Cleanup: Remove listener BEFORE changing raw mode to prevent issues
|
|
180
|
+
process.stdin.removeListener('data', handleKey);
|
|
181
|
+
if (!wasRawMode) {
|
|
182
|
+
terminal.disableRawMode();
|
|
183
|
+
}
|
|
184
|
+
terminal.showCursor();
|
|
185
|
+
// Handle continue option - set active project
|
|
186
|
+
if (selected.key === 'continue' && lastProject) {
|
|
187
|
+
setActiveProject({
|
|
188
|
+
id: lastProject.id,
|
|
189
|
+
name: lastProject.name,
|
|
190
|
+
displayName: lastProject.displayName,
|
|
191
|
+
path: lastProject.path,
|
|
192
|
+
});
|
|
193
|
+
resolve({
|
|
194
|
+
action: 'continue',
|
|
195
|
+
project: {
|
|
196
|
+
id: lastProject.id,
|
|
197
|
+
name: lastProject.name,
|
|
198
|
+
displayName: lastProject.displayName,
|
|
199
|
+
path: lastProject.path,
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
resolve({ action: selected.key });
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else if (keyStr === '\x03') {
|
|
209
|
+
// Ctrl+C - cleanup and exit
|
|
210
|
+
process.stdin.removeListener('data', handleKey);
|
|
211
|
+
terminal.disableRawMode();
|
|
212
|
+
terminal.showCursor();
|
|
213
|
+
process.exit(0);
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
process.stdin.on('data', handleKey);
|
|
217
|
+
// Initial render
|
|
218
|
+
render(true);
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Find the last active project for the "continue" option
|
|
223
|
+
*/
|
|
224
|
+
export function findLastActiveProject() {
|
|
225
|
+
try {
|
|
226
|
+
const result = projectRepository.list({ status: 'active', limit: 1 });
|
|
227
|
+
if (result.projects.length > 0) {
|
|
228
|
+
const p = result.projects[0];
|
|
229
|
+
return { id: p.id, name: p.name, path: p.path };
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
// DB might not exist
|
|
234
|
+
}
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status bar navigation controller.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from TerminalUI — manages the navigable status bar indicators
|
|
5
|
+
* (pending requests, background agents, terminals, notifications).
|
|
6
|
+
*/
|
|
7
|
+
import type { KeypressKey } from './terminal-types.js';
|
|
8
|
+
export interface StatusBarItem {
|
|
9
|
+
id: 'pending' | 'bg-agents' | 'terminals' | 'notifications' | 'mcp';
|
|
10
|
+
action: string;
|
|
11
|
+
}
|
|
12
|
+
export interface StatusBarHost {
|
|
13
|
+
requestRender(): void;
|
|
14
|
+
emit(event: string, ...args: unknown[]): void;
|
|
15
|
+
}
|
|
16
|
+
export declare class StatusBarController {
|
|
17
|
+
navActive: boolean;
|
|
18
|
+
selectedIndex: number;
|
|
19
|
+
backgroundAgentCount: number;
|
|
20
|
+
mcpLoading: boolean;
|
|
21
|
+
mcpToolCount: number;
|
|
22
|
+
private readonly host;
|
|
23
|
+
constructor(host: StatusBarHost);
|
|
24
|
+
/** Set background agent count (called by REPL to keep UI in sync). */
|
|
25
|
+
setBackgroundAgentCount(count: number): void;
|
|
26
|
+
/** Set MCP loading state (shown while MCP servers connect in background). */
|
|
27
|
+
setMCPLoading(loading: boolean, toolCount?: number): void;
|
|
28
|
+
/** Returns navigable status bar indicators based on current state. */
|
|
29
|
+
getItems(): StatusBarItem[];
|
|
30
|
+
/** Handle keys while in status bar navigation mode. */
|
|
31
|
+
handleKey(_str: string, key: KeypressKey): void;
|
|
32
|
+
exitNav(): void;
|
|
33
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status bar navigation controller.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from TerminalUI — manages the navigable status bar indicators
|
|
5
|
+
* (pending requests, background agents, terminals, notifications).
|
|
6
|
+
*/
|
|
7
|
+
import { getPendingRequestsManager } from '../multi-agent/index.js';
|
|
8
|
+
import { getSessionRegistry } from '../multi-agent/session-registry.js';
|
|
9
|
+
import { getNotificationManager } from '../multi-agent/notification-manager.js';
|
|
10
|
+
export class StatusBarController {
|
|
11
|
+
navActive = false;
|
|
12
|
+
selectedIndex = 0;
|
|
13
|
+
backgroundAgentCount = 0;
|
|
14
|
+
mcpLoading = false;
|
|
15
|
+
mcpToolCount = 0;
|
|
16
|
+
host;
|
|
17
|
+
constructor(host) {
|
|
18
|
+
this.host = host;
|
|
19
|
+
}
|
|
20
|
+
/** Set background agent count (called by REPL to keep UI in sync). */
|
|
21
|
+
setBackgroundAgentCount(count) {
|
|
22
|
+
this.backgroundAgentCount = count;
|
|
23
|
+
this.host.requestRender();
|
|
24
|
+
}
|
|
25
|
+
/** Set MCP loading state (shown while MCP servers connect in background). */
|
|
26
|
+
setMCPLoading(loading, toolCount) {
|
|
27
|
+
this.mcpLoading = loading;
|
|
28
|
+
if (toolCount !== undefined)
|
|
29
|
+
this.mcpToolCount = toolCount;
|
|
30
|
+
this.host.requestRender();
|
|
31
|
+
}
|
|
32
|
+
/** Returns navigable status bar indicators based on current state. */
|
|
33
|
+
getItems() {
|
|
34
|
+
const items = [];
|
|
35
|
+
const notifManager = getNotificationManager();
|
|
36
|
+
if (notifManager && notifManager.getUnreadCount() > 0) {
|
|
37
|
+
items.push({ id: 'notifications', action: 'notifications' });
|
|
38
|
+
}
|
|
39
|
+
if (getPendingRequestsManager().getCount() > 0) {
|
|
40
|
+
items.push({ id: 'pending', action: 'pending' });
|
|
41
|
+
}
|
|
42
|
+
if (this.backgroundAgentCount > 0) {
|
|
43
|
+
items.push({ id: 'bg-agents', action: 'bg' });
|
|
44
|
+
}
|
|
45
|
+
const registry = getSessionRegistry();
|
|
46
|
+
if (registry && registry.getProjectScopedSessionCount() > 1) {
|
|
47
|
+
items.push({ id: 'terminals', action: 'terminals' });
|
|
48
|
+
}
|
|
49
|
+
if (this.mcpLoading) {
|
|
50
|
+
items.push({ id: 'mcp', action: 'mcp' });
|
|
51
|
+
}
|
|
52
|
+
return items;
|
|
53
|
+
}
|
|
54
|
+
/** Handle keys while in status bar navigation mode. */
|
|
55
|
+
handleKey(_str, key) {
|
|
56
|
+
const items = this.getItems();
|
|
57
|
+
if (items.length === 0) {
|
|
58
|
+
this.exitNav();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (key.name === 'right' || key.name === 'down') {
|
|
62
|
+
if (this.selectedIndex < items.length - 1) {
|
|
63
|
+
this.selectedIndex++;
|
|
64
|
+
this.host.requestRender();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else if (key.name === 'left') {
|
|
68
|
+
if (this.selectedIndex > 0) {
|
|
69
|
+
this.selectedIndex--;
|
|
70
|
+
this.host.requestRender();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (key.name === 'up') {
|
|
74
|
+
if (this.selectedIndex > 0) {
|
|
75
|
+
this.selectedIndex--;
|
|
76
|
+
this.host.requestRender();
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this.exitNav();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else if (key.name === 'return') {
|
|
83
|
+
const item = items[this.selectedIndex];
|
|
84
|
+
this.exitNav();
|
|
85
|
+
this.host.emit('command', item.action, '');
|
|
86
|
+
}
|
|
87
|
+
else if (key.name === 'escape') {
|
|
88
|
+
this.exitNav();
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
this.exitNav();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exitNav() {
|
|
95
|
+
this.navActive = false;
|
|
96
|
+
this.selectedIndex = 0;
|
|
97
|
+
this.host.requestRender();
|
|
98
|
+
}
|
|
99
|
+
}
|