@compilr-dev/cli 0.4.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +254 -68
- package/dist/.tsbuildinfo.app +1 -0
- package/dist/.tsbuildinfo.data +1 -0
- package/dist/.tsbuildinfo.domain +1 -0
- package/dist/.tsbuildinfo.foundation +1 -0
- package/dist/agent.d.ts +134 -4
- package/dist/agent.js +345 -166
- package/dist/anchors/index.d.ts +9 -0
- package/dist/anchors/index.js +9 -0
- package/dist/anchors/project-anchors.d.ts +79 -0
- package/dist/anchors/project-anchors.js +202 -0
- package/dist/auth/api-client.d.ts +124 -0
- package/dist/auth/api-client.js +261 -0
- package/dist/auth/index.d.ts +172 -0
- package/dist/auth/index.js +545 -0
- package/dist/auth/storage.d.ts +52 -0
- package/dist/auth/storage.js +118 -0
- package/dist/changelog/index.d.ts +16 -0
- package/dist/changelog/index.js +24 -0
- package/dist/changelog/releases.d.ts +17 -0
- package/dist/changelog/releases.js +63 -0
- package/dist/commands/index.d.ts +2 -1
- package/dist/commands-v2/handlers/auth.d.ts +10 -0
- package/dist/commands-v2/handlers/auth.js +118 -0
- package/dist/commands-v2/handlers/background.d.ts +14 -0
- package/dist/commands-v2/handlers/background.js +276 -0
- package/dist/commands-v2/handlers/context.d.ts +13 -0
- package/dist/commands-v2/handlers/context.js +533 -0
- package/dist/commands-v2/handlers/core.d.ts +14 -0
- package/dist/commands-v2/handlers/core.js +290 -0
- package/dist/commands-v2/handlers/debug.d.ts +11 -0
- package/dist/commands-v2/handlers/debug.js +177 -0
- package/dist/commands-v2/handlers/delegations.d.ts +8 -0
- package/dist/commands-v2/handlers/delegations.js +29 -0
- package/dist/commands-v2/handlers/files.d.ts +8 -0
- package/dist/commands-v2/handlers/files.js +162 -0
- package/dist/commands-v2/handlers/filter.d.ts +9 -0
- package/dist/commands-v2/handlers/filter.js +130 -0
- package/dist/commands-v2/handlers/games.d.ts +7 -0
- package/dist/commands-v2/handlers/games.js +57 -0
- package/dist/commands-v2/handlers/index.d.ts +25 -0
- package/dist/commands-v2/handlers/index.js +63 -0
- package/dist/commands-v2/handlers/mcp.d.ts +8 -0
- package/dist/commands-v2/handlers/mcp.js +39 -0
- package/dist/commands-v2/handlers/notifications.d.ts +9 -0
- package/dist/commands-v2/handlers/notifications.js +34 -0
- package/dist/commands-v2/handlers/project.d.ts +22 -0
- package/dist/commands-v2/handlers/project.js +1035 -0
- package/dist/commands-v2/handlers/reset.d.ts +11 -0
- package/dist/commands-v2/handlers/reset.js +118 -0
- package/dist/commands-v2/handlers/session.d.ts +161 -0
- package/dist/commands-v2/handlers/session.js +805 -0
- package/dist/commands-v2/handlers/settings.d.ts +17 -0
- package/dist/commands-v2/handlers/settings.js +417 -0
- package/dist/commands-v2/handlers/tasks.d.ts +5 -0
- package/dist/commands-v2/handlers/tasks.js +36 -0
- package/dist/commands-v2/handlers/team.d.ts +9 -0
- package/dist/commands-v2/handlers/team.js +549 -0
- package/dist/commands-v2/handlers/terminals.d.ts +9 -0
- package/dist/commands-v2/handlers/terminals.js +34 -0
- package/dist/commands-v2/index.d.ts +14 -0
- package/dist/commands-v2/index.js +18 -0
- package/dist/commands-v2/registry.d.ts +52 -0
- package/dist/commands-v2/registry.js +114 -0
- package/dist/commands-v2/types.d.ts +153 -0
- package/dist/commands-v2/types.js +7 -0
- package/dist/commands.js +123 -7
- package/dist/compilr-diff-companion.vsix +0 -0
- package/dist/db/index.js +98 -4
- package/dist/db/repositories/document-repository.d.ts +2 -0
- package/dist/db/repositories/document-repository.js +5 -1
- package/dist/db/repositories/index.d.ts +2 -0
- package/dist/db/repositories/index.js +1 -0
- package/dist/db/repositories/plan-repository.d.ts +101 -0
- package/dist/db/repositories/plan-repository.js +275 -0
- package/dist/db/repositories/project-repository.d.ts +6 -0
- package/dist/db/repositories/project-repository.js +41 -0
- package/dist/db/repositories/work-item-repository.d.ts +15 -0
- package/dist/db/repositories/work-item-repository.js +69 -4
- package/dist/db/schema.d.ts +40 -3
- package/dist/db/schema.js +66 -3
- package/dist/episodes/index.d.ts +20 -0
- package/dist/episodes/index.js +27 -0
- package/dist/episodes/recorder.d.ts +51 -0
- package/dist/episodes/recorder.js +195 -0
- package/dist/episodes/significant-work.d.ts +21 -0
- package/dist/episodes/significant-work.js +56 -0
- package/dist/episodes/store.d.ts +38 -0
- package/dist/episodes/store.js +199 -0
- package/dist/episodes/types.d.ts +35 -0
- package/dist/episodes/types.js +6 -0
- package/dist/episodes/work-at-risk.d.ts +12 -0
- package/dist/episodes/work-at-risk.js +38 -0
- package/dist/episodes/work-summary-anchor.d.ts +23 -0
- package/dist/episodes/work-summary-anchor.js +73 -0
- package/dist/games/coins.d.ts +66 -0
- package/dist/games/coins.js +165 -0
- package/dist/games/game-base.d.ts +84 -0
- package/dist/games/game-base.js +204 -0
- package/dist/games/index.d.ts +16 -0
- package/dist/games/index.js +49 -0
- package/dist/games/scores.d.ts +69 -0
- package/dist/games/scores.js +191 -0
- package/dist/games/tetris/board.d.ts +59 -0
- package/dist/games/tetris/board.js +170 -0
- package/dist/games/tetris/index.d.ts +109 -0
- package/dist/games/tetris/index.js +610 -0
- package/dist/games/tetris/pieces.d.ts +44 -0
- package/dist/games/tetris/pieces.js +271 -0
- package/dist/games/tetris/renderer.d.ts +26 -0
- package/dist/games/tetris/renderer.js +77 -0
- package/dist/guide/guide-content.d.ts +23 -0
- package/dist/guide/guide-content.js +196 -0
- package/dist/guide/index.d.ts +8 -0
- package/dist/guide/index.js +7 -0
- package/dist/guide/shared-content.d.ts +37 -0
- package/dist/guide/shared-content.js +1272 -0
- package/dist/guide/tutorial-helpers.d.ts +57 -0
- package/dist/guide/tutorial-helpers.js +147 -0
- package/dist/handlers/ask-user-handlers.d.ts +32 -0
- package/dist/handlers/ask-user-handlers.js +104 -0
- package/dist/handlers/delegation-handlers.d.ts +34 -0
- package/dist/handlers/delegation-handlers.js +291 -0
- package/dist/handlers/permission-handler.d.ts +30 -0
- package/dist/handlers/permission-handler.js +205 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.js +615 -179
- package/dist/input-handlers/index.d.ts +7 -0
- package/dist/input-handlers/index.js +7 -0
- package/dist/input-handlers/memory-handler.d.ts +26 -0
- package/dist/input-handlers/memory-handler.js +69 -0
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.js +12 -0
- package/dist/models/model-registry.d.ts +38 -0
- package/dist/models/model-registry.js +69 -0
- package/dist/models/model-tiers.d.ts +28 -0
- package/dist/models/model-tiers.js +71 -0
- package/dist/models/model-validation.d.ts +25 -0
- package/dist/models/model-validation.js +291 -0
- package/dist/models/ollama-models.d.ts +73 -0
- package/dist/models/ollama-models.js +178 -0
- package/dist/models/provider-types.d.ts +6 -0
- package/dist/models/provider-types.js +1 -0
- package/dist/models/providers.d.ts +35 -0
- package/dist/models/providers.js +58 -0
- package/dist/models/types.d.ts +4 -0
- package/dist/models/types.js +4 -0
- package/dist/multi-agent/activity.d.ts +21 -0
- package/dist/multi-agent/activity.js +34 -0
- package/dist/multi-agent/agent-selection.d.ts +55 -0
- package/dist/multi-agent/agent-selection.js +90 -0
- package/dist/multi-agent/artifacts.d.ts +197 -0
- package/dist/multi-agent/artifacts.js +379 -0
- package/dist/multi-agent/checkpointer.d.ts +138 -0
- package/dist/multi-agent/checkpointer.js +471 -0
- package/dist/multi-agent/collision-utils.d.ts +16 -0
- package/dist/multi-agent/collision-utils.js +28 -0
- package/dist/multi-agent/context-resolver.d.ts +97 -0
- package/dist/multi-agent/context-resolver.js +316 -0
- package/dist/multi-agent/custom-agents.d.ts +83 -0
- package/dist/multi-agent/custom-agents.js +227 -0
- package/dist/multi-agent/delegation-tracker.d.ts +157 -0
- package/dist/multi-agent/delegation-tracker.js +243 -0
- package/dist/multi-agent/file-lock-hook.d.ts +29 -0
- package/dist/multi-agent/file-lock-hook.js +97 -0
- package/dist/multi-agent/file-locks.d.ts +58 -0
- package/dist/multi-agent/file-locks.js +194 -0
- package/dist/multi-agent/index.d.ts +24 -0
- package/dist/multi-agent/index.js +30 -0
- package/dist/multi-agent/mention-parser.d.ts +64 -0
- package/dist/multi-agent/mention-parser.js +146 -0
- package/dist/multi-agent/notification-manager.d.ts +84 -0
- package/dist/multi-agent/notification-manager.js +224 -0
- package/dist/multi-agent/pending-requests.d.ts +122 -0
- package/dist/multi-agent/pending-requests.js +155 -0
- package/dist/multi-agent/session-registry.d.ts +139 -0
- package/dist/multi-agent/session-registry.js +514 -0
- package/dist/multi-agent/shared-context.d.ts +293 -0
- package/dist/multi-agent/shared-context.js +671 -0
- package/dist/multi-agent/skill-requirements.d.ts +66 -0
- package/dist/multi-agent/skill-requirements.js +178 -0
- package/dist/multi-agent/task-assignment.d.ts +69 -0
- package/dist/multi-agent/task-assignment.js +123 -0
- package/dist/multi-agent/task-suggestion.d.ts +31 -0
- package/dist/multi-agent/task-suggestion.js +72 -0
- package/dist/multi-agent/team-agent.d.ts +201 -0
- package/dist/multi-agent/team-agent.js +488 -0
- package/dist/multi-agent/team.d.ts +286 -0
- package/dist/multi-agent/team.js +610 -0
- package/dist/multi-agent/tool-config.d.ts +110 -0
- package/dist/multi-agent/tool-config.js +661 -0
- package/dist/multi-agent/types.d.ts +211 -0
- package/dist/multi-agent/types.js +617 -0
- package/dist/prompts/plan-mode-prompt.d.ts +11 -0
- package/dist/prompts/plan-mode-prompt.js +95 -0
- package/dist/repl-helpers.d.ts +63 -0
- package/dist/repl-helpers.js +319 -0
- package/dist/repl-v2.d.ts +554 -0
- package/dist/repl-v2.js +3286 -0
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.js +6 -0
- package/dist/session/project-session-manager.d.ts +158 -0
- package/dist/session/project-session-manager.js +650 -0
- package/dist/settings/index.d.ts +156 -13
- package/dist/settings/index.js +377 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +114 -0
- package/dist/settings/paths.js +270 -0
- package/dist/shared-handlers.d.ts +62 -0
- package/dist/shared-handlers.js +48 -0
- package/dist/system-prompt/builder.d.ts +5 -0
- package/dist/system-prompt/builder.js +4 -0
- package/dist/system-prompt/index.d.ts +18 -0
- package/dist/system-prompt/index.js +18 -0
- package/dist/system-prompt/modules.d.ts +5 -0
- package/dist/system-prompt/modules.js +4 -0
- package/dist/tabbed-menu.js +2 -1
- package/dist/templates/compilr-md-import.d.ts +16 -0
- package/dist/templates/compilr-md-import.js +241 -0
- package/dist/templates/compilr-md.js +10 -58
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +35 -75
- package/dist/themes/colors.js +3 -1
- package/dist/themes/registry.d.ts +5 -36
- package/dist/themes/registry.js +11 -95
- package/dist/themes/types.d.ts +3 -38
- package/dist/themes/types.js +2 -2
- package/dist/tool-names.d.ts +108 -0
- package/dist/tool-names.js +227 -0
- package/dist/tools/anchor-tools.d.ts +31 -0
- package/dist/tools/anchor-tools.js +255 -0
- package/dist/tools/artifact-tools.d.ts +42 -0
- package/dist/tools/artifact-tools.js +328 -0
- package/dist/tools/ask-user-simple.d.ts +1 -1
- package/dist/tools/ask-user-simple.js +2 -1
- package/dist/tools/ask-user.d.ts +1 -1
- package/dist/tools/ask-user.js +2 -1
- package/dist/tools/backlog-wrappers.d.ts +56 -0
- package/dist/tools/backlog-wrappers.js +353 -0
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +2 -2
- package/dist/tools/db-tools.d.ts +12 -0
- package/dist/tools/db-tools.js +14 -0
- package/dist/tools/delegate-background.d.ts +27 -0
- package/dist/tools/delegate-background.js +115 -0
- package/dist/tools/delegate.d.ts +22 -0
- package/dist/tools/delegate.js +97 -0
- package/dist/tools/delegation-status.d.ts +16 -0
- package/dist/tools/delegation-status.js +128 -0
- package/dist/tools/document-db.d.ts +43 -0
- package/dist/tools/document-db.js +220 -0
- package/dist/tools/guide-tool.d.ts +12 -0
- package/dist/tools/guide-tool.js +59 -0
- package/dist/tools/handoff.d.ts +25 -0
- package/dist/tools/handoff.js +99 -0
- package/dist/tools/meta-tools.d.ts +26 -0
- package/dist/tools/meta-tools.js +47 -0
- package/dist/tools/plan-tools.d.ts +54 -0
- package/dist/tools/plan-tools.js +338 -0
- package/dist/tools/platform-adapter.d.ts +29 -0
- package/dist/tools/platform-adapter.js +394 -0
- package/dist/tools/project-db.d.ts +34 -0
- package/dist/tools/project-db.js +39 -0
- package/dist/tools/recall-work-tool.d.ts +18 -0
- package/dist/tools/recall-work-tool.js +82 -0
- package/dist/tools/workitem-db.d.ts +135 -0
- package/dist/tools/workitem-db.js +730 -0
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +238 -38
- package/dist/ui/ask-user-overlay.d.ts +2 -2
- package/dist/ui/ask-user-overlay.js +443 -535
- package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
- package/dist/ui/ask-user-simple-overlay.js +182 -209
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- package/dist/ui/base/index.d.ts +26 -0
- package/dist/ui/base/index.js +33 -0
- package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
- package/dist/ui/base/inline-overlay-utils.js +320 -0
- package/dist/ui/base/inline-overlay.d.ts +159 -0
- package/dist/ui/base/inline-overlay.js +257 -0
- package/dist/ui/base/key-utils.d.ts +15 -0
- package/dist/ui/base/key-utils.js +30 -0
- package/dist/ui/base/overlay-base-v2.d.ts +203 -0
- package/dist/ui/base/overlay-base-v2.js +260 -0
- package/dist/ui/base/overlay-base.d.ts +156 -0
- package/dist/ui/base/overlay-base.js +238 -0
- package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
- package/dist/ui/base/overlay-lifecycle.js +159 -0
- package/dist/ui/base/overlay-types.d.ts +185 -0
- package/dist/ui/base/overlay-types.js +7 -0
- package/dist/ui/base/render-utils.d.ts +27 -0
- package/dist/ui/base/render-utils.js +36 -0
- package/dist/ui/base/screen-stack.d.ts +148 -0
- package/dist/ui/base/screen-stack.js +184 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
- package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
- package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
- package/dist/ui/base/tabbed-list-overlay.js +369 -0
- package/dist/ui/constants/labels.d.ts +14 -0
- package/dist/ui/constants/labels.js +51 -0
- package/dist/ui/conversation-store.d.ts +55 -0
- package/dist/ui/conversation-store.js +107 -0
- package/dist/ui/conversation.d.ts +75 -4
- package/dist/ui/conversation.js +376 -165
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.d.ts +1 -1
- package/dist/ui/ephemeral.js +4 -10
- package/dist/ui/features/index.d.ts +34 -0
- package/dist/ui/features/index.js +34 -0
- package/dist/ui/features/input-feature.d.ts +85 -0
- package/dist/ui/features/input-feature.js +238 -0
- package/dist/ui/features/list-feature.d.ts +155 -0
- package/dist/ui/features/list-feature.js +244 -0
- package/dist/ui/features/pagination-feature.d.ts +154 -0
- package/dist/ui/features/pagination-feature.js +238 -0
- package/dist/ui/features/search-feature.d.ts +148 -0
- package/dist/ui/features/search-feature.js +185 -0
- package/dist/ui/features/tab-feature.d.ts +194 -0
- package/dist/ui/features/tab-feature.js +307 -0
- package/dist/ui/file-autocomplete.d.ts +24 -0
- package/dist/ui/file-autocomplete.js +56 -0
- package/dist/ui/footer-renderer.d.ts +69 -0
- package/dist/ui/footer-renderer.js +431 -0
- package/dist/ui/footer.d.ts +181 -7
- package/dist/ui/footer.js +523 -74
- package/dist/ui/guardrail-overlay.d.ts +29 -0
- package/dist/ui/guardrail-overlay.js +145 -0
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +1 -3
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +135 -33
- package/dist/ui/input-prompt.js +728 -337
- package/dist/ui/iteration-limit-overlay.d.ts +2 -2
- package/dist/ui/iteration-limit-overlay.js +92 -128
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -0
- package/dist/ui/keys-overlay.d.ts +1 -0
- package/dist/ui/keys-overlay.js +203 -141
- package/dist/ui/line-utils.d.ts +88 -0
- package/dist/ui/line-utils.js +150 -0
- package/dist/ui/live-region-facade.d.ts +42 -0
- package/dist/ui/live-region-facade.js +205 -0
- package/dist/ui/live-region.d.ts +157 -0
- package/dist/ui/live-region.js +379 -0
- package/dist/ui/mascot/expressions.d.ts +32 -0
- package/dist/ui/mascot/expressions.js +213 -0
- package/dist/ui/mascot/index.d.ts +8 -0
- package/dist/ui/mascot/index.js +8 -0
- package/dist/ui/mascot/renderer.d.ts +19 -0
- package/dist/ui/mascot/renderer.js +132 -0
- package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
- package/dist/ui/overlay/data/tutorial-content.js +9 -0
- package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
- package/dist/ui/overlay/data/tutorial-registry.js +116 -0
- package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
- package/dist/ui/overlay/data/tutorial-types.js +6 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
- package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
- package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
- package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
- package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
- package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
- package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
- package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
- package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
- package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
- package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
- package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
- package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
- package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
- package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
- package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
- package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
- package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
- package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
- package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
- package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
- package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
- package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
- package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
- package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
- package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
- package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
- package/dist/ui/overlay/index.d.ts +52 -0
- package/dist/ui/overlay/index.js +54 -0
- package/dist/ui/overlay/key-utils.d.ts +6 -0
- package/dist/ui/overlay/key-utils.js +6 -0
- package/dist/ui/overlay/types.d.ts +140 -0
- package/dist/ui/overlay/types.js +22 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.d.ts +0 -4
- package/dist/ui/overlays.js +4 -460
- package/dist/ui/permission-overlay.d.ts +1 -1
- package/dist/ui/permission-overlay.js +189 -300
- package/dist/ui/providers/types.d.ts +178 -0
- package/dist/ui/providers/types.js +9 -0
- package/dist/ui/render-modes.d.ts +36 -0
- package/dist/ui/render-modes.js +44 -0
- package/dist/ui/startup-menu.d.ts +36 -0
- package/dist/ui/startup-menu.js +236 -0
- package/dist/ui/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.d.ts +117 -0
- package/dist/ui/subagent-renderer.js +318 -0
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -0
- package/dist/ui/terminal-codes.d.ts +94 -0
- package/dist/ui/terminal-codes.js +124 -0
- package/dist/ui/terminal-line-builders.d.ts +17 -0
- package/dist/ui/terminal-line-builders.js +42 -0
- package/dist/ui/terminal-render-item.d.ts +16 -0
- package/dist/ui/terminal-render-item.js +267 -0
- package/dist/ui/terminal-renderer.d.ts +220 -0
- package/dist/ui/terminal-renderer.js +750 -0
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +331 -0
- package/dist/ui/terminal-ui.js +819 -0
- package/dist/ui/terminal.d.ts +20 -0
- package/dist/ui/terminal.js +72 -0
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +124 -38
- package/dist/ui/tool-formatters.d.ts +16 -0
- package/dist/ui/tool-formatters.js +1027 -0
- package/dist/ui/turn-metrics.d.ts +56 -0
- package/dist/ui/turn-metrics.js +75 -0
- package/dist/ui/types.d.ts +28 -0
- package/dist/ui/types.js +1 -0
- package/dist/ui/vscode-diff-ipc.d.ts +102 -0
- package/dist/ui/vscode-diff-ipc.js +385 -0
- package/dist/utils/credentials.d.ts +24 -5
- package/dist/utils/credentials.js +123 -9
- package/dist/utils/debug-log.d.ts +28 -0
- package/dist/utils/debug-log.js +57 -0
- package/dist/utils/format-tokens.d.ts +13 -0
- package/dist/utils/format-tokens.js +18 -0
- package/dist/utils/git-config.d.ts +26 -0
- package/dist/utils/git-config.js +54 -0
- package/dist/utils/message-utils.d.ts +61 -0
- package/dist/utils/message-utils.js +72 -0
- package/dist/utils/model-tiers.d.ts +8 -1
- package/dist/utils/model-tiers.js +39 -17
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.d.ts +56 -0
- package/dist/utils/path-safety.js +240 -0
- package/dist/utils/project-detection.d.ts +58 -0
- package/dist/utils/project-detection.js +424 -0
- package/dist/utils/project-memory.js +2 -1
- package/dist/utils/project-status.d.ts +2 -2
- package/dist/utils/startup-perf.d.ts +18 -0
- package/dist/utils/startup-perf.js +60 -0
- package/dist/utils/token-tracker.d.ts +62 -0
- package/dist/utils/token-tracker.js +150 -0
- package/dist/utils/token-types.d.ts +23 -0
- package/dist/utils/token-types.js +18 -0
- package/dist/utils/types/config-types.d.ts +32 -0
- package/dist/utils/types/config-types.js +8 -0
- package/dist/utils/update-checker.d.ts +28 -0
- package/dist/utils/update-checker.js +106 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.js +10 -0
- package/dist/utils/vscode-detect.d.ts +39 -0
- package/dist/utils/vscode-detect.js +137 -0
- package/dist/workflow/guided-mode-injector.d.ts +42 -0
- package/dist/workflow/guided-mode-injector.js +191 -0
- package/dist/workflow/index.d.ts +8 -0
- package/dist/workflow/index.js +8 -0
- package/dist/workflow/step-criteria.d.ts +62 -0
- package/dist/workflow/step-criteria.js +150 -0
- package/dist/workflow/step-tracker.d.ts +92 -0
- package/dist/workflow/step-tracker.js +141 -0
- package/package.json +32 -12
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -121
- package/dist/repl.js +0 -1878
- package/dist/templates/claude-md.d.ts +0 -7
- package/dist/templates/claude-md.js +0 -189
- package/dist/test-autocomplete.d.ts +0 -7
- package/dist/test-autocomplete.js +0 -85
- package/dist/test-tabbed-menu.d.ts +0 -7
- package/dist/test-tabbed-menu.js +0 -25
- package/dist/tool-selector.d.ts +0 -71
- package/dist/tool-selector.js +0 -184
- package/dist/ui/agents-overlay.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -501
- package/dist/ui/arch-type-overlay.d.ts +0 -20
- package/dist/ui/arch-type-overlay.js +0 -229
- package/dist/ui/backlog-overlay.d.ts +0 -17
- package/dist/ui/backlog-overlay.js +0 -786
- package/dist/ui/commands-overlay.d.ts +0 -11
- package/dist/ui/commands-overlay.js +0 -410
- package/dist/ui/config-overlay.d.ts +0 -34
- package/dist/ui/config-overlay.js +0 -977
- package/dist/ui/init-overlay.d.ts +0 -24
- package/dist/ui/init-overlay.js +0 -525
- package/dist/ui/input-prompt-v2.d.ts +0 -179
- package/dist/ui/input-prompt-v2.js +0 -991
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -171
- package/dist/ui/tools-overlay.d.ts +0 -26
- package/dist/ui/tools-overlay.js +0 -278
- package/dist/ui/tutorial-overlay.d.ts +0 -10
- package/dist/ui/tutorial-overlay.js +0 -936
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List Feature
|
|
3
|
+
*
|
|
4
|
+
* Composable feature for list selection and navigation.
|
|
5
|
+
* Handles up/down navigation, selection, and rendering.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* interface MyState extends OverlayState, ListState {
|
|
10
|
+
* items: string[];
|
|
11
|
+
* }
|
|
12
|
+
*
|
|
13
|
+
* class MyOverlay extends BaseOverlay<MyState, string | null> {
|
|
14
|
+
* private listFeature = new ListFeature<string>(
|
|
15
|
+
* () => this.state.items,
|
|
16
|
+
* (item) => this.onSelect(item)
|
|
17
|
+
* );
|
|
18
|
+
*
|
|
19
|
+
* handleKey(data: Buffer): void {
|
|
20
|
+
* const result = this.listFeature.handleKey(data, this.state);
|
|
21
|
+
* if (result?.handled) {
|
|
22
|
+
* if (result.action === 'render') this.update();
|
|
23
|
+
* return;
|
|
24
|
+
* }
|
|
25
|
+
* // ... other key handling
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* render(): string[] {
|
|
29
|
+
* return [
|
|
30
|
+
* ...this.renderHeader('Select Item'),
|
|
31
|
+
* ...this.listFeature.renderItems(this.state, (opts) => {
|
|
32
|
+
* const prefix = opts.isSelected ? ' > ' : ' ';
|
|
33
|
+
* return opts.isSelected
|
|
34
|
+
* ? this.styles.primary(`${prefix}${opts.item}`)
|
|
35
|
+
* : this.styles.muted(`${prefix}${opts.item}`);
|
|
36
|
+
* }),
|
|
37
|
+
* ...this.renderFooter('↑↓/jk Navigate · Enter Select')
|
|
38
|
+
* ];
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
import type { KeyResult, ListState, ListItemRenderer } from '../base/overlay-types.js';
|
|
44
|
+
/**
|
|
45
|
+
* Configuration for ListFeature.
|
|
46
|
+
*/
|
|
47
|
+
export interface ListFeatureConfig<T> {
|
|
48
|
+
/**
|
|
49
|
+
* Function to get the current list of items.
|
|
50
|
+
* Called each time keys are handled or items are rendered.
|
|
51
|
+
*/
|
|
52
|
+
getItems: () => T[];
|
|
53
|
+
/**
|
|
54
|
+
* Optional callback when an item is selected (Enter pressed).
|
|
55
|
+
* If not provided, Enter key is not handled by this feature.
|
|
56
|
+
*/
|
|
57
|
+
onSelect?: (item: T, index: number) => void;
|
|
58
|
+
/**
|
|
59
|
+
* Whether to wrap navigation at boundaries.
|
|
60
|
+
* If true, navigating up from first item goes to last, and vice versa.
|
|
61
|
+
* Default: false
|
|
62
|
+
*/
|
|
63
|
+
wrapNavigation?: boolean;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Feature for list selection and navigation.
|
|
67
|
+
*
|
|
68
|
+
* Handles:
|
|
69
|
+
* - Up/Down arrows and j/k for navigation
|
|
70
|
+
* - Enter for selection (if onSelect provided)
|
|
71
|
+
*
|
|
72
|
+
* @template T - Type of items in the list
|
|
73
|
+
*/
|
|
74
|
+
export declare class ListFeature<T> {
|
|
75
|
+
private readonly config;
|
|
76
|
+
/**
|
|
77
|
+
* Create a new ListFeature.
|
|
78
|
+
*
|
|
79
|
+
* @param getItems - Function to get current items
|
|
80
|
+
* @param onSelect - Optional callback for selection
|
|
81
|
+
*/
|
|
82
|
+
constructor(getItems: () => T[], onSelect?: (item: T, index: number) => void);
|
|
83
|
+
/**
|
|
84
|
+
* Create from config object (alternative constructor).
|
|
85
|
+
*/
|
|
86
|
+
static fromConfig<T>(config: ListFeatureConfig<T>): ListFeature<T>;
|
|
87
|
+
/**
|
|
88
|
+
* Handle a key press.
|
|
89
|
+
*
|
|
90
|
+
* @param data - Raw key buffer
|
|
91
|
+
* @param state - State containing selectedIndex
|
|
92
|
+
* @returns KeyResult if handled, null otherwise
|
|
93
|
+
*/
|
|
94
|
+
handleKey(data: Buffer, state: ListState): KeyResult | null;
|
|
95
|
+
/**
|
|
96
|
+
* Render list items using a custom renderer.
|
|
97
|
+
*
|
|
98
|
+
* @param state - State containing selectedIndex
|
|
99
|
+
* @param renderer - Function to render each item
|
|
100
|
+
* @returns Array of rendered lines
|
|
101
|
+
*/
|
|
102
|
+
renderItems(state: ListState, renderer: ListItemRenderer<T>): string[];
|
|
103
|
+
/**
|
|
104
|
+
* Render a subset of items (for pagination).
|
|
105
|
+
*
|
|
106
|
+
* @param state - State containing selectedIndex
|
|
107
|
+
* @param startIndex - First item index to render
|
|
108
|
+
* @param count - Number of items to render
|
|
109
|
+
* @param renderer - Function to render each item
|
|
110
|
+
* @returns Array of rendered lines
|
|
111
|
+
*/
|
|
112
|
+
renderItemsSlice(state: ListState, startIndex: number, count: number, renderer: ListItemRenderer<T>): string[];
|
|
113
|
+
/**
|
|
114
|
+
* Get the currently selected item.
|
|
115
|
+
*
|
|
116
|
+
* @param state - State containing selectedIndex
|
|
117
|
+
* @returns Selected item or undefined if out of bounds
|
|
118
|
+
*/
|
|
119
|
+
getSelectedItem(state: ListState): T | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* Get the total number of items.
|
|
122
|
+
*/
|
|
123
|
+
getItemCount(): number;
|
|
124
|
+
/**
|
|
125
|
+
* Ensure selectedIndex is within bounds.
|
|
126
|
+
* Call this after items change.
|
|
127
|
+
*
|
|
128
|
+
* @param state - State to adjust
|
|
129
|
+
*/
|
|
130
|
+
clampSelection(state: ListState): void;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Create a simple list renderer with standard styling.
|
|
134
|
+
*
|
|
135
|
+
* @param styles - Theme styles object
|
|
136
|
+
* @param getLabel - Function to get display label from item
|
|
137
|
+
* @returns Renderer function
|
|
138
|
+
*/
|
|
139
|
+
export declare function createSimpleListRenderer<T>(styles: {
|
|
140
|
+
primary: (s: string) => string;
|
|
141
|
+
muted: (s: string) => string;
|
|
142
|
+
}, getLabel: (item: T) => string): ListItemRenderer<T>;
|
|
143
|
+
/**
|
|
144
|
+
* Create a list renderer with label and description.
|
|
145
|
+
*
|
|
146
|
+
* @param styles - Theme styles object
|
|
147
|
+
* @param getLabel - Function to get display label
|
|
148
|
+
* @param getDescription - Function to get description
|
|
149
|
+
* @param labelWidth - Fixed width for label column (for alignment)
|
|
150
|
+
* @returns Renderer function
|
|
151
|
+
*/
|
|
152
|
+
export declare function createLabelDescriptionRenderer<T>(styles: {
|
|
153
|
+
primary: (s: string) => string;
|
|
154
|
+
muted: (s: string) => string;
|
|
155
|
+
}, getLabel: (item: T) => string, getDescription: (item: T) => string, labelWidth?: number): ListItemRenderer<T>;
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List Feature
|
|
3
|
+
*
|
|
4
|
+
* Composable feature for list selection and navigation.
|
|
5
|
+
* Handles up/down navigation, selection, and rendering.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* interface MyState extends OverlayState, ListState {
|
|
10
|
+
* items: string[];
|
|
11
|
+
* }
|
|
12
|
+
*
|
|
13
|
+
* class MyOverlay extends BaseOverlay<MyState, string | null> {
|
|
14
|
+
* private listFeature = new ListFeature<string>(
|
|
15
|
+
* () => this.state.items,
|
|
16
|
+
* (item) => this.onSelect(item)
|
|
17
|
+
* );
|
|
18
|
+
*
|
|
19
|
+
* handleKey(data: Buffer): void {
|
|
20
|
+
* const result = this.listFeature.handleKey(data, this.state);
|
|
21
|
+
* if (result?.handled) {
|
|
22
|
+
* if (result.action === 'render') this.update();
|
|
23
|
+
* return;
|
|
24
|
+
* }
|
|
25
|
+
* // ... other key handling
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* render(): string[] {
|
|
29
|
+
* return [
|
|
30
|
+
* ...this.renderHeader('Select Item'),
|
|
31
|
+
* ...this.listFeature.renderItems(this.state, (opts) => {
|
|
32
|
+
* const prefix = opts.isSelected ? ' > ' : ' ';
|
|
33
|
+
* return opts.isSelected
|
|
34
|
+
* ? this.styles.primary(`${prefix}${opts.item}`)
|
|
35
|
+
* : this.styles.muted(`${prefix}${opts.item}`);
|
|
36
|
+
* }),
|
|
37
|
+
* ...this.renderFooter('↑↓/jk Navigate · Enter Select')
|
|
38
|
+
* ];
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
import { isNavigateUp, isNavigateDown, isEnter, } from '../base/key-utils.js';
|
|
44
|
+
// =============================================================================
|
|
45
|
+
// ListFeature Class
|
|
46
|
+
// =============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Feature for list selection and navigation.
|
|
49
|
+
*
|
|
50
|
+
* Handles:
|
|
51
|
+
* - Up/Down arrows and j/k for navigation
|
|
52
|
+
* - Enter for selection (if onSelect provided)
|
|
53
|
+
*
|
|
54
|
+
* @template T - Type of items in the list
|
|
55
|
+
*/
|
|
56
|
+
export class ListFeature {
|
|
57
|
+
config;
|
|
58
|
+
/**
|
|
59
|
+
* Create a new ListFeature.
|
|
60
|
+
*
|
|
61
|
+
* @param getItems - Function to get current items
|
|
62
|
+
* @param onSelect - Optional callback for selection
|
|
63
|
+
*/
|
|
64
|
+
constructor(getItems, onSelect) {
|
|
65
|
+
this.config = { getItems, onSelect };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create from config object (alternative constructor).
|
|
69
|
+
*/
|
|
70
|
+
static fromConfig(config) {
|
|
71
|
+
const feature = new ListFeature(config.getItems, config.onSelect);
|
|
72
|
+
if (config.wrapNavigation !== undefined) {
|
|
73
|
+
feature.config.wrapNavigation = config.wrapNavigation;
|
|
74
|
+
}
|
|
75
|
+
return feature;
|
|
76
|
+
}
|
|
77
|
+
// ===========================================================================
|
|
78
|
+
// Key Handling
|
|
79
|
+
// ===========================================================================
|
|
80
|
+
/**
|
|
81
|
+
* Handle a key press.
|
|
82
|
+
*
|
|
83
|
+
* @param data - Raw key buffer
|
|
84
|
+
* @param state - State containing selectedIndex
|
|
85
|
+
* @returns KeyResult if handled, null otherwise
|
|
86
|
+
*/
|
|
87
|
+
handleKey(data, state) {
|
|
88
|
+
const items = this.config.getItems();
|
|
89
|
+
const itemCount = items.length;
|
|
90
|
+
if (itemCount === 0) {
|
|
91
|
+
return null; // Nothing to navigate
|
|
92
|
+
}
|
|
93
|
+
// Navigate up
|
|
94
|
+
if (isNavigateUp(data)) {
|
|
95
|
+
if (state.selectedIndex > 0) {
|
|
96
|
+
state.selectedIndex--;
|
|
97
|
+
return { handled: true, action: 'render' };
|
|
98
|
+
}
|
|
99
|
+
else if (this.config.wrapNavigation) {
|
|
100
|
+
state.selectedIndex = itemCount - 1;
|
|
101
|
+
return { handled: true, action: 'render' };
|
|
102
|
+
}
|
|
103
|
+
return { handled: true }; // At top, consume but no change
|
|
104
|
+
}
|
|
105
|
+
// Navigate down
|
|
106
|
+
if (isNavigateDown(data)) {
|
|
107
|
+
if (state.selectedIndex < itemCount - 1) {
|
|
108
|
+
state.selectedIndex++;
|
|
109
|
+
return { handled: true, action: 'render' };
|
|
110
|
+
}
|
|
111
|
+
else if (this.config.wrapNavigation) {
|
|
112
|
+
state.selectedIndex = 0;
|
|
113
|
+
return { handled: true, action: 'render' };
|
|
114
|
+
}
|
|
115
|
+
return { handled: true }; // At bottom, consume but no change
|
|
116
|
+
}
|
|
117
|
+
// Select (Enter)
|
|
118
|
+
if (isEnter(data) && this.config.onSelect) {
|
|
119
|
+
const item = items[state.selectedIndex];
|
|
120
|
+
if (item !== undefined) {
|
|
121
|
+
this.config.onSelect(item, state.selectedIndex);
|
|
122
|
+
return { handled: true };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return null; // Not handled
|
|
126
|
+
}
|
|
127
|
+
// ===========================================================================
|
|
128
|
+
// Rendering
|
|
129
|
+
// ===========================================================================
|
|
130
|
+
/**
|
|
131
|
+
* Render list items using a custom renderer.
|
|
132
|
+
*
|
|
133
|
+
* @param state - State containing selectedIndex
|
|
134
|
+
* @param renderer - Function to render each item
|
|
135
|
+
* @returns Array of rendered lines
|
|
136
|
+
*/
|
|
137
|
+
renderItems(state, renderer) {
|
|
138
|
+
const items = this.config.getItems();
|
|
139
|
+
return items.map((item, index) => renderer({
|
|
140
|
+
item,
|
|
141
|
+
isSelected: index === state.selectedIndex,
|
|
142
|
+
index,
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Render a subset of items (for pagination).
|
|
147
|
+
*
|
|
148
|
+
* @param state - State containing selectedIndex
|
|
149
|
+
* @param startIndex - First item index to render
|
|
150
|
+
* @param count - Number of items to render
|
|
151
|
+
* @param renderer - Function to render each item
|
|
152
|
+
* @returns Array of rendered lines
|
|
153
|
+
*/
|
|
154
|
+
renderItemsSlice(state, startIndex, count, renderer) {
|
|
155
|
+
const items = this.config.getItems();
|
|
156
|
+
const endIndex = Math.min(startIndex + count, items.length);
|
|
157
|
+
const lines = [];
|
|
158
|
+
for (let i = startIndex; i < endIndex; i++) {
|
|
159
|
+
const item = items[i];
|
|
160
|
+
lines.push(renderer({
|
|
161
|
+
item,
|
|
162
|
+
isSelected: i === state.selectedIndex,
|
|
163
|
+
index: i,
|
|
164
|
+
}));
|
|
165
|
+
}
|
|
166
|
+
return lines;
|
|
167
|
+
}
|
|
168
|
+
// ===========================================================================
|
|
169
|
+
// Utilities
|
|
170
|
+
// ===========================================================================
|
|
171
|
+
/**
|
|
172
|
+
* Get the currently selected item.
|
|
173
|
+
*
|
|
174
|
+
* @param state - State containing selectedIndex
|
|
175
|
+
* @returns Selected item or undefined if out of bounds
|
|
176
|
+
*/
|
|
177
|
+
getSelectedItem(state) {
|
|
178
|
+
const items = this.config.getItems();
|
|
179
|
+
return items[state.selectedIndex];
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get the total number of items.
|
|
183
|
+
*/
|
|
184
|
+
getItemCount() {
|
|
185
|
+
return this.config.getItems().length;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Ensure selectedIndex is within bounds.
|
|
189
|
+
* Call this after items change.
|
|
190
|
+
*
|
|
191
|
+
* @param state - State to adjust
|
|
192
|
+
*/
|
|
193
|
+
clampSelection(state) {
|
|
194
|
+
const itemCount = this.getItemCount();
|
|
195
|
+
if (itemCount === 0) {
|
|
196
|
+
state.selectedIndex = 0;
|
|
197
|
+
}
|
|
198
|
+
else if (state.selectedIndex >= itemCount) {
|
|
199
|
+
state.selectedIndex = itemCount - 1;
|
|
200
|
+
}
|
|
201
|
+
else if (state.selectedIndex < 0) {
|
|
202
|
+
state.selectedIndex = 0;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// =============================================================================
|
|
207
|
+
// Helper Functions
|
|
208
|
+
// =============================================================================
|
|
209
|
+
/**
|
|
210
|
+
* Create a simple list renderer with standard styling.
|
|
211
|
+
*
|
|
212
|
+
* @param styles - Theme styles object
|
|
213
|
+
* @param getLabel - Function to get display label from item
|
|
214
|
+
* @returns Renderer function
|
|
215
|
+
*/
|
|
216
|
+
export function createSimpleListRenderer(styles, getLabel) {
|
|
217
|
+
return ({ item, isSelected }) => {
|
|
218
|
+
const prefix = isSelected ? ' > ' : ' ';
|
|
219
|
+
const label = getLabel(item);
|
|
220
|
+
return isSelected
|
|
221
|
+
? styles.primary(`${prefix}${label}`)
|
|
222
|
+
: styles.muted(`${prefix}${label}`);
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Create a list renderer with label and description.
|
|
227
|
+
*
|
|
228
|
+
* @param styles - Theme styles object
|
|
229
|
+
* @param getLabel - Function to get display label
|
|
230
|
+
* @param getDescription - Function to get description
|
|
231
|
+
* @param labelWidth - Fixed width for label column (for alignment)
|
|
232
|
+
* @returns Renderer function
|
|
233
|
+
*/
|
|
234
|
+
export function createLabelDescriptionRenderer(styles, getLabel, getDescription, labelWidth = 20) {
|
|
235
|
+
return ({ item, isSelected }) => {
|
|
236
|
+
const prefix = isSelected ? ' > ' : ' ';
|
|
237
|
+
const label = getLabel(item).padEnd(labelWidth);
|
|
238
|
+
const desc = getDescription(item);
|
|
239
|
+
if (isSelected) {
|
|
240
|
+
return styles.primary(`${prefix}${label}`) + styles.muted(desc);
|
|
241
|
+
}
|
|
242
|
+
return styles.muted(`${prefix}${label}${desc}`);
|
|
243
|
+
};
|
|
244
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pagination Feature
|
|
3
|
+
*
|
|
4
|
+
* Composable feature for paginated list navigation.
|
|
5
|
+
* Handles page up/down, scroll offset tracking, and visibility.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* interface MyState extends OverlayState, PaginationState {
|
|
10
|
+
* items: string[];
|
|
11
|
+
* }
|
|
12
|
+
*
|
|
13
|
+
* class MyScreen extends BaseScreen {
|
|
14
|
+
* private pagination = new PaginationFeature({ pageSize: 12 });
|
|
15
|
+
*
|
|
16
|
+
* handleKey(data: Buffer): ScreenResult {
|
|
17
|
+
* const result = this.pagination.handleKey(data, this.state, this.state.items.length);
|
|
18
|
+
* if (result?.handled) {
|
|
19
|
+
* return result.action === 'render' ? stay() : stay(false);
|
|
20
|
+
* }
|
|
21
|
+
* // ... other key handling
|
|
22
|
+
* }
|
|
23
|
+
*
|
|
24
|
+
* render(): string[] {
|
|
25
|
+
* const visible = this.pagination.getVisibleItems(this.state, this.state.items);
|
|
26
|
+
* // render visible items...
|
|
27
|
+
* return [
|
|
28
|
+
* ...itemLines,
|
|
29
|
+
* this.pagination.renderIndicator(this.state, this.state.items.length, styles)
|
|
30
|
+
* ];
|
|
31
|
+
* }
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* State interface for pagination.
|
|
37
|
+
* Overlay state should extend this.
|
|
38
|
+
*/
|
|
39
|
+
export interface PaginationState {
|
|
40
|
+
/** Currently selected index (0-based) */
|
|
41
|
+
selectedIndex: number;
|
|
42
|
+
/** First visible item index */
|
|
43
|
+
scrollOffset: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Configuration for PaginationFeature.
|
|
47
|
+
*/
|
|
48
|
+
export interface PaginationConfig {
|
|
49
|
+
/** Number of items visible per page */
|
|
50
|
+
pageSize: number;
|
|
51
|
+
/**
|
|
52
|
+
* Whether left/right arrows trigger page navigation.
|
|
53
|
+
* Default: true
|
|
54
|
+
*/
|
|
55
|
+
useArrowsForPaging?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Result from handling a key.
|
|
59
|
+
*/
|
|
60
|
+
export interface PaginationKeyResult {
|
|
61
|
+
/** Whether the key was handled */
|
|
62
|
+
handled: boolean;
|
|
63
|
+
/** Action to take */
|
|
64
|
+
action?: 'render' | 'none';
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Feature for paginated list navigation.
|
|
68
|
+
*
|
|
69
|
+
* Handles:
|
|
70
|
+
* - Up/Down arrows and j/k for item navigation
|
|
71
|
+
* - Left/Right arrows and h/l for page navigation
|
|
72
|
+
* - Page Up/Page Down for page navigation
|
|
73
|
+
* - Scroll offset tracking
|
|
74
|
+
* - Visibility management (ensure selected item is visible)
|
|
75
|
+
*/
|
|
76
|
+
export declare class PaginationFeature {
|
|
77
|
+
private readonly pageSize;
|
|
78
|
+
private readonly useArrowsForPaging;
|
|
79
|
+
constructor(config: PaginationConfig);
|
|
80
|
+
/**
|
|
81
|
+
* Handle a key press.
|
|
82
|
+
*
|
|
83
|
+
* @param data - Raw key buffer
|
|
84
|
+
* @param state - State containing selectedIndex and scrollOffset
|
|
85
|
+
* @param totalItems - Total number of items in the list
|
|
86
|
+
* @returns Result if handled, null otherwise
|
|
87
|
+
*/
|
|
88
|
+
handleKey(data: Buffer, state: PaginationState, totalItems: number): PaginationKeyResult | null;
|
|
89
|
+
/**
|
|
90
|
+
* Ensure the selected item is visible by adjusting scrollOffset.
|
|
91
|
+
*
|
|
92
|
+
* @param state - State to adjust
|
|
93
|
+
* @param totalItems - Total number of items
|
|
94
|
+
*/
|
|
95
|
+
ensureVisible(state: PaginationState, totalItems: number): void;
|
|
96
|
+
/**
|
|
97
|
+
* Get the visible slice of items.
|
|
98
|
+
*
|
|
99
|
+
* @param state - State containing scrollOffset
|
|
100
|
+
* @param items - All items
|
|
101
|
+
* @returns Visible items
|
|
102
|
+
*/
|
|
103
|
+
getVisibleItems<T>(state: PaginationState, items: T[]): T[];
|
|
104
|
+
/**
|
|
105
|
+
* Get the visible range info.
|
|
106
|
+
*
|
|
107
|
+
* @param state - State containing scrollOffset
|
|
108
|
+
* @param totalItems - Total number of items
|
|
109
|
+
* @returns Object with start, end, total, canScrollUp, canScrollDown
|
|
110
|
+
*/
|
|
111
|
+
getVisibleRange(state: PaginationState, totalItems: number): {
|
|
112
|
+
start: number;
|
|
113
|
+
end: number;
|
|
114
|
+
total: number;
|
|
115
|
+
canScrollUp: boolean;
|
|
116
|
+
canScrollDown: boolean;
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Render a scroll indicator line.
|
|
120
|
+
*
|
|
121
|
+
* @param state - State containing scrollOffset
|
|
122
|
+
* @param totalItems - Total number of items
|
|
123
|
+
* @param styles - Theme styles with muted() function
|
|
124
|
+
* @returns Formatted indicator string (empty if no pagination needed)
|
|
125
|
+
*/
|
|
126
|
+
renderIndicator(state: PaginationState, totalItems: number, styles: {
|
|
127
|
+
muted: (s: string) => string;
|
|
128
|
+
}): string;
|
|
129
|
+
/**
|
|
130
|
+
* Render navigation hints for the footer.
|
|
131
|
+
*
|
|
132
|
+
* @param includeArrows - Whether to include ←→/hl hints
|
|
133
|
+
* @returns Hint string
|
|
134
|
+
*/
|
|
135
|
+
renderHints(includeArrows?: boolean): string;
|
|
136
|
+
/**
|
|
137
|
+
* Get the page size.
|
|
138
|
+
*/
|
|
139
|
+
getPageSize(): number;
|
|
140
|
+
/**
|
|
141
|
+
* Reset pagination state to beginning.
|
|
142
|
+
*
|
|
143
|
+
* @param state - State to reset
|
|
144
|
+
*/
|
|
145
|
+
reset(state: PaginationState): void;
|
|
146
|
+
/**
|
|
147
|
+
* Jump to a specific index and ensure it's visible.
|
|
148
|
+
*
|
|
149
|
+
* @param state - State to update
|
|
150
|
+
* @param index - Target index
|
|
151
|
+
* @param totalItems - Total number of items
|
|
152
|
+
*/
|
|
153
|
+
jumpTo(state: PaginationState, index: number, totalItems: number): void;
|
|
154
|
+
}
|