@compilr-dev/cli 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +108 -0
- package/README.md +237 -69
- package/dist/.tsbuildinfo.app +1 -0
- package/dist/.tsbuildinfo.data +1 -0
- package/dist/.tsbuildinfo.domain +1 -0
- package/dist/.tsbuildinfo.foundation +1 -0
- package/dist/agent.d.ts +61 -4
- package/dist/agent.js +241 -245
- package/dist/anchors/index.d.ts +1 -1
- package/dist/anchors/index.js +1 -1
- package/dist/anchors/project-anchors.d.ts +2 -2
- package/dist/anchors/project-anchors.js +1 -1
- package/dist/auth/api-client.d.ts +124 -0
- package/dist/auth/api-client.js +261 -0
- package/dist/auth/index.d.ts +172 -0
- package/dist/auth/index.js +545 -0
- package/dist/auth/storage.d.ts +52 -0
- package/dist/auth/storage.js +118 -0
- package/dist/changelog/index.d.ts +16 -0
- package/dist/changelog/index.js +24 -0
- package/dist/changelog/releases.d.ts +17 -0
- package/dist/changelog/releases.js +63 -0
- package/dist/commands-v2/handlers/auth.d.ts +10 -0
- package/dist/commands-v2/handlers/auth.js +118 -0
- package/dist/commands-v2/handlers/background.d.ts +14 -0
- package/dist/commands-v2/handlers/background.js +276 -0
- package/dist/commands-v2/handlers/context.js +286 -81
- package/dist/commands-v2/handlers/core.d.ts +1 -0
- package/dist/commands-v2/handlers/core.js +133 -8
- package/dist/commands-v2/handlers/debug.js +18 -0
- package/dist/commands-v2/handlers/delegations.d.ts +8 -0
- package/dist/commands-v2/handlers/delegations.js +29 -0
- package/dist/commands-v2/handlers/files.d.ts +8 -0
- package/dist/commands-v2/handlers/files.js +162 -0
- package/dist/commands-v2/handlers/filter.d.ts +9 -0
- package/dist/commands-v2/handlers/filter.js +130 -0
- package/dist/commands-v2/handlers/games.d.ts +7 -0
- package/dist/commands-v2/handlers/games.js +57 -0
- package/dist/commands-v2/handlers/index.d.ts +13 -0
- package/dist/commands-v2/handlers/index.js +39 -0
- package/dist/commands-v2/handlers/mcp.d.ts +8 -0
- package/dist/commands-v2/handlers/mcp.js +39 -0
- package/dist/commands-v2/handlers/notifications.d.ts +9 -0
- package/dist/commands-v2/handlers/notifications.js +34 -0
- package/dist/commands-v2/handlers/project.js +295 -31
- package/dist/commands-v2/handlers/reset.d.ts +11 -0
- package/dist/commands-v2/handlers/reset.js +118 -0
- package/dist/commands-v2/handlers/session.d.ts +161 -0
- package/dist/commands-v2/handlers/session.js +805 -0
- package/dist/commands-v2/handlers/settings.d.ts +2 -0
- package/dist/commands-v2/handlers/settings.js +217 -35
- package/dist/commands-v2/handlers/tasks.d.ts +5 -0
- package/dist/commands-v2/handlers/tasks.js +36 -0
- package/dist/commands-v2/handlers/team.d.ts +9 -0
- package/dist/commands-v2/handlers/team.js +549 -0
- package/dist/commands-v2/handlers/terminals.d.ts +9 -0
- package/dist/commands-v2/handlers/terminals.js +34 -0
- package/dist/commands-v2/index.d.ts +3 -2
- package/dist/commands-v2/index.js +4 -1
- package/dist/commands-v2/registry.d.ts +15 -0
- package/dist/commands-v2/registry.js +34 -0
- package/dist/commands-v2/types.d.ts +81 -3
- package/dist/commands.js +13 -0
- package/dist/compilr-diff-companion.vsix +0 -0
- package/dist/db/index.js +98 -4
- package/dist/db/repositories/document-repository.d.ts +2 -0
- package/dist/db/repositories/document-repository.js +6 -1
- package/dist/db/repositories/index.d.ts +2 -0
- package/dist/db/repositories/index.js +1 -0
- package/dist/db/repositories/plan-repository.d.ts +101 -0
- package/dist/db/repositories/plan-repository.js +275 -0
- package/dist/db/repositories/project-repository.d.ts +6 -0
- package/dist/db/repositories/project-repository.js +41 -0
- package/dist/db/repositories/work-item-repository.d.ts +15 -0
- package/dist/db/repositories/work-item-repository.js +69 -4
- package/dist/db/schema.d.ts +40 -3
- package/dist/db/schema.js +66 -3
- package/dist/episodes/index.d.ts +20 -0
- package/dist/episodes/index.js +27 -0
- package/dist/episodes/recorder.d.ts +51 -0
- package/dist/episodes/recorder.js +195 -0
- package/dist/episodes/significant-work.d.ts +21 -0
- package/dist/episodes/significant-work.js +56 -0
- package/dist/episodes/store.d.ts +38 -0
- package/dist/episodes/store.js +199 -0
- package/dist/episodes/types.d.ts +35 -0
- package/dist/episodes/types.js +6 -0
- package/dist/episodes/work-at-risk.d.ts +12 -0
- package/dist/episodes/work-at-risk.js +38 -0
- package/dist/episodes/work-summary-anchor.d.ts +23 -0
- package/dist/episodes/work-summary-anchor.js +73 -0
- package/dist/games/coins.d.ts +66 -0
- package/dist/games/coins.js +165 -0
- package/dist/games/game-base.d.ts +84 -0
- package/dist/games/game-base.js +204 -0
- package/dist/games/index.d.ts +16 -0
- package/dist/games/index.js +49 -0
- package/dist/games/scores.d.ts +69 -0
- package/dist/games/scores.js +191 -0
- package/dist/games/tetris/board.d.ts +59 -0
- package/dist/games/tetris/board.js +170 -0
- package/dist/games/tetris/index.d.ts +109 -0
- package/dist/games/tetris/index.js +610 -0
- package/dist/games/tetris/pieces.d.ts +44 -0
- package/dist/games/tetris/pieces.js +271 -0
- package/dist/games/tetris/renderer.d.ts +26 -0
- package/dist/games/tetris/renderer.js +77 -0
- package/dist/guide/guide-content.d.ts +23 -0
- package/dist/guide/guide-content.js +196 -0
- package/dist/guide/index.d.ts +8 -0
- package/dist/guide/index.js +7 -0
- package/dist/guide/shared-content.d.ts +37 -0
- package/dist/guide/shared-content.js +1272 -0
- package/dist/guide/tutorial-helpers.d.ts +57 -0
- package/dist/guide/tutorial-helpers.js +147 -0
- package/dist/handlers/ask-user-handlers.d.ts +32 -0
- package/dist/handlers/ask-user-handlers.js +104 -0
- package/dist/handlers/delegation-handlers.d.ts +34 -0
- package/dist/handlers/delegation-handlers.js +291 -0
- package/dist/handlers/permission-handler.d.ts +30 -0
- package/dist/handlers/permission-handler.js +205 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.js +448 -271
- package/dist/input-handlers/memory-handler.d.ts +1 -1
- package/dist/input-handlers/memory-handler.js +2 -1
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.js +12 -0
- package/dist/models/model-registry.d.ts +38 -0
- package/dist/models/model-registry.js +69 -0
- package/dist/models/model-tiers.d.ts +28 -0
- package/dist/models/model-tiers.js +71 -0
- package/dist/models/model-validation.d.ts +25 -0
- package/dist/models/model-validation.js +291 -0
- package/dist/models/ollama-models.d.ts +73 -0
- package/dist/models/ollama-models.js +178 -0
- package/dist/models/provider-types.d.ts +6 -0
- package/dist/models/provider-types.js +1 -0
- package/dist/models/providers.d.ts +35 -0
- package/dist/models/providers.js +58 -0
- package/dist/models/types.d.ts +4 -0
- package/dist/models/types.js +4 -0
- package/dist/multi-agent/activity.d.ts +21 -0
- package/dist/multi-agent/activity.js +34 -0
- package/dist/multi-agent/agent-selection.d.ts +55 -0
- package/dist/multi-agent/agent-selection.js +90 -0
- package/dist/multi-agent/artifacts.d.ts +197 -0
- package/dist/multi-agent/artifacts.js +379 -0
- package/dist/multi-agent/checkpointer.d.ts +138 -0
- package/dist/multi-agent/checkpointer.js +471 -0
- package/dist/multi-agent/collision-utils.d.ts +16 -0
- package/dist/multi-agent/collision-utils.js +28 -0
- package/dist/multi-agent/context-resolver.d.ts +97 -0
- package/dist/multi-agent/context-resolver.js +316 -0
- package/dist/multi-agent/custom-agents.d.ts +83 -0
- package/dist/multi-agent/custom-agents.js +227 -0
- package/dist/multi-agent/delegation-tracker.d.ts +157 -0
- package/dist/multi-agent/delegation-tracker.js +243 -0
- package/dist/multi-agent/file-lock-hook.d.ts +29 -0
- package/dist/multi-agent/file-lock-hook.js +97 -0
- package/dist/multi-agent/file-locks.d.ts +58 -0
- package/dist/multi-agent/file-locks.js +194 -0
- package/dist/multi-agent/index.d.ts +24 -0
- package/dist/multi-agent/index.js +30 -0
- package/dist/multi-agent/mention-parser.d.ts +64 -0
- package/dist/multi-agent/mention-parser.js +146 -0
- package/dist/multi-agent/notification-manager.d.ts +84 -0
- package/dist/multi-agent/notification-manager.js +224 -0
- package/dist/multi-agent/pending-requests.d.ts +122 -0
- package/dist/multi-agent/pending-requests.js +155 -0
- package/dist/multi-agent/session-registry.d.ts +139 -0
- package/dist/multi-agent/session-registry.js +514 -0
- package/dist/multi-agent/shared-context.d.ts +293 -0
- package/dist/multi-agent/shared-context.js +671 -0
- package/dist/multi-agent/skill-requirements.d.ts +66 -0
- package/dist/multi-agent/skill-requirements.js +178 -0
- package/dist/multi-agent/task-assignment.d.ts +69 -0
- package/dist/multi-agent/task-assignment.js +123 -0
- package/dist/multi-agent/task-suggestion.d.ts +31 -0
- package/dist/multi-agent/task-suggestion.js +72 -0
- package/dist/multi-agent/team-agent.d.ts +201 -0
- package/dist/multi-agent/team-agent.js +488 -0
- package/dist/multi-agent/team.d.ts +286 -0
- package/dist/multi-agent/team.js +610 -0
- package/dist/multi-agent/tool-config.d.ts +110 -0
- package/dist/multi-agent/tool-config.js +661 -0
- package/dist/multi-agent/types.d.ts +211 -0
- package/dist/multi-agent/types.js +617 -0
- package/dist/prompts/plan-mode-prompt.d.ts +11 -0
- package/dist/prompts/plan-mode-prompt.js +95 -0
- package/dist/repl-helpers.js +5 -2
- package/dist/repl-v2.d.ts +401 -2
- package/dist/repl-v2.js +2588 -65
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.js +6 -0
- package/dist/session/project-session-manager.d.ts +158 -0
- package/dist/session/project-session-manager.js +650 -0
- package/dist/settings/index.d.ts +133 -13
- package/dist/settings/index.js +329 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +4 -0
- package/dist/settings/paths.js +6 -0
- package/dist/shared-handlers.d.ts +62 -0
- package/dist/shared-handlers.js +48 -0
- package/dist/system-prompt/builder.d.ts +5 -0
- package/dist/system-prompt/builder.js +4 -0
- package/dist/system-prompt/index.d.ts +18 -0
- package/dist/system-prompt/index.js +18 -0
- package/dist/system-prompt/modules.d.ts +5 -0
- package/dist/system-prompt/modules.js +4 -0
- package/dist/tabbed-menu.js +2 -1
- package/dist/templates/compilr-md-import.d.ts +16 -0
- package/dist/templates/compilr-md-import.js +241 -0
- package/dist/templates/compilr-md.js +10 -61
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +34 -73
- package/dist/tool-names.d.ts +113 -0
- package/dist/tool-names.js +239 -0
- package/dist/tools/ask-user-simple.d.ts +1 -1
- package/dist/tools/ask-user-simple.js +2 -1
- package/dist/tools/ask-user.d.ts +1 -1
- package/dist/tools/ask-user.js +2 -1
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +1 -1
- package/dist/tools/db-tools.d.ts +13 -61
- package/dist/tools/db-tools.js +12 -13
- package/dist/tools/delegate-background.d.ts +27 -0
- package/dist/tools/delegate-background.js +115 -0
- package/dist/tools/delegate.d.ts +22 -0
- package/dist/tools/delegate.js +97 -0
- package/dist/tools/delegation-status.d.ts +16 -0
- package/dist/tools/delegation-status.js +128 -0
- package/dist/tools/guide-tool.d.ts +12 -0
- package/dist/tools/guide-tool.js +59 -0
- package/dist/tools/handoff.d.ts +25 -0
- package/dist/tools/handoff.js +99 -0
- package/dist/tools/meta-tools.d.ts +26 -0
- package/dist/tools/meta-tools.js +47 -0
- package/dist/tools/platform-adapter.d.ts +35 -0
- package/dist/tools/platform-adapter.js +404 -0
- package/dist/tools/project-db.d.ts +5 -73
- package/dist/tools/project-db.js +5 -336
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +240 -48
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- package/dist/ui/base/index.d.ts +1 -1
- package/dist/ui/base/index.js +1 -1
- package/dist/ui/base/overlay-base-v2.d.ts +10 -0
- package/dist/ui/base/overlay-base-v2.js +14 -0
- package/dist/ui/base/render-utils.d.ts +19 -0
- package/dist/ui/base/render-utils.js +25 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
- package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
- package/dist/ui/constants/labels.d.ts +14 -0
- package/dist/ui/constants/labels.js +52 -0
- package/dist/ui/conversation-store.d.ts +55 -0
- package/dist/ui/conversation-store.js +107 -0
- package/dist/ui/conversation.js +11 -13
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.js +3 -9
- package/dist/ui/file-autocomplete.d.ts +24 -0
- package/dist/ui/file-autocomplete.js +56 -0
- package/dist/ui/footer-renderer.d.ts +69 -0
- package/dist/ui/footer-renderer.js +431 -0
- package/dist/ui/footer.d.ts +74 -7
- package/dist/ui/footer.js +173 -16
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +19 -0
- package/dist/ui/input-prompt.js +206 -14
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -0
- package/dist/ui/live-region-facade.d.ts +42 -0
- package/dist/ui/live-region-facade.js +205 -0
- package/dist/ui/live-region.d.ts +0 -4
- package/dist/ui/live-region.js +6 -14
- package/dist/ui/mascot/renderer.d.ts +1 -1
- package/dist/ui/mascot/renderer.js +37 -2
- package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
- package/dist/ui/overlay/data/tutorial-content.js +9 -0
- package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
- package/dist/ui/overlay/data/tutorial-registry.js +116 -0
- package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
- package/dist/ui/overlay/data/tutorial-types.js +6 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
- package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
- package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
- package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
- package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
- package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
- package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
- package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
- package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
- package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
- package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
- package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
- package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
- package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
- package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
- package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
- package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
- package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
- package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
- package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
- package/dist/ui/overlay/index.d.ts +20 -1
- package/dist/ui/overlay/index.js +19 -0
- package/dist/ui/overlay/types.d.ts +5 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.js +4 -16
- package/dist/ui/permission-overlay.js +6 -5
- package/dist/ui/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.js +3 -19
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -0
- package/dist/ui/terminal-line-builders.d.ts +17 -0
- package/dist/ui/terminal-line-builders.js +42 -0
- package/dist/ui/terminal-render-item.d.ts +16 -0
- package/dist/ui/terminal-render-item.js +267 -0
- package/dist/ui/terminal-renderer.d.ts +7 -8
- package/dist/ui/terminal-renderer.js +7 -8
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +144 -276
- package/dist/ui/terminal-ui.js +384 -1861
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +71 -13
- package/dist/ui/tool-formatters.js +696 -1
- package/dist/ui/turn-metrics.d.ts +56 -0
- package/dist/ui/turn-metrics.js +75 -0
- package/dist/ui/types.d.ts +28 -0
- package/dist/ui/types.js +1 -0
- package/dist/ui/vscode-diff-ipc.d.ts +102 -0
- package/dist/ui/vscode-diff-ipc.js +385 -0
- package/dist/utils/credentials.d.ts +24 -5
- package/dist/utils/credentials.js +123 -9
- package/dist/utils/format-tokens.d.ts +13 -0
- package/dist/utils/format-tokens.js +18 -0
- package/dist/utils/git-config.d.ts +26 -0
- package/dist/utils/git-config.js +54 -0
- package/dist/utils/message-utils.d.ts +61 -0
- package/dist/utils/message-utils.js +72 -0
- package/dist/utils/model-tiers.d.ts +8 -1
- package/dist/utils/model-tiers.js +38 -16
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.js +3 -2
- package/dist/utils/project-detection.d.ts +58 -0
- package/dist/utils/project-detection.js +424 -0
- package/dist/utils/project-memory.js +2 -1
- package/dist/utils/project-status.d.ts +2 -2
- package/dist/utils/startup-perf.d.ts +18 -0
- package/dist/utils/startup-perf.js +60 -0
- package/dist/utils/token-tracker.d.ts +62 -0
- package/dist/utils/token-tracker.js +150 -0
- package/dist/utils/token-types.d.ts +23 -0
- package/dist/utils/token-types.js +18 -0
- package/dist/utils/types/config-types.d.ts +32 -0
- package/dist/utils/types/config-types.js +8 -0
- package/dist/utils/update-checker.d.ts +28 -0
- package/dist/utils/update-checker.js +106 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.js +10 -0
- package/dist/utils/vscode-detect.d.ts +39 -0
- package/dist/utils/vscode-detect.js +137 -0
- package/package.json +27 -13
- package/dist/commands/handler-types.d.ts +0 -68
- package/dist/commands/handler-types.js +0 -8
- package/dist/commands/handlers/agent-commands.d.ts +0 -13
- package/dist/commands/handlers/agent-commands.js +0 -305
- package/dist/commands/handlers/design-commands.d.ts +0 -15
- package/dist/commands/handlers/design-commands.js +0 -334
- package/dist/commands/handlers/index.d.ts +0 -20
- package/dist/commands/handlers/index.js +0 -43
- package/dist/commands/handlers/overlay-commands.d.ts +0 -21
- package/dist/commands/handlers/overlay-commands.js +0 -287
- package/dist/commands/handlers/project-commands.d.ts +0 -11
- package/dist/commands/handlers/project-commands.js +0 -167
- package/dist/commands/handlers/simple-commands.d.ts +0 -19
- package/dist/commands/handlers/simple-commands.js +0 -144
- package/dist/commands/registry.d.ts +0 -50
- package/dist/commands/registry.js +0 -75
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -149
- package/dist/repl.js +0 -1151
- package/dist/templates/claude-md.d.ts +0 -7
- package/dist/templates/claude-md.js +0 -189
- package/dist/test-autocomplete.d.ts +0 -7
- package/dist/test-autocomplete.js +0 -85
- package/dist/test-tabbed-menu.d.ts +0 -7
- package/dist/test-tabbed-menu.js +0 -25
- package/dist/tool-selector.d.ts +0 -71
- package/dist/tool-selector.js +0 -184
- package/dist/tools/anchor-tools.d.ts +0 -31
- package/dist/tools/anchor-tools.js +0 -255
- package/dist/tools/backlog-wrappers.d.ts +0 -54
- package/dist/tools/backlog-wrappers.js +0 -338
- package/dist/tools/document-db.d.ts +0 -43
- package/dist/tools/document-db.js +0 -220
- package/dist/tools/workitem-db.d.ts +0 -103
- package/dist/tools/workitem-db.js +0 -549
- package/dist/ui/agents-overlay-v2.d.ts +0 -43
- package/dist/ui/agents-overlay-v2.js +0 -809
- package/dist/ui/agents-overlay.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -863
- package/dist/ui/anchors-overlay.d.ts +0 -12
- package/dist/ui/anchors-overlay.js +0 -775
- package/dist/ui/arch-type-overlay.d.ts +0 -15
- package/dist/ui/arch-type-overlay.js +0 -201
- package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
- package/dist/ui/ask-user-overlay-v2.js +0 -555
- package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
- package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
- package/dist/ui/backlog-overlay.d.ts +0 -32
- package/dist/ui/backlog-overlay.js +0 -652
- package/dist/ui/commands-overlay-v2.d.ts +0 -33
- package/dist/ui/commands-overlay-v2.js +0 -441
- package/dist/ui/commands-overlay.d.ts +0 -16
- package/dist/ui/commands-overlay.js +0 -439
- package/dist/ui/config-overlay.d.ts +0 -35
- package/dist/ui/config-overlay.js +0 -707
- package/dist/ui/docs-overlay.d.ts +0 -17
- package/dist/ui/docs-overlay.js +0 -303
- package/dist/ui/footer-v2.d.ts +0 -222
- package/dist/ui/footer-v2.js +0 -1349
- package/dist/ui/help-overlay-v2.d.ts +0 -34
- package/dist/ui/help-overlay-v2.js +0 -309
- package/dist/ui/help-overlay.d.ts +0 -16
- package/dist/ui/help-overlay.js +0 -316
- package/dist/ui/init-overlay-v2.d.ts +0 -34
- package/dist/ui/init-overlay-v2.js +0 -600
- package/dist/ui/init-overlay.d.ts +0 -34
- package/dist/ui/init-overlay.js +0 -604
- package/dist/ui/input-prompt-v2.d.ts +0 -180
- package/dist/ui/input-prompt-v2.js +0 -999
- package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
- package/dist/ui/iteration-limit-overlay-v2.js +0 -114
- package/dist/ui/keys-overlay-v2.d.ts +0 -41
- package/dist/ui/keys-overlay-v2.js +0 -248
- package/dist/ui/mascot-overlay-v2.d.ts +0 -41
- package/dist/ui/mascot-overlay-v2.js +0 -138
- package/dist/ui/mascot-overlay.d.ts +0 -21
- package/dist/ui/mascot-overlay.js +0 -146
- package/dist/ui/model-overlay-v2.d.ts +0 -49
- package/dist/ui/model-overlay-v2.js +0 -118
- package/dist/ui/model-overlay.d.ts +0 -27
- package/dist/ui/model-overlay.js +0 -221
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -169
- package/dist/ui/new-overlay.d.ts +0 -34
- package/dist/ui/new-overlay.js +0 -604
- package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
- package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
- package/dist/ui/overlay/overlay-types.d.ts +0 -128
- package/dist/ui/overlay/overlay-types.js +0 -22
- package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
- package/dist/ui/overlays/help-overlay-v2.js +0 -198
- package/dist/ui/overlays/index.d.ts +0 -11
- package/dist/ui/overlays/index.js +0 -11
- package/dist/ui/permission-overlay-v2.d.ts +0 -36
- package/dist/ui/permission-overlay-v2.js +0 -380
- package/dist/ui/projects-overlay.d.ts +0 -19
- package/dist/ui/projects-overlay.js +0 -484
- package/dist/ui/theme-overlay-v2.d.ts +0 -42
- package/dist/ui/theme-overlay-v2.js +0 -135
- package/dist/ui/theme-overlay.d.ts +0 -24
- package/dist/ui/theme-overlay.js +0 -127
- package/dist/ui/tools-overlay-v2.d.ts +0 -47
- package/dist/ui/tools-overlay-v2.js +0 -218
- package/dist/ui/tools-overlay.d.ts +0 -34
- package/dist/ui/tools-overlay.js +0 -230
- package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
- package/dist/ui/tutorial-overlay-v2.js +0 -1035
- package/dist/ui/tutorial-overlay.d.ts +0 -11
- package/dist/ui/tutorial-overlay.js +0 -1034
- package/dist/ui/workflow-overlay.d.ts +0 -22
- package/dist/ui/workflow-overlay.js +0 -636
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resume Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Modal overlay for viewing and resuming saved sessions.
|
|
5
|
+
* Uses TabbedListOverlayV2 for consistent list/tab/search behavior.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - List saved sessions with relative timestamps
|
|
9
|
+
* - Preview of last user message
|
|
10
|
+
* - Search sessions by content
|
|
11
|
+
* - Delete sessions
|
|
12
|
+
* - Resume selected session
|
|
13
|
+
*/
|
|
14
|
+
import * as terminal from '../../terminal.js';
|
|
15
|
+
import { TabbedListOverlayV2, BaseScreen, stay, popScreen, closeOverlay, isEscape, isCtrlC, isEnter, isClose, extractPrintable, renderBorder, wrapText, truncate, } from '../../base/index.js';
|
|
16
|
+
const TABS = [
|
|
17
|
+
{ id: 'recent', label: 'Recent' },
|
|
18
|
+
{ id: 'all', label: 'All' },
|
|
19
|
+
];
|
|
20
|
+
// =============================================================================
|
|
21
|
+
// Helper Functions
|
|
22
|
+
// =============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* Format a date as a relative time string.
|
|
25
|
+
*/
|
|
26
|
+
function formatRelativeTime(date) {
|
|
27
|
+
const now = Date.now();
|
|
28
|
+
const then = new Date(date).getTime();
|
|
29
|
+
const diff = now - then;
|
|
30
|
+
const seconds = Math.floor(diff / 1000);
|
|
31
|
+
const minutes = Math.floor(seconds / 60);
|
|
32
|
+
const hours = Math.floor(minutes / 60);
|
|
33
|
+
const days = Math.floor(hours / 24);
|
|
34
|
+
if (days > 7) {
|
|
35
|
+
return new Date(date).toLocaleDateString();
|
|
36
|
+
}
|
|
37
|
+
if (days > 1) {
|
|
38
|
+
return `${String(days)} days ago`;
|
|
39
|
+
}
|
|
40
|
+
if (days === 1) {
|
|
41
|
+
return 'Yesterday';
|
|
42
|
+
}
|
|
43
|
+
if (hours >= 1) {
|
|
44
|
+
return `${String(hours)} hour${hours > 1 ? 's' : ''} ago`;
|
|
45
|
+
}
|
|
46
|
+
if (minutes >= 1) {
|
|
47
|
+
return `${String(minutes)} minute${minutes > 1 ? 's' : ''} ago`;
|
|
48
|
+
}
|
|
49
|
+
return 'Just now';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Convert SessionInfo to SessionItem with relative time.
|
|
53
|
+
*/
|
|
54
|
+
function toSessionItem(session, currentProjectId) {
|
|
55
|
+
// Check if this is a ProjectSessionInfo with project metadata
|
|
56
|
+
const projectSession = session;
|
|
57
|
+
const projectId = projectSession.projectId;
|
|
58
|
+
const projectName = projectSession.projectName;
|
|
59
|
+
const isCurrentProject = projectId === currentProjectId;
|
|
60
|
+
return {
|
|
61
|
+
sessionId: session.sessionId,
|
|
62
|
+
preview: session.preview || 'No preview available',
|
|
63
|
+
messageCount: session.messageCount,
|
|
64
|
+
createdAt: session.createdAt,
|
|
65
|
+
updatedAt: session.updatedAt,
|
|
66
|
+
relativeTime: formatRelativeTime(session.updatedAt),
|
|
67
|
+
projectId,
|
|
68
|
+
projectName,
|
|
69
|
+
isCurrentProject,
|
|
70
|
+
terminalPrefix: projectSession.terminalPrefix ?? null,
|
|
71
|
+
terminalLabel: projectSession.terminalLabel ?? null,
|
|
72
|
+
isActiveTerminal: projectSession.isActiveTerminal ?? false,
|
|
73
|
+
teamAgentCount: projectSession.teamAgentCount ?? 0,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// =============================================================================
|
|
77
|
+
// Detail Screen (Session Details)
|
|
78
|
+
// =============================================================================
|
|
79
|
+
/**
|
|
80
|
+
* Screen for viewing session details before resuming.
|
|
81
|
+
*/
|
|
82
|
+
class DetailScreen extends BaseScreen {
|
|
83
|
+
item;
|
|
84
|
+
styles;
|
|
85
|
+
onDelete;
|
|
86
|
+
confirmDelete = false;
|
|
87
|
+
confirmCrossProject = false;
|
|
88
|
+
confirmSelected = 1; // 0 = Yes, 1 = No (for both confirmations)
|
|
89
|
+
constructor(item, styles, onDelete) {
|
|
90
|
+
super();
|
|
91
|
+
this.item = item;
|
|
92
|
+
this.styles = styles;
|
|
93
|
+
this.onDelete = onDelete;
|
|
94
|
+
}
|
|
95
|
+
render() {
|
|
96
|
+
const s = this.styles;
|
|
97
|
+
const cols = terminal.getTerminalWidth();
|
|
98
|
+
const border = renderBorder(cols, s);
|
|
99
|
+
const lines = [];
|
|
100
|
+
lines.push(border);
|
|
101
|
+
lines.push(` ${s.primaryBold('Session Details')}`);
|
|
102
|
+
lines.push('');
|
|
103
|
+
// Delete confirmation
|
|
104
|
+
if (this.confirmDelete) {
|
|
105
|
+
lines.push(` ${s.error('Delete this session?')}`);
|
|
106
|
+
lines.push('');
|
|
107
|
+
lines.push(` ${s.muted('Session ID:')} ${s.secondary(this.item.sessionId)}`);
|
|
108
|
+
lines.push(` ${s.muted('Messages:')} ${s.secondary(String(this.item.messageCount))}`);
|
|
109
|
+
lines.push('');
|
|
110
|
+
lines.push(this.confirmSelected === 0
|
|
111
|
+
? ` ${s.error('> Yes, delete')}`
|
|
112
|
+
: ` ${s.muted(' Yes, delete')}`);
|
|
113
|
+
lines.push(this.confirmSelected === 1
|
|
114
|
+
? ` ${s.primary('> No, cancel')}`
|
|
115
|
+
: ` ${s.muted(' No, cancel')}`);
|
|
116
|
+
lines.push('');
|
|
117
|
+
lines.push(border);
|
|
118
|
+
lines.push(` ${s.muted('↑/↓ Navigate · Enter Select · Esc Cancel')}`);
|
|
119
|
+
lines.push(border);
|
|
120
|
+
return lines;
|
|
121
|
+
}
|
|
122
|
+
// Cross-project confirmation
|
|
123
|
+
if (this.confirmCrossProject) {
|
|
124
|
+
const projName = this.item.projectName ?? `Project ${String(this.item.projectId)}`;
|
|
125
|
+
lines.push(` ${s.warning('⚠ This session is from a different project')}`);
|
|
126
|
+
lines.push('');
|
|
127
|
+
lines.push(` ${s.muted('Project:')} ${s.primary(projName)}`);
|
|
128
|
+
lines.push(` ${s.muted('Messages:')} ${s.secondary(String(this.item.messageCount))}`);
|
|
129
|
+
lines.push('');
|
|
130
|
+
lines.push(` ${s.secondary('Resuming will load conversation history from that project.')}`);
|
|
131
|
+
lines.push(` ${s.secondary('Your current project context will remain unchanged.')}`);
|
|
132
|
+
lines.push('');
|
|
133
|
+
lines.push(this.confirmSelected === 0
|
|
134
|
+
? ` ${s.warning('> Yes, resume anyway')}`
|
|
135
|
+
: ` ${s.muted(' Yes, resume anyway')}`);
|
|
136
|
+
lines.push(this.confirmSelected === 1
|
|
137
|
+
? ` ${s.primary('> No, cancel')}`
|
|
138
|
+
: ` ${s.muted(' No, cancel')}`);
|
|
139
|
+
lines.push('');
|
|
140
|
+
lines.push(border);
|
|
141
|
+
lines.push(` ${s.muted('↑/↓ Navigate · Enter Select · Esc Cancel')}`);
|
|
142
|
+
lines.push(border);
|
|
143
|
+
return lines;
|
|
144
|
+
}
|
|
145
|
+
// Show cross-project warning banner if applicable
|
|
146
|
+
if (!this.item.isCurrentProject && this.item.projectId !== null) {
|
|
147
|
+
const projName = this.item.projectName ?? `Project ${String(this.item.projectId)}`;
|
|
148
|
+
lines.push(` ${s.warning(`⚠ From different project: ${projName}`)}`);
|
|
149
|
+
lines.push('');
|
|
150
|
+
}
|
|
151
|
+
// Active terminal warning
|
|
152
|
+
if (this.item.isActiveTerminal) {
|
|
153
|
+
lines.push(` ${s.warning('\u26A0 This session is in use by another terminal')}`);
|
|
154
|
+
lines.push('');
|
|
155
|
+
}
|
|
156
|
+
// Session info
|
|
157
|
+
lines.push(` ${s.muted('Updated:')} ${s.primary(this.item.relativeTime)}`);
|
|
158
|
+
lines.push(` ${s.muted('Created:')} ${s.secondary(new Date(this.item.createdAt).toLocaleString())}`);
|
|
159
|
+
if (this.item.messageCount > 0) {
|
|
160
|
+
lines.push(` ${s.muted('Messages:')} ${s.secondary(String(this.item.messageCount))}`);
|
|
161
|
+
}
|
|
162
|
+
else if (this.item.teamAgentCount && this.item.teamAgentCount > 1) {
|
|
163
|
+
lines.push(` ${s.muted('Messages:')} ${s.secondary('None (team only)')}`);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
lines.push(` ${s.muted('Messages:')} ${s.secondary(String(this.item.messageCount))}`);
|
|
167
|
+
}
|
|
168
|
+
if (this.item.teamAgentCount && this.item.teamAgentCount > 1) {
|
|
169
|
+
lines.push(` ${s.muted('Team:')} ${s.secondary(`${String(this.item.teamAgentCount)} agents`)}`);
|
|
170
|
+
}
|
|
171
|
+
lines.push(` ${s.muted('Session ID:')} ${s.secondary(this.item.sessionId)}`);
|
|
172
|
+
// Terminal info (for multi-terminal sessions)
|
|
173
|
+
if (this.item.terminalLabel) {
|
|
174
|
+
const prefixStr = this.item.terminalPrefix ? ` (${this.item.terminalPrefix})` : '';
|
|
175
|
+
const statusStr = this.item.isActiveTerminal
|
|
176
|
+
? s.success('\u25CF Active')
|
|
177
|
+
: s.muted('\u2014 Exited');
|
|
178
|
+
lines.push(` ${s.muted('Terminal:')} ${s.secondary(this.item.terminalLabel + prefixStr)} ${statusStr}`);
|
|
179
|
+
}
|
|
180
|
+
lines.push('');
|
|
181
|
+
// Preview
|
|
182
|
+
lines.push(` ${s.muted('Last message:')}`);
|
|
183
|
+
const previewLines = wrapText(this.item.preview, cols - 6);
|
|
184
|
+
for (const line of previewLines.slice(0, 3)) {
|
|
185
|
+
lines.push(` ${s.secondary(line)}`);
|
|
186
|
+
}
|
|
187
|
+
if (previewLines.length > 3) {
|
|
188
|
+
lines.push(` ${s.muted('...')}`);
|
|
189
|
+
}
|
|
190
|
+
lines.push('');
|
|
191
|
+
lines.push(border);
|
|
192
|
+
if (this.item.isActiveTerminal) {
|
|
193
|
+
lines.push(` ${s.muted('d Delete · q/Esc Back')} ${s.warning('(in use — cannot resume)')}`);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
lines.push(` ${s.muted('Enter Resume · d Delete · q/Esc Back')}`);
|
|
197
|
+
}
|
|
198
|
+
lines.push(border);
|
|
199
|
+
return lines;
|
|
200
|
+
}
|
|
201
|
+
handleKey(data) {
|
|
202
|
+
const char = extractPrintable(data);
|
|
203
|
+
const key = data.toString();
|
|
204
|
+
// Ctrl+C closes everything
|
|
205
|
+
if (isCtrlC(data)) {
|
|
206
|
+
return closeOverlay(undefined);
|
|
207
|
+
}
|
|
208
|
+
// Confirm delete mode
|
|
209
|
+
if (this.confirmDelete) {
|
|
210
|
+
if (isEscape(data)) {
|
|
211
|
+
this.confirmDelete = false;
|
|
212
|
+
return stay();
|
|
213
|
+
}
|
|
214
|
+
if (char === 'j' || char === 'k' || key === '\x1b[A' || key === '\x1b[B') {
|
|
215
|
+
this.confirmSelected = this.confirmSelected === 0 ? 1 : 0;
|
|
216
|
+
return stay();
|
|
217
|
+
}
|
|
218
|
+
if (isEnter(data)) {
|
|
219
|
+
if (this.confirmSelected === 0) {
|
|
220
|
+
// Yes - delete the session
|
|
221
|
+
void this.handleDelete();
|
|
222
|
+
return closeOverlay({ deleted: this.item.sessionId });
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
// No - cancel
|
|
226
|
+
this.confirmDelete = false;
|
|
227
|
+
return stay();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return stay(false);
|
|
231
|
+
}
|
|
232
|
+
// Cross-project confirmation mode
|
|
233
|
+
if (this.confirmCrossProject) {
|
|
234
|
+
if (isEscape(data)) {
|
|
235
|
+
this.confirmCrossProject = false;
|
|
236
|
+
return stay();
|
|
237
|
+
}
|
|
238
|
+
if (char === 'j' || char === 'k' || key === '\x1b[A' || key === '\x1b[B') {
|
|
239
|
+
this.confirmSelected = this.confirmSelected === 0 ? 1 : 0;
|
|
240
|
+
return stay();
|
|
241
|
+
}
|
|
242
|
+
if (isEnter(data)) {
|
|
243
|
+
if (this.confirmSelected === 0) {
|
|
244
|
+
// Yes - resume anyway
|
|
245
|
+
return closeOverlay({ sessionId: this.item.sessionId });
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
// No - cancel
|
|
249
|
+
this.confirmCrossProject = false;
|
|
250
|
+
return stay();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return stay(false);
|
|
254
|
+
}
|
|
255
|
+
// Normal mode
|
|
256
|
+
if (isEscape(data) || isClose(data)) {
|
|
257
|
+
return popScreen();
|
|
258
|
+
}
|
|
259
|
+
// Enter resumes the session (with confirmation if cross-project)
|
|
260
|
+
if (isEnter(data)) {
|
|
261
|
+
// Active terminal sessions cannot be resumed
|
|
262
|
+
if (this.item.isActiveTerminal) {
|
|
263
|
+
return stay(false);
|
|
264
|
+
}
|
|
265
|
+
// Check if this is a cross-project session
|
|
266
|
+
if (!this.item.isCurrentProject && this.item.projectId !== null) {
|
|
267
|
+
this.confirmCrossProject = true;
|
|
268
|
+
this.confirmSelected = 1; // Default to "No"
|
|
269
|
+
return stay();
|
|
270
|
+
}
|
|
271
|
+
return closeOverlay({ sessionId: this.item.sessionId });
|
|
272
|
+
}
|
|
273
|
+
// 'd' deletes the session
|
|
274
|
+
if (char === 'd' && this.onDelete) {
|
|
275
|
+
this.confirmDelete = true;
|
|
276
|
+
this.confirmSelected = 1; // Default to "No"
|
|
277
|
+
return stay();
|
|
278
|
+
}
|
|
279
|
+
return stay(false);
|
|
280
|
+
}
|
|
281
|
+
async handleDelete() {
|
|
282
|
+
if (this.onDelete) {
|
|
283
|
+
await this.onDelete(this.item.sessionId);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Minimum height for stable rendering.
|
|
288
|
+
*/
|
|
289
|
+
getMinHeight() {
|
|
290
|
+
return 20;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// =============================================================================
|
|
294
|
+
// Resume Overlay V2 Class
|
|
295
|
+
// =============================================================================
|
|
296
|
+
export class ResumeOverlayV2 extends TabbedListOverlayV2 {
|
|
297
|
+
type = 'inline';
|
|
298
|
+
id = 'resume-overlay-v2';
|
|
299
|
+
onDeleteSession;
|
|
300
|
+
constructor(options) {
|
|
301
|
+
const currentProjectId = options.currentProjectId;
|
|
302
|
+
const items = options.sessions.map((s) => toSessionItem(s, currentProjectId));
|
|
303
|
+
super({
|
|
304
|
+
title: 'Resume Session',
|
|
305
|
+
tabs: TABS,
|
|
306
|
+
items,
|
|
307
|
+
pageSize: 10,
|
|
308
|
+
filterByTab: (item, tabId) => {
|
|
309
|
+
if (tabId === 'all')
|
|
310
|
+
return true;
|
|
311
|
+
if (tabId === 'recent') {
|
|
312
|
+
// Show sessions from last 24 hours
|
|
313
|
+
const twentyFourHoursAgo = Date.now() - 24 * 60 * 60 * 1000;
|
|
314
|
+
return new Date(item.updatedAt).getTime() > twentyFourHoursAgo;
|
|
315
|
+
}
|
|
316
|
+
return true;
|
|
317
|
+
},
|
|
318
|
+
getSearchText: (item) => `${item.preview} ${item.sessionId} ${item.projectName ?? ''} ${item.terminalLabel ?? ''}`,
|
|
319
|
+
renderItem: (item, isSelected, styles) => {
|
|
320
|
+
const prefix = isSelected ? styles.primary('❯ ') : ' ';
|
|
321
|
+
// Fixed-width columns for alignment (visual character widths)
|
|
322
|
+
const PROJECT_COL_WIDTH = 18; // [Project Long Na..] or [Global]
|
|
323
|
+
const TERMINAL_COL_WIDTH = 16; // [Terminal 1 ●] or [Terminal d772]
|
|
324
|
+
const TIME_COL_WIDTH = 16; // "33 minutes ago"
|
|
325
|
+
const COUNT_COL_WIDTH = 10; // " 82 msgs " or " 2 agents"
|
|
326
|
+
// Project indicator (fixed width)
|
|
327
|
+
let projectName;
|
|
328
|
+
let isCurrentProj = false;
|
|
329
|
+
if (item.projectId !== null && item.projectId !== undefined) {
|
|
330
|
+
projectName = item.projectName ?? `Project ${String(item.projectId)}`;
|
|
331
|
+
isCurrentProj = item.isCurrentProject ?? false;
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
projectName = 'Global';
|
|
335
|
+
}
|
|
336
|
+
// Truncate project name to fit in brackets
|
|
337
|
+
const maxProjLen = PROJECT_COL_WIDTH - 2; // -2 for brackets
|
|
338
|
+
const truncatedProj = truncate(projectName, maxProjLen);
|
|
339
|
+
const projectStr = `[${truncatedProj}]`.padEnd(PROJECT_COL_WIDTH);
|
|
340
|
+
const projectIndicator = isCurrentProj
|
|
341
|
+
? styles.success(projectStr)
|
|
342
|
+
: styles.muted(projectStr);
|
|
343
|
+
// Terminal indicator (fixed width — pad inner label, then wrap + style)
|
|
344
|
+
let terminalStr = '';
|
|
345
|
+
if (item.terminalLabel) {
|
|
346
|
+
// Pad inner label to fixed width: TERMINAL_COL_WIDTH - 2 for brackets
|
|
347
|
+
const innerWidth = TERMINAL_COL_WIDTH - 2;
|
|
348
|
+
if (item.isActiveTerminal) {
|
|
349
|
+
const inner = `${item.terminalLabel} \u25CF`.padEnd(innerWidth);
|
|
350
|
+
terminalStr = styles.warning(`[${inner}]`);
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
const inner = item.terminalLabel.padEnd(innerWidth);
|
|
354
|
+
terminalStr = styles.muted(`[${inner}]`);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
terminalStr = ''.padEnd(TERMINAL_COL_WIDTH);
|
|
359
|
+
}
|
|
360
|
+
// Time (fixed width)
|
|
361
|
+
const timeStr = item.relativeTime.padEnd(TIME_COL_WIDTH);
|
|
362
|
+
const timeStyled = isSelected ? styles.primary(timeStr) : styles.muted(timeStr);
|
|
363
|
+
// Message count or team-only indicator (fixed width, left-aligned)
|
|
364
|
+
let countStr;
|
|
365
|
+
if (item.messageCount === 0 && item.teamAgentCount && item.teamAgentCount > 1) {
|
|
366
|
+
countStr = `${String(item.teamAgentCount)} agents`.padEnd(COUNT_COL_WIDTH);
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
const label = item.messageCount !== 1 ? 'msgs' : 'msg';
|
|
370
|
+
countStr = `${String(item.messageCount)} ${label}`.padEnd(COUNT_COL_WIDTH);
|
|
371
|
+
}
|
|
372
|
+
const countStyled = isSelected ? styles.secondary(countStr) : styles.muted(countStr);
|
|
373
|
+
// Sanitize preview: remove newlines, carriage returns, and collapse whitespace
|
|
374
|
+
const sanitized = item.preview
|
|
375
|
+
.replace(/[\r\n]+/g, ' ')
|
|
376
|
+
.replace(/\s+/g, ' ')
|
|
377
|
+
.replace(/^#+\s*/g, '')
|
|
378
|
+
.trim();
|
|
379
|
+
// Calculate remaining space for preview
|
|
380
|
+
const usedWidth = 2 + PROJECT_COL_WIDTH + 1 + TERMINAL_COL_WIDTH + 1 + TIME_COL_WIDTH + COUNT_COL_WIDTH + 1;
|
|
381
|
+
const cols = terminal.getTerminalWidth();
|
|
382
|
+
const maxPreview = Math.max(20, cols - usedWidth - 2);
|
|
383
|
+
const preview = truncate(sanitized, maxPreview);
|
|
384
|
+
const previewStyled = isSelected ? styles.secondary(preview) : styles.muted(preview);
|
|
385
|
+
return `${prefix}${projectIndicator} ${terminalStr} ${timeStyled}${countStyled} ${previewStyled}`;
|
|
386
|
+
},
|
|
387
|
+
showCount: true,
|
|
388
|
+
emptyMessage: 'No saved sessions found.',
|
|
389
|
+
noResultsMessage: 'No sessions match the search.',
|
|
390
|
+
footerHints: (searchMode) => {
|
|
391
|
+
if (searchMode) {
|
|
392
|
+
return 'Type to search Enter Select Esc Exit search';
|
|
393
|
+
}
|
|
394
|
+
return 'j/k Navigate / Search Enter Resume d Delete q/Esc Close';
|
|
395
|
+
},
|
|
396
|
+
});
|
|
397
|
+
this.onDeleteSession = options.onDelete;
|
|
398
|
+
}
|
|
399
|
+
createDetailScreen(item) {
|
|
400
|
+
return new DetailScreen(item, this.getStyles(), this.onDeleteSession);
|
|
401
|
+
}
|
|
402
|
+
onItemSelected(item) {
|
|
403
|
+
// Active terminal sessions cannot be resumed (in use by another terminal)
|
|
404
|
+
if (item.isActiveTerminal) {
|
|
405
|
+
return undefined; // Stay on list - no action
|
|
406
|
+
}
|
|
407
|
+
// Cross-project sessions need confirmation - go to detail screen
|
|
408
|
+
if (!item.isCurrentProject && item.projectId !== null) {
|
|
409
|
+
return undefined; // Fall through to detail screen for confirmation
|
|
410
|
+
}
|
|
411
|
+
// Same project - resume directly
|
|
412
|
+
return { sessionId: item.sessionId };
|
|
413
|
+
}
|
|
414
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Mode Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Modal overlay shown at startup when projectSessionMode='ask' and a previous session exists.
|
|
5
|
+
* Gives the user control over how to handle the existing session:
|
|
6
|
+
* - Resume full: Continue where you left off (conversation + context)
|
|
7
|
+
* - Resume messages: Keep conversation, refresh project context
|
|
8
|
+
* - Start fresh: Clear conversation, fresh project context
|
|
9
|
+
*/
|
|
10
|
+
import { BaseOverlayV2 } from '../../base/index.js';
|
|
11
|
+
import type { RenderContext, OverlayAction, KeyEvent } from '../types.js';
|
|
12
|
+
export type SessionModeOption = 'resume-full' | 'resume-messages' | 'start-fresh';
|
|
13
|
+
interface SessionModeState {
|
|
14
|
+
/** Selected option index */
|
|
15
|
+
selectedIndex: number;
|
|
16
|
+
}
|
|
17
|
+
export interface SessionModeOverlayV2Options {
|
|
18
|
+
/** Project name for display */
|
|
19
|
+
projectName: string;
|
|
20
|
+
/** Number of messages in existing session */
|
|
21
|
+
messageCount: number;
|
|
22
|
+
/** Last activity timestamp */
|
|
23
|
+
lastActivity: Date;
|
|
24
|
+
/** Preview of last user message (optional) */
|
|
25
|
+
lastMessagePreview?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface SessionModeOverlayV2Result {
|
|
28
|
+
/** Selected option */
|
|
29
|
+
option: SessionModeOption;
|
|
30
|
+
}
|
|
31
|
+
export declare class SessionModeOverlayV2 extends BaseOverlayV2<SessionModeState, SessionModeOverlayV2Result> {
|
|
32
|
+
readonly type: "inline";
|
|
33
|
+
readonly id = "session-mode-overlay-v2";
|
|
34
|
+
private readonly projectName;
|
|
35
|
+
private readonly messageCount;
|
|
36
|
+
private readonly lastActivity;
|
|
37
|
+
private readonly lastMessagePreview?;
|
|
38
|
+
constructor(options: SessionModeOverlayV2Options);
|
|
39
|
+
protected renderContent(context: RenderContext): string[];
|
|
40
|
+
handleKey(key: KeyEvent): OverlayAction<SessionModeOverlayV2Result>;
|
|
41
|
+
private formatTimeAgo;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Mode Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Modal overlay shown at startup when projectSessionMode='ask' and a previous session exists.
|
|
5
|
+
* Gives the user control over how to handle the existing session:
|
|
6
|
+
* - Resume full: Continue where you left off (conversation + context)
|
|
7
|
+
* - Resume messages: Keep conversation, refresh project context
|
|
8
|
+
* - Start fresh: Clear conversation, fresh project context
|
|
9
|
+
*/
|
|
10
|
+
import { BaseOverlayV2, renderBorder, truncate } from '../../base/index.js';
|
|
11
|
+
const SESSION_MODE_OPTIONS = [
|
|
12
|
+
{
|
|
13
|
+
id: 'resume-full',
|
|
14
|
+
label: 'Resume full',
|
|
15
|
+
description: 'Continue where you left off',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: 'resume-messages',
|
|
19
|
+
label: 'Resume messages',
|
|
20
|
+
description: 'Keep conversation, refresh project context',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: 'start-fresh',
|
|
24
|
+
label: 'Start fresh',
|
|
25
|
+
description: 'Clear conversation, fresh project context',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
// =============================================================================
|
|
29
|
+
// Session Mode Overlay V2 Class
|
|
30
|
+
// =============================================================================
|
|
31
|
+
export class SessionModeOverlayV2 extends BaseOverlayV2 {
|
|
32
|
+
type = 'inline';
|
|
33
|
+
id = 'session-mode-overlay-v2';
|
|
34
|
+
projectName;
|
|
35
|
+
messageCount;
|
|
36
|
+
lastActivity;
|
|
37
|
+
lastMessagePreview;
|
|
38
|
+
constructor(options) {
|
|
39
|
+
super({ selectedIndex: 0 });
|
|
40
|
+
this.projectName = options.projectName;
|
|
41
|
+
this.messageCount = options.messageCount;
|
|
42
|
+
this.lastActivity = options.lastActivity;
|
|
43
|
+
this.lastMessagePreview = options.lastMessagePreview;
|
|
44
|
+
this.minHeight = 18;
|
|
45
|
+
}
|
|
46
|
+
renderContent(context) {
|
|
47
|
+
const s = context.styles;
|
|
48
|
+
const border = renderBorder(context.width, s);
|
|
49
|
+
const lines = [];
|
|
50
|
+
lines.push(border);
|
|
51
|
+
lines.push(` ${s.primaryBold('Previous Session Found')}`);
|
|
52
|
+
lines.push('');
|
|
53
|
+
// Session info
|
|
54
|
+
lines.push(` ${s.muted('Project:')} ${s.primary(this.projectName)}`);
|
|
55
|
+
lines.push(` ${s.muted('Messages:')} ${s.secondary(String(this.messageCount))}`);
|
|
56
|
+
// Format time ago
|
|
57
|
+
const timeAgo = this.formatTimeAgo(this.lastActivity);
|
|
58
|
+
lines.push(` ${s.muted('Last active:')} ${s.secondary(timeAgo)}`);
|
|
59
|
+
// Last message preview if available
|
|
60
|
+
if (this.lastMessagePreview) {
|
|
61
|
+
const preview = truncate(this.lastMessagePreview, 50);
|
|
62
|
+
lines.push(` ${s.muted('Last message:')} ${s.secondary(`"${preview}"`)}`);
|
|
63
|
+
}
|
|
64
|
+
lines.push('');
|
|
65
|
+
lines.push(` ${s.muted('How would you like to continue?')}`);
|
|
66
|
+
lines.push('');
|
|
67
|
+
// Options
|
|
68
|
+
for (let i = 0; i < SESSION_MODE_OPTIONS.length; i++) {
|
|
69
|
+
const opt = SESSION_MODE_OPTIONS[i];
|
|
70
|
+
const isSelected = i === this.state.selectedIndex;
|
|
71
|
+
const prefix = isSelected ? s.primary('> ') : ' ';
|
|
72
|
+
const label = isSelected ? s.primaryBold(opt.label) : s.secondary(opt.label);
|
|
73
|
+
const desc = s.muted(` - ${opt.description}`);
|
|
74
|
+
lines.push(` ${prefix}${label}${desc}`);
|
|
75
|
+
}
|
|
76
|
+
lines.push('');
|
|
77
|
+
lines.push(border);
|
|
78
|
+
lines.push(` ${s.muted('j/k Navigate Enter Select')}`);
|
|
79
|
+
lines.push(border);
|
|
80
|
+
return lines;
|
|
81
|
+
}
|
|
82
|
+
handleKey(key) {
|
|
83
|
+
// Ctrl+C closes with start-fresh (safest default for interrupt)
|
|
84
|
+
if (key.ctrl && key.name === 'c') {
|
|
85
|
+
return this.close({ option: 'start-fresh' });
|
|
86
|
+
}
|
|
87
|
+
// Escape defaults to resume-full (most common expectation)
|
|
88
|
+
if (key.name === 'escape') {
|
|
89
|
+
return this.close({ option: 'resume-full' });
|
|
90
|
+
}
|
|
91
|
+
// Navigation with j/k
|
|
92
|
+
if (key.char === 'j' || key.name === 'down') {
|
|
93
|
+
this.state.selectedIndex = Math.min(this.state.selectedIndex + 1, SESSION_MODE_OPTIONS.length - 1);
|
|
94
|
+
return this.rerender();
|
|
95
|
+
}
|
|
96
|
+
if (key.char === 'k' || key.name === 'up') {
|
|
97
|
+
this.state.selectedIndex = Math.max(this.state.selectedIndex - 1, 0);
|
|
98
|
+
return this.rerender();
|
|
99
|
+
}
|
|
100
|
+
// Enter selects
|
|
101
|
+
if (key.name === 'return') {
|
|
102
|
+
const selected = SESSION_MODE_OPTIONS[this.state.selectedIndex];
|
|
103
|
+
return this.close({ option: selected.id });
|
|
104
|
+
}
|
|
105
|
+
return this.rerender();
|
|
106
|
+
}
|
|
107
|
+
formatTimeAgo(date) {
|
|
108
|
+
const now = new Date();
|
|
109
|
+
const diffMs = now.getTime() - date.getTime();
|
|
110
|
+
const diffMins = Math.floor(diffMs / (1000 * 60));
|
|
111
|
+
const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
|
|
112
|
+
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
|
|
113
|
+
if (diffMins < 1)
|
|
114
|
+
return 'just now';
|
|
115
|
+
if (diffMins < 60)
|
|
116
|
+
return `${String(diffMins)} minute${diffMins === 1 ? '' : 's'} ago`;
|
|
117
|
+
if (diffHours < 24)
|
|
118
|
+
return `${String(diffHours)} hour${diffHours === 1 ? '' : 's'} ago`;
|
|
119
|
+
if (diffDays < 7)
|
|
120
|
+
return `${String(diffDays)} day${diffDays === 1 ? '' : 's'} ago`;
|
|
121
|
+
// For older sessions, show the date
|
|
122
|
+
return date.toLocaleDateString();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tasks Overlay V2 - View and manage background shell tasks
|
|
3
|
+
*
|
|
4
|
+
* Shows background shells started via `bash` with `run_in_background=true`.
|
|
5
|
+
* Allows viewing output, killing running tasks, and clearing completed ones.
|
|
6
|
+
*/
|
|
7
|
+
import { BaseOverlayV2 } from '../../base/overlay-base-v2.js';
|
|
8
|
+
import type { RenderContext, OverlayAction, KeyEvent } from '../index.js';
|
|
9
|
+
interface TasksOverlayState {
|
|
10
|
+
selectedIndex: number;
|
|
11
|
+
screen: 'list' | 'detail';
|
|
12
|
+
detailShellId: string | null;
|
|
13
|
+
lastRefresh: number;
|
|
14
|
+
}
|
|
15
|
+
export declare class TasksOverlayV2 extends BaseOverlayV2<TasksOverlayState> {
|
|
16
|
+
readonly type: "inline";
|
|
17
|
+
readonly id = "tasks-overlay";
|
|
18
|
+
constructor();
|
|
19
|
+
protected renderContent(context: RenderContext): string[];
|
|
20
|
+
private renderList;
|
|
21
|
+
private formatShellLine;
|
|
22
|
+
private formatDuration;
|
|
23
|
+
private renderDetail;
|
|
24
|
+
handleKey(key: KeyEvent): OverlayAction<void>;
|
|
25
|
+
private handleListKey;
|
|
26
|
+
private handleDetailKey;
|
|
27
|
+
}
|
|
28
|
+
export {};
|