@compilr-dev/cli 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +108 -0
- package/README.md +237 -69
- package/dist/.tsbuildinfo.app +1 -0
- package/dist/.tsbuildinfo.data +1 -0
- package/dist/.tsbuildinfo.domain +1 -0
- package/dist/.tsbuildinfo.foundation +1 -0
- package/dist/agent.d.ts +61 -4
- package/dist/agent.js +241 -245
- package/dist/anchors/index.d.ts +1 -1
- package/dist/anchors/index.js +1 -1
- package/dist/anchors/project-anchors.d.ts +2 -2
- package/dist/anchors/project-anchors.js +1 -1
- package/dist/auth/api-client.d.ts +124 -0
- package/dist/auth/api-client.js +261 -0
- package/dist/auth/index.d.ts +172 -0
- package/dist/auth/index.js +545 -0
- package/dist/auth/storage.d.ts +52 -0
- package/dist/auth/storage.js +118 -0
- package/dist/changelog/index.d.ts +16 -0
- package/dist/changelog/index.js +24 -0
- package/dist/changelog/releases.d.ts +17 -0
- package/dist/changelog/releases.js +63 -0
- package/dist/commands-v2/handlers/auth.d.ts +10 -0
- package/dist/commands-v2/handlers/auth.js +118 -0
- package/dist/commands-v2/handlers/background.d.ts +14 -0
- package/dist/commands-v2/handlers/background.js +276 -0
- package/dist/commands-v2/handlers/context.js +286 -81
- package/dist/commands-v2/handlers/core.d.ts +1 -0
- package/dist/commands-v2/handlers/core.js +133 -8
- package/dist/commands-v2/handlers/debug.js +18 -0
- package/dist/commands-v2/handlers/delegations.d.ts +8 -0
- package/dist/commands-v2/handlers/delegations.js +29 -0
- package/dist/commands-v2/handlers/files.d.ts +8 -0
- package/dist/commands-v2/handlers/files.js +162 -0
- package/dist/commands-v2/handlers/filter.d.ts +9 -0
- package/dist/commands-v2/handlers/filter.js +130 -0
- package/dist/commands-v2/handlers/games.d.ts +7 -0
- package/dist/commands-v2/handlers/games.js +57 -0
- package/dist/commands-v2/handlers/index.d.ts +13 -0
- package/dist/commands-v2/handlers/index.js +39 -0
- package/dist/commands-v2/handlers/mcp.d.ts +8 -0
- package/dist/commands-v2/handlers/mcp.js +39 -0
- package/dist/commands-v2/handlers/notifications.d.ts +9 -0
- package/dist/commands-v2/handlers/notifications.js +34 -0
- package/dist/commands-v2/handlers/project.js +295 -31
- package/dist/commands-v2/handlers/reset.d.ts +11 -0
- package/dist/commands-v2/handlers/reset.js +118 -0
- package/dist/commands-v2/handlers/session.d.ts +161 -0
- package/dist/commands-v2/handlers/session.js +805 -0
- package/dist/commands-v2/handlers/settings.d.ts +2 -0
- package/dist/commands-v2/handlers/settings.js +217 -35
- package/dist/commands-v2/handlers/tasks.d.ts +5 -0
- package/dist/commands-v2/handlers/tasks.js +36 -0
- package/dist/commands-v2/handlers/team.d.ts +9 -0
- package/dist/commands-v2/handlers/team.js +549 -0
- package/dist/commands-v2/handlers/terminals.d.ts +9 -0
- package/dist/commands-v2/handlers/terminals.js +34 -0
- package/dist/commands-v2/index.d.ts +3 -2
- package/dist/commands-v2/index.js +4 -1
- package/dist/commands-v2/registry.d.ts +15 -0
- package/dist/commands-v2/registry.js +34 -0
- package/dist/commands-v2/types.d.ts +81 -3
- package/dist/commands.js +13 -0
- package/dist/compilr-diff-companion.vsix +0 -0
- package/dist/db/index.js +98 -4
- package/dist/db/repositories/document-repository.d.ts +2 -0
- package/dist/db/repositories/document-repository.js +6 -1
- package/dist/db/repositories/index.d.ts +2 -0
- package/dist/db/repositories/index.js +1 -0
- package/dist/db/repositories/plan-repository.d.ts +101 -0
- package/dist/db/repositories/plan-repository.js +275 -0
- package/dist/db/repositories/project-repository.d.ts +6 -0
- package/dist/db/repositories/project-repository.js +41 -0
- package/dist/db/repositories/work-item-repository.d.ts +15 -0
- package/dist/db/repositories/work-item-repository.js +69 -4
- package/dist/db/schema.d.ts +40 -3
- package/dist/db/schema.js +66 -3
- package/dist/episodes/index.d.ts +20 -0
- package/dist/episodes/index.js +27 -0
- package/dist/episodes/recorder.d.ts +51 -0
- package/dist/episodes/recorder.js +195 -0
- package/dist/episodes/significant-work.d.ts +21 -0
- package/dist/episodes/significant-work.js +56 -0
- package/dist/episodes/store.d.ts +38 -0
- package/dist/episodes/store.js +199 -0
- package/dist/episodes/types.d.ts +35 -0
- package/dist/episodes/types.js +6 -0
- package/dist/episodes/work-at-risk.d.ts +12 -0
- package/dist/episodes/work-at-risk.js +38 -0
- package/dist/episodes/work-summary-anchor.d.ts +23 -0
- package/dist/episodes/work-summary-anchor.js +73 -0
- package/dist/games/coins.d.ts +66 -0
- package/dist/games/coins.js +165 -0
- package/dist/games/game-base.d.ts +84 -0
- package/dist/games/game-base.js +204 -0
- package/dist/games/index.d.ts +16 -0
- package/dist/games/index.js +49 -0
- package/dist/games/scores.d.ts +69 -0
- package/dist/games/scores.js +191 -0
- package/dist/games/tetris/board.d.ts +59 -0
- package/dist/games/tetris/board.js +170 -0
- package/dist/games/tetris/index.d.ts +109 -0
- package/dist/games/tetris/index.js +610 -0
- package/dist/games/tetris/pieces.d.ts +44 -0
- package/dist/games/tetris/pieces.js +271 -0
- package/dist/games/tetris/renderer.d.ts +26 -0
- package/dist/games/tetris/renderer.js +77 -0
- package/dist/guide/guide-content.d.ts +23 -0
- package/dist/guide/guide-content.js +196 -0
- package/dist/guide/index.d.ts +8 -0
- package/dist/guide/index.js +7 -0
- package/dist/guide/shared-content.d.ts +37 -0
- package/dist/guide/shared-content.js +1272 -0
- package/dist/guide/tutorial-helpers.d.ts +57 -0
- package/dist/guide/tutorial-helpers.js +147 -0
- package/dist/handlers/ask-user-handlers.d.ts +32 -0
- package/dist/handlers/ask-user-handlers.js +104 -0
- package/dist/handlers/delegation-handlers.d.ts +34 -0
- package/dist/handlers/delegation-handlers.js +291 -0
- package/dist/handlers/permission-handler.d.ts +30 -0
- package/dist/handlers/permission-handler.js +205 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.js +448 -271
- package/dist/input-handlers/memory-handler.d.ts +1 -1
- package/dist/input-handlers/memory-handler.js +2 -1
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.js +12 -0
- package/dist/models/model-registry.d.ts +38 -0
- package/dist/models/model-registry.js +69 -0
- package/dist/models/model-tiers.d.ts +28 -0
- package/dist/models/model-tiers.js +71 -0
- package/dist/models/model-validation.d.ts +25 -0
- package/dist/models/model-validation.js +291 -0
- package/dist/models/ollama-models.d.ts +73 -0
- package/dist/models/ollama-models.js +178 -0
- package/dist/models/provider-types.d.ts +6 -0
- package/dist/models/provider-types.js +1 -0
- package/dist/models/providers.d.ts +35 -0
- package/dist/models/providers.js +58 -0
- package/dist/models/types.d.ts +4 -0
- package/dist/models/types.js +4 -0
- package/dist/multi-agent/activity.d.ts +21 -0
- package/dist/multi-agent/activity.js +34 -0
- package/dist/multi-agent/agent-selection.d.ts +55 -0
- package/dist/multi-agent/agent-selection.js +90 -0
- package/dist/multi-agent/artifacts.d.ts +197 -0
- package/dist/multi-agent/artifacts.js +379 -0
- package/dist/multi-agent/checkpointer.d.ts +138 -0
- package/dist/multi-agent/checkpointer.js +471 -0
- package/dist/multi-agent/collision-utils.d.ts +16 -0
- package/dist/multi-agent/collision-utils.js +28 -0
- package/dist/multi-agent/context-resolver.d.ts +97 -0
- package/dist/multi-agent/context-resolver.js +316 -0
- package/dist/multi-agent/custom-agents.d.ts +83 -0
- package/dist/multi-agent/custom-agents.js +227 -0
- package/dist/multi-agent/delegation-tracker.d.ts +157 -0
- package/dist/multi-agent/delegation-tracker.js +243 -0
- package/dist/multi-agent/file-lock-hook.d.ts +29 -0
- package/dist/multi-agent/file-lock-hook.js +97 -0
- package/dist/multi-agent/file-locks.d.ts +58 -0
- package/dist/multi-agent/file-locks.js +194 -0
- package/dist/multi-agent/index.d.ts +24 -0
- package/dist/multi-agent/index.js +30 -0
- package/dist/multi-agent/mention-parser.d.ts +64 -0
- package/dist/multi-agent/mention-parser.js +146 -0
- package/dist/multi-agent/notification-manager.d.ts +84 -0
- package/dist/multi-agent/notification-manager.js +224 -0
- package/dist/multi-agent/pending-requests.d.ts +122 -0
- package/dist/multi-agent/pending-requests.js +155 -0
- package/dist/multi-agent/session-registry.d.ts +139 -0
- package/dist/multi-agent/session-registry.js +514 -0
- package/dist/multi-agent/shared-context.d.ts +293 -0
- package/dist/multi-agent/shared-context.js +671 -0
- package/dist/multi-agent/skill-requirements.d.ts +66 -0
- package/dist/multi-agent/skill-requirements.js +178 -0
- package/dist/multi-agent/task-assignment.d.ts +69 -0
- package/dist/multi-agent/task-assignment.js +123 -0
- package/dist/multi-agent/task-suggestion.d.ts +31 -0
- package/dist/multi-agent/task-suggestion.js +72 -0
- package/dist/multi-agent/team-agent.d.ts +201 -0
- package/dist/multi-agent/team-agent.js +488 -0
- package/dist/multi-agent/team.d.ts +286 -0
- package/dist/multi-agent/team.js +610 -0
- package/dist/multi-agent/tool-config.d.ts +110 -0
- package/dist/multi-agent/tool-config.js +661 -0
- package/dist/multi-agent/types.d.ts +211 -0
- package/dist/multi-agent/types.js +617 -0
- package/dist/prompts/plan-mode-prompt.d.ts +11 -0
- package/dist/prompts/plan-mode-prompt.js +95 -0
- package/dist/repl-helpers.js +5 -2
- package/dist/repl-v2.d.ts +401 -2
- package/dist/repl-v2.js +2588 -65
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.js +6 -0
- package/dist/session/project-session-manager.d.ts +158 -0
- package/dist/session/project-session-manager.js +650 -0
- package/dist/settings/index.d.ts +133 -13
- package/dist/settings/index.js +329 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +4 -0
- package/dist/settings/paths.js +6 -0
- package/dist/shared-handlers.d.ts +62 -0
- package/dist/shared-handlers.js +48 -0
- package/dist/system-prompt/builder.d.ts +5 -0
- package/dist/system-prompt/builder.js +4 -0
- package/dist/system-prompt/index.d.ts +18 -0
- package/dist/system-prompt/index.js +18 -0
- package/dist/system-prompt/modules.d.ts +5 -0
- package/dist/system-prompt/modules.js +4 -0
- package/dist/tabbed-menu.js +2 -1
- package/dist/templates/compilr-md-import.d.ts +16 -0
- package/dist/templates/compilr-md-import.js +241 -0
- package/dist/templates/compilr-md.js +10 -61
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +34 -73
- package/dist/tool-names.d.ts +113 -0
- package/dist/tool-names.js +239 -0
- package/dist/tools/ask-user-simple.d.ts +1 -1
- package/dist/tools/ask-user-simple.js +2 -1
- package/dist/tools/ask-user.d.ts +1 -1
- package/dist/tools/ask-user.js +2 -1
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +1 -1
- package/dist/tools/db-tools.d.ts +13 -61
- package/dist/tools/db-tools.js +12 -13
- package/dist/tools/delegate-background.d.ts +27 -0
- package/dist/tools/delegate-background.js +115 -0
- package/dist/tools/delegate.d.ts +22 -0
- package/dist/tools/delegate.js +97 -0
- package/dist/tools/delegation-status.d.ts +16 -0
- package/dist/tools/delegation-status.js +128 -0
- package/dist/tools/guide-tool.d.ts +12 -0
- package/dist/tools/guide-tool.js +59 -0
- package/dist/tools/handoff.d.ts +25 -0
- package/dist/tools/handoff.js +99 -0
- package/dist/tools/meta-tools.d.ts +26 -0
- package/dist/tools/meta-tools.js +47 -0
- package/dist/tools/platform-adapter.d.ts +35 -0
- package/dist/tools/platform-adapter.js +404 -0
- package/dist/tools/project-db.d.ts +5 -73
- package/dist/tools/project-db.js +5 -336
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +240 -48
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- package/dist/ui/base/index.d.ts +1 -1
- package/dist/ui/base/index.js +1 -1
- package/dist/ui/base/overlay-base-v2.d.ts +10 -0
- package/dist/ui/base/overlay-base-v2.js +14 -0
- package/dist/ui/base/render-utils.d.ts +19 -0
- package/dist/ui/base/render-utils.js +25 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
- package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
- package/dist/ui/constants/labels.d.ts +14 -0
- package/dist/ui/constants/labels.js +52 -0
- package/dist/ui/conversation-store.d.ts +55 -0
- package/dist/ui/conversation-store.js +107 -0
- package/dist/ui/conversation.js +11 -13
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.js +3 -9
- package/dist/ui/file-autocomplete.d.ts +24 -0
- package/dist/ui/file-autocomplete.js +56 -0
- package/dist/ui/footer-renderer.d.ts +69 -0
- package/dist/ui/footer-renderer.js +431 -0
- package/dist/ui/footer.d.ts +74 -7
- package/dist/ui/footer.js +173 -16
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +19 -0
- package/dist/ui/input-prompt.js +206 -14
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -0
- package/dist/ui/live-region-facade.d.ts +42 -0
- package/dist/ui/live-region-facade.js +205 -0
- package/dist/ui/live-region.d.ts +0 -4
- package/dist/ui/live-region.js +6 -14
- package/dist/ui/mascot/renderer.d.ts +1 -1
- package/dist/ui/mascot/renderer.js +37 -2
- package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
- package/dist/ui/overlay/data/tutorial-content.js +9 -0
- package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
- package/dist/ui/overlay/data/tutorial-registry.js +116 -0
- package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
- package/dist/ui/overlay/data/tutorial-types.js +6 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
- package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
- package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
- package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
- package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
- package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
- package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
- package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
- package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
- package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
- package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
- package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
- package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
- package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
- package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
- package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
- package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
- package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
- package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
- package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
- package/dist/ui/overlay/index.d.ts +20 -1
- package/dist/ui/overlay/index.js +19 -0
- package/dist/ui/overlay/types.d.ts +5 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.js +4 -16
- package/dist/ui/permission-overlay.js +6 -5
- package/dist/ui/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.js +3 -19
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -0
- package/dist/ui/terminal-line-builders.d.ts +17 -0
- package/dist/ui/terminal-line-builders.js +42 -0
- package/dist/ui/terminal-render-item.d.ts +16 -0
- package/dist/ui/terminal-render-item.js +267 -0
- package/dist/ui/terminal-renderer.d.ts +7 -8
- package/dist/ui/terminal-renderer.js +7 -8
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +144 -276
- package/dist/ui/terminal-ui.js +384 -1861
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +71 -13
- package/dist/ui/tool-formatters.js +696 -1
- package/dist/ui/turn-metrics.d.ts +56 -0
- package/dist/ui/turn-metrics.js +75 -0
- package/dist/ui/types.d.ts +28 -0
- package/dist/ui/types.js +1 -0
- package/dist/ui/vscode-diff-ipc.d.ts +102 -0
- package/dist/ui/vscode-diff-ipc.js +385 -0
- package/dist/utils/credentials.d.ts +24 -5
- package/dist/utils/credentials.js +123 -9
- package/dist/utils/format-tokens.d.ts +13 -0
- package/dist/utils/format-tokens.js +18 -0
- package/dist/utils/git-config.d.ts +26 -0
- package/dist/utils/git-config.js +54 -0
- package/dist/utils/message-utils.d.ts +61 -0
- package/dist/utils/message-utils.js +72 -0
- package/dist/utils/model-tiers.d.ts +8 -1
- package/dist/utils/model-tiers.js +38 -16
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.js +3 -2
- package/dist/utils/project-detection.d.ts +58 -0
- package/dist/utils/project-detection.js +424 -0
- package/dist/utils/project-memory.js +2 -1
- package/dist/utils/project-status.d.ts +2 -2
- package/dist/utils/startup-perf.d.ts +18 -0
- package/dist/utils/startup-perf.js +60 -0
- package/dist/utils/token-tracker.d.ts +62 -0
- package/dist/utils/token-tracker.js +150 -0
- package/dist/utils/token-types.d.ts +23 -0
- package/dist/utils/token-types.js +18 -0
- package/dist/utils/types/config-types.d.ts +32 -0
- package/dist/utils/types/config-types.js +8 -0
- package/dist/utils/update-checker.d.ts +28 -0
- package/dist/utils/update-checker.js +106 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.js +10 -0
- package/dist/utils/vscode-detect.d.ts +39 -0
- package/dist/utils/vscode-detect.js +137 -0
- package/package.json +27 -13
- package/dist/commands/handler-types.d.ts +0 -68
- package/dist/commands/handler-types.js +0 -8
- package/dist/commands/handlers/agent-commands.d.ts +0 -13
- package/dist/commands/handlers/agent-commands.js +0 -305
- package/dist/commands/handlers/design-commands.d.ts +0 -15
- package/dist/commands/handlers/design-commands.js +0 -334
- package/dist/commands/handlers/index.d.ts +0 -20
- package/dist/commands/handlers/index.js +0 -43
- package/dist/commands/handlers/overlay-commands.d.ts +0 -21
- package/dist/commands/handlers/overlay-commands.js +0 -287
- package/dist/commands/handlers/project-commands.d.ts +0 -11
- package/dist/commands/handlers/project-commands.js +0 -167
- package/dist/commands/handlers/simple-commands.d.ts +0 -19
- package/dist/commands/handlers/simple-commands.js +0 -144
- package/dist/commands/registry.d.ts +0 -50
- package/dist/commands/registry.js +0 -75
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -149
- package/dist/repl.js +0 -1151
- package/dist/templates/claude-md.d.ts +0 -7
- package/dist/templates/claude-md.js +0 -189
- package/dist/test-autocomplete.d.ts +0 -7
- package/dist/test-autocomplete.js +0 -85
- package/dist/test-tabbed-menu.d.ts +0 -7
- package/dist/test-tabbed-menu.js +0 -25
- package/dist/tool-selector.d.ts +0 -71
- package/dist/tool-selector.js +0 -184
- package/dist/tools/anchor-tools.d.ts +0 -31
- package/dist/tools/anchor-tools.js +0 -255
- package/dist/tools/backlog-wrappers.d.ts +0 -54
- package/dist/tools/backlog-wrappers.js +0 -338
- package/dist/tools/document-db.d.ts +0 -43
- package/dist/tools/document-db.js +0 -220
- package/dist/tools/workitem-db.d.ts +0 -103
- package/dist/tools/workitem-db.js +0 -549
- package/dist/ui/agents-overlay-v2.d.ts +0 -43
- package/dist/ui/agents-overlay-v2.js +0 -809
- package/dist/ui/agents-overlay.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -863
- package/dist/ui/anchors-overlay.d.ts +0 -12
- package/dist/ui/anchors-overlay.js +0 -775
- package/dist/ui/arch-type-overlay.d.ts +0 -15
- package/dist/ui/arch-type-overlay.js +0 -201
- package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
- package/dist/ui/ask-user-overlay-v2.js +0 -555
- package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
- package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
- package/dist/ui/backlog-overlay.d.ts +0 -32
- package/dist/ui/backlog-overlay.js +0 -652
- package/dist/ui/commands-overlay-v2.d.ts +0 -33
- package/dist/ui/commands-overlay-v2.js +0 -441
- package/dist/ui/commands-overlay.d.ts +0 -16
- package/dist/ui/commands-overlay.js +0 -439
- package/dist/ui/config-overlay.d.ts +0 -35
- package/dist/ui/config-overlay.js +0 -707
- package/dist/ui/docs-overlay.d.ts +0 -17
- package/dist/ui/docs-overlay.js +0 -303
- package/dist/ui/footer-v2.d.ts +0 -222
- package/dist/ui/footer-v2.js +0 -1349
- package/dist/ui/help-overlay-v2.d.ts +0 -34
- package/dist/ui/help-overlay-v2.js +0 -309
- package/dist/ui/help-overlay.d.ts +0 -16
- package/dist/ui/help-overlay.js +0 -316
- package/dist/ui/init-overlay-v2.d.ts +0 -34
- package/dist/ui/init-overlay-v2.js +0 -600
- package/dist/ui/init-overlay.d.ts +0 -34
- package/dist/ui/init-overlay.js +0 -604
- package/dist/ui/input-prompt-v2.d.ts +0 -180
- package/dist/ui/input-prompt-v2.js +0 -999
- package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
- package/dist/ui/iteration-limit-overlay-v2.js +0 -114
- package/dist/ui/keys-overlay-v2.d.ts +0 -41
- package/dist/ui/keys-overlay-v2.js +0 -248
- package/dist/ui/mascot-overlay-v2.d.ts +0 -41
- package/dist/ui/mascot-overlay-v2.js +0 -138
- package/dist/ui/mascot-overlay.d.ts +0 -21
- package/dist/ui/mascot-overlay.js +0 -146
- package/dist/ui/model-overlay-v2.d.ts +0 -49
- package/dist/ui/model-overlay-v2.js +0 -118
- package/dist/ui/model-overlay.d.ts +0 -27
- package/dist/ui/model-overlay.js +0 -221
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -169
- package/dist/ui/new-overlay.d.ts +0 -34
- package/dist/ui/new-overlay.js +0 -604
- package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
- package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
- package/dist/ui/overlay/overlay-types.d.ts +0 -128
- package/dist/ui/overlay/overlay-types.js +0 -22
- package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
- package/dist/ui/overlays/help-overlay-v2.js +0 -198
- package/dist/ui/overlays/index.d.ts +0 -11
- package/dist/ui/overlays/index.js +0 -11
- package/dist/ui/permission-overlay-v2.d.ts +0 -36
- package/dist/ui/permission-overlay-v2.js +0 -380
- package/dist/ui/projects-overlay.d.ts +0 -19
- package/dist/ui/projects-overlay.js +0 -484
- package/dist/ui/theme-overlay-v2.d.ts +0 -42
- package/dist/ui/theme-overlay-v2.js +0 -135
- package/dist/ui/theme-overlay.d.ts +0 -24
- package/dist/ui/theme-overlay.js +0 -127
- package/dist/ui/tools-overlay-v2.d.ts +0 -47
- package/dist/ui/tools-overlay-v2.js +0 -218
- package/dist/ui/tools-overlay.d.ts +0 -34
- package/dist/ui/tools-overlay.js +0 -230
- package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
- package/dist/ui/tutorial-overlay-v2.js +0 -1035
- package/dist/ui/tutorial-overlay.d.ts +0 -11
- package/dist/ui/tutorial-overlay.js +0 -1034
- package/dist/ui/workflow-overlay.d.ts +0 -22
- package/dist/ui/workflow-overlay.js +0 -636
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tutorial Overlay V2
|
|
3
3
|
*
|
|
4
|
-
* Interactive tutorial
|
|
5
|
-
*
|
|
4
|
+
* Interactive tutorial with guided walkthroughs.
|
|
5
|
+
* Extends TabbedListOverlayV2 for consistent UI with other overlays.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - 5 tabs: Basics, Projects, Planning, Teams, Config
|
|
9
|
+
* - Searchable tutorial list
|
|
10
|
+
* - Multi-page detail view for each tutorial
|
|
6
11
|
*/
|
|
7
|
-
import {
|
|
12
|
+
import { TabbedListOverlayV2, BaseScreen, stay, popScreen, closeOverlay, isEscape, isEnter, isCtrlC, isQuit, isLeftArrow, isRightArrow, isVimLeft, isVimRight, isBackspace, renderBorder, } from '../../base/index.js';
|
|
13
|
+
import { buildTutorialContent, } from '../data/tutorial-content.js';
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// Constants
|
|
16
|
+
// =============================================================================
|
|
17
|
+
const PAGE_SIZE = 8;
|
|
8
18
|
// =============================================================================
|
|
9
19
|
// Helper
|
|
10
20
|
// =============================================================================
|
|
@@ -13,864 +23,41 @@ function stripAnsi(str) {
|
|
|
13
23
|
return str.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, '');
|
|
14
24
|
}
|
|
15
25
|
// =============================================================================
|
|
16
|
-
// Content
|
|
17
|
-
// =============================================================================
|
|
18
|
-
function buildTopics(s) {
|
|
19
|
-
return [
|
|
20
|
-
// =========================================================================
|
|
21
|
-
// Topic 1: Workflow Overview
|
|
22
|
-
// =========================================================================
|
|
23
|
-
{
|
|
24
|
-
id: 'overview',
|
|
25
|
-
name: 'Workflow Overview',
|
|
26
|
-
description: 'The philosophy and stages',
|
|
27
|
-
pages: [
|
|
28
|
-
{
|
|
29
|
-
title: 'Philosophy',
|
|
30
|
-
lines: [
|
|
31
|
-
'',
|
|
32
|
-
` ${s.primaryBold('compilr.dev')} is built on five core principles:`,
|
|
33
|
-
'',
|
|
34
|
-
` ${s.primary('1. Structured')}`,
|
|
35
|
-
` Follow an organized workflow instead of ad-hoc coding.`,
|
|
36
|
-
` Every project has clear phases and documentation.`,
|
|
37
|
-
'',
|
|
38
|
-
` ${s.primary('2. Disciplined')}`,
|
|
39
|
-
` Move through clear phases from design to delivery.`,
|
|
40
|
-
` Don't skip steps - each builds on the previous.`,
|
|
41
|
-
'',
|
|
42
|
-
` ${s.primary('3. Intentional')}`,
|
|
43
|
-
` Every feature starts with requirements, not code.`,
|
|
44
|
-
` Know what you're building before you build it.`,
|
|
45
|
-
'',
|
|
46
|
-
],
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
title: 'Philosophy (continued)',
|
|
50
|
-
lines: [
|
|
51
|
-
'',
|
|
52
|
-
` ${s.primary('4. Engineering-First')}`,
|
|
53
|
-
` Follow best practices: testing, documentation, code review.`,
|
|
54
|
-
` Build software that's maintainable long-term.`,
|
|
55
|
-
'',
|
|
56
|
-
` ${s.primary('5. Flexible')}`,
|
|
57
|
-
` Adapt the workflow to your needs.`,
|
|
58
|
-
` Use what works, skip what doesn't.`,
|
|
59
|
-
'',
|
|
60
|
-
` The AI assistant guides you through each stage, helping you build`,
|
|
61
|
-
` projects with ${s.primary('structure')} and ${s.primary('discipline')} - not just generating random code.`,
|
|
62
|
-
'',
|
|
63
|
-
` ${s.muted('The goal: sustainable development with AI assistance.')}`,
|
|
64
|
-
'',
|
|
65
|
-
],
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
title: 'The Workflow Stages',
|
|
69
|
-
lines: [
|
|
70
|
-
'',
|
|
71
|
-
` The development workflow has five main stages:`,
|
|
72
|
-
'',
|
|
73
|
-
` ${s.primary('/new')} Set up your project structure`,
|
|
74
|
-
` Creates project in database with configuration`,
|
|
75
|
-
'',
|
|
76
|
-
` ${s.primary('/design')} Gather requirements and create a PRD`,
|
|
77
|
-
` Documents stored in database for persistence`,
|
|
78
|
-
'',
|
|
79
|
-
` ${s.primary('/backlog')} Manage your work items`,
|
|
80
|
-
` Track status, prioritize, break down tasks`,
|
|
81
|
-
'',
|
|
82
|
-
` ${s.primary('/build')} Implement features from the backlog`,
|
|
83
|
-
` AI-assisted coding with your approval`,
|
|
84
|
-
'',
|
|
85
|
-
` ${s.primary('/workflow')} Check progress and next steps`,
|
|
86
|
-
` See where you are and what's next`,
|
|
87
|
-
'',
|
|
88
|
-
],
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
title: 'Project Management',
|
|
92
|
-
lines: [
|
|
93
|
-
'',
|
|
94
|
-
` ${s.secondary('Track Your Progress')}`,
|
|
95
|
-
'',
|
|
96
|
-
` ${s.primaryBold('/projects')}`,
|
|
97
|
-
` View all your projects in one place.`,
|
|
98
|
-
` Filter by status: Active, Paused, Completed, Archived.`,
|
|
99
|
-
` Switch between projects or open project directories.`,
|
|
100
|
-
'',
|
|
101
|
-
` ${s.primaryBold('/workflow')}`,
|
|
102
|
-
` See your current project's workflow status.`,
|
|
103
|
-
` Shows which phases are complete and what's next.`,
|
|
104
|
-
` Quick actions to jump to the right command.`,
|
|
105
|
-
'',
|
|
106
|
-
` ${s.primaryBold('/docs')}`,
|
|
107
|
-
` Browse documents created during design.`,
|
|
108
|
-
` View PRDs, architecture docs, and notes.`,
|
|
109
|
-
'',
|
|
110
|
-
],
|
|
111
|
-
},
|
|
112
|
-
],
|
|
113
|
-
},
|
|
114
|
-
// =========================================================================
|
|
115
|
-
// Topic 2: Initialize
|
|
116
|
-
// =========================================================================
|
|
117
|
-
{
|
|
118
|
-
id: 'init',
|
|
119
|
-
name: 'Initialize',
|
|
120
|
-
description: 'Setting up a new project',
|
|
121
|
-
pages: [
|
|
122
|
-
{
|
|
123
|
-
title: '/new Command',
|
|
124
|
-
lines: [
|
|
125
|
-
'',
|
|
126
|
-
` ${s.primaryBold('/new')} creates your project foundation through an 8-step wizard.`,
|
|
127
|
-
'',
|
|
128
|
-
` ${s.secondary('What it creates:')}`,
|
|
129
|
-
'',
|
|
130
|
-
` ${s.success('+')} ${s.primary('Project in database')} - Tracked for easy management`,
|
|
131
|
-
` ${s.success('+')} ${s.primary('COMPILR.md')} - Context file for the AI assistant`,
|
|
132
|
-
` ${s.success('+')} ${s.primary('.compilr/config.json')} - Project configuration`,
|
|
133
|
-
` ${s.success('+')} Tech stack setup based on your choices`,
|
|
134
|
-
'',
|
|
135
|
-
` ${s.secondary('The wizard asks about:')}`,
|
|
136
|
-
` - Project name and description`,
|
|
137
|
-
` - Project type (web, api, cli, fullstack)`,
|
|
138
|
-
` - Tech stack preferences`,
|
|
139
|
-
` - Workflow mode (flexible or guided)`,
|
|
140
|
-
'',
|
|
141
|
-
],
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
title: '/new - Database Tracking',
|
|
145
|
-
lines: [
|
|
146
|
-
'',
|
|
147
|
-
` ${s.secondary('Project Database')}`,
|
|
148
|
-
` All projects are tracked in a local SQLite database.`,
|
|
149
|
-
` This enables: multi-project switching, progress tracking,`,
|
|
150
|
-
` and persistent work item management.`,
|
|
151
|
-
'',
|
|
152
|
-
` ${s.secondary('View Your Projects')}`,
|
|
153
|
-
` Use ${s.primary('/projects')} to see all your projects.`,
|
|
154
|
-
` Use ${s.primary('/workflow')} to see current project status.`,
|
|
155
|
-
'',
|
|
156
|
-
` ${s.muted('Tip: Run /new in an empty directory to start fresh.')}`,
|
|
157
|
-
'',
|
|
158
|
-
` After /new completes, the AI reads your COMPILR.md to understand`,
|
|
159
|
-
` your project context. You're ready for the next step: ${s.primary('/design')}`,
|
|
160
|
-
'',
|
|
161
|
-
],
|
|
162
|
-
},
|
|
163
|
-
],
|
|
164
|
-
},
|
|
165
|
-
// =========================================================================
|
|
166
|
-
// Topic 3: Design
|
|
167
|
-
// =========================================================================
|
|
168
|
-
{
|
|
169
|
-
id: 'design',
|
|
170
|
-
name: 'Design Your Project',
|
|
171
|
-
description: 'Requirements gathering',
|
|
172
|
-
pages: [
|
|
173
|
-
{
|
|
174
|
-
title: '/design Command',
|
|
175
|
-
lines: [
|
|
176
|
-
'',
|
|
177
|
-
` ${s.primaryBold('/design')} is comprehensive requirements gathering through conversation.`,
|
|
178
|
-
'',
|
|
179
|
-
` The AI guides you through three phases:`,
|
|
180
|
-
'',
|
|
181
|
-
` ${s.primary('Phase 1: Vision & Goals')}`,
|
|
182
|
-
` - What problem are you solving?`,
|
|
183
|
-
` - Who is your target user?`,
|
|
184
|
-
` - What does success look like?`,
|
|
185
|
-
'',
|
|
186
|
-
` ${s.primary('Phase 2: Features & Scope')}`,
|
|
187
|
-
` - What are the core features?`,
|
|
188
|
-
` - What's nice-to-have vs essential?`,
|
|
189
|
-
` - What's explicitly out of scope?`,
|
|
190
|
-
'',
|
|
191
|
-
` ${s.primary('Phase 3: Technical Context')}`,
|
|
192
|
-
` - What constraints exist?`,
|
|
193
|
-
` - What integrations are needed?`,
|
|
194
|
-
` - What are your preferences?`,
|
|
195
|
-
'',
|
|
196
|
-
],
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
title: '/design - Output',
|
|
200
|
-
lines: [
|
|
201
|
-
'',
|
|
202
|
-
` ${s.secondary('What /design creates:')}`,
|
|
203
|
-
'',
|
|
204
|
-
` ${s.success('+')} ${s.primary('Product Requirements Document (PRD)')}`,
|
|
205
|
-
` Stored in the database for persistence.`,
|
|
206
|
-
` Use ${s.primary('/docs')} to view it anytime.`,
|
|
207
|
-
'',
|
|
208
|
-
` ${s.success('+')} ${s.primary('5-15 Backlog Items')}`,
|
|
209
|
-
` Stored in database with status tracking.`,
|
|
210
|
-
` Use ${s.primary('/backlog')} to manage them.`,
|
|
211
|
-
'',
|
|
212
|
-
` ${s.success('+')} ${s.primary('Clear Acceptance Criteria')}`,
|
|
213
|
-
` Each backlog item has defined done criteria`,
|
|
214
|
-
` so you know when it's complete.`,
|
|
215
|
-
'',
|
|
216
|
-
` ${s.muted('Best for: serious projects that need thorough planning upfront.')}`,
|
|
217
|
-
'',
|
|
218
|
-
],
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
title: '/sketch Command',
|
|
222
|
-
lines: [
|
|
223
|
-
'',
|
|
224
|
-
` ${s.primaryBold('/sketch')} is a quick alternative to /design.`,
|
|
225
|
-
'',
|
|
226
|
-
` Instead of a long conversation, it asks 6 simple questions:`,
|
|
227
|
-
'',
|
|
228
|
-
` ${s.muted('1.')} What are you building?`,
|
|
229
|
-
` ${s.muted('2.')} Who is it for?`,
|
|
230
|
-
` ${s.muted('3.')} What are the 3-5 main features?`,
|
|
231
|
-
` ${s.muted('4.')} What tech stack?`,
|
|
232
|
-
` ${s.muted('5.')} Any constraints or requirements?`,
|
|
233
|
-
` ${s.muted('6.')} What's the MVP scope?`,
|
|
234
|
-
'',
|
|
235
|
-
` ${s.secondary('Output:')} 3-8 backlog items, ready to build.`,
|
|
236
|
-
'',
|
|
237
|
-
` ${s.muted('Best for: small projects, prototypes, or when you just')}`,
|
|
238
|
-
` ${s.muted('want to get started quickly without detailed planning.')}`,
|
|
239
|
-
'',
|
|
240
|
-
],
|
|
241
|
-
},
|
|
242
|
-
{
|
|
243
|
-
title: '/refine Command',
|
|
244
|
-
lines: [
|
|
245
|
-
'',
|
|
246
|
-
` ${s.primaryBold('/refine')} improves existing backlog items.`,
|
|
247
|
-
'',
|
|
248
|
-
` ${s.secondary('Use it to:')}`,
|
|
249
|
-
'',
|
|
250
|
-
` ${s.muted('+')} Break down large items into smaller, actionable tasks`,
|
|
251
|
-
` ${s.muted('+')} Add acceptance criteria to vague items`,
|
|
252
|
-
` ${s.muted('+')} Clarify ambiguous requirements`,
|
|
253
|
-
` ${s.muted('+')} Add technical details discovered during work`,
|
|
254
|
-
'',
|
|
255
|
-
` ${s.secondary('Usage:')}`,
|
|
256
|
-
` ${s.primary('/refine')} Let the AI suggest what to refine`,
|
|
257
|
-
` ${s.primary('/refine REQ-003')} Refine a specific item`,
|
|
258
|
-
'',
|
|
259
|
-
` ${s.muted('Best for: after initial design when you discover items')}`,
|
|
260
|
-
` ${s.muted('are too big or need more detail before building.')}`,
|
|
261
|
-
'',
|
|
262
|
-
],
|
|
263
|
-
},
|
|
264
|
-
{
|
|
265
|
-
title: '/arch Command',
|
|
266
|
-
lines: [
|
|
267
|
-
'',
|
|
268
|
-
` ${s.primaryBold('/arch')} creates architecture documentation.`,
|
|
269
|
-
'',
|
|
270
|
-
` ${s.secondary('Document types you can create:')}`,
|
|
271
|
-
'',
|
|
272
|
-
` ${s.muted('1.')} ${s.primary('ADR')} - Architecture Decision Record`,
|
|
273
|
-
` Document key technical decisions and their rationale`,
|
|
274
|
-
'',
|
|
275
|
-
` ${s.muted('2.')} ${s.primary('System Diagram')} - Visual system overview`,
|
|
276
|
-
` Components, connections, data flow`,
|
|
277
|
-
'',
|
|
278
|
-
` ${s.muted('3.')} ${s.primary('Data Model')} - Database/entity design`,
|
|
279
|
-
` Tables, relationships, constraints`,
|
|
280
|
-
'',
|
|
281
|
-
` ${s.muted('4.')} ${s.primary('API Design')} - Endpoint documentation`,
|
|
282
|
-
` Routes, methods, request/response formats`,
|
|
283
|
-
'',
|
|
284
|
-
` ${s.muted('5.')} ${s.primary('Component Overview')} - Module documentation`,
|
|
285
|
-
` How pieces fit together`,
|
|
286
|
-
'',
|
|
287
|
-
],
|
|
288
|
-
},
|
|
289
|
-
{
|
|
290
|
-
title: '/prd Command',
|
|
291
|
-
lines: [
|
|
292
|
-
'',
|
|
293
|
-
` ${s.primaryBold('/prd')} lets you update your Product Requirements Document.`,
|
|
294
|
-
'',
|
|
295
|
-
` After /design creates your PRD, use /prd to amend it as`,
|
|
296
|
-
` your understanding evolves.`,
|
|
297
|
-
'',
|
|
298
|
-
` ${s.secondary('Usage:')}`,
|
|
299
|
-
` ${s.primary('/prd')} Interactive section selection`,
|
|
300
|
-
` ${s.primary('/prd vision')} Update vision section directly`,
|
|
301
|
-
` ${s.primary('/prd scope')} Update scope section directly`,
|
|
302
|
-
` ${s.primary('/prd features')} Update features section directly`,
|
|
303
|
-
'',
|
|
304
|
-
` ${s.secondary('Sections you can update:')}`,
|
|
305
|
-
` - Vision and goals`,
|
|
306
|
-
` - Features and scope`,
|
|
307
|
-
` - Technical context`,
|
|
308
|
-
` - Non-functional requirements`,
|
|
309
|
-
'',
|
|
310
|
-
],
|
|
311
|
-
},
|
|
312
|
-
],
|
|
313
|
-
},
|
|
314
|
-
// =========================================================================
|
|
315
|
-
// Topic 4: Backlog
|
|
316
|
-
// =========================================================================
|
|
317
|
-
{
|
|
318
|
-
id: 'backlog',
|
|
319
|
-
name: 'Manage Backlog',
|
|
320
|
-
description: 'Track and prioritize work',
|
|
321
|
-
pages: [
|
|
322
|
-
{
|
|
323
|
-
title: '/backlog Command',
|
|
324
|
-
lines: [
|
|
325
|
-
'',
|
|
326
|
-
` ${s.primaryBold('/backlog')} opens an interactive overlay to manage your work items.`,
|
|
327
|
-
'',
|
|
328
|
-
` ${s.secondary('Navigation:')}`,
|
|
329
|
-
` ${s.primary('↑/↓')} Navigate through items`,
|
|
330
|
-
` ${s.primary('←/→')} Navigate pages (if many items)`,
|
|
331
|
-
` ${s.primary('Tab')} Switch filter (All, Feature, Bug, etc.)`,
|
|
332
|
-
` ${s.primary('/')} Search items`,
|
|
333
|
-
` ${s.primary('Enter')} View/edit item details`,
|
|
334
|
-
'',
|
|
335
|
-
` ${s.secondary('Actions:')}`,
|
|
336
|
-
` ${s.primary('n')} Create new item`,
|
|
337
|
-
` ${s.primary('Space')} Toggle item status`,
|
|
338
|
-
` ${s.primary('p')} Change priority`,
|
|
339
|
-
` ${s.primary('Esc')} Close overlay`,
|
|
340
|
-
'',
|
|
341
|
-
],
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
title: '/backlog - Status Workflow',
|
|
345
|
-
lines: [
|
|
346
|
-
'',
|
|
347
|
-
` Items move through three statuses:`,
|
|
348
|
-
'',
|
|
349
|
-
` ${s.warning('backlog')} Not started yet`,
|
|
350
|
-
` ${s.muted('↓')}`,
|
|
351
|
-
` ${s.primary('in-progress')} Currently being worked on`,
|
|
352
|
-
` ${s.muted('↓')}`,
|
|
353
|
-
` ${s.success('completed')} Done!`,
|
|
354
|
-
'',
|
|
355
|
-
` ${s.secondary('Item Types:')}`,
|
|
356
|
-
` ${s.muted('Feature')} New functionality to build`,
|
|
357
|
-
` ${s.muted('Bug')} Something broken to fix`,
|
|
358
|
-
` ${s.muted('Tech-Debt')} Code improvements needed`,
|
|
359
|
-
` ${s.muted('Chore')} Maintenance tasks`,
|
|
360
|
-
'',
|
|
361
|
-
` Items are stored in the ${s.primary('database')} and persist across sessions.`,
|
|
362
|
-
'',
|
|
363
|
-
],
|
|
364
|
-
},
|
|
365
|
-
],
|
|
366
|
-
},
|
|
367
|
-
// =========================================================================
|
|
368
|
-
// Topic 5: Build
|
|
369
|
-
// =========================================================================
|
|
370
|
-
{
|
|
371
|
-
id: 'build',
|
|
372
|
-
name: 'Build',
|
|
373
|
-
description: 'Scaffold and implement',
|
|
374
|
-
pages: [
|
|
375
|
-
{
|
|
376
|
-
title: '/scaffold Command',
|
|
377
|
-
lines: [
|
|
378
|
-
'',
|
|
379
|
-
` ${s.primaryBold('/scaffold')} creates your project's foundation structure.`,
|
|
380
|
-
'',
|
|
381
|
-
` ${s.secondary('What it creates:')}`,
|
|
382
|
-
'',
|
|
383
|
-
` ${s.success('+')} Directory structure (src/, tests/, etc.)`,
|
|
384
|
-
` ${s.success('+')} Configuration files (package.json, tsconfig, etc.)`,
|
|
385
|
-
` ${s.success('+')} Dependencies installation`,
|
|
386
|
-
` ${s.success('+')} Basic boilerplate code`,
|
|
387
|
-
` ${s.success('+')} Development scripts`,
|
|
388
|
-
'',
|
|
389
|
-
` The agent reads your ${s.primary('COMPILR.md')} to understand your tech stack`,
|
|
390
|
-
` and creates an appropriate project structure.`,
|
|
391
|
-
'',
|
|
392
|
-
` ${s.muted('When to use: before implementing features, when starting')}`,
|
|
393
|
-
` ${s.muted('from an empty project directory.')}`,
|
|
394
|
-
'',
|
|
395
|
-
],
|
|
396
|
-
},
|
|
397
|
-
{
|
|
398
|
-
title: '/build Command',
|
|
399
|
-
lines: [
|
|
400
|
-
'',
|
|
401
|
-
` ${s.primaryBold('/build')} implements backlog items.`,
|
|
402
|
-
'',
|
|
403
|
-
` ${s.secondary('Usage:')}`,
|
|
404
|
-
` ${s.primary('/build')} Pick the highest priority pending item`,
|
|
405
|
-
` ${s.primary('/build REQ-003')} Build a specific item by ID`,
|
|
406
|
-
` ${s.primary('/build scaffold')} Same as /scaffold`,
|
|
407
|
-
'',
|
|
408
|
-
` ${s.secondary('The agent will:')}`,
|
|
409
|
-
` ${s.muted('1.')} Read and analyze the requirement`,
|
|
410
|
-
` ${s.muted('2.')} Plan the implementation approach`,
|
|
411
|
-
` ${s.muted('3.')} Write the code (with your approval)`,
|
|
412
|
-
` ${s.muted('4.')} Run tests if available`,
|
|
413
|
-
` ${s.muted('5.')} Update the backlog status to done`,
|
|
414
|
-
'',
|
|
415
|
-
],
|
|
416
|
-
},
|
|
417
|
-
{
|
|
418
|
-
title: '/build - Permissions',
|
|
419
|
-
lines: [
|
|
420
|
-
'',
|
|
421
|
-
` During /build, you'll see permission prompts for:`,
|
|
422
|
-
'',
|
|
423
|
-
` ${s.warning('File changes')}`,
|
|
424
|
-
` The AI shows exactly what will be changed`,
|
|
425
|
-
` with a diff view before you approve.`,
|
|
426
|
-
'',
|
|
427
|
-
` ${s.warning('Shell commands')}`,
|
|
428
|
-
` Commands like npm install or running tests`,
|
|
429
|
-
` require your explicit approval.`,
|
|
430
|
-
'',
|
|
431
|
-
` ${s.secondary('Review carefully before approving!')}`,
|
|
432
|
-
` The AI shows exactly what will happen so you stay in control.`,
|
|
433
|
-
'',
|
|
434
|
-
` ${s.muted('Tip: If /build detects an empty project, it will')}`,
|
|
435
|
-
` ${s.muted('suggest running /scaffold first.')}`,
|
|
436
|
-
'',
|
|
437
|
-
],
|
|
438
|
-
},
|
|
439
|
-
],
|
|
440
|
-
},
|
|
441
|
-
// =========================================================================
|
|
442
|
-
// Topic 6: Configuration
|
|
443
|
-
// =========================================================================
|
|
444
|
-
{
|
|
445
|
-
id: 'config',
|
|
446
|
-
name: 'Configuration',
|
|
447
|
-
description: 'Settings, keys, and themes',
|
|
448
|
-
pages: [
|
|
449
|
-
{
|
|
450
|
-
title: '/config Command',
|
|
451
|
-
lines: [
|
|
452
|
-
'',
|
|
453
|
-
` ${s.primaryBold('/config')} opens the settings panel.`,
|
|
454
|
-
'',
|
|
455
|
-
` ${s.secondary('Tabs:')}`,
|
|
456
|
-
` ${s.primary('Status')} Version, model, session info`,
|
|
457
|
-
` ${s.primary('Config')} Interactive settings`,
|
|
458
|
-
` ${s.primary('Usage')} Token usage statistics`,
|
|
459
|
-
'',
|
|
460
|
-
` ${s.secondary('Settings you can change:')}`,
|
|
461
|
-
` ${s.muted('Model')} Switch AI model/provider`,
|
|
462
|
-
` ${s.muted('Theme')} Choose from 400+ terminal themes`,
|
|
463
|
-
` ${s.muted('Permissions')} Control approval prompts`,
|
|
464
|
-
` ${s.muted('Output')} Verbose or minimal mode`,
|
|
465
|
-
` ${s.muted('Auto-compact')} Automatic context management`,
|
|
466
|
-
'',
|
|
467
|
-
],
|
|
468
|
-
},
|
|
469
|
-
{
|
|
470
|
-
title: '/keys Command',
|
|
471
|
-
lines: [
|
|
472
|
-
'',
|
|
473
|
-
` ${s.primaryBold('/keys')} manages your API keys for LLM providers.`,
|
|
474
|
-
'',
|
|
475
|
-
` ${s.secondary('Supported providers:')}`,
|
|
476
|
-
` ${s.primary('Claude')} Anthropic's models (best reasoning)`,
|
|
477
|
-
` ${s.primary('OpenAI')} GPT-4o and other models`,
|
|
478
|
-
` ${s.primary('Gemini')} Google AI models`,
|
|
479
|
-
` ${s.primary('Ollama')} Local models (no API key needed)`,
|
|
480
|
-
'',
|
|
481
|
-
` Keys are encrypted and stored locally in:`,
|
|
482
|
-
` ${s.muted('~/.compilr-dev/credentials.enc')}`,
|
|
483
|
-
'',
|
|
484
|
-
` ${s.muted('The CLI automatically opens /keys on first run')}`,
|
|
485
|
-
` ${s.muted('if no API key is configured.')}`,
|
|
486
|
-
'',
|
|
487
|
-
],
|
|
488
|
-
},
|
|
489
|
-
],
|
|
490
|
-
},
|
|
491
|
-
// =========================================================================
|
|
492
|
-
// Topic 7: Working with the Agent
|
|
493
|
-
// =========================================================================
|
|
494
|
-
{
|
|
495
|
-
id: 'agent',
|
|
496
|
-
name: 'Working with the Agent',
|
|
497
|
-
description: 'Chat, permissions, tips',
|
|
498
|
-
pages: [
|
|
499
|
-
{
|
|
500
|
-
title: 'Chatting with the AI',
|
|
501
|
-
lines: [
|
|
502
|
-
'',
|
|
503
|
-
` Just type naturally. The AI understands context and can help with:`,
|
|
504
|
-
'',
|
|
505
|
-
` ${s.muted('+')} Answering questions about your code`,
|
|
506
|
-
` ${s.muted('+')} Explaining how something works`,
|
|
507
|
-
` ${s.muted('+')} Writing new code or features`,
|
|
508
|
-
` ${s.muted('+')} Debugging issues`,
|
|
509
|
-
` ${s.muted('+')} Refactoring existing code`,
|
|
510
|
-
` ${s.muted('+')} Running commands and tests`,
|
|
511
|
-
'',
|
|
512
|
-
` ${s.secondary('File References')}`,
|
|
513
|
-
` Type ${s.primary('@')} to autocomplete file paths.`,
|
|
514
|
-
` Example: ${s.muted('"Fix the bug in @src/utils.ts"')}`,
|
|
515
|
-
'',
|
|
516
|
-
` The AI will read the file and understand the context.`,
|
|
517
|
-
'',
|
|
518
|
-
],
|
|
519
|
-
},
|
|
520
|
-
{
|
|
521
|
-
title: 'Permissions',
|
|
522
|
-
lines: [
|
|
523
|
-
'',
|
|
524
|
-
` The agent asks permission before:`,
|
|
525
|
-
'',
|
|
526
|
-
` ${s.warning('+')} Modifying or creating files`,
|
|
527
|
-
` ${s.warning('+')} Running shell commands`,
|
|
528
|
-
` ${s.warning('+')} Making git commits`,
|
|
529
|
-
'',
|
|
530
|
-
` ${s.secondary('For each action, you can:')}`,
|
|
531
|
-
` ${s.primary('Allow')} Approve this specific action`,
|
|
532
|
-
` ${s.primary('Allow Always')} Auto-approve this tool for the session`,
|
|
533
|
-
` ${s.primary('Deny')} Reject this action`,
|
|
534
|
-
'',
|
|
535
|
-
` For file edits, you'll see a diff showing exactly what changes.`,
|
|
536
|
-
` Review carefully - you're always in control.`,
|
|
537
|
-
'',
|
|
538
|
-
],
|
|
539
|
-
},
|
|
540
|
-
{
|
|
541
|
-
title: 'Suggestions',
|
|
542
|
-
lines: [
|
|
543
|
-
'',
|
|
544
|
-
` After completing tasks, the AI suggests next actions.`,
|
|
545
|
-
'',
|
|
546
|
-
` ${s.secondary('How it works:')}`,
|
|
547
|
-
` Suggestions appear as ${s.muted('ghost text')} in your input prompt.`,
|
|
548
|
-
` Press ${s.primary('Tab')} to accept the suggestion.`,
|
|
549
|
-
` Or just keep typing to ignore it.`,
|
|
550
|
-
'',
|
|
551
|
-
` ${s.secondary('Common suggestions:')}`,
|
|
552
|
-
` ${s.muted('"run the tests"')}`,
|
|
553
|
-
` ${s.muted('"commit the changes"')}`,
|
|
554
|
-
` ${s.muted('"build the next item"')}`,
|
|
555
|
-
'',
|
|
556
|
-
` Suggestions help maintain workflow momentum.`,
|
|
557
|
-
'',
|
|
558
|
-
],
|
|
559
|
-
},
|
|
560
|
-
{
|
|
561
|
-
title: 'Context Management',
|
|
562
|
-
lines: [
|
|
563
|
-
'',
|
|
564
|
-
` The AI has a limited context window. When it fills up:`,
|
|
565
|
-
'',
|
|
566
|
-
` ${s.primaryBold('/compact')}`,
|
|
567
|
-
` Summarizes old messages to free up space.`,
|
|
568
|
-
` The AI creates a summary and removes old messages.`,
|
|
569
|
-
'',
|
|
570
|
-
` ${s.primaryBold('/context')}`,
|
|
571
|
-
` Shows current context usage (tokens used / available).`,
|
|
572
|
-
'',
|
|
573
|
-
` ${s.primaryBold('/tokens')}`,
|
|
574
|
-
` Shows token usage statistics for the session.`,
|
|
575
|
-
'',
|
|
576
|
-
` ${s.muted('Tip: Auto-compact is enabled by default in settings.')}`,
|
|
577
|
-
` ${s.muted('The AI will automatically summarize when needed.')}`,
|
|
578
|
-
'',
|
|
579
|
-
],
|
|
580
|
-
},
|
|
581
|
-
{
|
|
582
|
-
title: 'Anchors - Persistent Context',
|
|
583
|
-
lines: [
|
|
584
|
-
'',
|
|
585
|
-
` ${s.secondary('Anchors')} are critical pieces of information that survive`,
|
|
586
|
-
` context compaction. They're always included at the top of context.`,
|
|
587
|
-
'',
|
|
588
|
-
` ${s.primaryBold('/anchors')}`,
|
|
589
|
-
` View and manage your anchors.`,
|
|
590
|
-
` Add, edit, or remove persistent context.`,
|
|
591
|
-
'',
|
|
592
|
-
` ${s.secondary('When to use anchors:')}`,
|
|
593
|
-
` ${s.muted('+')} Project context that must never be forgotten`,
|
|
594
|
-
` ${s.muted('+')} Key architectural decisions`,
|
|
595
|
-
` ${s.muted('+')} User preferences for code style`,
|
|
596
|
-
` ${s.muted('+')} Important constraints or requirements`,
|
|
597
|
-
'',
|
|
598
|
-
` ${s.secondary('Scope:')}`,
|
|
599
|
-
` ${s.primary('Global')} - Persists across all projects`,
|
|
600
|
-
` ${s.primary('Project')} - Specific to current project`,
|
|
601
|
-
'',
|
|
602
|
-
],
|
|
603
|
-
},
|
|
604
|
-
],
|
|
605
|
-
},
|
|
606
|
-
// =========================================================================
|
|
607
|
-
// Topic 8: Tips & Tricks
|
|
608
|
-
// =========================================================================
|
|
609
|
-
{
|
|
610
|
-
id: 'tips',
|
|
611
|
-
name: 'Tips & Tricks',
|
|
612
|
-
description: 'Shortcuts and best practices',
|
|
613
|
-
pages: [
|
|
614
|
-
{
|
|
615
|
-
title: 'Keyboard Shortcuts',
|
|
616
|
-
lines: [
|
|
617
|
-
'',
|
|
618
|
-
` ${s.secondary('Input:')}`,
|
|
619
|
-
` ${s.primary('Tab')} Accept suggestion or autocomplete`,
|
|
620
|
-
` ${s.primary('Esc')} Cancel current operation`,
|
|
621
|
-
` ${s.primary('Ctrl+C')} Stop the agent or exit`,
|
|
622
|
-
'',
|
|
623
|
-
` ${s.secondary('In Overlays:')}`,
|
|
624
|
-
` ${s.primary('↑/↓')} Navigate options`,
|
|
625
|
-
` ${s.primary('←/→')} Navigate pages or tabs`,
|
|
626
|
-
` ${s.primary('Tab')} Switch tabs (where applicable)`,
|
|
627
|
-
` ${s.primary('Enter')} Confirm selection`,
|
|
628
|
-
` ${s.primary('Esc')} Go back or close`,
|
|
629
|
-
'',
|
|
630
|
-
` ${s.secondary('Special:')}`,
|
|
631
|
-
` ${s.primary('@')} Start file autocomplete`,
|
|
632
|
-
` ${s.primary('/')} Start command autocomplete`,
|
|
633
|
-
'',
|
|
634
|
-
],
|
|
635
|
-
},
|
|
636
|
-
{
|
|
637
|
-
title: 'Useful Commands',
|
|
638
|
-
lines: [
|
|
639
|
-
'',
|
|
640
|
-
` ${s.secondary('Information:')}`,
|
|
641
|
-
` ${s.primary('/help')} Full command reference`,
|
|
642
|
-
` ${s.primary('/status')} Version, model, mode info`,
|
|
643
|
-
` ${s.primary('/tools')} List available tools`,
|
|
644
|
-
'',
|
|
645
|
-
` ${s.secondary('Session:')}`,
|
|
646
|
-
` ${s.primary('/note')} Create session documentation`,
|
|
647
|
-
` ${s.primary('/export')} Export conversation`,
|
|
648
|
-
` ${s.primary('/clear')} Clear the screen`,
|
|
649
|
-
'',
|
|
650
|
-
` ${s.secondary('Mode:')}`,
|
|
651
|
-
` ${s.primary('/plan')} Switch to planning mode`,
|
|
652
|
-
` (focus on design, not implementation)`,
|
|
653
|
-
'',
|
|
654
|
-
],
|
|
655
|
-
},
|
|
656
|
-
{
|
|
657
|
-
title: 'Best Practices',
|
|
658
|
-
lines: [
|
|
659
|
-
'',
|
|
660
|
-
` ${s.primary('1.')} Start with ${s.primaryBold('/new')}, then ${s.primaryBold('/design')} or ${s.primaryBold('/sketch')}`,
|
|
661
|
-
` Don't skip planning - it pays off later.`,
|
|
662
|
-
'',
|
|
663
|
-
` ${s.primary('2.')} Keep backlog items small and focused`,
|
|
664
|
-
` Break large features into smaller tasks.`,
|
|
665
|
-
'',
|
|
666
|
-
` ${s.primary('3.')} Review AI suggestions before approving`,
|
|
667
|
-
` You're in control - understand what's changing.`,
|
|
668
|
-
'',
|
|
669
|
-
` ${s.primary('4.')} Use ${s.primaryBold('/arch')} to document key decisions`,
|
|
670
|
-
` Future you will thank present you.`,
|
|
671
|
-
'',
|
|
672
|
-
` ${s.primary('5.')} Try ${s.primaryBold('Ollama')} for offline development`,
|
|
673
|
-
` No API key needed, runs locally.`,
|
|
674
|
-
'',
|
|
675
|
-
],
|
|
676
|
-
},
|
|
677
|
-
],
|
|
678
|
-
},
|
|
679
|
-
];
|
|
680
|
-
}
|
|
681
|
-
// =============================================================================
|
|
682
|
-
// Screens
|
|
26
|
+
// Viewing Screen (Multi-page Tutorial Content)
|
|
683
27
|
// =============================================================================
|
|
684
28
|
/**
|
|
685
|
-
*
|
|
686
|
-
|
|
687
|
-
class WelcomeScreen extends BaseScreen {
|
|
688
|
-
state;
|
|
689
|
-
styles;
|
|
690
|
-
topics;
|
|
691
|
-
getWidth;
|
|
692
|
-
selectedIndex = 0;
|
|
693
|
-
constructor(state, styles, topics, getWidth) {
|
|
694
|
-
super();
|
|
695
|
-
this.state = state;
|
|
696
|
-
this.styles = styles;
|
|
697
|
-
this.topics = topics;
|
|
698
|
-
this.getWidth = getWidth;
|
|
699
|
-
}
|
|
700
|
-
render() {
|
|
701
|
-
const s = this.styles;
|
|
702
|
-
const cols = this.getWidth();
|
|
703
|
-
const border = renderBorder(cols, s);
|
|
704
|
-
const lines = [];
|
|
705
|
-
lines.push(border);
|
|
706
|
-
lines.push(` ${s.primaryBold('compilr.dev Tutorial')}`);
|
|
707
|
-
lines.push('');
|
|
708
|
-
lines.push(` Learn the AI-powered development workflow that takes you`);
|
|
709
|
-
lines.push(` from idea to implementation with structure and discipline.`);
|
|
710
|
-
lines.push('');
|
|
711
|
-
lines.push(` This tutorial covers: initialization, design, backlog`);
|
|
712
|
-
lines.push(` management, building, configuration, and best practices.`);
|
|
713
|
-
lines.push('');
|
|
714
|
-
lines.push(` ${s.muted('How would you like to explore?')}`);
|
|
715
|
-
lines.push('');
|
|
716
|
-
const options = [
|
|
717
|
-
{ label: 'Start Guided Tour', desc: 'Step-by-step walkthrough (recommended)' },
|
|
718
|
-
{ label: 'Jump to Topic', desc: 'Go directly to a specific topic' },
|
|
719
|
-
];
|
|
720
|
-
for (let i = 0; i < options.length; i++) {
|
|
721
|
-
const opt = options[i];
|
|
722
|
-
const selected = i === this.selectedIndex;
|
|
723
|
-
const prefix = selected ? s.primary(' > ') : ' ';
|
|
724
|
-
const label = selected ? s.primary(opt.label) : opt.label;
|
|
725
|
-
const desc = s.muted(opt.desc);
|
|
726
|
-
lines.push(`${prefix}${label.padEnd(22)} ${desc}`);
|
|
727
|
-
}
|
|
728
|
-
lines.push('');
|
|
729
|
-
lines.push(border);
|
|
730
|
-
lines.push(s.muted(' ↑↓/jk Navigate · Enter Select · q/Esc Exit'));
|
|
731
|
-
return lines;
|
|
732
|
-
}
|
|
733
|
-
handleKey(data) {
|
|
734
|
-
// Close keys
|
|
735
|
-
if (isCtrlC(data) || isClose(data)) {
|
|
736
|
-
return closeOverlay({ completed: false });
|
|
737
|
-
}
|
|
738
|
-
// Navigation
|
|
739
|
-
if (isNavigateUp(data) && this.selectedIndex > 0) {
|
|
740
|
-
this.selectedIndex--;
|
|
741
|
-
return stay();
|
|
742
|
-
}
|
|
743
|
-
if (isNavigateDown(data) && this.selectedIndex < 1) {
|
|
744
|
-
this.selectedIndex++;
|
|
745
|
-
return stay();
|
|
746
|
-
}
|
|
747
|
-
// Enter - select option
|
|
748
|
-
if (isEnter(data)) {
|
|
749
|
-
if (this.selectedIndex === 0) {
|
|
750
|
-
// Guided mode
|
|
751
|
-
this.state.isGuidedMode = true;
|
|
752
|
-
this.state.currentTopicIndex = 0;
|
|
753
|
-
this.state.currentPageIndex = 0;
|
|
754
|
-
return pushScreen(new ViewingScreen(this.state, this.styles, this.topics, this.getWidth));
|
|
755
|
-
}
|
|
756
|
-
else {
|
|
757
|
-
// Topic list mode
|
|
758
|
-
return pushScreen(new TopicListScreen(this.state, this.styles, this.topics, this.getWidth));
|
|
759
|
-
}
|
|
760
|
-
}
|
|
761
|
-
return stay(false);
|
|
762
|
-
}
|
|
763
|
-
}
|
|
764
|
-
/**
|
|
765
|
-
* Topic list screen - shows all topics to choose from
|
|
766
|
-
*/
|
|
767
|
-
class TopicListScreen extends BaseScreen {
|
|
768
|
-
state;
|
|
769
|
-
styles;
|
|
770
|
-
topics;
|
|
771
|
-
getWidth;
|
|
772
|
-
constructor(state, styles, topics, getWidth) {
|
|
773
|
-
super();
|
|
774
|
-
this.state = state;
|
|
775
|
-
this.styles = styles;
|
|
776
|
-
this.topics = topics;
|
|
777
|
-
this.getWidth = getWidth;
|
|
778
|
-
}
|
|
779
|
-
render() {
|
|
780
|
-
const s = this.styles;
|
|
781
|
-
const cols = this.getWidth();
|
|
782
|
-
const border = renderBorder(cols, s);
|
|
783
|
-
const lines = [];
|
|
784
|
-
lines.push(border);
|
|
785
|
-
lines.push(` ${s.primaryBold('Tutorial Topics')}`);
|
|
786
|
-
lines.push('');
|
|
787
|
-
for (let i = 0; i < this.topics.length; i++) {
|
|
788
|
-
const topic = this.topics[i];
|
|
789
|
-
const selected = i === this.state.topicListIndex;
|
|
790
|
-
const prefix = selected ? s.primary(' > ') : ' ';
|
|
791
|
-
const name = selected ? s.primary(topic.name) : topic.name;
|
|
792
|
-
const desc = s.muted(topic.description);
|
|
793
|
-
const pages = s.muted(`(${String(topic.pages.length)} ${topic.pages.length === 1 ? 'page' : 'pages'})`);
|
|
794
|
-
lines.push(`${prefix}${name.padEnd(26)} ${desc.padEnd(30)} ${pages}`);
|
|
795
|
-
}
|
|
796
|
-
lines.push('');
|
|
797
|
-
lines.push(border);
|
|
798
|
-
lines.push(s.muted(' ↑↓/jk Navigate · Enter View · q/Esc Close'));
|
|
799
|
-
return lines;
|
|
800
|
-
}
|
|
801
|
-
handleKey(data) {
|
|
802
|
-
// Ctrl+C or q closes overlay
|
|
803
|
-
if (isCtrlC(data)) {
|
|
804
|
-
return closeOverlay({ completed: false });
|
|
805
|
-
}
|
|
806
|
-
// Escape goes back to welcome
|
|
807
|
-
if (isEscape(data)) {
|
|
808
|
-
return popScreen();
|
|
809
|
-
}
|
|
810
|
-
// Navigation
|
|
811
|
-
if (isNavigateUp(data) && this.state.topicListIndex > 0) {
|
|
812
|
-
this.state.topicListIndex--;
|
|
813
|
-
return stay();
|
|
814
|
-
}
|
|
815
|
-
if (isNavigateDown(data) && this.state.topicListIndex < this.topics.length - 1) {
|
|
816
|
-
this.state.topicListIndex++;
|
|
817
|
-
return stay();
|
|
818
|
-
}
|
|
819
|
-
// Enter - view topic
|
|
820
|
-
if (isEnter(data)) {
|
|
821
|
-
this.state.isGuidedMode = false;
|
|
822
|
-
this.state.currentTopicIndex = this.state.topicListIndex;
|
|
823
|
-
this.state.currentPageIndex = 0;
|
|
824
|
-
return pushScreen(new ViewingScreen(this.state, this.styles, this.topics, this.getWidth));
|
|
825
|
-
}
|
|
826
|
-
return stay(false);
|
|
827
|
-
}
|
|
828
|
-
}
|
|
829
|
-
/**
|
|
830
|
-
* Viewing screen - shows a page from a topic with navigation
|
|
29
|
+
* Shows a page from a tutorial with navigation.
|
|
30
|
+
* Allows navigating through multiple pages with ←/→.
|
|
831
31
|
*/
|
|
832
32
|
class ViewingScreen extends BaseScreen {
|
|
833
|
-
|
|
33
|
+
item;
|
|
834
34
|
styles;
|
|
835
|
-
topics;
|
|
836
35
|
getWidth;
|
|
837
|
-
|
|
36
|
+
currentPageIndex = 0;
|
|
37
|
+
constructor(item, styles, getWidth) {
|
|
838
38
|
super();
|
|
839
|
-
this.
|
|
39
|
+
this.item = item;
|
|
840
40
|
this.styles = styles;
|
|
841
|
-
this.topics = topics;
|
|
842
41
|
this.getWidth = getWidth;
|
|
843
42
|
}
|
|
43
|
+
getMinHeight() {
|
|
44
|
+
return 24;
|
|
45
|
+
}
|
|
844
46
|
render() {
|
|
845
47
|
const s = this.styles;
|
|
846
48
|
const cols = this.getWidth();
|
|
847
49
|
const border = renderBorder(cols, s);
|
|
848
50
|
const lines = [];
|
|
849
|
-
const
|
|
850
|
-
const
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
if (this.state.isGuidedMode) {
|
|
855
|
-
let totalPagesAll = 0;
|
|
856
|
-
let currentPageAll = 0;
|
|
857
|
-
for (let i = 0; i < this.topics.length; i++) {
|
|
858
|
-
if (i < this.state.currentTopicIndex) {
|
|
859
|
-
currentPageAll += this.topics[i].pages.length;
|
|
860
|
-
}
|
|
861
|
-
else if (i === this.state.currentTopicIndex) {
|
|
862
|
-
currentPageAll += this.state.currentPageIndex + 1;
|
|
863
|
-
}
|
|
864
|
-
totalPagesAll += this.topics[i].pages.length;
|
|
865
|
-
}
|
|
866
|
-
progressText = `[${String(currentPageAll)}/${String(totalPagesAll)}]`;
|
|
867
|
-
}
|
|
868
|
-
// Header - calculate padding to right-align progress indicator
|
|
51
|
+
const page = this.item.pages[this.currentPageIndex];
|
|
52
|
+
const totalPages = this.item.pages.length;
|
|
53
|
+
// Progress text
|
|
54
|
+
const progressText = `[${String(this.currentPageIndex + 1)}/${String(totalPages)}]`;
|
|
55
|
+
// Header with progress
|
|
869
56
|
const titleStyled = s.primaryBold(page.title);
|
|
870
57
|
const progressStyled = s.muted(progressText);
|
|
871
|
-
const titleLen = stripAnsi(titleStyled).length + 1;
|
|
58
|
+
const titleLen = stripAnsi(titleStyled).length + 1;
|
|
872
59
|
const progressLen = stripAnsi(progressStyled).length;
|
|
873
|
-
const padding = Math.max(1, cols - titleLen - progressLen - 2);
|
|
60
|
+
const padding = Math.max(1, cols - titleLen - progressLen - 2);
|
|
874
61
|
lines.push(border);
|
|
875
62
|
lines.push(` ${titleStyled}${' '.repeat(padding)}${progressStyled}`);
|
|
876
63
|
lines.push('');
|
|
@@ -884,152 +71,142 @@ class ViewingScreen extends BaseScreen {
|
|
|
884
71
|
}
|
|
885
72
|
// Navigation footer
|
|
886
73
|
lines.push(border);
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
lines.push(s.muted(' ←/→/hl Navigate · Esc Back to Topics'));
|
|
74
|
+
// Show appropriate hints based on position
|
|
75
|
+
const hints = [];
|
|
76
|
+
if (this.currentPageIndex > 0 || totalPages > 1) {
|
|
77
|
+
hints.push('←/→ navigate');
|
|
892
78
|
}
|
|
79
|
+
hints.push('q/Esc back');
|
|
80
|
+
lines.push(s.muted(` ${hints.join(' · ')}`));
|
|
893
81
|
return lines;
|
|
894
82
|
}
|
|
895
83
|
handleKey(data) {
|
|
896
|
-
// Ctrl+C closes overlay
|
|
84
|
+
// Ctrl+C closes overlay completely
|
|
897
85
|
if (isCtrlC(data)) {
|
|
898
86
|
return closeOverlay({ completed: false });
|
|
899
87
|
}
|
|
900
|
-
const
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
if (isEscape(data)) {
|
|
88
|
+
const totalPages = this.item.pages.length;
|
|
89
|
+
// Back to topic list
|
|
90
|
+
if (isEscape(data) || isQuit(data)) {
|
|
904
91
|
return popScreen();
|
|
905
92
|
}
|
|
906
|
-
// Previous page
|
|
93
|
+
// Previous page
|
|
907
94
|
if (isLeftArrow(data) || isVimLeft(data) || isBackspace(data)) {
|
|
908
|
-
if (this.
|
|
909
|
-
this.
|
|
910
|
-
return stay();
|
|
911
|
-
}
|
|
912
|
-
else if (this.state.isGuidedMode && this.state.currentTopicIndex > 0) {
|
|
913
|
-
this.state.currentTopicIndex--;
|
|
914
|
-
this.state.currentPageIndex = this.topics[this.state.currentTopicIndex].pages.length - 1;
|
|
95
|
+
if (this.currentPageIndex > 0) {
|
|
96
|
+
this.currentPageIndex--;
|
|
915
97
|
return stay();
|
|
916
98
|
}
|
|
917
99
|
return stay(false);
|
|
918
100
|
}
|
|
919
|
-
// Next page
|
|
101
|
+
// Next page
|
|
920
102
|
if (isRightArrow(data) || isVimRight(data) || isEnter(data)) {
|
|
921
|
-
if (this.
|
|
922
|
-
this.
|
|
103
|
+
if (this.currentPageIndex < totalPages - 1) {
|
|
104
|
+
this.currentPageIndex++;
|
|
923
105
|
return stay();
|
|
924
106
|
}
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
this.state.currentPageIndex = 0;
|
|
929
|
-
return stay();
|
|
930
|
-
}
|
|
931
|
-
else {
|
|
932
|
-
// End of guided tour - show complete screen
|
|
933
|
-
return pushScreen(new CompleteScreen(this.styles, this.getWidth));
|
|
934
|
-
}
|
|
107
|
+
// At last page, Enter goes back to list
|
|
108
|
+
if (isEnter(data)) {
|
|
109
|
+
return popScreen();
|
|
935
110
|
}
|
|
936
111
|
return stay(false);
|
|
937
112
|
}
|
|
938
113
|
return stay(false);
|
|
939
114
|
}
|
|
940
115
|
}
|
|
941
|
-
/**
|
|
942
|
-
* Complete screen - shows completion message
|
|
943
|
-
*/
|
|
944
|
-
class CompleteScreen extends BaseScreen {
|
|
945
|
-
styles;
|
|
946
|
-
getWidth;
|
|
947
|
-
constructor(styles, getWidth) {
|
|
948
|
-
super();
|
|
949
|
-
this.styles = styles;
|
|
950
|
-
this.getWidth = getWidth;
|
|
951
|
-
}
|
|
952
|
-
render() {
|
|
953
|
-
const s = this.styles;
|
|
954
|
-
const cols = this.getWidth();
|
|
955
|
-
const border = renderBorder(cols, s);
|
|
956
|
-
const lines = [];
|
|
957
|
-
lines.push(border);
|
|
958
|
-
lines.push(` ${s.success('Tutorial Complete!')}`);
|
|
959
|
-
lines.push('');
|
|
960
|
-
lines.push(` You've learned the compilr.dev workflow!`);
|
|
961
|
-
lines.push('');
|
|
962
|
-
lines.push(` ${s.secondary('Key commands to remember:')}`);
|
|
963
|
-
lines.push('');
|
|
964
|
-
lines.push(` ${s.primary('/new')} Start a new project`);
|
|
965
|
-
lines.push(` ${s.primary('/design')} Plan your requirements`);
|
|
966
|
-
lines.push(` ${s.primary('/backlog')} Manage your work items`);
|
|
967
|
-
lines.push(` ${s.primary('/build')} Implement features`);
|
|
968
|
-
lines.push(` ${s.primary('/help')} See all commands`);
|
|
969
|
-
lines.push('');
|
|
970
|
-
lines.push(` ${s.secondary('Ready to start?')}`);
|
|
971
|
-
lines.push(` Try ${s.primary('/new')} in a new directory!`);
|
|
972
|
-
lines.push('');
|
|
973
|
-
lines.push(border);
|
|
974
|
-
lines.push(s.muted(' Press any key to exit...'));
|
|
975
|
-
return lines;
|
|
976
|
-
}
|
|
977
|
-
handleKey(_data) {
|
|
978
|
-
// Any key closes the overlay with completed = true
|
|
979
|
-
return closeOverlay({ completed: true });
|
|
980
|
-
}
|
|
981
|
-
}
|
|
982
116
|
// =============================================================================
|
|
983
117
|
// Tutorial Overlay V2 Class
|
|
984
118
|
// =============================================================================
|
|
985
119
|
/**
|
|
986
|
-
* Tutorial overlay
|
|
987
|
-
*
|
|
120
|
+
* Tutorial overlay with tabbed topics and multi-page walkthroughs.
|
|
121
|
+
* Extends TabbedListOverlayV2 for consistent look with other overlays.
|
|
988
122
|
*/
|
|
989
|
-
export class TutorialOverlayV2 extends
|
|
123
|
+
export class TutorialOverlayV2 extends TabbedListOverlayV2 {
|
|
990
124
|
type = 'inline';
|
|
991
125
|
id = 'tutorial-overlay-v2';
|
|
992
|
-
screenStack;
|
|
993
|
-
topics = [];
|
|
994
126
|
constructor() {
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
127
|
+
// We need styles to build content, but we don't have them yet.
|
|
128
|
+
// Build with a placeholder and rebuild on first render.
|
|
129
|
+
// For now, use empty items - they'll be populated on first render.
|
|
130
|
+
const tabs = [
|
|
131
|
+
{ id: 'basics', label: 'Basics' },
|
|
132
|
+
{ id: 'projects', label: 'Projects' },
|
|
133
|
+
{ id: 'plan-build', label: 'Plan & Build' },
|
|
134
|
+
{ id: 'teams', label: 'Teams' },
|
|
135
|
+
{ id: 'config', label: 'Config' },
|
|
136
|
+
];
|
|
137
|
+
super({
|
|
138
|
+
title: 'Tutorial',
|
|
139
|
+
tabs,
|
|
140
|
+
items: [], // Will be populated on first render
|
|
141
|
+
pageSize: PAGE_SIZE,
|
|
142
|
+
filterByTab: (item, tabId) => {
|
|
143
|
+
if (tabId === 'all')
|
|
144
|
+
return true;
|
|
145
|
+
return item.tabId === tabId;
|
|
146
|
+
},
|
|
147
|
+
getSearchText: (item) => `${item.title} ${item.description}`,
|
|
148
|
+
renderItem: (item, isSelected, styles) => {
|
|
149
|
+
const prefix = isSelected ? styles.primary(' ► ') : ' ';
|
|
150
|
+
// Pad raw text BEFORE applying styles to ensure consistent column widths
|
|
151
|
+
const titlePadded = item.title.padEnd(28);
|
|
152
|
+
const descPadded = item.description.padEnd(36);
|
|
153
|
+
const pagesText = `(${String(item.pages.length)} ${item.pages.length === 1 ? 'page' : 'pages'})`;
|
|
154
|
+
const pagesPadded = pagesText.padStart(10);
|
|
155
|
+
// Apply styles after padding
|
|
156
|
+
const title = isSelected ? styles.primary(titlePadded) : titlePadded;
|
|
157
|
+
const desc = styles.muted(descPadded);
|
|
158
|
+
const pages = styles.muted(pagesPadded);
|
|
159
|
+
return `${prefix}${title} ${desc} ${pages}`;
|
|
160
|
+
},
|
|
161
|
+
footerHints: (searchMode) => {
|
|
162
|
+
if (searchMode) {
|
|
163
|
+
return 'Type to filter · ↑↓/jk Navigate · Enter View · Esc Exit search';
|
|
164
|
+
}
|
|
165
|
+
return 'Tab Filter · ↑↓/jk · ←→/hl Pages · / Search · Enter View · q/Esc Close';
|
|
166
|
+
},
|
|
167
|
+
emptyMessage: 'No tutorials available.',
|
|
168
|
+
noResultsMessage: 'No tutorials match the search.',
|
|
169
|
+
showCount: false,
|
|
170
|
+
});
|
|
171
|
+
// Override minHeight for tutorial content
|
|
172
|
+
this.minHeight = 22;
|
|
1005
173
|
}
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
174
|
+
/**
|
|
175
|
+
* Build items on first render when styles are available.
|
|
176
|
+
* This is a workaround since we need styles to build styled content.
|
|
177
|
+
*/
|
|
178
|
+
buildItemsIfNeeded() {
|
|
179
|
+
if (this.state.items.length > 0)
|
|
180
|
+
return;
|
|
181
|
+
const styles = this.getStyles();
|
|
182
|
+
const tabs = buildTutorialContent(styles);
|
|
183
|
+
// Flatten tutorials into a single array with tabId
|
|
184
|
+
const items = [];
|
|
185
|
+
for (const tab of tabs) {
|
|
186
|
+
for (const item of tab.items) {
|
|
187
|
+
items.push({
|
|
188
|
+
...item,
|
|
189
|
+
tabId: tab.id,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
1011
192
|
}
|
|
1012
|
-
|
|
1013
|
-
|
|
193
|
+
this.state.items = items;
|
|
194
|
+
this.state.filteredItems = items.filter((item) => this.listConfig.filterByTab(item, this.listConfig.tabs[0]?.id ?? 'basics'));
|
|
1014
195
|
}
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
return this.rerender();
|
|
1031
|
-
case 'close':
|
|
1032
|
-
return this.close(result.result);
|
|
1033
|
-
}
|
|
196
|
+
/**
|
|
197
|
+
* Override render to build items on first call.
|
|
198
|
+
*/
|
|
199
|
+
render(context) {
|
|
200
|
+
// Cache styles first so buildItemsIfNeeded can use them
|
|
201
|
+
this.styles = context.styles;
|
|
202
|
+
this.termWidth = context.width;
|
|
203
|
+
// Build items if not yet built
|
|
204
|
+
this.buildItemsIfNeeded();
|
|
205
|
+
// Render using parent
|
|
206
|
+
return super.render(context);
|
|
207
|
+
}
|
|
208
|
+
createDetailScreen(item) {
|
|
209
|
+
const styles = this.getStyles();
|
|
210
|
+
return new ViewingScreen(item, styles, () => this.termWidth);
|
|
1034
211
|
}
|
|
1035
212
|
}
|