@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,728 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Onboarding Wizard Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* First-run wizard that guides new users through initial CLI setup.
|
|
5
|
+
* Shown automatically on first launch, or manually via /init command.
|
|
6
|
+
*
|
|
7
|
+
* Steps (when running in VS Code):
|
|
8
|
+
* 1. Welcome - Introduction to the CLI
|
|
9
|
+
* 2. Telemetry - Opt-in/opt-out for anonymous usage data
|
|
10
|
+
* 3. VS Code Diff - Enable side-by-side diff view (VS Code only)
|
|
11
|
+
* 4. API Key Check - Configure LLM API keys (opens /keys overlay)
|
|
12
|
+
* 5. Git Config - Configure git user.name and user.email
|
|
13
|
+
* 6. Projects Path - Set default projects folder location
|
|
14
|
+
* 7. COMPILR.md Intro - Explain project memory files
|
|
15
|
+
* 8. Quick Tour - Overview of key commands
|
|
16
|
+
* 9. Complete - Finish setup
|
|
17
|
+
*
|
|
18
|
+
* When NOT in VS Code, step 3 is skipped (8 steps total).
|
|
19
|
+
*
|
|
20
|
+
* This is an interactive wizard where users can actually configure settings,
|
|
21
|
+
* not just view status screens.
|
|
22
|
+
*/
|
|
23
|
+
import { BaseOverlayV2, renderBorder } from '../../base/index.js';
|
|
24
|
+
import { hasApiKey } from '../../../utils/credentials.js';
|
|
25
|
+
import { checkGitConfig, setGitConfigValue } from '../../../utils/git-config.js';
|
|
26
|
+
import { completeFirstRun, setSetting } from '../../../settings/index.js';
|
|
27
|
+
import { getProjectsPath, setProjectsPath } from '../../../settings/paths.js';
|
|
28
|
+
import { isInVSCode, ensureExtensionInstalled } from '../../../utils/vscode-detect.js';
|
|
29
|
+
import { InputFeature } from '../../features/index.js';
|
|
30
|
+
import * as terminal from '../../terminal.js';
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// Constants
|
|
33
|
+
// =============================================================================
|
|
34
|
+
/** Total steps depends on whether VS Code step is shown */
|
|
35
|
+
function getTotalSteps(showVSCodeStep) {
|
|
36
|
+
return showVSCodeStep ? 9 : 8;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Map numeric step to logical step name based on whether VS Code step is present.
|
|
40
|
+
*/
|
|
41
|
+
function getLogicalStep(step, showVSCodeStep) {
|
|
42
|
+
if (showVSCodeStep) {
|
|
43
|
+
// 9-step flow: 1=welcome, 2=telemetry, 3=vscode-diff, 4=api-keys, ...
|
|
44
|
+
switch (step) {
|
|
45
|
+
case 1: return 'welcome';
|
|
46
|
+
case 2: return 'telemetry';
|
|
47
|
+
case 3: return 'vscode-diff';
|
|
48
|
+
case 4: return 'api-keys';
|
|
49
|
+
case 5: return 'git-config';
|
|
50
|
+
case 6: return 'paths';
|
|
51
|
+
case 7: return 'compilr-md';
|
|
52
|
+
case 8: return 'quick-tour';
|
|
53
|
+
case 9: return 'complete';
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// 8-step flow (no VS Code): 1=welcome, 2=telemetry, 3=api-keys, ...
|
|
57
|
+
switch (step) {
|
|
58
|
+
case 1: return 'welcome';
|
|
59
|
+
case 2: return 'telemetry';
|
|
60
|
+
case 3: return 'api-keys';
|
|
61
|
+
case 4: return 'git-config';
|
|
62
|
+
case 5: return 'paths';
|
|
63
|
+
case 6: return 'compilr-md';
|
|
64
|
+
case 7: return 'quick-tour';
|
|
65
|
+
case 8: return 'complete';
|
|
66
|
+
default: return 'complete';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const PROVIDER_NAMES = {
|
|
70
|
+
anthropic: 'Anthropic (Claude)',
|
|
71
|
+
openai: 'OpenAI',
|
|
72
|
+
google: 'Google AI (Gemini)',
|
|
73
|
+
ollama: 'Ollama (Local)',
|
|
74
|
+
together: 'Together AI',
|
|
75
|
+
groq: 'Groq',
|
|
76
|
+
fireworks: 'Fireworks AI',
|
|
77
|
+
perplexity: 'Perplexity',
|
|
78
|
+
openrouter: 'OpenRouter',
|
|
79
|
+
};
|
|
80
|
+
// =============================================================================
|
|
81
|
+
// Onboarding Wizard Overlay V2
|
|
82
|
+
// =============================================================================
|
|
83
|
+
export class OnboardingWizardOverlayV2 extends BaseOverlayV2 {
|
|
84
|
+
type = 'inline';
|
|
85
|
+
id = 'onboarding-wizard-overlay-v2';
|
|
86
|
+
// Input features for different input modes
|
|
87
|
+
gitNameInput;
|
|
88
|
+
gitEmailInput;
|
|
89
|
+
pathInput;
|
|
90
|
+
constructor() {
|
|
91
|
+
// Check API key status
|
|
92
|
+
const providers = ['anthropic', 'openai', 'google', 'ollama'];
|
|
93
|
+
const configuredProviders = [];
|
|
94
|
+
for (const provider of providers) {
|
|
95
|
+
if (hasApiKey(provider)) {
|
|
96
|
+
configuredProviders.push(PROVIDER_NAMES[provider]);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Check git config
|
|
100
|
+
const gitConfig = checkGitConfig();
|
|
101
|
+
// Get paths
|
|
102
|
+
const projectsPath = getProjectsPath();
|
|
103
|
+
const showVSCodeStep = isInVSCode();
|
|
104
|
+
super({
|
|
105
|
+
step: 1,
|
|
106
|
+
selectedIndex: 0,
|
|
107
|
+
hasAnyKey: configuredProviders.length > 0,
|
|
108
|
+
configuredProviders,
|
|
109
|
+
gitConfig,
|
|
110
|
+
projectsPath,
|
|
111
|
+
inputMode: 'none',
|
|
112
|
+
pendingGitName: gitConfig.userName ?? '',
|
|
113
|
+
pendingGitEmail: gitConfig.userEmail ?? '',
|
|
114
|
+
showVSCodeStep,
|
|
115
|
+
});
|
|
116
|
+
// Initialize input features
|
|
117
|
+
this.gitNameInput = new InputFeature({
|
|
118
|
+
placeholder: 'Your Name',
|
|
119
|
+
initialValue: gitConfig.userName ?? '',
|
|
120
|
+
});
|
|
121
|
+
this.gitEmailInput = new InputFeature({
|
|
122
|
+
placeholder: 'you@example.com',
|
|
123
|
+
initialValue: gitConfig.userEmail ?? '',
|
|
124
|
+
});
|
|
125
|
+
this.pathInput = new InputFeature({
|
|
126
|
+
placeholder: projectsPath,
|
|
127
|
+
initialValue: projectsPath,
|
|
128
|
+
});
|
|
129
|
+
this.minHeight = 22;
|
|
130
|
+
}
|
|
131
|
+
// ===========================================================================
|
|
132
|
+
// Rendering
|
|
133
|
+
// ===========================================================================
|
|
134
|
+
renderContent(context) {
|
|
135
|
+
const s = context.styles;
|
|
136
|
+
const cols = terminal.getTerminalWidth();
|
|
137
|
+
const border = renderBorder(cols, s);
|
|
138
|
+
const lines = [];
|
|
139
|
+
const totalSteps = getTotalSteps(this.state.showVSCodeStep);
|
|
140
|
+
const logicalStep = getLogicalStep(this.state.step, this.state.showVSCodeStep);
|
|
141
|
+
// Header
|
|
142
|
+
lines.push(border);
|
|
143
|
+
lines.push(` ${s.primaryBold('Welcome to compilr-dev')} ${s.muted(`[${String(this.state.step)}/${String(totalSteps)}]`)}`);
|
|
144
|
+
lines.push(border);
|
|
145
|
+
lines.push('');
|
|
146
|
+
// Step content based on logical step
|
|
147
|
+
switch (logicalStep) {
|
|
148
|
+
case 'welcome':
|
|
149
|
+
lines.push(...this.renderStepWelcome(s));
|
|
150
|
+
break;
|
|
151
|
+
case 'telemetry':
|
|
152
|
+
lines.push(...this.renderStepTelemetry(s));
|
|
153
|
+
break;
|
|
154
|
+
case 'vscode-diff':
|
|
155
|
+
lines.push(...this.renderStepVSCodeDiff(s));
|
|
156
|
+
break;
|
|
157
|
+
case 'api-keys':
|
|
158
|
+
lines.push(...this.renderStepApiKeys(s));
|
|
159
|
+
break;
|
|
160
|
+
case 'git-config':
|
|
161
|
+
lines.push(...this.renderStepGitConfig(s));
|
|
162
|
+
break;
|
|
163
|
+
case 'paths':
|
|
164
|
+
lines.push(...this.renderStepPaths(s));
|
|
165
|
+
break;
|
|
166
|
+
case 'compilr-md':
|
|
167
|
+
lines.push(...this.renderStepCompilrMd(s));
|
|
168
|
+
break;
|
|
169
|
+
case 'quick-tour':
|
|
170
|
+
lines.push(...this.renderStepQuickTour(s));
|
|
171
|
+
break;
|
|
172
|
+
case 'complete':
|
|
173
|
+
lines.push(...this.renderStepComplete(s));
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
// Footer
|
|
177
|
+
lines.push('');
|
|
178
|
+
lines.push(border);
|
|
179
|
+
lines.push(this.getStepFooter(s));
|
|
180
|
+
lines.push(border);
|
|
181
|
+
return lines;
|
|
182
|
+
}
|
|
183
|
+
getStepFooter(s) {
|
|
184
|
+
// Input mode footers
|
|
185
|
+
if (this.state.inputMode !== 'none') {
|
|
186
|
+
return s.muted(' Enter Confirm | Esc Cancel');
|
|
187
|
+
}
|
|
188
|
+
const logicalStep = getLogicalStep(this.state.step, this.state.showVSCodeStep);
|
|
189
|
+
const totalSteps = getTotalSteps(this.state.showVSCodeStep);
|
|
190
|
+
if (this.state.step === totalSteps) {
|
|
191
|
+
return s.muted(' Enter Finish | Esc Back');
|
|
192
|
+
}
|
|
193
|
+
switch (logicalStep) {
|
|
194
|
+
case 'welcome':
|
|
195
|
+
return s.muted(' Press Enter to continue');
|
|
196
|
+
case 'telemetry':
|
|
197
|
+
case 'vscode-diff':
|
|
198
|
+
return s.muted(' Up/Down Navigate | Enter Continue | Esc Back');
|
|
199
|
+
case 'api-keys':
|
|
200
|
+
if (this.state.hasAnyKey) {
|
|
201
|
+
return s.muted(' Enter Continue | Esc Back');
|
|
202
|
+
}
|
|
203
|
+
return s.muted(' Up/Down Navigate | Enter Select | Esc Back');
|
|
204
|
+
case 'git-config':
|
|
205
|
+
if (this.state.gitConfig.isConfigured) {
|
|
206
|
+
return s.muted(' Enter Continue | Esc Back');
|
|
207
|
+
}
|
|
208
|
+
return s.muted(' Up/Down Navigate | Enter Select | Esc Back');
|
|
209
|
+
case 'paths':
|
|
210
|
+
return s.muted(' Up/Down Navigate | Enter Select | Esc Back');
|
|
211
|
+
case 'compilr-md':
|
|
212
|
+
case 'quick-tour':
|
|
213
|
+
return s.muted(' Enter Continue | Esc Back');
|
|
214
|
+
default:
|
|
215
|
+
return '';
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// ===========================================================================
|
|
219
|
+
// Step Renderers
|
|
220
|
+
// ===========================================================================
|
|
221
|
+
renderStepWelcome(s) {
|
|
222
|
+
const lines = [];
|
|
223
|
+
lines.push(` ${s.primary('AI-powered coding assistant for the terminal')}`);
|
|
224
|
+
lines.push('');
|
|
225
|
+
lines.push(' This quick setup will help you configure:');
|
|
226
|
+
lines.push('');
|
|
227
|
+
let stepNum = 1;
|
|
228
|
+
lines.push(` ${s.secondary(`${String(stepNum++)}.`)} Telemetry preferences`);
|
|
229
|
+
if (this.state.showVSCodeStep) {
|
|
230
|
+
lines.push(` ${s.secondary(`${String(stepNum++)}.`)} VS Code diff integration`);
|
|
231
|
+
}
|
|
232
|
+
lines.push(` ${s.secondary(`${String(stepNum++)}.`)} LLM API keys (Claude, GPT-4, Gemini, Ollama)`);
|
|
233
|
+
lines.push(` ${s.secondary(`${String(stepNum++)}.`)} Git user configuration`);
|
|
234
|
+
lines.push(` ${s.secondary(`${String(stepNum++)}.`)} Default projects folder`);
|
|
235
|
+
lines.push(` ${s.secondary(`${String(stepNum)}.`)} Project memory files (COMPILR.md)`);
|
|
236
|
+
lines.push('');
|
|
237
|
+
lines.push(s.muted(' You can skip any step and configure later with /config.'));
|
|
238
|
+
return lines;
|
|
239
|
+
}
|
|
240
|
+
renderStepTelemetry(s) {
|
|
241
|
+
const lines = [];
|
|
242
|
+
lines.push(` ${s.secondary('Telemetry Preferences')}`);
|
|
243
|
+
lines.push('');
|
|
244
|
+
lines.push(' Help improve compilr by sharing anonymous usage data:');
|
|
245
|
+
lines.push('');
|
|
246
|
+
lines.push(` ${s.muted('•')} Commands used (not their arguments)`);
|
|
247
|
+
lines.push(` ${s.muted('•')} Session duration`);
|
|
248
|
+
lines.push(` ${s.muted('•')} Error counts`);
|
|
249
|
+
lines.push('');
|
|
250
|
+
lines.push(` We ${s.primaryBold('never')} collect: code, file contents, prompts, or personal data.`);
|
|
251
|
+
lines.push('');
|
|
252
|
+
lines.push(this.renderOption(s, 0, 'Enable anonymous telemetry (recommended)'));
|
|
253
|
+
lines.push(this.renderOption(s, 1, 'Disable telemetry'));
|
|
254
|
+
return lines;
|
|
255
|
+
}
|
|
256
|
+
renderStepVSCodeDiff(s) {
|
|
257
|
+
const lines = [];
|
|
258
|
+
lines.push(` ${s.secondary('VS Code Diff Integration')}`);
|
|
259
|
+
lines.push('');
|
|
260
|
+
lines.push(' When the AI proposes file edits, open a side-by-side diff');
|
|
261
|
+
lines.push(' view in VS Code alongside the terminal prompt.');
|
|
262
|
+
lines.push('');
|
|
263
|
+
lines.push(` ${s.muted('•')} See exactly what will change before accepting`);
|
|
264
|
+
lines.push(` ${s.muted('•')} Accept or reject from VS Code or terminal`);
|
|
265
|
+
lines.push(` ${s.muted('•')} Installs a companion VS Code extension`);
|
|
266
|
+
lines.push('');
|
|
267
|
+
lines.push(this.renderOption(s, 0, 'Enable VS Code diff view (recommended)'));
|
|
268
|
+
lines.push(this.renderOption(s, 1, 'Skip for now'));
|
|
269
|
+
lines.push('');
|
|
270
|
+
lines.push(s.muted(' You can change this later with /config.'));
|
|
271
|
+
return lines;
|
|
272
|
+
}
|
|
273
|
+
renderStepApiKeys(s) {
|
|
274
|
+
const lines = [];
|
|
275
|
+
lines.push(` ${s.secondary('Step 2: LLM API Keys')}`);
|
|
276
|
+
lines.push('');
|
|
277
|
+
if (this.state.hasAnyKey) {
|
|
278
|
+
lines.push(` ${s.success('✓')} You have API keys configured:`);
|
|
279
|
+
lines.push('');
|
|
280
|
+
for (const provider of this.state.configuredProviders) {
|
|
281
|
+
lines.push(` ${s.success('●')} ${provider}`);
|
|
282
|
+
}
|
|
283
|
+
lines.push('');
|
|
284
|
+
lines.push(s.muted(' You can manage keys anytime with /keys'));
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
lines.push(` ${s.warning('⚠')} No API keys found.`);
|
|
288
|
+
lines.push('');
|
|
289
|
+
lines.push(' You need at least one API key to use the AI assistant.');
|
|
290
|
+
lines.push('');
|
|
291
|
+
lines.push(this.renderOption(s, 0, 'Configure API keys now'));
|
|
292
|
+
lines.push(this.renderOption(s, 1, 'Skip for now'));
|
|
293
|
+
lines.push('');
|
|
294
|
+
lines.push(s.muted(' Tip: Set ANTHROPIC_API_KEY in your environment'));
|
|
295
|
+
}
|
|
296
|
+
return lines;
|
|
297
|
+
}
|
|
298
|
+
renderStepGitConfig(s) {
|
|
299
|
+
const lines = [];
|
|
300
|
+
const { gitConfig, inputMode } = this.state;
|
|
301
|
+
lines.push(` ${s.secondary('Step 3: Git Configuration')}`);
|
|
302
|
+
lines.push('');
|
|
303
|
+
// Input mode: entering git name
|
|
304
|
+
if (inputMode === 'git-name') {
|
|
305
|
+
lines.push(' Enter your name for git commits:');
|
|
306
|
+
lines.push('');
|
|
307
|
+
lines.push(' ' + this.gitNameInput.render(s));
|
|
308
|
+
return lines;
|
|
309
|
+
}
|
|
310
|
+
// Input mode: entering git email
|
|
311
|
+
if (inputMode === 'git-email') {
|
|
312
|
+
lines.push(` ${s.success('✓')} Name: ${this.state.pendingGitName}`);
|
|
313
|
+
lines.push('');
|
|
314
|
+
lines.push(' Enter your email for git commits:');
|
|
315
|
+
lines.push('');
|
|
316
|
+
lines.push(' ' + this.gitEmailInput.render(s));
|
|
317
|
+
return lines;
|
|
318
|
+
}
|
|
319
|
+
// Normal mode: show status
|
|
320
|
+
if (gitConfig.isConfigured) {
|
|
321
|
+
lines.push(` ${s.success('✓')} Git is configured:`);
|
|
322
|
+
lines.push('');
|
|
323
|
+
lines.push(` ${s.muted('Name:')} ${gitConfig.userName ?? ''}`);
|
|
324
|
+
lines.push(` ${s.muted('Email:')} ${gitConfig.userEmail ?? ''}`);
|
|
325
|
+
lines.push('');
|
|
326
|
+
lines.push(s.muted(' Press Enter to continue'));
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
lines.push(` ${s.warning('⚠')} Git user config is incomplete.`);
|
|
330
|
+
lines.push('');
|
|
331
|
+
if (gitConfig.userName) {
|
|
332
|
+
lines.push(` ${s.success('✓')} Name: ${gitConfig.userName}`);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
lines.push(` ${s.warning('○')} Name: ${s.muted('not set')}`);
|
|
336
|
+
}
|
|
337
|
+
if (gitConfig.userEmail) {
|
|
338
|
+
lines.push(` ${s.success('✓')} Email: ${gitConfig.userEmail}`);
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
lines.push(` ${s.warning('○')} Email: ${s.muted('not set')}`);
|
|
342
|
+
}
|
|
343
|
+
lines.push('');
|
|
344
|
+
lines.push(this.renderOption(s, 0, 'Configure git now'));
|
|
345
|
+
lines.push(this.renderOption(s, 1, 'Skip for now'));
|
|
346
|
+
}
|
|
347
|
+
return lines;
|
|
348
|
+
}
|
|
349
|
+
renderStepPaths(s) {
|
|
350
|
+
const lines = [];
|
|
351
|
+
const { inputMode, projectsPath } = this.state;
|
|
352
|
+
lines.push(` ${s.secondary('Step 4: Projects Folder')}`);
|
|
353
|
+
lines.push('');
|
|
354
|
+
// Input mode: editing path
|
|
355
|
+
if (inputMode === 'projects-path') {
|
|
356
|
+
lines.push(' Enter projects folder path:');
|
|
357
|
+
lines.push('');
|
|
358
|
+
lines.push(' ' + this.pathInput.render(s));
|
|
359
|
+
lines.push('');
|
|
360
|
+
lines.push(s.muted(' New projects will be created in this folder.'));
|
|
361
|
+
return lines;
|
|
362
|
+
}
|
|
363
|
+
// Normal mode: show current path with options
|
|
364
|
+
lines.push(' New projects will be created in:');
|
|
365
|
+
lines.push('');
|
|
366
|
+
lines.push(` ${s.primary(projectsPath)}`);
|
|
367
|
+
lines.push('');
|
|
368
|
+
lines.push(this.renderOption(s, 0, 'Keep this path'));
|
|
369
|
+
lines.push(this.renderOption(s, 1, 'Change path'));
|
|
370
|
+
return lines;
|
|
371
|
+
}
|
|
372
|
+
renderStepCompilrMd(s) {
|
|
373
|
+
const lines = [];
|
|
374
|
+
lines.push(` ${s.secondary('Step 5: Project Memory (COMPILR.md)')}`);
|
|
375
|
+
lines.push('');
|
|
376
|
+
lines.push(' Create a COMPILR.md file in your project root to give the');
|
|
377
|
+
lines.push(' AI assistant context about your codebase.');
|
|
378
|
+
lines.push('');
|
|
379
|
+
lines.push(` ${s.primary('What to include:')}`);
|
|
380
|
+
lines.push('');
|
|
381
|
+
lines.push(` ${s.muted('•')} Project overview and architecture`);
|
|
382
|
+
lines.push(` ${s.muted('•')} Key files and directories`);
|
|
383
|
+
lines.push(` ${s.muted('•')} Coding conventions and patterns`);
|
|
384
|
+
lines.push(` ${s.muted('•')} Build and test commands`);
|
|
385
|
+
lines.push(` ${s.muted('•')} Important context the AI should know`);
|
|
386
|
+
lines.push('');
|
|
387
|
+
lines.push(s.muted(' The AI reads this file automatically when you work in the'));
|
|
388
|
+
lines.push(s.muted(' project. It also supports CLAUDE.md and AGENTS.md.'));
|
|
389
|
+
return lines;
|
|
390
|
+
}
|
|
391
|
+
renderStepQuickTour(s) {
|
|
392
|
+
const lines = [];
|
|
393
|
+
lines.push(` ${s.secondary('Quick Tour')}`);
|
|
394
|
+
lines.push('');
|
|
395
|
+
lines.push(' Here are the key commands to get started:');
|
|
396
|
+
lines.push('');
|
|
397
|
+
lines.push(` ${s.primary('/menu')} Dashboard - select projects, settings`);
|
|
398
|
+
lines.push(` ${s.primary('/new')} Create a new project with scaffolding`);
|
|
399
|
+
lines.push(` ${s.primary('/help')} Show all available commands`);
|
|
400
|
+
lines.push(` ${s.primary('/config')} Customize settings and preferences`);
|
|
401
|
+
lines.push(` ${s.primary('/keys')} Manage LLM API keys`);
|
|
402
|
+
lines.push('');
|
|
403
|
+
lines.push(s.muted(' Just type naturally to chat with the AI assistant.'));
|
|
404
|
+
return lines;
|
|
405
|
+
}
|
|
406
|
+
renderStepComplete(s) {
|
|
407
|
+
const lines = [];
|
|
408
|
+
lines.push(` ${s.success('✓')} Setup complete!`);
|
|
409
|
+
lines.push('');
|
|
410
|
+
// Summary of what was configured
|
|
411
|
+
const configured = [];
|
|
412
|
+
if (this.state.hasAnyKey) {
|
|
413
|
+
configured.push('API keys');
|
|
414
|
+
}
|
|
415
|
+
if (this.state.gitConfig.isConfigured) {
|
|
416
|
+
configured.push('Git config');
|
|
417
|
+
}
|
|
418
|
+
configured.push('Projects path');
|
|
419
|
+
if (configured.length > 0) {
|
|
420
|
+
lines.push(` Configured: ${configured.join(', ')}`);
|
|
421
|
+
lines.push('');
|
|
422
|
+
}
|
|
423
|
+
if (this.state.hasAnyKey) {
|
|
424
|
+
lines.push(" You're ready to start coding! Try:");
|
|
425
|
+
lines.push('');
|
|
426
|
+
lines.push(` • Type a question to chat with the AI`);
|
|
427
|
+
lines.push(` • Run ${s.primary('/new')} to create a project`);
|
|
428
|
+
lines.push(` • Run ${s.primary('/help')} to see all commands`);
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
lines.push(" Almost there! You'll need an API key to use the AI.");
|
|
432
|
+
lines.push('');
|
|
433
|
+
lines.push(` • Run ${s.primary('/keys')} to add your API key`);
|
|
434
|
+
lines.push(` • Or set ANTHROPIC_API_KEY in your environment`);
|
|
435
|
+
}
|
|
436
|
+
lines.push('');
|
|
437
|
+
lines.push(s.muted(' Run /init anytime to see this wizard again.'));
|
|
438
|
+
return lines;
|
|
439
|
+
}
|
|
440
|
+
renderOption(s, index, label) {
|
|
441
|
+
const isSelected = this.state.selectedIndex === index;
|
|
442
|
+
const prefix = isSelected ? ' > ' : ' ';
|
|
443
|
+
return isSelected ? s.primary(prefix + label) : s.muted(prefix + label);
|
|
444
|
+
}
|
|
445
|
+
// ===========================================================================
|
|
446
|
+
// Key Handling
|
|
447
|
+
// ===========================================================================
|
|
448
|
+
handleKey(key) {
|
|
449
|
+
// Ctrl+C always cancels
|
|
450
|
+
if (this.isInterruptKey(key)) {
|
|
451
|
+
return this.close({ completed: false });
|
|
452
|
+
}
|
|
453
|
+
// Handle input modes
|
|
454
|
+
if (this.state.inputMode !== 'none') {
|
|
455
|
+
return this.handleInputMode(key);
|
|
456
|
+
}
|
|
457
|
+
// Escape: first step cancels, otherwise goes back
|
|
458
|
+
if (key.name === 'escape') {
|
|
459
|
+
if (this.state.step === 1) {
|
|
460
|
+
return this.close({ completed: false });
|
|
461
|
+
}
|
|
462
|
+
this.prevStep();
|
|
463
|
+
return this.rerender();
|
|
464
|
+
}
|
|
465
|
+
// Step-specific handling
|
|
466
|
+
const logicalStep = getLogicalStep(this.state.step, this.state.showVSCodeStep);
|
|
467
|
+
switch (logicalStep) {
|
|
468
|
+
case 'telemetry':
|
|
469
|
+
return this.handleTelemetrySelection(key);
|
|
470
|
+
case 'vscode-diff':
|
|
471
|
+
return this.handleVSCodeDiffSelection(key);
|
|
472
|
+
case 'api-keys':
|
|
473
|
+
if (!this.state.hasAnyKey) {
|
|
474
|
+
return this.handleApiKeysSelection(key);
|
|
475
|
+
}
|
|
476
|
+
break;
|
|
477
|
+
case 'git-config':
|
|
478
|
+
if (!this.state.gitConfig.isConfigured) {
|
|
479
|
+
return this.handleGitConfigSelection(key);
|
|
480
|
+
}
|
|
481
|
+
break;
|
|
482
|
+
case 'paths':
|
|
483
|
+
return this.handlePathsSelection(key);
|
|
484
|
+
}
|
|
485
|
+
// Enter advances to next step
|
|
486
|
+
if (this.isEnterKey(key)) {
|
|
487
|
+
return this.handleEnter();
|
|
488
|
+
}
|
|
489
|
+
return this.noAction();
|
|
490
|
+
}
|
|
491
|
+
handleInputMode(key) {
|
|
492
|
+
const { inputMode } = this.state;
|
|
493
|
+
// Escape cancels input and goes back to selection
|
|
494
|
+
if (key.name === 'escape') {
|
|
495
|
+
terminal.hideCursor();
|
|
496
|
+
this.state.inputMode = 'none';
|
|
497
|
+
this.state.selectedIndex = 0;
|
|
498
|
+
return this.rerender();
|
|
499
|
+
}
|
|
500
|
+
// Enter confirms input
|
|
501
|
+
if (this.isEnterKey(key)) {
|
|
502
|
+
return this.confirmInput();
|
|
503
|
+
}
|
|
504
|
+
// Get the current input feature
|
|
505
|
+
let input;
|
|
506
|
+
switch (inputMode) {
|
|
507
|
+
case 'git-name':
|
|
508
|
+
input = this.gitNameInput;
|
|
509
|
+
break;
|
|
510
|
+
case 'git-email':
|
|
511
|
+
input = this.gitEmailInput;
|
|
512
|
+
break;
|
|
513
|
+
case 'projects-path':
|
|
514
|
+
input = this.pathInput;
|
|
515
|
+
break;
|
|
516
|
+
default:
|
|
517
|
+
return this.noAction();
|
|
518
|
+
}
|
|
519
|
+
// Let InputFeature handle the key
|
|
520
|
+
const result = input.handleKey(key.raw);
|
|
521
|
+
if (result.handled && result.render) {
|
|
522
|
+
return this.rerender();
|
|
523
|
+
}
|
|
524
|
+
return this.noAction();
|
|
525
|
+
}
|
|
526
|
+
confirmInput() {
|
|
527
|
+
const { inputMode } = this.state;
|
|
528
|
+
terminal.hideCursor();
|
|
529
|
+
switch (inputMode) {
|
|
530
|
+
case 'git-name': {
|
|
531
|
+
const name = this.gitNameInput.trimmedValue;
|
|
532
|
+
if (name) {
|
|
533
|
+
this.state.pendingGitName = name;
|
|
534
|
+
// Move to email input
|
|
535
|
+
this.state.inputMode = 'git-email';
|
|
536
|
+
terminal.showCursor();
|
|
537
|
+
return this.rerender();
|
|
538
|
+
}
|
|
539
|
+
// Empty name - stay in input mode
|
|
540
|
+
return this.noAction();
|
|
541
|
+
}
|
|
542
|
+
case 'git-email': {
|
|
543
|
+
const email = this.gitEmailInput.trimmedValue;
|
|
544
|
+
if (email) {
|
|
545
|
+
// Save both git config values
|
|
546
|
+
setGitConfigValue('user.name', this.state.pendingGitName);
|
|
547
|
+
setGitConfigValue('user.email', email);
|
|
548
|
+
// Refresh git config state
|
|
549
|
+
this.state.gitConfig = checkGitConfig();
|
|
550
|
+
this.state.inputMode = 'none';
|
|
551
|
+
// Move to next step
|
|
552
|
+
this.nextStep();
|
|
553
|
+
return this.rerender();
|
|
554
|
+
}
|
|
555
|
+
// Empty email - stay in input mode
|
|
556
|
+
return this.noAction();
|
|
557
|
+
}
|
|
558
|
+
case 'projects-path': {
|
|
559
|
+
const path = this.pathInput.trimmedValue;
|
|
560
|
+
if (path) {
|
|
561
|
+
setProjectsPath(path);
|
|
562
|
+
this.state.projectsPath = path;
|
|
563
|
+
}
|
|
564
|
+
this.state.inputMode = 'none';
|
|
565
|
+
// Move to next step
|
|
566
|
+
this.nextStep();
|
|
567
|
+
return this.rerender();
|
|
568
|
+
}
|
|
569
|
+
default:
|
|
570
|
+
this.state.inputMode = 'none';
|
|
571
|
+
return this.rerender();
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
handleTelemetrySelection(key) {
|
|
575
|
+
// Navigation
|
|
576
|
+
if ((this.isUpKey(key) || key.name === 'k') && this.state.selectedIndex > 0) {
|
|
577
|
+
this.state.selectedIndex--;
|
|
578
|
+
return this.rerender();
|
|
579
|
+
}
|
|
580
|
+
if ((this.isDownKey(key) || key.name === 'j') && this.state.selectedIndex < 1) {
|
|
581
|
+
this.state.selectedIndex++;
|
|
582
|
+
return this.rerender();
|
|
583
|
+
}
|
|
584
|
+
// Enter to confirm selection and continue
|
|
585
|
+
if (this.isEnterKey(key)) {
|
|
586
|
+
// 0 = enable (recommended), 1 = disable
|
|
587
|
+
setSetting('telemetryEnabled', this.state.selectedIndex === 0);
|
|
588
|
+
this.nextStep();
|
|
589
|
+
return this.rerender();
|
|
590
|
+
}
|
|
591
|
+
return this.noAction();
|
|
592
|
+
}
|
|
593
|
+
handleVSCodeDiffSelection(key) {
|
|
594
|
+
// Navigation
|
|
595
|
+
if ((this.isUpKey(key) || key.name === 'k') && this.state.selectedIndex > 0) {
|
|
596
|
+
this.state.selectedIndex--;
|
|
597
|
+
return this.rerender();
|
|
598
|
+
}
|
|
599
|
+
if ((this.isDownKey(key) || key.name === 'j') && this.state.selectedIndex < 1) {
|
|
600
|
+
this.state.selectedIndex++;
|
|
601
|
+
return this.rerender();
|
|
602
|
+
}
|
|
603
|
+
// Enter to confirm selection and continue
|
|
604
|
+
if (this.isEnterKey(key)) {
|
|
605
|
+
if (this.state.selectedIndex === 0) {
|
|
606
|
+
// Enable VS Code diff + install extension
|
|
607
|
+
setSetting('vsDiffExtension', true);
|
|
608
|
+
void ensureExtensionInstalled().then(result => {
|
|
609
|
+
if (result.needsReload) {
|
|
610
|
+
process.stderr.write('\n \x1b[33m⚠ VS Code diff extension installed.\x1b[0m\n' +
|
|
611
|
+
' \x1b[2mReload VS Code window (Ctrl+Shift+P → "Developer: Reload Window") to activate.\x1b[0m\n\n');
|
|
612
|
+
}
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
// Both options proceed to next step
|
|
616
|
+
this.nextStep();
|
|
617
|
+
return this.rerender();
|
|
618
|
+
}
|
|
619
|
+
return this.noAction();
|
|
620
|
+
}
|
|
621
|
+
handleApiKeysSelection(key) {
|
|
622
|
+
// Navigation
|
|
623
|
+
if ((this.isUpKey(key) || key.name === 'k') && this.state.selectedIndex > 0) {
|
|
624
|
+
this.state.selectedIndex--;
|
|
625
|
+
return this.rerender();
|
|
626
|
+
}
|
|
627
|
+
if ((this.isDownKey(key) || key.name === 'j') && this.state.selectedIndex < 1) {
|
|
628
|
+
this.state.selectedIndex++;
|
|
629
|
+
return this.rerender();
|
|
630
|
+
}
|
|
631
|
+
// Enter to select
|
|
632
|
+
if (this.isEnterKey(key)) {
|
|
633
|
+
if (this.state.selectedIndex === 0) {
|
|
634
|
+
// Open /keys overlay
|
|
635
|
+
return this.close({ completed: false, openKeys: true });
|
|
636
|
+
}
|
|
637
|
+
// Skip - continue to next step
|
|
638
|
+
this.nextStep();
|
|
639
|
+
return this.rerender();
|
|
640
|
+
}
|
|
641
|
+
return this.noAction();
|
|
642
|
+
}
|
|
643
|
+
handleGitConfigSelection(key) {
|
|
644
|
+
// Navigation
|
|
645
|
+
if ((this.isUpKey(key) || key.name === 'k') && this.state.selectedIndex > 0) {
|
|
646
|
+
this.state.selectedIndex--;
|
|
647
|
+
return this.rerender();
|
|
648
|
+
}
|
|
649
|
+
if ((this.isDownKey(key) || key.name === 'j') && this.state.selectedIndex < 1) {
|
|
650
|
+
this.state.selectedIndex++;
|
|
651
|
+
return this.rerender();
|
|
652
|
+
}
|
|
653
|
+
// Enter to select
|
|
654
|
+
if (this.isEnterKey(key)) {
|
|
655
|
+
if (this.state.selectedIndex === 0) {
|
|
656
|
+
// Start git config input
|
|
657
|
+
this.state.inputMode = 'git-name';
|
|
658
|
+
terminal.showCursor();
|
|
659
|
+
return this.rerender();
|
|
660
|
+
}
|
|
661
|
+
// Skip - continue to next step
|
|
662
|
+
this.nextStep();
|
|
663
|
+
return this.rerender();
|
|
664
|
+
}
|
|
665
|
+
return this.noAction();
|
|
666
|
+
}
|
|
667
|
+
handlePathsSelection(key) {
|
|
668
|
+
// Navigation
|
|
669
|
+
if ((this.isUpKey(key) || key.name === 'k') && this.state.selectedIndex > 0) {
|
|
670
|
+
this.state.selectedIndex--;
|
|
671
|
+
return this.rerender();
|
|
672
|
+
}
|
|
673
|
+
if ((this.isDownKey(key) || key.name === 'j') && this.state.selectedIndex < 1) {
|
|
674
|
+
this.state.selectedIndex++;
|
|
675
|
+
return this.rerender();
|
|
676
|
+
}
|
|
677
|
+
// Enter to select
|
|
678
|
+
if (this.isEnterKey(key)) {
|
|
679
|
+
if (this.state.selectedIndex === 0) {
|
|
680
|
+
// Keep path - continue to next step
|
|
681
|
+
this.nextStep();
|
|
682
|
+
return this.rerender();
|
|
683
|
+
}
|
|
684
|
+
// Change path - enter input mode
|
|
685
|
+
this.state.inputMode = 'projects-path';
|
|
686
|
+
terminal.showCursor();
|
|
687
|
+
return this.rerender();
|
|
688
|
+
}
|
|
689
|
+
return this.noAction();
|
|
690
|
+
}
|
|
691
|
+
handleEnter() {
|
|
692
|
+
const totalSteps = getTotalSteps(this.state.showVSCodeStep);
|
|
693
|
+
if (this.state.step === totalSteps) {
|
|
694
|
+
// Complete the wizard
|
|
695
|
+
completeFirstRun();
|
|
696
|
+
return this.close({ completed: true });
|
|
697
|
+
}
|
|
698
|
+
this.nextStep();
|
|
699
|
+
return this.rerender();
|
|
700
|
+
}
|
|
701
|
+
nextStep() {
|
|
702
|
+
const totalSteps = getTotalSteps(this.state.showVSCodeStep);
|
|
703
|
+
if (this.state.step < totalSteps) {
|
|
704
|
+
this.state.step = (this.state.step + 1);
|
|
705
|
+
this.state.selectedIndex = 0;
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
prevStep() {
|
|
709
|
+
if (this.state.step > 1) {
|
|
710
|
+
this.state.step = (this.state.step - 1);
|
|
711
|
+
this.state.selectedIndex = 0;
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
// ===========================================================================
|
|
715
|
+
// Close Summary
|
|
716
|
+
// ===========================================================================
|
|
717
|
+
getCloseSummary(result) {
|
|
718
|
+
const s = this.getStyles();
|
|
719
|
+
if (result.completed) {
|
|
720
|
+
// No summary — avoids a flash before /menu opens
|
|
721
|
+
return null;
|
|
722
|
+
}
|
|
723
|
+
if (result.openKeys) {
|
|
724
|
+
return null; // Will open /keys overlay next
|
|
725
|
+
}
|
|
726
|
+
return s.muted('Setup cancelled. Run /init to complete setup later.');
|
|
727
|
+
}
|
|
728
|
+
}
|