@compilr-dev/cli 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +236 -68
- package/dist/.tsbuildinfo.app +1 -0
- package/dist/.tsbuildinfo.data +1 -0
- package/dist/.tsbuildinfo.domain +1 -0
- package/dist/.tsbuildinfo.foundation +1 -0
- package/dist/agent.d.ts +61 -4
- package/dist/agent.js +241 -245
- package/dist/anchors/index.d.ts +1 -1
- package/dist/anchors/index.js +1 -1
- package/dist/anchors/project-anchors.d.ts +2 -2
- package/dist/anchors/project-anchors.js +1 -1
- package/dist/auth/api-client.d.ts +124 -0
- package/dist/auth/api-client.js +261 -0
- package/dist/auth/index.d.ts +172 -0
- package/dist/auth/index.js +545 -0
- package/dist/auth/storage.d.ts +52 -0
- package/dist/auth/storage.js +118 -0
- package/dist/changelog/index.d.ts +16 -0
- package/dist/changelog/index.js +24 -0
- package/dist/changelog/releases.d.ts +17 -0
- package/dist/changelog/releases.js +63 -0
- package/dist/commands-v2/handlers/auth.d.ts +10 -0
- package/dist/commands-v2/handlers/auth.js +118 -0
- package/dist/commands-v2/handlers/background.d.ts +14 -0
- package/dist/commands-v2/handlers/background.js +276 -0
- package/dist/commands-v2/handlers/context.js +266 -81
- package/dist/commands-v2/handlers/core.d.ts +1 -0
- package/dist/commands-v2/handlers/core.js +133 -8
- package/dist/commands-v2/handlers/debug.js +18 -0
- package/dist/commands-v2/handlers/delegations.d.ts +8 -0
- package/dist/commands-v2/handlers/delegations.js +29 -0
- package/dist/commands-v2/handlers/files.d.ts +8 -0
- package/dist/commands-v2/handlers/files.js +162 -0
- package/dist/commands-v2/handlers/filter.d.ts +9 -0
- package/dist/commands-v2/handlers/filter.js +130 -0
- package/dist/commands-v2/handlers/games.d.ts +7 -0
- package/dist/commands-v2/handlers/games.js +57 -0
- package/dist/commands-v2/handlers/index.d.ts +13 -0
- package/dist/commands-v2/handlers/index.js +39 -0
- package/dist/commands-v2/handlers/mcp.d.ts +8 -0
- package/dist/commands-v2/handlers/mcp.js +39 -0
- package/dist/commands-v2/handlers/notifications.d.ts +9 -0
- package/dist/commands-v2/handlers/notifications.js +34 -0
- package/dist/commands-v2/handlers/project.js +244 -23
- package/dist/commands-v2/handlers/reset.d.ts +11 -0
- package/dist/commands-v2/handlers/reset.js +118 -0
- package/dist/commands-v2/handlers/session.d.ts +161 -0
- package/dist/commands-v2/handlers/session.js +805 -0
- package/dist/commands-v2/handlers/settings.d.ts +2 -0
- package/dist/commands-v2/handlers/settings.js +217 -35
- package/dist/commands-v2/handlers/tasks.d.ts +5 -0
- package/dist/commands-v2/handlers/tasks.js +36 -0
- package/dist/commands-v2/handlers/team.d.ts +9 -0
- package/dist/commands-v2/handlers/team.js +549 -0
- package/dist/commands-v2/handlers/terminals.d.ts +9 -0
- package/dist/commands-v2/handlers/terminals.js +34 -0
- package/dist/commands-v2/index.d.ts +3 -2
- package/dist/commands-v2/index.js +4 -1
- package/dist/commands-v2/registry.d.ts +15 -0
- package/dist/commands-v2/registry.js +34 -0
- package/dist/commands-v2/types.d.ts +81 -3
- package/dist/commands.js +13 -0
- package/dist/compilr-diff-companion.vsix +0 -0
- package/dist/db/index.js +98 -4
- package/dist/db/repositories/document-repository.d.ts +2 -0
- package/dist/db/repositories/document-repository.js +5 -1
- package/dist/db/repositories/index.d.ts +2 -0
- package/dist/db/repositories/index.js +1 -0
- package/dist/db/repositories/plan-repository.d.ts +101 -0
- package/dist/db/repositories/plan-repository.js +275 -0
- package/dist/db/repositories/project-repository.d.ts +6 -0
- package/dist/db/repositories/project-repository.js +41 -0
- package/dist/db/repositories/work-item-repository.d.ts +15 -0
- package/dist/db/repositories/work-item-repository.js +69 -4
- package/dist/db/schema.d.ts +40 -3
- package/dist/db/schema.js +66 -3
- package/dist/episodes/index.d.ts +20 -0
- package/dist/episodes/index.js +27 -0
- package/dist/episodes/recorder.d.ts +51 -0
- package/dist/episodes/recorder.js +195 -0
- package/dist/episodes/significant-work.d.ts +21 -0
- package/dist/episodes/significant-work.js +56 -0
- package/dist/episodes/store.d.ts +38 -0
- package/dist/episodes/store.js +199 -0
- package/dist/episodes/types.d.ts +35 -0
- package/dist/episodes/types.js +6 -0
- package/dist/episodes/work-at-risk.d.ts +12 -0
- package/dist/episodes/work-at-risk.js +38 -0
- package/dist/episodes/work-summary-anchor.d.ts +23 -0
- package/dist/episodes/work-summary-anchor.js +73 -0
- package/dist/games/coins.d.ts +66 -0
- package/dist/games/coins.js +165 -0
- package/dist/games/game-base.d.ts +84 -0
- package/dist/games/game-base.js +204 -0
- package/dist/games/index.d.ts +16 -0
- package/dist/games/index.js +49 -0
- package/dist/games/scores.d.ts +69 -0
- package/dist/games/scores.js +191 -0
- package/dist/games/tetris/board.d.ts +59 -0
- package/dist/games/tetris/board.js +170 -0
- package/dist/games/tetris/index.d.ts +109 -0
- package/dist/games/tetris/index.js +610 -0
- package/dist/games/tetris/pieces.d.ts +44 -0
- package/dist/games/tetris/pieces.js +271 -0
- package/dist/games/tetris/renderer.d.ts +26 -0
- package/dist/games/tetris/renderer.js +77 -0
- package/dist/guide/guide-content.d.ts +23 -0
- package/dist/guide/guide-content.js +196 -0
- package/dist/guide/index.d.ts +8 -0
- package/dist/guide/index.js +7 -0
- package/dist/guide/shared-content.d.ts +37 -0
- package/dist/guide/shared-content.js +1272 -0
- package/dist/guide/tutorial-helpers.d.ts +57 -0
- package/dist/guide/tutorial-helpers.js +147 -0
- package/dist/handlers/ask-user-handlers.d.ts +32 -0
- package/dist/handlers/ask-user-handlers.js +104 -0
- package/dist/handlers/delegation-handlers.d.ts +34 -0
- package/dist/handlers/delegation-handlers.js +291 -0
- package/dist/handlers/permission-handler.d.ts +30 -0
- package/dist/handlers/permission-handler.js +205 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.js +448 -271
- package/dist/input-handlers/memory-handler.d.ts +1 -1
- package/dist/input-handlers/memory-handler.js +2 -1
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.js +12 -0
- package/dist/models/model-registry.d.ts +38 -0
- package/dist/models/model-registry.js +69 -0
- package/dist/models/model-tiers.d.ts +28 -0
- package/dist/models/model-tiers.js +71 -0
- package/dist/models/model-validation.d.ts +25 -0
- package/dist/models/model-validation.js +291 -0
- package/dist/models/ollama-models.d.ts +73 -0
- package/dist/models/ollama-models.js +178 -0
- package/dist/models/provider-types.d.ts +6 -0
- package/dist/models/provider-types.js +1 -0
- package/dist/models/providers.d.ts +35 -0
- package/dist/models/providers.js +58 -0
- package/dist/models/types.d.ts +4 -0
- package/dist/models/types.js +4 -0
- package/dist/multi-agent/activity.d.ts +21 -0
- package/dist/multi-agent/activity.js +34 -0
- package/dist/multi-agent/agent-selection.d.ts +55 -0
- package/dist/multi-agent/agent-selection.js +90 -0
- package/dist/multi-agent/artifacts.d.ts +197 -0
- package/dist/multi-agent/artifacts.js +379 -0
- package/dist/multi-agent/checkpointer.d.ts +138 -0
- package/dist/multi-agent/checkpointer.js +471 -0
- package/dist/multi-agent/collision-utils.d.ts +16 -0
- package/dist/multi-agent/collision-utils.js +28 -0
- package/dist/multi-agent/context-resolver.d.ts +97 -0
- package/dist/multi-agent/context-resolver.js +316 -0
- package/dist/multi-agent/custom-agents.d.ts +83 -0
- package/dist/multi-agent/custom-agents.js +227 -0
- package/dist/multi-agent/delegation-tracker.d.ts +157 -0
- package/dist/multi-agent/delegation-tracker.js +243 -0
- package/dist/multi-agent/file-lock-hook.d.ts +29 -0
- package/dist/multi-agent/file-lock-hook.js +97 -0
- package/dist/multi-agent/file-locks.d.ts +58 -0
- package/dist/multi-agent/file-locks.js +194 -0
- package/dist/multi-agent/index.d.ts +24 -0
- package/dist/multi-agent/index.js +30 -0
- package/dist/multi-agent/mention-parser.d.ts +64 -0
- package/dist/multi-agent/mention-parser.js +146 -0
- package/dist/multi-agent/notification-manager.d.ts +84 -0
- package/dist/multi-agent/notification-manager.js +224 -0
- package/dist/multi-agent/pending-requests.d.ts +122 -0
- package/dist/multi-agent/pending-requests.js +155 -0
- package/dist/multi-agent/session-registry.d.ts +139 -0
- package/dist/multi-agent/session-registry.js +514 -0
- package/dist/multi-agent/shared-context.d.ts +293 -0
- package/dist/multi-agent/shared-context.js +671 -0
- package/dist/multi-agent/skill-requirements.d.ts +66 -0
- package/dist/multi-agent/skill-requirements.js +178 -0
- package/dist/multi-agent/task-assignment.d.ts +69 -0
- package/dist/multi-agent/task-assignment.js +123 -0
- package/dist/multi-agent/task-suggestion.d.ts +31 -0
- package/dist/multi-agent/task-suggestion.js +72 -0
- package/dist/multi-agent/team-agent.d.ts +201 -0
- package/dist/multi-agent/team-agent.js +488 -0
- package/dist/multi-agent/team.d.ts +286 -0
- package/dist/multi-agent/team.js +610 -0
- package/dist/multi-agent/tool-config.d.ts +110 -0
- package/dist/multi-agent/tool-config.js +661 -0
- package/dist/multi-agent/types.d.ts +211 -0
- package/dist/multi-agent/types.js +617 -0
- package/dist/prompts/plan-mode-prompt.d.ts +11 -0
- package/dist/prompts/plan-mode-prompt.js +95 -0
- package/dist/repl-helpers.js +3 -2
- package/dist/repl-v2.d.ts +401 -2
- package/dist/repl-v2.js +2577 -65
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.js +6 -0
- package/dist/session/project-session-manager.d.ts +158 -0
- package/dist/session/project-session-manager.js +650 -0
- package/dist/settings/index.d.ts +133 -13
- package/dist/settings/index.js +329 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +4 -0
- package/dist/settings/paths.js +6 -0
- package/dist/shared-handlers.d.ts +62 -0
- package/dist/shared-handlers.js +48 -0
- package/dist/system-prompt/builder.d.ts +5 -0
- package/dist/system-prompt/builder.js +4 -0
- package/dist/system-prompt/index.d.ts +18 -0
- package/dist/system-prompt/index.js +18 -0
- package/dist/system-prompt/modules.d.ts +5 -0
- package/dist/system-prompt/modules.js +4 -0
- package/dist/tabbed-menu.js +2 -1
- package/dist/templates/compilr-md-import.d.ts +16 -0
- package/dist/templates/compilr-md-import.js +241 -0
- package/dist/templates/compilr-md.js +10 -61
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +34 -73
- package/dist/tool-names.d.ts +108 -0
- package/dist/tool-names.js +227 -0
- package/dist/tools/anchor-tools.d.ts +4 -4
- package/dist/tools/anchor-tools.js +1 -1
- package/dist/tools/artifact-tools.d.ts +42 -0
- package/dist/tools/artifact-tools.js +328 -0
- package/dist/tools/ask-user-simple.d.ts +1 -1
- package/dist/tools/ask-user-simple.js +2 -1
- package/dist/tools/ask-user.d.ts +1 -1
- package/dist/tools/ask-user.js +2 -1
- package/dist/tools/backlog-wrappers.d.ts +5 -3
- package/dist/tools/backlog-wrappers.js +16 -1
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +1 -1
- package/dist/tools/db-tools.d.ts +8 -61
- package/dist/tools/db-tools.js +8 -13
- package/dist/tools/delegate-background.d.ts +27 -0
- package/dist/tools/delegate-background.js +115 -0
- package/dist/tools/delegate.d.ts +22 -0
- package/dist/tools/delegate.js +97 -0
- package/dist/tools/delegation-status.d.ts +16 -0
- package/dist/tools/delegation-status.js +128 -0
- package/dist/tools/document-db.d.ts +5 -5
- package/dist/tools/document-db.js +1 -1
- package/dist/tools/guide-tool.d.ts +12 -0
- package/dist/tools/guide-tool.js +59 -0
- package/dist/tools/handoff.d.ts +25 -0
- package/dist/tools/handoff.js +99 -0
- package/dist/tools/meta-tools.d.ts +26 -0
- package/dist/tools/meta-tools.js +47 -0
- package/dist/tools/plan-tools.d.ts +54 -0
- package/dist/tools/plan-tools.js +338 -0
- package/dist/tools/platform-adapter.d.ts +29 -0
- package/dist/tools/platform-adapter.js +394 -0
- package/dist/tools/project-db.d.ts +5 -73
- package/dist/tools/project-db.js +5 -336
- package/dist/tools/recall-work-tool.d.ts +18 -0
- package/dist/tools/recall-work-tool.js +82 -0
- package/dist/tools/workitem-db.d.ts +43 -11
- package/dist/tools/workitem-db.js +186 -5
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +237 -47
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- package/dist/ui/base/index.d.ts +1 -1
- package/dist/ui/base/index.js +1 -1
- package/dist/ui/base/overlay-base-v2.d.ts +10 -0
- package/dist/ui/base/overlay-base-v2.js +14 -0
- package/dist/ui/base/render-utils.d.ts +19 -0
- package/dist/ui/base/render-utils.js +25 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
- package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
- package/dist/ui/constants/labels.d.ts +14 -0
- package/dist/ui/constants/labels.js +51 -0
- package/dist/ui/conversation-store.d.ts +55 -0
- package/dist/ui/conversation-store.js +107 -0
- package/dist/ui/conversation.js +11 -13
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.js +3 -9
- package/dist/ui/file-autocomplete.d.ts +24 -0
- package/dist/ui/file-autocomplete.js +56 -0
- package/dist/ui/footer-renderer.d.ts +69 -0
- package/dist/ui/footer-renderer.js +431 -0
- package/dist/ui/footer.d.ts +74 -7
- package/dist/ui/footer.js +173 -16
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +19 -0
- package/dist/ui/input-prompt.js +206 -14
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -0
- package/dist/ui/live-region-facade.d.ts +42 -0
- package/dist/ui/live-region-facade.js +205 -0
- package/dist/ui/live-region.d.ts +0 -4
- package/dist/ui/live-region.js +6 -14
- package/dist/ui/mascot/renderer.d.ts +1 -1
- package/dist/ui/mascot/renderer.js +37 -2
- package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
- package/dist/ui/overlay/data/tutorial-content.js +9 -0
- package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
- package/dist/ui/overlay/data/tutorial-registry.js +116 -0
- package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
- package/dist/ui/overlay/data/tutorial-types.js +6 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
- package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
- package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
- package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
- package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
- package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
- package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
- package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
- package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
- package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
- package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
- package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
- package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
- package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
- package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
- package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
- package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
- package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
- package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
- package/dist/ui/overlay/index.d.ts +20 -1
- package/dist/ui/overlay/index.js +19 -0
- package/dist/ui/overlay/types.d.ts +5 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.js +4 -16
- package/dist/ui/permission-overlay.js +6 -5
- package/dist/ui/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.js +3 -19
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -0
- package/dist/ui/terminal-line-builders.d.ts +17 -0
- package/dist/ui/terminal-line-builders.js +42 -0
- package/dist/ui/terminal-render-item.d.ts +16 -0
- package/dist/ui/terminal-render-item.js +267 -0
- package/dist/ui/terminal-renderer.d.ts +7 -8
- package/dist/ui/terminal-renderer.js +7 -8
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +144 -276
- package/dist/ui/terminal-ui.js +384 -1861
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +71 -13
- package/dist/ui/tool-formatters.js +512 -1
- package/dist/ui/turn-metrics.d.ts +56 -0
- package/dist/ui/turn-metrics.js +75 -0
- package/dist/ui/types.d.ts +28 -0
- package/dist/ui/types.js +1 -0
- package/dist/ui/vscode-diff-ipc.d.ts +102 -0
- package/dist/ui/vscode-diff-ipc.js +385 -0
- package/dist/utils/credentials.d.ts +24 -5
- package/dist/utils/credentials.js +123 -9
- package/dist/utils/format-tokens.d.ts +13 -0
- package/dist/utils/format-tokens.js +18 -0
- package/dist/utils/git-config.d.ts +26 -0
- package/dist/utils/git-config.js +54 -0
- package/dist/utils/message-utils.d.ts +61 -0
- package/dist/utils/message-utils.js +72 -0
- package/dist/utils/model-tiers.d.ts +8 -1
- package/dist/utils/model-tiers.js +38 -16
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.js +3 -2
- package/dist/utils/project-detection.d.ts +58 -0
- package/dist/utils/project-detection.js +424 -0
- package/dist/utils/project-memory.js +2 -1
- package/dist/utils/project-status.d.ts +2 -2
- package/dist/utils/startup-perf.d.ts +18 -0
- package/dist/utils/startup-perf.js +60 -0
- package/dist/utils/token-tracker.d.ts +62 -0
- package/dist/utils/token-tracker.js +150 -0
- package/dist/utils/token-types.d.ts +23 -0
- package/dist/utils/token-types.js +18 -0
- package/dist/utils/types/config-types.d.ts +32 -0
- package/dist/utils/types/config-types.js +8 -0
- package/dist/utils/update-checker.d.ts +28 -0
- package/dist/utils/update-checker.js +106 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.js +10 -0
- package/dist/utils/vscode-detect.d.ts +39 -0
- package/dist/utils/vscode-detect.js +137 -0
- package/package.json +25 -12
- package/dist/commands/handler-types.d.ts +0 -68
- package/dist/commands/handler-types.js +0 -8
- package/dist/commands/handlers/agent-commands.d.ts +0 -13
- package/dist/commands/handlers/agent-commands.js +0 -305
- package/dist/commands/handlers/design-commands.d.ts +0 -15
- package/dist/commands/handlers/design-commands.js +0 -334
- package/dist/commands/handlers/index.d.ts +0 -20
- package/dist/commands/handlers/index.js +0 -43
- package/dist/commands/handlers/overlay-commands.d.ts +0 -21
- package/dist/commands/handlers/overlay-commands.js +0 -287
- package/dist/commands/handlers/project-commands.d.ts +0 -11
- package/dist/commands/handlers/project-commands.js +0 -167
- package/dist/commands/handlers/simple-commands.d.ts +0 -19
- package/dist/commands/handlers/simple-commands.js +0 -144
- package/dist/commands/registry.d.ts +0 -50
- package/dist/commands/registry.js +0 -75
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -149
- package/dist/repl.js +0 -1151
- package/dist/templates/claude-md.d.ts +0 -7
- package/dist/templates/claude-md.js +0 -189
- package/dist/test-autocomplete.d.ts +0 -7
- package/dist/test-autocomplete.js +0 -85
- package/dist/test-tabbed-menu.d.ts +0 -7
- package/dist/test-tabbed-menu.js +0 -25
- package/dist/tool-selector.d.ts +0 -71
- package/dist/tool-selector.js +0 -184
- package/dist/ui/agents-overlay-v2.d.ts +0 -43
- package/dist/ui/agents-overlay-v2.js +0 -809
- package/dist/ui/agents-overlay.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -863
- package/dist/ui/anchors-overlay.d.ts +0 -12
- package/dist/ui/anchors-overlay.js +0 -775
- package/dist/ui/arch-type-overlay.d.ts +0 -15
- package/dist/ui/arch-type-overlay.js +0 -201
- package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
- package/dist/ui/ask-user-overlay-v2.js +0 -555
- package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
- package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
- package/dist/ui/backlog-overlay.d.ts +0 -32
- package/dist/ui/backlog-overlay.js +0 -652
- package/dist/ui/commands-overlay-v2.d.ts +0 -33
- package/dist/ui/commands-overlay-v2.js +0 -441
- package/dist/ui/commands-overlay.d.ts +0 -16
- package/dist/ui/commands-overlay.js +0 -439
- package/dist/ui/config-overlay.d.ts +0 -35
- package/dist/ui/config-overlay.js +0 -707
- package/dist/ui/docs-overlay.d.ts +0 -17
- package/dist/ui/docs-overlay.js +0 -303
- package/dist/ui/footer-v2.d.ts +0 -222
- package/dist/ui/footer-v2.js +0 -1349
- package/dist/ui/help-overlay-v2.d.ts +0 -34
- package/dist/ui/help-overlay-v2.js +0 -309
- package/dist/ui/help-overlay.d.ts +0 -16
- package/dist/ui/help-overlay.js +0 -316
- package/dist/ui/init-overlay-v2.d.ts +0 -34
- package/dist/ui/init-overlay-v2.js +0 -600
- package/dist/ui/init-overlay.d.ts +0 -34
- package/dist/ui/init-overlay.js +0 -604
- package/dist/ui/input-prompt-v2.d.ts +0 -180
- package/dist/ui/input-prompt-v2.js +0 -999
- package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
- package/dist/ui/iteration-limit-overlay-v2.js +0 -114
- package/dist/ui/keys-overlay-v2.d.ts +0 -41
- package/dist/ui/keys-overlay-v2.js +0 -248
- package/dist/ui/mascot-overlay-v2.d.ts +0 -41
- package/dist/ui/mascot-overlay-v2.js +0 -138
- package/dist/ui/mascot-overlay.d.ts +0 -21
- package/dist/ui/mascot-overlay.js +0 -146
- package/dist/ui/model-overlay-v2.d.ts +0 -49
- package/dist/ui/model-overlay-v2.js +0 -118
- package/dist/ui/model-overlay.d.ts +0 -27
- package/dist/ui/model-overlay.js +0 -221
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -169
- package/dist/ui/new-overlay.d.ts +0 -34
- package/dist/ui/new-overlay.js +0 -604
- package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
- package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
- package/dist/ui/overlay/overlay-types.d.ts +0 -128
- package/dist/ui/overlay/overlay-types.js +0 -22
- package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
- package/dist/ui/overlays/help-overlay-v2.js +0 -198
- package/dist/ui/overlays/index.d.ts +0 -11
- package/dist/ui/overlays/index.js +0 -11
- package/dist/ui/permission-overlay-v2.d.ts +0 -36
- package/dist/ui/permission-overlay-v2.js +0 -380
- package/dist/ui/projects-overlay.d.ts +0 -19
- package/dist/ui/projects-overlay.js +0 -484
- package/dist/ui/theme-overlay-v2.d.ts +0 -42
- package/dist/ui/theme-overlay-v2.js +0 -135
- package/dist/ui/theme-overlay.d.ts +0 -24
- package/dist/ui/theme-overlay.js +0 -127
- package/dist/ui/tools-overlay-v2.d.ts +0 -47
- package/dist/ui/tools-overlay-v2.js +0 -218
- package/dist/ui/tools-overlay.d.ts +0 -34
- package/dist/ui/tools-overlay.js +0 -230
- package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
- package/dist/ui/tutorial-overlay-v2.js +0 -1035
- package/dist/ui/tutorial-overlay.d.ts +0 -11
- package/dist/ui/tutorial-overlay.js +0 -1034
- package/dist/ui/workflow-overlay.d.ts +0 -22
- package/dist/ui/workflow-overlay.js +0 -636
|
@@ -15,7 +15,9 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import * as fs from 'fs';
|
|
17
17
|
import { TabbedListOverlayV2 } from '../../base/tabbed-list-overlay-v2.js';
|
|
18
|
-
import { BaseScreen, stay, popScreen, closeOverlay, renderBorder,
|
|
18
|
+
import { BaseScreen, stay, popScreen, closeOverlay, renderBorder, renderProgressBar, truncate,
|
|
19
|
+
// Key detection functions (consolidated from ui-core)
|
|
20
|
+
isCtrlC, isEscape, isEnter, isBackspace, extractPrintable, } from '../../base/index.js';
|
|
19
21
|
import { projectRepository, workItemRepository } from '../../../db/repositories/index.js';
|
|
20
22
|
import { clearActiveProject, getActiveProject } from '../../../tools/project-db.js';
|
|
21
23
|
import { validateDeletePath } from '../../../utils/path-safety.js';
|
|
@@ -49,37 +51,7 @@ const STATUS_LABELS = {
|
|
|
49
51
|
// =============================================================================
|
|
50
52
|
// Helper Functions
|
|
51
53
|
// =============================================================================
|
|
52
|
-
|
|
53
|
-
if (str.length <= maxLen)
|
|
54
|
-
return str;
|
|
55
|
-
return str.slice(0, maxLen - 3) + '...';
|
|
56
|
-
}
|
|
57
|
-
function renderProgressBar(percent, width, s) {
|
|
58
|
-
const filled = Math.round((percent / 100) * width);
|
|
59
|
-
const empty = width - filled;
|
|
60
|
-
return s.primary('█'.repeat(filled)) + s.muted('░'.repeat(empty));
|
|
61
|
-
}
|
|
62
|
-
// =============================================================================
|
|
63
|
-
// Key Detection Helpers
|
|
64
|
-
// =============================================================================
|
|
65
|
-
function isCtrlC(data) {
|
|
66
|
-
return data.length === 1 && data[0] === 0x03;
|
|
67
|
-
}
|
|
68
|
-
function isEscape(data) {
|
|
69
|
-
return data.length === 1 && data[0] === 0x1b;
|
|
70
|
-
}
|
|
71
|
-
function isEnter(data) {
|
|
72
|
-
return data.length === 1 && (data[0] === 0x0d || data[0] === 0x0a);
|
|
73
|
-
}
|
|
74
|
-
function isBackspace(data) {
|
|
75
|
-
return data.length === 1 && (data[0] === 0x7f || data[0] === 0x08);
|
|
76
|
-
}
|
|
77
|
-
function extractPrintable(data) {
|
|
78
|
-
if (data.length === 1 && data[0] >= 0x20 && data[0] < 0x7f) {
|
|
79
|
-
return String.fromCharCode(data[0]);
|
|
80
|
-
}
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
54
|
+
// Key detection, renderProgressBar, and truncate are imported from '../../base/index.js'
|
|
83
55
|
// =============================================================================
|
|
84
56
|
// Archive Confirm Screen
|
|
85
57
|
// =============================================================================
|
|
@@ -162,6 +134,53 @@ class ArchiveConfirmScreen extends BaseScreen {
|
|
|
162
134
|
}
|
|
163
135
|
}
|
|
164
136
|
// =============================================================================
|
|
137
|
+
// Delete Blocked Screen (project not archived)
|
|
138
|
+
// =============================================================================
|
|
139
|
+
class DeleteBlockedScreen extends BaseScreen {
|
|
140
|
+
confirmState;
|
|
141
|
+
styles;
|
|
142
|
+
constructor(confirmState, styles) {
|
|
143
|
+
super();
|
|
144
|
+
this.confirmState = confirmState;
|
|
145
|
+
this.styles = styles;
|
|
146
|
+
}
|
|
147
|
+
render() {
|
|
148
|
+
const s = this.styles;
|
|
149
|
+
const cols = terminal.getTerminalWidth();
|
|
150
|
+
const border = renderBorder(cols, s);
|
|
151
|
+
const project = this.confirmState.targetProject;
|
|
152
|
+
const lines = [];
|
|
153
|
+
lines.push(border);
|
|
154
|
+
lines.push(` ${s.error('Cannot Delete Project')}`);
|
|
155
|
+
lines.push('');
|
|
156
|
+
if (project) {
|
|
157
|
+
lines.push(` ${s.primaryBold(project.displayName)}`);
|
|
158
|
+
lines.push(` ${s.muted(`Status: ${project.status}`)}`);
|
|
159
|
+
lines.push('');
|
|
160
|
+
}
|
|
161
|
+
lines.push(` ${s.warning('Projects must be archived before deletion.')}`);
|
|
162
|
+
lines.push('');
|
|
163
|
+
lines.push(` ${s.muted('This is a safety measure to prevent accidental deletion.')}`);
|
|
164
|
+
lines.push(` ${s.muted('Archive the project first (press x), then try deleting again.')}`);
|
|
165
|
+
lines.push('');
|
|
166
|
+
lines.push(` ${s.muted('Press Esc to go back')}`);
|
|
167
|
+
lines.push('');
|
|
168
|
+
lines.push(border);
|
|
169
|
+
return lines;
|
|
170
|
+
}
|
|
171
|
+
handleKey(data) {
|
|
172
|
+
if (isEscape(data) || isEnter(data) || isCtrlC(data)) {
|
|
173
|
+
this.confirmState.targetProject = null;
|
|
174
|
+
this.confirmState.deleteError = null;
|
|
175
|
+
return popScreen();
|
|
176
|
+
}
|
|
177
|
+
return stay(false);
|
|
178
|
+
}
|
|
179
|
+
getMinHeight() {
|
|
180
|
+
return 14;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// =============================================================================
|
|
165
184
|
// Delete Confirm Screen
|
|
166
185
|
// =============================================================================
|
|
167
186
|
class DeleteConfirmScreen extends BaseScreen {
|
|
@@ -248,10 +267,6 @@ class DeleteConfirmScreen extends BaseScreen {
|
|
|
248
267
|
lines.push(s.foreground(' This will permanently delete:'));
|
|
249
268
|
lines.push(s.muted(' • Database record (project, work items, documents)'));
|
|
250
269
|
lines.push(s.muted(' • Project files on disk'));
|
|
251
|
-
if (project.status !== 'archived') {
|
|
252
|
-
lines.push('');
|
|
253
|
-
lines.push(s.warning(' Note: Project will be archived first, then deleted.'));
|
|
254
|
-
}
|
|
255
270
|
lines.push('');
|
|
256
271
|
lines.push(s.muted(' ' + '─'.repeat(cols - 4)));
|
|
257
272
|
lines.push('');
|
|
@@ -302,11 +317,7 @@ class DeleteConfirmScreen extends BaseScreen {
|
|
|
302
317
|
this.confirmState.deleteError = `Type "${project.name}" exactly to confirm`;
|
|
303
318
|
return stay();
|
|
304
319
|
}
|
|
305
|
-
//
|
|
306
|
-
if (project.status !== 'archived') {
|
|
307
|
-
projectRepository.update(project.id, { status: 'archived' });
|
|
308
|
-
}
|
|
309
|
-
// Delete from database
|
|
320
|
+
// Delete from database (project must already be archived - checked before showing this screen)
|
|
310
321
|
projectRepository.delete(project.id);
|
|
311
322
|
// Clear project-specific anchors
|
|
312
323
|
clearProjectAnchors(String(project.id));
|
|
@@ -339,6 +350,195 @@ class DeleteConfirmScreen extends BaseScreen {
|
|
|
339
350
|
return 28;
|
|
340
351
|
}
|
|
341
352
|
}
|
|
353
|
+
class ProjectEditScreen extends BaseScreen {
|
|
354
|
+
editState;
|
|
355
|
+
styles;
|
|
356
|
+
onComplete;
|
|
357
|
+
constructor(editState, styles, onComplete) {
|
|
358
|
+
super();
|
|
359
|
+
this.editState = editState;
|
|
360
|
+
this.styles = styles;
|
|
361
|
+
this.onComplete = onComplete;
|
|
362
|
+
}
|
|
363
|
+
render() {
|
|
364
|
+
const s = this.styles;
|
|
365
|
+
const cols = terminal.getTerminalWidth();
|
|
366
|
+
const border = renderBorder(cols, s);
|
|
367
|
+
const project = this.editState.targetProject;
|
|
368
|
+
const lines = [];
|
|
369
|
+
if (!project) {
|
|
370
|
+
lines.push(border);
|
|
371
|
+
lines.push(s.error(' No project selected'));
|
|
372
|
+
lines.push(border);
|
|
373
|
+
return lines;
|
|
374
|
+
}
|
|
375
|
+
lines.push(border);
|
|
376
|
+
lines.push(` ${s.primaryBold('EDIT PROJECT')}`);
|
|
377
|
+
lines.push('');
|
|
378
|
+
lines.push(s.muted(` ID: ${String(project.id)} · Name: ${project.name}`));
|
|
379
|
+
lines.push(s.muted(` Status: ${STATUS_LABELS[project.status]} · Type: ${project.type}`));
|
|
380
|
+
lines.push(s.muted(` Created: ${new Date(project.createdAt).toLocaleDateString()}`));
|
|
381
|
+
lines.push('');
|
|
382
|
+
lines.push(s.muted(' ' + '─'.repeat(cols - 6)));
|
|
383
|
+
lines.push('');
|
|
384
|
+
// Render fields
|
|
385
|
+
for (let i = 0; i < this.editState.fields.length; i++) {
|
|
386
|
+
const field = this.editState.fields[i];
|
|
387
|
+
const isSelected = i === this.editState.selectedFieldIndex;
|
|
388
|
+
const isEditing = isSelected && this.editState.editingField;
|
|
389
|
+
const cursor = isSelected ? s.primary('❯ ') : ' ';
|
|
390
|
+
const label = field.label.padEnd(14);
|
|
391
|
+
if (isEditing) {
|
|
392
|
+
// Show input buffer with cursor
|
|
393
|
+
const inputDisplay = this.editState.inputBuffer || '';
|
|
394
|
+
lines.push(`${cursor}${s.muted(label)} ${s.primary(inputDisplay)}█`);
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
const value = field.value || s.muted(field.placeholder || '(not set)');
|
|
398
|
+
if (isSelected) {
|
|
399
|
+
lines.push(`${cursor}${s.primary(label)} ${value}`);
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
lines.push(`${cursor}${s.muted(label)} ${value}`);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
if (this.editState.error) {
|
|
407
|
+
lines.push('');
|
|
408
|
+
lines.push(s.error(` ${this.editState.error}`));
|
|
409
|
+
}
|
|
410
|
+
lines.push('');
|
|
411
|
+
lines.push(border);
|
|
412
|
+
if (this.editState.editingField) {
|
|
413
|
+
lines.push(s.muted(' Enter Save field · Esc Cancel edit'));
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
lines.push(s.muted(' ↑↓/jk Navigate · Enter Edit field · s Save & close · Esc Cancel'));
|
|
417
|
+
}
|
|
418
|
+
lines.push(border);
|
|
419
|
+
return lines;
|
|
420
|
+
}
|
|
421
|
+
handleKey(data) {
|
|
422
|
+
const char = extractPrintable(data);
|
|
423
|
+
if (isCtrlC(data)) {
|
|
424
|
+
return closeOverlay({ action: 'cancel' });
|
|
425
|
+
}
|
|
426
|
+
// Handle field editing mode
|
|
427
|
+
if (this.editState.editingField) {
|
|
428
|
+
if (isEscape(data)) {
|
|
429
|
+
// Cancel field edit - restore original value
|
|
430
|
+
const field = this.editState.fields[this.editState.selectedFieldIndex];
|
|
431
|
+
this.editState.inputBuffer = field.value;
|
|
432
|
+
this.editState.editingField = false;
|
|
433
|
+
return stay();
|
|
434
|
+
}
|
|
435
|
+
if (isEnter(data)) {
|
|
436
|
+
// Save field value
|
|
437
|
+
const field = this.editState.fields[this.editState.selectedFieldIndex];
|
|
438
|
+
field.value = this.editState.inputBuffer;
|
|
439
|
+
this.editState.editingField = false;
|
|
440
|
+
this.editState.modified = true;
|
|
441
|
+
return stay();
|
|
442
|
+
}
|
|
443
|
+
if (isBackspace(data)) {
|
|
444
|
+
this.editState.inputBuffer = this.editState.inputBuffer.slice(0, -1);
|
|
445
|
+
return stay();
|
|
446
|
+
}
|
|
447
|
+
if (char) {
|
|
448
|
+
this.editState.inputBuffer += char;
|
|
449
|
+
return stay();
|
|
450
|
+
}
|
|
451
|
+
return stay(false);
|
|
452
|
+
}
|
|
453
|
+
// Handle navigation mode
|
|
454
|
+
if (isEscape(data)) {
|
|
455
|
+
// Cancel without saving
|
|
456
|
+
this.editState.targetProject = null;
|
|
457
|
+
this.editState.error = null;
|
|
458
|
+
return popScreen();
|
|
459
|
+
}
|
|
460
|
+
// Navigate up
|
|
461
|
+
if (data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x41) {
|
|
462
|
+
// Up arrow
|
|
463
|
+
if (this.editState.selectedFieldIndex > 0) {
|
|
464
|
+
this.editState.selectedFieldIndex--;
|
|
465
|
+
}
|
|
466
|
+
return stay();
|
|
467
|
+
}
|
|
468
|
+
if (char === 'k') {
|
|
469
|
+
if (this.editState.selectedFieldIndex > 0) {
|
|
470
|
+
this.editState.selectedFieldIndex--;
|
|
471
|
+
}
|
|
472
|
+
return stay();
|
|
473
|
+
}
|
|
474
|
+
// Navigate down
|
|
475
|
+
if (data.length === 3 && data[0] === 0x1b && data[1] === 0x5b && data[2] === 0x42) {
|
|
476
|
+
// Down arrow
|
|
477
|
+
if (this.editState.selectedFieldIndex < this.editState.fields.length - 1) {
|
|
478
|
+
this.editState.selectedFieldIndex++;
|
|
479
|
+
}
|
|
480
|
+
return stay();
|
|
481
|
+
}
|
|
482
|
+
if (char === 'j') {
|
|
483
|
+
if (this.editState.selectedFieldIndex < this.editState.fields.length - 1) {
|
|
484
|
+
this.editState.selectedFieldIndex++;
|
|
485
|
+
}
|
|
486
|
+
return stay();
|
|
487
|
+
}
|
|
488
|
+
// Enter to edit field
|
|
489
|
+
if (isEnter(data)) {
|
|
490
|
+
const field = this.editState.fields[this.editState.selectedFieldIndex];
|
|
491
|
+
this.editState.inputBuffer = field.value;
|
|
492
|
+
this.editState.editingField = true;
|
|
493
|
+
return stay();
|
|
494
|
+
}
|
|
495
|
+
// 's' to save and close
|
|
496
|
+
if (char === 's' || char === 'S') {
|
|
497
|
+
return this.saveAndClose();
|
|
498
|
+
}
|
|
499
|
+
return stay(false);
|
|
500
|
+
}
|
|
501
|
+
saveAndClose() {
|
|
502
|
+
const project = this.editState.targetProject;
|
|
503
|
+
if (!project)
|
|
504
|
+
return popScreen();
|
|
505
|
+
// Build update object from fields
|
|
506
|
+
const updates = {};
|
|
507
|
+
for (const field of this.editState.fields) {
|
|
508
|
+
if (field.key === 'displayName') {
|
|
509
|
+
updates.display_name = field.value || undefined;
|
|
510
|
+
}
|
|
511
|
+
else if (field.key === 'description') {
|
|
512
|
+
updates.description = field.value || undefined;
|
|
513
|
+
}
|
|
514
|
+
else if (field.key === 'gitRemote') {
|
|
515
|
+
updates.git_remote = field.value || undefined;
|
|
516
|
+
}
|
|
517
|
+
else if (field.key === 'gitBranch') {
|
|
518
|
+
updates.git_branch = field.value || undefined;
|
|
519
|
+
}
|
|
520
|
+
else {
|
|
521
|
+
// field.key === 'path'
|
|
522
|
+
updates.path = field.value || undefined;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
try {
|
|
526
|
+
projectRepository.update(project.id, updates);
|
|
527
|
+
this.editState.modified = true;
|
|
528
|
+
this.onComplete();
|
|
529
|
+
}
|
|
530
|
+
catch (err) {
|
|
531
|
+
this.editState.error = err.message;
|
|
532
|
+
return stay();
|
|
533
|
+
}
|
|
534
|
+
this.editState.targetProject = null;
|
|
535
|
+
this.editState.error = null;
|
|
536
|
+
return popScreen();
|
|
537
|
+
}
|
|
538
|
+
getMinHeight() {
|
|
539
|
+
return 22;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
342
542
|
// =============================================================================
|
|
343
543
|
// Projects Overlay V2
|
|
344
544
|
// =============================================================================
|
|
@@ -352,6 +552,15 @@ export class ProjectsOverlayV2 extends TabbedListOverlayV2 {
|
|
|
352
552
|
deleteValidation: null,
|
|
353
553
|
modified: false,
|
|
354
554
|
};
|
|
555
|
+
editState = {
|
|
556
|
+
targetProject: null,
|
|
557
|
+
fields: [],
|
|
558
|
+
selectedFieldIndex: 0,
|
|
559
|
+
editingField: false,
|
|
560
|
+
inputBuffer: '',
|
|
561
|
+
error: null,
|
|
562
|
+
modified: false,
|
|
563
|
+
};
|
|
355
564
|
constructor() {
|
|
356
565
|
// Load projects from database
|
|
357
566
|
const { projects } = projectRepository.list({ status: 'all' });
|
|
@@ -395,7 +604,7 @@ export class ProjectsOverlayV2 extends TabbedListOverlayV2 {
|
|
|
395
604
|
if (searchMode) {
|
|
396
605
|
return 'Type to filter · ↑↓/jk Navigate · Enter Open · Esc Exit search';
|
|
397
606
|
}
|
|
398
|
-
return '↑↓/jk Navigate · ←→/hl Tabs · / Search · Enter Open · x Archive · d Delete · q/Esc Close';
|
|
607
|
+
return '↑↓/jk Navigate · ←→/hl Tabs · / Search · Enter Open · e Edit · x Archive · d Delete · q/Esc Close';
|
|
399
608
|
},
|
|
400
609
|
renderSelectedPreview: (project, s) => {
|
|
401
610
|
const lines = [];
|
|
@@ -416,7 +625,7 @@ export class ProjectsOverlayV2 extends TabbedListOverlayV2 {
|
|
|
416
625
|
const completed = workItems.filter(w => w.status === 'completed').length;
|
|
417
626
|
if (total > 0) {
|
|
418
627
|
const percent = Math.round((completed / total) * 100);
|
|
419
|
-
const progressBar = renderProgressBar(percent, 20, s);
|
|
628
|
+
const progressBar = renderProgressBar(percent / 100, 20, s);
|
|
420
629
|
lines.push(` ${s.muted('Work Items:')} ${progressBar} ${String(completed)}/${String(total)} (${String(percent)}%)`);
|
|
421
630
|
}
|
|
422
631
|
else {
|
|
@@ -469,6 +678,24 @@ export class ProjectsOverlayV2 extends TabbedListOverlayV2 {
|
|
|
469
678
|
const project = this.state.filteredItems[this.state.selectedIndex];
|
|
470
679
|
return this.push(new WorkflowOverlayV2(project.id));
|
|
471
680
|
}
|
|
681
|
+
// 'e' edit project
|
|
682
|
+
if ((key.char === 'e' || key.char === 'E') && this.state.filteredItems.length > 0) {
|
|
683
|
+
const project = this.state.filteredItems[this.state.selectedIndex];
|
|
684
|
+
this.editState.targetProject = project;
|
|
685
|
+
this.editState.selectedFieldIndex = 0;
|
|
686
|
+
this.editState.editingField = false;
|
|
687
|
+
this.editState.inputBuffer = '';
|
|
688
|
+
this.editState.error = null;
|
|
689
|
+
this.editState.fields = [
|
|
690
|
+
{ key: 'displayName', label: 'Display Name', value: project.displayName, placeholder: 'Project display name' },
|
|
691
|
+
{ key: 'description', label: 'Description', value: project.description || '', placeholder: 'Brief description' },
|
|
692
|
+
{ key: 'path', label: 'Path', value: project.path || '', placeholder: '/path/to/project' },
|
|
693
|
+
{ key: 'gitRemote', label: 'Git Remote', value: project.gitRemote || '', placeholder: 'https://github.com/...' },
|
|
694
|
+
{ key: 'gitBranch', label: 'Git Branch', value: project.gitBranch || '', placeholder: 'main' },
|
|
695
|
+
];
|
|
696
|
+
this.screenStack.push(new ProjectEditScreen(this.editState, this.getStyles(), () => { this.refreshProjects(); }));
|
|
697
|
+
return this.rerender();
|
|
698
|
+
}
|
|
472
699
|
// 'x' archive/restore
|
|
473
700
|
if ((key.char === 'x' || key.char === 'X') && this.state.filteredItems.length > 0) {
|
|
474
701
|
const project = this.state.filteredItems[this.state.selectedIndex];
|
|
@@ -476,9 +703,16 @@ export class ProjectsOverlayV2 extends TabbedListOverlayV2 {
|
|
|
476
703
|
this.screenStack.push(new ArchiveConfirmScreen(this.confirmState, this.getStyles(), () => { this.refreshProjects(); }));
|
|
477
704
|
return this.rerender();
|
|
478
705
|
}
|
|
479
|
-
// 'd' delete
|
|
706
|
+
// 'd' delete (only for archived projects)
|
|
480
707
|
if ((key.char === 'd' || key.char === 'D') && this.state.filteredItems.length > 0) {
|
|
481
708
|
const project = this.state.filteredItems[this.state.selectedIndex];
|
|
709
|
+
// Block deletion of non-archived projects
|
|
710
|
+
if (project.status !== 'archived') {
|
|
711
|
+
this.confirmState.targetProject = project;
|
|
712
|
+
this.confirmState.deleteError = 'Archive the project first (press x), then delete';
|
|
713
|
+
this.screenStack.push(new DeleteBlockedScreen(this.confirmState, this.getStyles()));
|
|
714
|
+
return this.rerender();
|
|
715
|
+
}
|
|
482
716
|
this.confirmState.targetProject = project;
|
|
483
717
|
this.confirmState.deleteConfirmInput = '';
|
|
484
718
|
this.confirmState.deleteError = null;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reset Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Modal overlay for resetting/clearing the conversation within the current project.
|
|
5
|
+
* Provides options for:
|
|
6
|
+
* - Reset & reload context: Clear messages, refresh COMPILR.md
|
|
7
|
+
* - Reset only: Clear messages, keep current context
|
|
8
|
+
* - Cancel: Keep current session
|
|
9
|
+
*/
|
|
10
|
+
import { BaseOverlayV2 } from '../../base/index.js';
|
|
11
|
+
import type { RenderContext, OverlayAction, KeyEvent } from '../types.js';
|
|
12
|
+
export type ResetOption = 'reset-reload' | 'reset-only' | 'delete-history' | 'cancel';
|
|
13
|
+
interface ResetState {
|
|
14
|
+
/** Selected option index */
|
|
15
|
+
selectedIndex: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ResetOverlayV2Options {
|
|
18
|
+
/** Project name for display */
|
|
19
|
+
projectName: string;
|
|
20
|
+
/** Number of messages in current session */
|
|
21
|
+
messageCount: number;
|
|
22
|
+
/** Estimated token usage */
|
|
23
|
+
tokenCount?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface ResetOverlayV2Result {
|
|
26
|
+
/** Selected option */
|
|
27
|
+
option: ResetOption;
|
|
28
|
+
}
|
|
29
|
+
export declare class ResetOverlayV2 extends BaseOverlayV2<ResetState, ResetOverlayV2Result> {
|
|
30
|
+
readonly type: "inline";
|
|
31
|
+
readonly id = "reset-overlay-v2";
|
|
32
|
+
private readonly projectName;
|
|
33
|
+
private readonly messageCount;
|
|
34
|
+
private readonly tokenCount?;
|
|
35
|
+
constructor(options: ResetOverlayV2Options);
|
|
36
|
+
protected renderContent(context: RenderContext): string[];
|
|
37
|
+
handleKey(key: KeyEvent): OverlayAction<ResetOverlayV2Result>;
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reset Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Modal overlay for resetting/clearing the conversation within the current project.
|
|
5
|
+
* Provides options for:
|
|
6
|
+
* - Reset & reload context: Clear messages, refresh COMPILR.md
|
|
7
|
+
* - Reset only: Clear messages, keep current context
|
|
8
|
+
* - Cancel: Keep current session
|
|
9
|
+
*/
|
|
10
|
+
import { BaseOverlayV2, renderBorder, formatTokens } from '../../base/index.js';
|
|
11
|
+
const RESET_OPTIONS = [
|
|
12
|
+
{
|
|
13
|
+
id: 'reset-reload',
|
|
14
|
+
label: 'Reset & reload context',
|
|
15
|
+
description: 'Clear messages, refresh COMPILR.md and project context',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: 'reset-only',
|
|
19
|
+
label: 'Reset only',
|
|
20
|
+
description: 'Clear messages, keep current context',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: 'delete-history',
|
|
24
|
+
label: 'Delete conversation history',
|
|
25
|
+
description: 'Delete all archived sessions for this project',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: 'cancel',
|
|
29
|
+
label: 'Cancel',
|
|
30
|
+
description: 'Keep current session',
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
// =============================================================================
|
|
34
|
+
// Reset Overlay V2 Class
|
|
35
|
+
// =============================================================================
|
|
36
|
+
export class ResetOverlayV2 extends BaseOverlayV2 {
|
|
37
|
+
type = 'inline';
|
|
38
|
+
id = 'reset-overlay-v2';
|
|
39
|
+
projectName;
|
|
40
|
+
messageCount;
|
|
41
|
+
tokenCount;
|
|
42
|
+
constructor(options) {
|
|
43
|
+
super({ selectedIndex: 0 });
|
|
44
|
+
this.projectName = options.projectName;
|
|
45
|
+
this.messageCount = options.messageCount;
|
|
46
|
+
this.tokenCount = options.tokenCount;
|
|
47
|
+
this.minHeight = 18;
|
|
48
|
+
}
|
|
49
|
+
renderContent(context) {
|
|
50
|
+
const s = context.styles;
|
|
51
|
+
const border = renderBorder(context.width, s);
|
|
52
|
+
const lines = [];
|
|
53
|
+
lines.push(border);
|
|
54
|
+
lines.push(` ${s.primaryBold('Reset Conversation')}`);
|
|
55
|
+
lines.push('');
|
|
56
|
+
// Session info
|
|
57
|
+
lines.push(` ${s.muted('Project:')} ${s.primary(this.projectName)}`);
|
|
58
|
+
const sessionInfo = this.tokenCount
|
|
59
|
+
? `${String(this.messageCount)} messages · ~${formatTokens(this.tokenCount)} tokens`
|
|
60
|
+
: `${String(this.messageCount)} messages`;
|
|
61
|
+
lines.push(` ${s.muted('Session:')} ${s.secondary(sessionInfo)}`);
|
|
62
|
+
lines.push('');
|
|
63
|
+
// Warning
|
|
64
|
+
lines.push(` ${s.warning('This will clear your conversation history.')}`);
|
|
65
|
+
lines.push(` ${s.muted('Previous session will be archived.')}`);
|
|
66
|
+
lines.push('');
|
|
67
|
+
// Options
|
|
68
|
+
for (let i = 0; i < RESET_OPTIONS.length; i++) {
|
|
69
|
+
const opt = RESET_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 Esc Cancel')}`);
|
|
79
|
+
lines.push(border);
|
|
80
|
+
return lines;
|
|
81
|
+
}
|
|
82
|
+
handleKey(key) {
|
|
83
|
+
// Ctrl+C closes everything
|
|
84
|
+
if (key.ctrl && key.name === 'c') {
|
|
85
|
+
return this.close({ option: 'cancel' });
|
|
86
|
+
}
|
|
87
|
+
// Escape cancels
|
|
88
|
+
if (key.name === 'escape') {
|
|
89
|
+
return this.close({ option: 'cancel' });
|
|
90
|
+
}
|
|
91
|
+
// Navigation with j/k
|
|
92
|
+
if (key.char === 'j' || key.name === 'down') {
|
|
93
|
+
this.state.selectedIndex = Math.min(this.state.selectedIndex + 1, RESET_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 = RESET_OPTIONS[this.state.selectedIndex];
|
|
103
|
+
return this.close({ option: selected.id });
|
|
104
|
+
}
|
|
105
|
+
return this.rerender();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
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 { TabbedListOverlayV2, BaseScreen } from '../../base/index.js';
|
|
15
|
+
import type { SessionInfo } from '@compilr-dev/sdk';
|
|
16
|
+
export interface SessionItem {
|
|
17
|
+
sessionId: string;
|
|
18
|
+
preview: string;
|
|
19
|
+
messageCount: number;
|
|
20
|
+
createdAt: string;
|
|
21
|
+
updatedAt: string;
|
|
22
|
+
/** Relative time string like "2 minutes ago" */
|
|
23
|
+
relativeTime: string;
|
|
24
|
+
/** Project ID (null for global sessions) */
|
|
25
|
+
projectId?: number | null;
|
|
26
|
+
/** Project name for display */
|
|
27
|
+
projectName?: string | null;
|
|
28
|
+
/** Whether this is the current project's session */
|
|
29
|
+
isCurrentProject?: boolean;
|
|
30
|
+
/** 8-hex terminal prefix from session filename */
|
|
31
|
+
terminalPrefix?: string | null;
|
|
32
|
+
/** Human-readable terminal label, e.g. "Terminal 1" */
|
|
33
|
+
terminalLabel?: string | null;
|
|
34
|
+
/** Whether the terminal that owns this session is still running */
|
|
35
|
+
isActiveTerminal?: boolean;
|
|
36
|
+
/** Number of agents in the team roster for this session */
|
|
37
|
+
teamAgentCount?: number;
|
|
38
|
+
}
|
|
39
|
+
export interface ResumeOverlayV2Options {
|
|
40
|
+
/** Sessions to display */
|
|
41
|
+
sessions: SessionInfo[];
|
|
42
|
+
/** Current project ID (null for global) */
|
|
43
|
+
currentProjectId?: number | null;
|
|
44
|
+
/** Callback to delete a session */
|
|
45
|
+
onDelete?: (sessionId: string) => Promise<boolean>;
|
|
46
|
+
}
|
|
47
|
+
export interface ResumeOverlayV2Result {
|
|
48
|
+
/** Session ID to resume */
|
|
49
|
+
sessionId?: string;
|
|
50
|
+
/** Session was deleted */
|
|
51
|
+
deleted?: string;
|
|
52
|
+
}
|
|
53
|
+
export declare class ResumeOverlayV2 extends TabbedListOverlayV2<SessionItem, ResumeOverlayV2Result> {
|
|
54
|
+
readonly type: "inline";
|
|
55
|
+
readonly id = "resume-overlay-v2";
|
|
56
|
+
private readonly onDeleteSession?;
|
|
57
|
+
constructor(options: ResumeOverlayV2Options);
|
|
58
|
+
protected createDetailScreen(item: SessionItem): BaseScreen | null;
|
|
59
|
+
protected onItemSelected(item: SessionItem): ResumeOverlayV2Result | undefined;
|
|
60
|
+
}
|