@butlerw/vellum 0.1.0
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 +21 -0
- package/README.md +411 -0
- package/__fixtures__/responses/code-generation.json +42 -0
- package/__fixtures__/responses/error-response.json +20 -0
- package/__fixtures__/responses/hello-world.json +32 -0
- package/dist/auth-6MCXESOH.js +26 -0
- package/dist/chunk-SECXJGWA.js +597 -0
- package/dist/index.js +34023 -0
- package/package.json +67 -0
- package/src/__tests__/commands.e2e.test.ts +728 -0
- package/src/__tests__/credentials.test.ts +713 -0
- package/src/__tests__/mode-e2e.test.ts +391 -0
- package/src/__tests__/tui-integration.test.tsx +1271 -0
- package/src/agents/__tests__/task-persistence.test.ts +235 -0
- package/src/agents/commands/delegate.ts +240 -0
- package/src/agents/commands/index.ts +10 -0
- package/src/agents/commands/resume.ts +335 -0
- package/src/agents/index.ts +29 -0
- package/src/agents/task-persistence.ts +272 -0
- package/src/agents/task-resumption.ts +242 -0
- package/src/app.tsx +4737 -0
- package/src/commands/__tests__/.gitkeep +1 -0
- package/src/commands/__tests__/agents.test.ts +606 -0
- package/src/commands/__tests__/auth.test.ts +626 -0
- package/src/commands/__tests__/autocomplete.test.ts +683 -0
- package/src/commands/__tests__/batch.test.ts +287 -0
- package/src/commands/__tests__/chain-pipe-parser.test.ts +654 -0
- package/src/commands/__tests__/completion.test.ts +238 -0
- package/src/commands/__tests__/core.test.ts +363 -0
- package/src/commands/__tests__/executor.test.ts +496 -0
- package/src/commands/__tests__/exit-codes.test.ts +220 -0
- package/src/commands/__tests__/init.test.ts +243 -0
- package/src/commands/__tests__/language.test.ts +353 -0
- package/src/commands/__tests__/mode-cli.test.ts +667 -0
- package/src/commands/__tests__/model.test.ts +277 -0
- package/src/commands/__tests__/parser.test.ts +493 -0
- package/src/commands/__tests__/performance.bench.ts +380 -0
- package/src/commands/__tests__/registry.test.ts +534 -0
- package/src/commands/__tests__/resume.test.ts +449 -0
- package/src/commands/__tests__/security.test.ts +845 -0
- package/src/commands/__tests__/stream-json.test.ts +372 -0
- package/src/commands/__tests__/user-commands.test.ts +597 -0
- package/src/commands/adapters.ts +267 -0
- package/src/commands/agent.ts +395 -0
- package/src/commands/agents/generate.ts +506 -0
- package/src/commands/agents/index.ts +272 -0
- package/src/commands/agents/show.ts +271 -0
- package/src/commands/agents/validate.ts +387 -0
- package/src/commands/auth.ts +883 -0
- package/src/commands/autocomplete.ts +480 -0
- package/src/commands/batch/command.ts +388 -0
- package/src/commands/batch/executor.ts +361 -0
- package/src/commands/batch/index.ts +12 -0
- package/src/commands/commit.ts +235 -0
- package/src/commands/completion/index.ts +371 -0
- package/src/commands/condense.ts +191 -0
- package/src/commands/config.ts +344 -0
- package/src/commands/context-provider.ts +173 -0
- package/src/commands/copy.ts +329 -0
- package/src/commands/core/clear.ts +38 -0
- package/src/commands/core/exit.ts +43 -0
- package/src/commands/core/help.ts +354 -0
- package/src/commands/core/index.ts +15 -0
- package/src/commands/cost.ts +179 -0
- package/src/commands/credentials.tsx +618 -0
- package/src/commands/custom-agents/__tests__/custom-agents.test.ts +709 -0
- package/src/commands/custom-agents/create.ts +377 -0
- package/src/commands/custom-agents/export.ts +135 -0
- package/src/commands/custom-agents/import.ts +199 -0
- package/src/commands/custom-agents/index.ts +372 -0
- package/src/commands/custom-agents/info.ts +318 -0
- package/src/commands/custom-agents/list.ts +267 -0
- package/src/commands/custom-agents/validate.ts +388 -0
- package/src/commands/diff-mode.ts +241 -0
- package/src/commands/env.ts +53 -0
- package/src/commands/executor.ts +579 -0
- package/src/commands/exit-codes.ts +202 -0
- package/src/commands/index.ts +701 -0
- package/src/commands/init/index.ts +15 -0
- package/src/commands/init/prompts.ts +366 -0
- package/src/commands/init/templates/commands-readme.md +80 -0
- package/src/commands/init/templates/example-command.md +79 -0
- package/src/commands/init/templates/example-skill.md +168 -0
- package/src/commands/init/templates/example-workflow.md +101 -0
- package/src/commands/init/templates/prompts-readme.md +52 -0
- package/src/commands/init/templates/rules-readme.md +63 -0
- package/src/commands/init/templates/skills-readme.md +83 -0
- package/src/commands/init/templates/workflows-readme.md +94 -0
- package/src/commands/init.ts +391 -0
- package/src/commands/install.ts +90 -0
- package/src/commands/language.ts +191 -0
- package/src/commands/loaders/.gitkeep +1 -0
- package/src/commands/lsp.ts +199 -0
- package/src/commands/markdown-commands.ts +253 -0
- package/src/commands/mcp.ts +588 -0
- package/src/commands/memory/export.ts +341 -0
- package/src/commands/memory/index.ts +148 -0
- package/src/commands/memory/list.ts +261 -0
- package/src/commands/memory/search.ts +346 -0
- package/src/commands/memory/utils.ts +15 -0
- package/src/commands/metrics.ts +75 -0
- package/src/commands/migrate/index.ts +16 -0
- package/src/commands/migrate/prompts.ts +477 -0
- package/src/commands/mode.ts +331 -0
- package/src/commands/model.ts +298 -0
- package/src/commands/onboard.ts +205 -0
- package/src/commands/open.ts +169 -0
- package/src/commands/output/stream-json.ts +373 -0
- package/src/commands/parser/chain-parser.ts +370 -0
- package/src/commands/parser/index.ts +29 -0
- package/src/commands/parser/pipe-parser.ts +480 -0
- package/src/commands/parser.ts +588 -0
- package/src/commands/persistence.ts +355 -0
- package/src/commands/progress.ts +18 -0
- package/src/commands/prompt/index.ts +17 -0
- package/src/commands/prompt/validate.ts +621 -0
- package/src/commands/prompt-priority.ts +401 -0
- package/src/commands/registry.ts +374 -0
- package/src/commands/sandbox/index.ts +131 -0
- package/src/commands/security/index.ts +21 -0
- package/src/commands/security/input-sanitizer.ts +168 -0
- package/src/commands/security/permission-checker.ts +456 -0
- package/src/commands/security/sensitive-data.ts +350 -0
- package/src/commands/session/delete.ts +38 -0
- package/src/commands/session/export.ts +39 -0
- package/src/commands/session/index.ts +26 -0
- package/src/commands/session/list.ts +26 -0
- package/src/commands/session/resume.ts +562 -0
- package/src/commands/session/search.ts +434 -0
- package/src/commands/session/show.ts +26 -0
- package/src/commands/settings.ts +368 -0
- package/src/commands/setup.ts +23 -0
- package/src/commands/shell/index.ts +16 -0
- package/src/commands/shell/setup.ts +422 -0
- package/src/commands/shell-init.ts +50 -0
- package/src/commands/shell-integration/index.ts +194 -0
- package/src/commands/skill.ts +1220 -0
- package/src/commands/spec.ts +558 -0
- package/src/commands/status.ts +246 -0
- package/src/commands/theme.ts +211 -0
- package/src/commands/think.ts +551 -0
- package/src/commands/trust.ts +211 -0
- package/src/commands/tutorial.ts +522 -0
- package/src/commands/types.ts +512 -0
- package/src/commands/update.ts +274 -0
- package/src/commands/usage.ts +213 -0
- package/src/commands/user-commands.ts +630 -0
- package/src/commands/utils.ts +142 -0
- package/src/commands/vim.ts +152 -0
- package/src/commands/workflow.ts +257 -0
- package/src/components/header.tsx +25 -0
- package/src/components/input.tsx +25 -0
- package/src/components/message-list.tsx +32 -0
- package/src/components/status-bar.tsx +23 -0
- package/src/index.tsx +614 -0
- package/src/onboarding/__tests__/tutorial.test.ts +740 -0
- package/src/onboarding/index.ts +69 -0
- package/src/onboarding/tips/index.ts +9 -0
- package/src/onboarding/tips/tip-engine.ts +459 -0
- package/src/onboarding/tutorial/index.ts +88 -0
- package/src/onboarding/tutorial/lessons/basics.ts +151 -0
- package/src/onboarding/tutorial/lessons/index.ts +151 -0
- package/src/onboarding/tutorial/lessons/modes.ts +230 -0
- package/src/onboarding/tutorial/lessons/tools.ts +172 -0
- package/src/onboarding/tutorial/progress-tracker.ts +350 -0
- package/src/onboarding/tutorial/storage.ts +249 -0
- package/src/onboarding/tutorial/tutorial-system.ts +462 -0
- package/src/onboarding/tutorial/types.ts +310 -0
- package/src/orchestrator-singleton.ts +129 -0
- package/src/shutdown.ts +33 -0
- package/src/test/e2e/assertions.ts +267 -0
- package/src/test/e2e/fixtures.ts +204 -0
- package/src/test/e2e/harness.ts +575 -0
- package/src/test/e2e/index.ts +57 -0
- package/src/test/e2e/types.ts +228 -0
- package/src/test/fixtures/__tests__/fake-response-loader.test.ts +314 -0
- package/src/test/fixtures/fake-response-loader.ts +314 -0
- package/src/test/fixtures/index.ts +20 -0
- package/src/tui/__tests__/mcp-panel.test.tsx +82 -0
- package/src/tui/__tests__/mcp-wiring.test.tsx +78 -0
- package/src/tui/__tests__/mode-components.test.tsx +395 -0
- package/src/tui/__tests__/permission-ask-flow.test.tsx +138 -0
- package/src/tui/__tests__/sidebar-panel-data.test.tsx +148 -0
- package/src/tui/__tests__/tools-panel-hotkeys.test.tsx +41 -0
- package/src/tui/adapters/agent-adapter.ts +1008 -0
- package/src/tui/adapters/index.ts +48 -0
- package/src/tui/adapters/message-adapter.ts +315 -0
- package/src/tui/adapters/persistence-bridge.ts +331 -0
- package/src/tui/adapters/session-adapter.ts +419 -0
- package/src/tui/buffered-stdout.ts +223 -0
- package/src/tui/components/AgentProgress.tsx +424 -0
- package/src/tui/components/Banner/AsciiArt.ts +160 -0
- package/src/tui/components/Banner/Banner.tsx +355 -0
- package/src/tui/components/Banner/ShimmerContext.tsx +131 -0
- package/src/tui/components/Banner/ShimmerText.tsx +193 -0
- package/src/tui/components/Banner/TypeWriterGradient.tsx +321 -0
- package/src/tui/components/Banner/index.ts +61 -0
- package/src/tui/components/Banner/useShimmer.ts +241 -0
- package/src/tui/components/ChatView.tsx +11 -0
- package/src/tui/components/Checkpoint/CheckpointDiffView.tsx +371 -0
- package/src/tui/components/Checkpoint/SnapshotCheckpointPanel.tsx +440 -0
- package/src/tui/components/Checkpoint/index.ts +19 -0
- package/src/tui/components/CostDisplay.tsx +226 -0
- package/src/tui/components/InitErrorBanner.tsx +122 -0
- package/src/tui/components/Input/Autocomplete.tsx +603 -0
- package/src/tui/components/Input/EnhancedCommandInput.tsx +471 -0
- package/src/tui/components/Input/HighlightedText.tsx +236 -0
- package/src/tui/components/Input/MentionAutocomplete.tsx +375 -0
- package/src/tui/components/Input/TextInput.tsx +1002 -0
- package/src/tui/components/Input/__tests__/Autocomplete.test.tsx +374 -0
- package/src/tui/components/Input/__tests__/TextInput.test.tsx +241 -0
- package/src/tui/components/Input/__tests__/highlight.test.ts +219 -0
- package/src/tui/components/Input/__tests__/slash-command-utils.test.ts +104 -0
- package/src/tui/components/Input/highlight.ts +362 -0
- package/src/tui/components/Input/index.ts +36 -0
- package/src/tui/components/Input/slash-command-utils.ts +135 -0
- package/src/tui/components/Layout.tsx +432 -0
- package/src/tui/components/McpPanel.tsx +137 -0
- package/src/tui/components/MemoryPanel.tsx +448 -0
- package/src/tui/components/Messages/CodeBlock.tsx +527 -0
- package/src/tui/components/Messages/DiffView.tsx +679 -0
- package/src/tui/components/Messages/ImageReference.tsx +89 -0
- package/src/tui/components/Messages/MarkdownBlock.tsx +228 -0
- package/src/tui/components/Messages/MarkdownRenderer.tsx +498 -0
- package/src/tui/components/Messages/MessageBubble.tsx +270 -0
- package/src/tui/components/Messages/MessageList.tsx +1719 -0
- package/src/tui/components/Messages/StreamingText.tsx +216 -0
- package/src/tui/components/Messages/ThinkingBlock.tsx +408 -0
- package/src/tui/components/Messages/ToolResultPreview.tsx +243 -0
- package/src/tui/components/Messages/__tests__/CodeBlock.test.tsx +296 -0
- package/src/tui/components/Messages/__tests__/DiffView.test.tsx +239 -0
- package/src/tui/components/Messages/__tests__/MarkdownRenderer.test.tsx +303 -0
- package/src/tui/components/Messages/__tests__/MessageBubble.test.tsx +268 -0
- package/src/tui/components/Messages/__tests__/MessageList.test.tsx +324 -0
- package/src/tui/components/Messages/__tests__/StreamingText.test.tsx +215 -0
- package/src/tui/components/Messages/index.ts +25 -0
- package/src/tui/components/ModeIndicator.tsx +177 -0
- package/src/tui/components/ModeSelector.tsx +216 -0
- package/src/tui/components/ModelSelector.tsx +339 -0
- package/src/tui/components/OnboardingWizard.tsx +670 -0
- package/src/tui/components/PhaseProgressIndicator.tsx +270 -0
- package/src/tui/components/RateLimitIndicator.tsx +82 -0
- package/src/tui/components/ScreenReaderLayout.tsx +295 -0
- package/src/tui/components/SettingsPanel.tsx +643 -0
- package/src/tui/components/Sidebar/SystemStatusPanel.tsx +284 -0
- package/src/tui/components/Sidebar/index.ts +9 -0
- package/src/tui/components/Status/ModelStatusBar.tsx +270 -0
- package/src/tui/components/Status/index.ts +12 -0
- package/src/tui/components/StatusBar/AgentModeIndicator.tsx +257 -0
- package/src/tui/components/StatusBar/ContextProgress.tsx +167 -0
- package/src/tui/components/StatusBar/FileChangesIndicator.tsx +62 -0
- package/src/tui/components/StatusBar/GitIndicator.tsx +89 -0
- package/src/tui/components/StatusBar/HeaderBar.tsx +126 -0
- package/src/tui/components/StatusBar/ModelIndicator.tsx +157 -0
- package/src/tui/components/StatusBar/PersistenceStatusIndicator.tsx +210 -0
- package/src/tui/components/StatusBar/ResilienceIndicator.tsx +106 -0
- package/src/tui/components/StatusBar/SandboxIndicator.tsx +167 -0
- package/src/tui/components/StatusBar/StatusBar.tsx +368 -0
- package/src/tui/components/StatusBar/ThinkingModeIndicator.tsx +170 -0
- package/src/tui/components/StatusBar/TokenBreakdown.tsx +246 -0
- package/src/tui/components/StatusBar/TokenCounter.tsx +135 -0
- package/src/tui/components/StatusBar/TrustModeIndicator.tsx +130 -0
- package/src/tui/components/StatusBar/WorkspaceIndicator.tsx +86 -0
- package/src/tui/components/StatusBar/__tests__/AgentModeIndicator.test.tsx +193 -0
- package/src/tui/components/StatusBar/__tests__/StatusBar.test.tsx +729 -0
- package/src/tui/components/StatusBar/index.ts +60 -0
- package/src/tui/components/TipBanner.tsx +115 -0
- package/src/tui/components/TodoItem.tsx +208 -0
- package/src/tui/components/TodoPanel.tsx +455 -0
- package/src/tui/components/Tools/ApprovalQueue.tsx +407 -0
- package/src/tui/components/Tools/OptionSelector.tsx +160 -0
- package/src/tui/components/Tools/PermissionDialog.tsx +286 -0
- package/src/tui/components/Tools/ToolParams.tsx +483 -0
- package/src/tui/components/Tools/ToolsPanel.tsx +178 -0
- package/src/tui/components/Tools/__tests__/PermissionDialog.test.tsx +510 -0
- package/src/tui/components/Tools/__tests__/ToolParams.test.tsx +432 -0
- package/src/tui/components/Tools/index.ts +21 -0
- package/src/tui/components/TrustPrompt.tsx +279 -0
- package/src/tui/components/UpdateBanner.tsx +166 -0
- package/src/tui/components/VimModeIndicator.tsx +112 -0
- package/src/tui/components/backtrack/BacktrackControls.tsx +402 -0
- package/src/tui/components/backtrack/index.ts +13 -0
- package/src/tui/components/common/AutoApprovalStatus.tsx +251 -0
- package/src/tui/components/common/CostWarning.tsx +294 -0
- package/src/tui/components/common/DynamicShortcutHints.tsx +209 -0
- package/src/tui/components/common/EnhancedLoadingIndicator.tsx +305 -0
- package/src/tui/components/common/ErrorBoundary.tsx +140 -0
- package/src/tui/components/common/GradientText.tsx +224 -0
- package/src/tui/components/common/HotkeyHelpModal.tsx +193 -0
- package/src/tui/components/common/HotkeyHints.tsx +70 -0
- package/src/tui/components/common/MaxSizedBox.tsx +354 -0
- package/src/tui/components/common/NewMessagesBadge.tsx +65 -0
- package/src/tui/components/common/ProtectedFileLegend.tsx +89 -0
- package/src/tui/components/common/ScrollIndicator.tsx +160 -0
- package/src/tui/components/common/Spinner.tsx +342 -0
- package/src/tui/components/common/StreamingIndicator.tsx +316 -0
- package/src/tui/components/common/VirtualizedList/VirtualizedList.tsx +428 -0
- package/src/tui/components/common/VirtualizedList/hooks/index.ts +19 -0
- package/src/tui/components/common/VirtualizedList/hooks/useBatchedScroll.ts +64 -0
- package/src/tui/components/common/VirtualizedList/hooks/useScrollAnchor.ts +290 -0
- package/src/tui/components/common/VirtualizedList/hooks/useVirtualization.ts +340 -0
- package/src/tui/components/common/VirtualizedList/index.ts +30 -0
- package/src/tui/components/common/VirtualizedList/types.ts +107 -0
- package/src/tui/components/common/__tests__/NewMessagesBadge.test.tsx +74 -0
- package/src/tui/components/common/__tests__/ScrollIndicator.test.tsx +193 -0
- package/src/tui/components/common/index.ts +110 -0
- package/src/tui/components/index.ts +79 -0
- package/src/tui/components/session/CheckpointPanel.tsx +323 -0
- package/src/tui/components/session/RollbackDialog.tsx +169 -0
- package/src/tui/components/session/SessionItem.tsx +136 -0
- package/src/tui/components/session/SessionListPanel.tsx +252 -0
- package/src/tui/components/session/SessionPicker.tsx +449 -0
- package/src/tui/components/session/SessionPreview.tsx +240 -0
- package/src/tui/components/session/__tests__/session.test.tsx +408 -0
- package/src/tui/components/session/index.ts +28 -0
- package/src/tui/components/session/types.ts +116 -0
- package/src/tui/components/theme/__tests__/tokens.test.ts +471 -0
- package/src/tui/components/theme/index.ts +227 -0
- package/src/tui/components/theme/tokens.ts +484 -0
- package/src/tui/config/defaults.ts +134 -0
- package/src/tui/config/index.ts +17 -0
- package/src/tui/context/AnimationContext.tsx +284 -0
- package/src/tui/context/AppContext.tsx +349 -0
- package/src/tui/context/BracketedPasteContext.tsx +372 -0
- package/src/tui/context/LspContext.tsx +192 -0
- package/src/tui/context/McpContext.tsx +325 -0
- package/src/tui/context/MessagesContext.tsx +870 -0
- package/src/tui/context/OverflowContext.tsx +213 -0
- package/src/tui/context/RateLimitContext.tsx +108 -0
- package/src/tui/context/ResilienceContext.tsx +275 -0
- package/src/tui/context/RootProvider.tsx +136 -0
- package/src/tui/context/ScrollContext.tsx +331 -0
- package/src/tui/context/ToolsContext.tsx +702 -0
- package/src/tui/context/__tests__/BracketedPasteContext.test.tsx +416 -0
- package/src/tui/context/index.ts +140 -0
- package/src/tui/enterprise-integration.ts +282 -0
- package/src/tui/hooks/__tests__/useBacktrack.test.tsx +138 -0
- package/src/tui/hooks/__tests__/useBracketedPaste.test.tsx +222 -0
- package/src/tui/hooks/__tests__/useCopyMode.test.tsx +336 -0
- package/src/tui/hooks/__tests__/useHotkeys.ctrl-input.test.tsx +96 -0
- package/src/tui/hooks/__tests__/useHotkeys.test.tsx +454 -0
- package/src/tui/hooks/__tests__/useInputHistory.test.tsx +660 -0
- package/src/tui/hooks/__tests__/useLineBuffer.test.ts +295 -0
- package/src/tui/hooks/__tests__/useModeController.test.ts +137 -0
- package/src/tui/hooks/__tests__/useModeShortcuts.test.tsx +142 -0
- package/src/tui/hooks/__tests__/useScrollController.test.ts +464 -0
- package/src/tui/hooks/__tests__/useVim.test.tsx +531 -0
- package/src/tui/hooks/index.ts +252 -0
- package/src/tui/hooks/useAgentLoop.ts +712 -0
- package/src/tui/hooks/useAlternateBuffer.ts +398 -0
- package/src/tui/hooks/useAnimatedScrollbar.ts +241 -0
- package/src/tui/hooks/useBacktrack.ts +443 -0
- package/src/tui/hooks/useBracketedPaste.ts +104 -0
- package/src/tui/hooks/useCollapsible.ts +240 -0
- package/src/tui/hooks/useCopyMode.ts +382 -0
- package/src/tui/hooks/useCostSummary.ts +75 -0
- package/src/tui/hooks/useDesktopNotification.ts +414 -0
- package/src/tui/hooks/useDiffMode.ts +44 -0
- package/src/tui/hooks/useFileChangeStats.ts +110 -0
- package/src/tui/hooks/useFileSuggestions.ts +284 -0
- package/src/tui/hooks/useFlickerDetector.ts +250 -0
- package/src/tui/hooks/useGitStatus.ts +200 -0
- package/src/tui/hooks/useHotkeys.ts +579 -0
- package/src/tui/hooks/useImagePaste.ts +114 -0
- package/src/tui/hooks/useInputHighlight.ts +145 -0
- package/src/tui/hooks/useInputHistory.ts +246 -0
- package/src/tui/hooks/useKeyboardScroll.ts +209 -0
- package/src/tui/hooks/useLineBuffer.ts +356 -0
- package/src/tui/hooks/useMentionAutocomplete.ts +235 -0
- package/src/tui/hooks/useModeController.ts +167 -0
- package/src/tui/hooks/useModeShortcuts.ts +196 -0
- package/src/tui/hooks/usePermissionHandler.ts +146 -0
- package/src/tui/hooks/usePersistence.ts +480 -0
- package/src/tui/hooks/usePersistenceShortcuts.ts +225 -0
- package/src/tui/hooks/usePlaceholderRotation.ts +143 -0
- package/src/tui/hooks/useProviderStatus.ts +270 -0
- package/src/tui/hooks/useRateLimitStatus.ts +90 -0
- package/src/tui/hooks/useScreenReader.ts +315 -0
- package/src/tui/hooks/useScrollController.ts +450 -0
- package/src/tui/hooks/useScrollEventBatcher.ts +185 -0
- package/src/tui/hooks/useSidebarPanelData.ts +115 -0
- package/src/tui/hooks/useSmoothScroll.ts +202 -0
- package/src/tui/hooks/useSnapshots.ts +300 -0
- package/src/tui/hooks/useStateAndRef.ts +50 -0
- package/src/tui/hooks/useTerminalSize.ts +206 -0
- package/src/tui/hooks/useToolApprovalController.ts +91 -0
- package/src/tui/hooks/useVim.ts +334 -0
- package/src/tui/hooks/useWorkspace.ts +56 -0
- package/src/tui/i18n/__tests__/init.test.ts +278 -0
- package/src/tui/i18n/__tests__/language-config.test.ts +199 -0
- package/src/tui/i18n/__tests__/locale-detection.test.ts +250 -0
- package/src/tui/i18n/__tests__/settings-integration.test.ts +262 -0
- package/src/tui/i18n/index.ts +72 -0
- package/src/tui/i18n/init.ts +131 -0
- package/src/tui/i18n/language-config.ts +106 -0
- package/src/tui/i18n/locale-detection.ts +173 -0
- package/src/tui/i18n/settings-integration.ts +557 -0
- package/src/tui/i18n/tui-namespace.ts +538 -0
- package/src/tui/i18n/types.ts +312 -0
- package/src/tui/index.ts +43 -0
- package/src/tui/lsp-integration.ts +409 -0
- package/src/tui/metrics-integration.ts +366 -0
- package/src/tui/plugins.ts +383 -0
- package/src/tui/resilience.ts +342 -0
- package/src/tui/sandbox-integration.ts +317 -0
- package/src/tui/services/clipboard.ts +348 -0
- package/src/tui/services/fuzzy-search.ts +441 -0
- package/src/tui/services/index.ts +72 -0
- package/src/tui/services/markdown-renderer.ts +565 -0
- package/src/tui/services/open-external.ts +247 -0
- package/src/tui/services/syntax-highlighter.ts +483 -0
- package/src/tui/slash-commands.ts +12 -0
- package/src/tui/theme/index.ts +15 -0
- package/src/tui/theme/provider.tsx +206 -0
- package/src/tui/tip-integration.ts +300 -0
- package/src/tui/types/__tests__/ink-extended.test.ts +121 -0
- package/src/tui/types/ink-extended.ts +87 -0
- package/src/tui/utils/__tests__/bracketedPaste.test.ts +231 -0
- package/src/tui/utils/__tests__/heightEstimator.test.ts +157 -0
- package/src/tui/utils/__tests__/text-width.test.ts +158 -0
- package/src/tui/utils/__tests__/textSanitizer.test.ts +266 -0
- package/src/tui/utils/__tests__/ui-sizing.test.ts +169 -0
- package/src/tui/utils/bracketedPaste.ts +107 -0
- package/src/tui/utils/cursor-manager.ts +131 -0
- package/src/tui/utils/detectTerminal.ts +596 -0
- package/src/tui/utils/findLastSafeSplitPoint.ts +92 -0
- package/src/tui/utils/heightEstimator.ts +198 -0
- package/src/tui/utils/index.ts +91 -0
- package/src/tui/utils/isNarrowWidth.ts +52 -0
- package/src/tui/utils/stdoutGuard.ts +90 -0
- package/src/tui/utils/synchronized-update.ts +70 -0
- package/src/tui/utils/text-width.ts +225 -0
- package/src/tui/utils/textSanitizer.ts +225 -0
- package/src/tui/utils/textUtils.ts +114 -0
- package/src/tui/utils/ui-sizing.ts +192 -0
- package/src/tui-blessed/app.ts +160 -0
- package/src/tui-blessed/index.ts +2 -0
- package/src/tui-blessed/neo-blessed.d.ts +6 -0
- package/src/tui-blessed/test.ts +21 -0
- package/src/tui-blessed/types.ts +14 -0
- package/src/utils/icons.ts +130 -0
- package/src/utils/index.ts +33 -0
- package/src/utils/resume-hint.ts +86 -0
- package/src/version.ts +1 -0
- package/tsconfig.json +8 -0
- package/vitest.config.ts +35 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Basics Tutorial Lesson
|
|
3
|
+
*
|
|
4
|
+
* Getting started lesson that covers fundamental Vellum concepts.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/onboarding/tutorial/lessons/basics
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { Lesson } from "../types.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Getting Started lesson - covers basic Vellum usage
|
|
13
|
+
*/
|
|
14
|
+
export const basicsLesson: Lesson = {
|
|
15
|
+
id: "basics",
|
|
16
|
+
title: "Getting Started with Vellum",
|
|
17
|
+
description: "Learn the fundamentals of using Vellum AI coding assistant",
|
|
18
|
+
category: "basics",
|
|
19
|
+
difficulty: "beginner",
|
|
20
|
+
prerequisites: [],
|
|
21
|
+
estimatedMinutes: 5,
|
|
22
|
+
icon: "📚",
|
|
23
|
+
tags: ["beginner", "introduction", "fundamentals"],
|
|
24
|
+
steps: [
|
|
25
|
+
{
|
|
26
|
+
id: "basics-welcome",
|
|
27
|
+
title: "Welcome to Vellum",
|
|
28
|
+
content: `
|
|
29
|
+
Welcome to Vellum! 🎉
|
|
30
|
+
|
|
31
|
+
Vellum is an AI-powered coding assistant that helps you write, debug,
|
|
32
|
+
and understand code faster.
|
|
33
|
+
|
|
34
|
+
This tutorial will teach you the basics:
|
|
35
|
+
• How to interact with the AI
|
|
36
|
+
• How to use slash commands
|
|
37
|
+
• How to get the most out of Vellum
|
|
38
|
+
|
|
39
|
+
Press Enter to continue...
|
|
40
|
+
`.trim(),
|
|
41
|
+
action: "read",
|
|
42
|
+
estimatedDuration: 30,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: "basics-chat",
|
|
46
|
+
title: "Chatting with the AI",
|
|
47
|
+
content: `
|
|
48
|
+
**Talking to Vellum**
|
|
49
|
+
|
|
50
|
+
Simply type your question or request in natural language:
|
|
51
|
+
|
|
52
|
+
• "Explain this function"
|
|
53
|
+
• "Write a unit test for this code"
|
|
54
|
+
• "Fix the bug in line 42"
|
|
55
|
+
• "Refactor this to use async/await"
|
|
56
|
+
|
|
57
|
+
The AI understands context from your project and current file.
|
|
58
|
+
|
|
59
|
+
💡 Tip: Be specific about what you want for better results!
|
|
60
|
+
`.trim(),
|
|
61
|
+
action: "read",
|
|
62
|
+
hint: "Try asking the AI to explain something simple",
|
|
63
|
+
estimatedDuration: 45,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: "basics-help",
|
|
67
|
+
title: "Using the Help Command",
|
|
68
|
+
content: `
|
|
69
|
+
**Slash Commands**
|
|
70
|
+
|
|
71
|
+
Vellum has built-in commands that start with "/":
|
|
72
|
+
|
|
73
|
+
Try typing: /help
|
|
74
|
+
|
|
75
|
+
This shows all available commands and their descriptions.
|
|
76
|
+
`.trim(),
|
|
77
|
+
action: "command",
|
|
78
|
+
command: "/help",
|
|
79
|
+
expectedOutcome: "You should see a list of available commands",
|
|
80
|
+
hint: "Type /help and press Enter",
|
|
81
|
+
estimatedDuration: 30,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: "basics-clear",
|
|
85
|
+
title: "Clearing the Screen",
|
|
86
|
+
content: `
|
|
87
|
+
**The /clear Command**
|
|
88
|
+
|
|
89
|
+
To clear the conversation history and start fresh:
|
|
90
|
+
|
|
91
|
+
Try typing: /clear
|
|
92
|
+
|
|
93
|
+
This clears the display but keeps your session active.
|
|
94
|
+
`.trim(),
|
|
95
|
+
action: "command",
|
|
96
|
+
command: "/clear",
|
|
97
|
+
expectedOutcome: "The screen should be cleared",
|
|
98
|
+
hint: "Type /clear and press Enter",
|
|
99
|
+
estimatedDuration: 20,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: "basics-mode",
|
|
103
|
+
title: "Understanding Modes",
|
|
104
|
+
content: `
|
|
105
|
+
**Coding Modes**
|
|
106
|
+
|
|
107
|
+
Vellum has different modes for different tasks:
|
|
108
|
+
|
|
109
|
+
• **code** - General coding assistance
|
|
110
|
+
• **architect** - System design and architecture
|
|
111
|
+
• **debug** - Focused debugging help
|
|
112
|
+
• **explain** - Code explanations
|
|
113
|
+
• **review** - Code review
|
|
114
|
+
|
|
115
|
+
Use /mode to see current mode or switch modes.
|
|
116
|
+
`.trim(),
|
|
117
|
+
action: "read",
|
|
118
|
+
hint: "Try /mode to see your current mode",
|
|
119
|
+
estimatedDuration: 45,
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
id: "basics-complete",
|
|
123
|
+
title: "Basics Complete!",
|
|
124
|
+
content: `
|
|
125
|
+
🎉 **Congratulations!**
|
|
126
|
+
|
|
127
|
+
You've learned the basics of Vellum:
|
|
128
|
+
|
|
129
|
+
✅ How to chat with the AI
|
|
130
|
+
✅ How to use slash commands
|
|
131
|
+
✅ How to get help
|
|
132
|
+
✅ Understanding modes
|
|
133
|
+
|
|
134
|
+
**Next Steps:**
|
|
135
|
+
• Try the "Tools" tutorial to learn about available tools
|
|
136
|
+
• Try the "Modes" tutorial for advanced mode usage
|
|
137
|
+
|
|
138
|
+
Happy coding! 🚀
|
|
139
|
+
`.trim(),
|
|
140
|
+
action: "complete",
|
|
141
|
+
estimatedDuration: 15,
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Get the basics lesson
|
|
148
|
+
*/
|
|
149
|
+
export function getBasicsLesson(): Lesson {
|
|
150
|
+
return basicsLesson;
|
|
151
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tutorial Lessons Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all available tutorial lessons.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/onboarding/tutorial/lessons
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { Lesson, LessonCategory } from "../types.js";
|
|
10
|
+
import { basicsLesson } from "./basics.js";
|
|
11
|
+
import { modesLesson } from "./modes.js";
|
|
12
|
+
import { toolsLesson } from "./tools.js";
|
|
13
|
+
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// Lesson Exports
|
|
16
|
+
// =============================================================================
|
|
17
|
+
|
|
18
|
+
export { basicsLesson, getBasicsLesson } from "./basics.js";
|
|
19
|
+
export { getModesLesson, modesLesson } from "./modes.js";
|
|
20
|
+
export { getToolsLesson, toolsLesson } from "./tools.js";
|
|
21
|
+
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// Lesson Registry
|
|
24
|
+
// =============================================================================
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* All available lessons
|
|
28
|
+
*/
|
|
29
|
+
export const ALL_LESSONS: readonly Lesson[] = [basicsLesson, toolsLesson, modesLesson] as const;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Lessons indexed by ID
|
|
33
|
+
*/
|
|
34
|
+
export const LESSONS_BY_ID: Readonly<Record<string, Lesson>> = Object.freeze(
|
|
35
|
+
ALL_LESSONS.reduce(
|
|
36
|
+
(acc, lesson) => {
|
|
37
|
+
acc[lesson.id] = lesson;
|
|
38
|
+
return acc;
|
|
39
|
+
},
|
|
40
|
+
{} as Record<string, Lesson>
|
|
41
|
+
)
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Lessons grouped by category
|
|
46
|
+
*/
|
|
47
|
+
export const LESSONS_BY_CATEGORY: Readonly<Record<LessonCategory, Lesson[]>> = Object.freeze({
|
|
48
|
+
basics: ALL_LESSONS.filter((l) => l.category === "basics"),
|
|
49
|
+
tools: ALL_LESSONS.filter((l) => l.category === "tools"),
|
|
50
|
+
modes: ALL_LESSONS.filter((l) => l.category === "modes"),
|
|
51
|
+
advanced: ALL_LESSONS.filter((l) => l.category === "advanced"),
|
|
52
|
+
workflow: ALL_LESSONS.filter((l) => l.category === "workflow"),
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// =============================================================================
|
|
56
|
+
// Lesson Utilities
|
|
57
|
+
// =============================================================================
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Get a lesson by ID
|
|
61
|
+
*/
|
|
62
|
+
export function getLessonById(lessonId: string): Lesson | undefined {
|
|
63
|
+
return LESSONS_BY_ID[lessonId];
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Get lessons by category
|
|
68
|
+
*/
|
|
69
|
+
export function getLessonsByCategory(category: LessonCategory): Lesson[] {
|
|
70
|
+
return LESSONS_BY_CATEGORY[category] ?? [];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Get all lessons
|
|
75
|
+
*/
|
|
76
|
+
export function getAllLessons(): Lesson[] {
|
|
77
|
+
return [...ALL_LESSONS];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Get recommended lesson order (respecting prerequisites)
|
|
82
|
+
*/
|
|
83
|
+
export function getRecommendedOrder(): Lesson[] {
|
|
84
|
+
// Simple topological sort based on prerequisites
|
|
85
|
+
const visited = new Set<string>();
|
|
86
|
+
const result: Lesson[] = [];
|
|
87
|
+
|
|
88
|
+
function visit(lesson: Lesson): void {
|
|
89
|
+
if (visited.has(lesson.id)) return;
|
|
90
|
+
|
|
91
|
+
// Visit prerequisites first
|
|
92
|
+
for (const prereqId of lesson.prerequisites) {
|
|
93
|
+
const prereq = LESSONS_BY_ID[prereqId];
|
|
94
|
+
if (prereq) {
|
|
95
|
+
visit(prereq);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
visited.add(lesson.id);
|
|
100
|
+
result.push(lesson);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
for (const lesson of ALL_LESSONS) {
|
|
104
|
+
visit(lesson);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Check if a lesson's prerequisites are met
|
|
112
|
+
*/
|
|
113
|
+
export function checkPrerequisites(lessonId: string, completedLessons: string[]): boolean {
|
|
114
|
+
const lesson = LESSONS_BY_ID[lessonId];
|
|
115
|
+
if (!lesson) return false;
|
|
116
|
+
|
|
117
|
+
return lesson.prerequisites.every((prereqId: string) => completedLessons.includes(prereqId));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Get next recommended lesson based on progress
|
|
122
|
+
*/
|
|
123
|
+
export function getNextLesson(completedLessons: string[]): Lesson | undefined {
|
|
124
|
+
const ordered = getRecommendedOrder();
|
|
125
|
+
|
|
126
|
+
return ordered.find(
|
|
127
|
+
(lesson) =>
|
|
128
|
+
!completedLessons.includes(lesson.id) && checkPrerequisites(lesson.id, completedLessons)
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Calculate total tutorial duration in minutes
|
|
134
|
+
*/
|
|
135
|
+
export function getTotalDuration(): number {
|
|
136
|
+
return ALL_LESSONS.reduce((sum, lesson) => sum + lesson.estimatedMinutes, 0);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Get lesson count
|
|
141
|
+
*/
|
|
142
|
+
export function getLessonCount(): number {
|
|
143
|
+
return ALL_LESSONS.length;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Get total step count across all lessons
|
|
148
|
+
*/
|
|
149
|
+
export function getTotalStepCount(): number {
|
|
150
|
+
return ALL_LESSONS.reduce((sum, lesson) => sum + lesson.steps.length, 0);
|
|
151
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modes Tutorial Lesson
|
|
3
|
+
*
|
|
4
|
+
* Lesson covering coding modes and when to use each.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/onboarding/tutorial/lessons/modes
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { Lesson } from "../types.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Modes lesson - understand and use coding modes
|
|
13
|
+
*/
|
|
14
|
+
export const modesLesson: Lesson = {
|
|
15
|
+
id: "modes",
|
|
16
|
+
title: "Mastering Coding Modes",
|
|
17
|
+
description: "Learn when and how to use different coding modes",
|
|
18
|
+
category: "modes",
|
|
19
|
+
difficulty: "intermediate",
|
|
20
|
+
prerequisites: ["basics"],
|
|
21
|
+
estimatedMinutes: 8,
|
|
22
|
+
icon: "⚡",
|
|
23
|
+
tags: ["modes", "workflow", "productivity"],
|
|
24
|
+
steps: [
|
|
25
|
+
{
|
|
26
|
+
id: "modes-intro",
|
|
27
|
+
title: "What are Modes?",
|
|
28
|
+
content: `
|
|
29
|
+
**Coding Modes**
|
|
30
|
+
|
|
31
|
+
Modes customize how Vellum responds to your requests:
|
|
32
|
+
|
|
33
|
+
• Different system prompts
|
|
34
|
+
• Different tool permissions
|
|
35
|
+
• Different response styles
|
|
36
|
+
|
|
37
|
+
Think of modes as "personalities" optimized for specific tasks.
|
|
38
|
+
`.trim(),
|
|
39
|
+
action: "read",
|
|
40
|
+
estimatedDuration: 30,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: "modes-check",
|
|
44
|
+
title: "Check Current Mode",
|
|
45
|
+
content: `
|
|
46
|
+
**The /mode Command**
|
|
47
|
+
|
|
48
|
+
To see your current mode:
|
|
49
|
+
|
|
50
|
+
Try typing: /mode
|
|
51
|
+
|
|
52
|
+
This shows your active mode and available options.
|
|
53
|
+
`.trim(),
|
|
54
|
+
action: "command",
|
|
55
|
+
command: "/mode",
|
|
56
|
+
expectedOutcome: "Your current mode and list of available modes",
|
|
57
|
+
hint: "Type /mode and press Enter",
|
|
58
|
+
estimatedDuration: 30,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: "modes-code",
|
|
62
|
+
title: "Code Mode",
|
|
63
|
+
content: `
|
|
64
|
+
**Code Mode** (Default)
|
|
65
|
+
|
|
66
|
+
Best for:
|
|
67
|
+
• Writing new features
|
|
68
|
+
• General coding tasks
|
|
69
|
+
• Implementation work
|
|
70
|
+
|
|
71
|
+
Balanced between speed and thoroughness.
|
|
72
|
+
`.trim(),
|
|
73
|
+
action: "read",
|
|
74
|
+
estimatedDuration: 30,
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
id: "modes-architect",
|
|
78
|
+
title: "Architect Mode",
|
|
79
|
+
content: `
|
|
80
|
+
**Architect Mode**
|
|
81
|
+
|
|
82
|
+
Best for:
|
|
83
|
+
• System design
|
|
84
|
+
• API planning
|
|
85
|
+
• Architecture decisions
|
|
86
|
+
• Refactoring strategies
|
|
87
|
+
|
|
88
|
+
Focuses on high-level thinking before implementation.
|
|
89
|
+
|
|
90
|
+
💡 Use when planning major features!
|
|
91
|
+
`.trim(),
|
|
92
|
+
action: "read",
|
|
93
|
+
hint: "Switch with: /mode architect",
|
|
94
|
+
estimatedDuration: 30,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: "modes-debug",
|
|
98
|
+
title: "Debug Mode",
|
|
99
|
+
content: `
|
|
100
|
+
**Debug Mode**
|
|
101
|
+
|
|
102
|
+
Best for:
|
|
103
|
+
• Fixing bugs
|
|
104
|
+
• Error investigation
|
|
105
|
+
• Understanding failures
|
|
106
|
+
• Performance issues
|
|
107
|
+
|
|
108
|
+
Methodical, step-by-step analysis approach.
|
|
109
|
+
|
|
110
|
+
💡 Great when you're stuck on an error!
|
|
111
|
+
`.trim(),
|
|
112
|
+
action: "read",
|
|
113
|
+
hint: "Switch with: /mode debug",
|
|
114
|
+
estimatedDuration: 30,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: "modes-explain",
|
|
118
|
+
title: "Explain Mode",
|
|
119
|
+
content: `
|
|
120
|
+
**Explain Mode**
|
|
121
|
+
|
|
122
|
+
Best for:
|
|
123
|
+
• Learning new code
|
|
124
|
+
• Understanding complex logic
|
|
125
|
+
• Documentation
|
|
126
|
+
• Code reviews
|
|
127
|
+
|
|
128
|
+
Detailed explanations with examples.
|
|
129
|
+
|
|
130
|
+
💡 Perfect for unfamiliar codebases!
|
|
131
|
+
`.trim(),
|
|
132
|
+
action: "read",
|
|
133
|
+
hint: "Switch with: /mode explain",
|
|
134
|
+
estimatedDuration: 30,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: "modes-review",
|
|
138
|
+
title: "Review Mode",
|
|
139
|
+
content: `
|
|
140
|
+
**Review Mode**
|
|
141
|
+
|
|
142
|
+
Best for:
|
|
143
|
+
• Code review
|
|
144
|
+
• Finding issues
|
|
145
|
+
• Suggesting improvements
|
|
146
|
+
• Best practices check
|
|
147
|
+
|
|
148
|
+
Critical analysis focused on quality.
|
|
149
|
+
|
|
150
|
+
💡 Run before submitting PRs!
|
|
151
|
+
`.trim(),
|
|
152
|
+
action: "read",
|
|
153
|
+
hint: "Switch with: /mode review",
|
|
154
|
+
estimatedDuration: 30,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: "modes-switch",
|
|
158
|
+
title: "Practice: Switch Modes",
|
|
159
|
+
content: `
|
|
160
|
+
**Try Switching!**
|
|
161
|
+
|
|
162
|
+
Switch to architect mode:
|
|
163
|
+
|
|
164
|
+
/mode architect
|
|
165
|
+
|
|
166
|
+
Then switch back to code mode:
|
|
167
|
+
|
|
168
|
+
/mode code
|
|
169
|
+
|
|
170
|
+
Notice how the context changes!
|
|
171
|
+
`.trim(),
|
|
172
|
+
action: "command",
|
|
173
|
+
command: "/mode architect",
|
|
174
|
+
expectedOutcome: "Mode should change to architect",
|
|
175
|
+
hint: "Type /mode architect and press Enter",
|
|
176
|
+
estimatedDuration: 45,
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
id: "modes-tips",
|
|
180
|
+
title: "Mode Selection Tips",
|
|
181
|
+
content: `
|
|
182
|
+
**When to Use Each Mode**
|
|
183
|
+
|
|
184
|
+
| Situation | Mode |
|
|
185
|
+
|-----------|------|
|
|
186
|
+
| Writing new code | code |
|
|
187
|
+
| Planning features | architect |
|
|
188
|
+
| Fixing bugs | debug |
|
|
189
|
+
| Learning code | explain |
|
|
190
|
+
| Before merge | review |
|
|
191
|
+
|
|
192
|
+
💡 **Pro Tip**: Start in architect mode for complex tasks,
|
|
193
|
+
then switch to code mode for implementation.
|
|
194
|
+
`.trim(),
|
|
195
|
+
action: "read",
|
|
196
|
+
estimatedDuration: 45,
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
id: "modes-complete",
|
|
200
|
+
title: "Modes Complete!",
|
|
201
|
+
content: `
|
|
202
|
+
🎉 **Excellent Work!**
|
|
203
|
+
|
|
204
|
+
You've mastered Vellum's coding modes:
|
|
205
|
+
|
|
206
|
+
✅ Understanding what modes do
|
|
207
|
+
✅ Available modes and their purposes
|
|
208
|
+
✅ How to switch between modes
|
|
209
|
+
✅ When to use each mode
|
|
210
|
+
|
|
211
|
+
**Your Workflow:**
|
|
212
|
+
1. Start in architect mode for planning
|
|
213
|
+
2. Switch to code mode for implementation
|
|
214
|
+
3. Use debug mode when things break
|
|
215
|
+
4. Finish with review mode for quality
|
|
216
|
+
|
|
217
|
+
You're now a Vellum power user! 🚀
|
|
218
|
+
`.trim(),
|
|
219
|
+
action: "complete",
|
|
220
|
+
estimatedDuration: 15,
|
|
221
|
+
},
|
|
222
|
+
],
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Get the modes lesson
|
|
227
|
+
*/
|
|
228
|
+
export function getModesLesson(): Lesson {
|
|
229
|
+
return modesLesson;
|
|
230
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tools Tutorial Lesson
|
|
3
|
+
*
|
|
4
|
+
* Lesson covering tool usage and capabilities.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/onboarding/tutorial/lessons/tools
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { Lesson } from "../types.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Tools lesson - learn about available tools
|
|
13
|
+
*/
|
|
14
|
+
export const toolsLesson: Lesson = {
|
|
15
|
+
id: "tools",
|
|
16
|
+
title: "Working with Tools",
|
|
17
|
+
description: "Learn how to use and manage Vellum's powerful tools",
|
|
18
|
+
category: "tools",
|
|
19
|
+
difficulty: "beginner",
|
|
20
|
+
prerequisites: ["basics"],
|
|
21
|
+
estimatedMinutes: 7,
|
|
22
|
+
icon: "🔧",
|
|
23
|
+
tags: ["tools", "commands", "capabilities"],
|
|
24
|
+
steps: [
|
|
25
|
+
{
|
|
26
|
+
id: "tools-intro",
|
|
27
|
+
title: "Introduction to Tools",
|
|
28
|
+
content: `
|
|
29
|
+
**What are Tools?**
|
|
30
|
+
|
|
31
|
+
Tools are powerful capabilities that Vellum can use to help you:
|
|
32
|
+
|
|
33
|
+
• **Read files** - Access and understand your code
|
|
34
|
+
• **Edit files** - Make changes to your codebase
|
|
35
|
+
• **Run commands** - Execute shell commands
|
|
36
|
+
• **Search** - Find code across your project
|
|
37
|
+
• **And more!**
|
|
38
|
+
|
|
39
|
+
Tools work automatically when you ask the AI to do something.
|
|
40
|
+
`.trim(),
|
|
41
|
+
action: "read",
|
|
42
|
+
estimatedDuration: 30,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: "tools-list",
|
|
46
|
+
title: "Listing Available Tools",
|
|
47
|
+
content: `
|
|
48
|
+
**The /tools Command**
|
|
49
|
+
|
|
50
|
+
To see all available tools:
|
|
51
|
+
|
|
52
|
+
Try typing: /tools
|
|
53
|
+
|
|
54
|
+
This shows every tool Vellum can use and its description.
|
|
55
|
+
`.trim(),
|
|
56
|
+
action: "command",
|
|
57
|
+
command: "/tools",
|
|
58
|
+
expectedOutcome: "A list of available tools with descriptions",
|
|
59
|
+
hint: "Type /tools and press Enter",
|
|
60
|
+
estimatedDuration: 30,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: "tools-categories",
|
|
64
|
+
title: "Tool Categories",
|
|
65
|
+
content: `
|
|
66
|
+
**Tool Categories**
|
|
67
|
+
|
|
68
|
+
Tools are organized into categories:
|
|
69
|
+
|
|
70
|
+
📁 **Filesystem** - read, write, list files
|
|
71
|
+
🔍 **Search** - grep, semantic search
|
|
72
|
+
💻 **Shell** - run terminal commands
|
|
73
|
+
🌐 **Web** - fetch URLs, API calls
|
|
74
|
+
🔒 **Security** - permission management
|
|
75
|
+
|
|
76
|
+
Each category serves different needs.
|
|
77
|
+
`.trim(),
|
|
78
|
+
action: "read",
|
|
79
|
+
hint: "Tools automatically activate based on your request",
|
|
80
|
+
estimatedDuration: 45,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: "tools-permissions",
|
|
84
|
+
title: "Tool Permissions",
|
|
85
|
+
content: `
|
|
86
|
+
**Security & Permissions**
|
|
87
|
+
|
|
88
|
+
Some tools require approval before running:
|
|
89
|
+
|
|
90
|
+
• **File edits** - Confirm before modifying files
|
|
91
|
+
• **Shell commands** - Approve potentially dangerous commands
|
|
92
|
+
• **Network** - Authorize external requests
|
|
93
|
+
|
|
94
|
+
You control what Vellum can do!
|
|
95
|
+
|
|
96
|
+
💡 Use /permission to manage approvals.
|
|
97
|
+
`.trim(),
|
|
98
|
+
action: "read",
|
|
99
|
+
hint: "You can always deny a tool action",
|
|
100
|
+
estimatedDuration: 45,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: "tools-natural",
|
|
104
|
+
title: "Natural Language Usage",
|
|
105
|
+
content: `
|
|
106
|
+
**Just Ask!**
|
|
107
|
+
|
|
108
|
+
You don't need to know tool names. Just describe what you want:
|
|
109
|
+
|
|
110
|
+
✅ "Show me the contents of package.json"
|
|
111
|
+
✅ "Find all TypeScript files with TODO comments"
|
|
112
|
+
✅ "Run the tests"
|
|
113
|
+
✅ "Create a new component called Button"
|
|
114
|
+
|
|
115
|
+
Vellum picks the right tools automatically.
|
|
116
|
+
`.trim(),
|
|
117
|
+
action: "read",
|
|
118
|
+
hint: "Be specific about what you want to achieve",
|
|
119
|
+
estimatedDuration: 30,
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
id: "tools-practice",
|
|
123
|
+
title: "Practice: List Files",
|
|
124
|
+
content: `
|
|
125
|
+
**Let's Try It!**
|
|
126
|
+
|
|
127
|
+
Ask Vellum to list files in the current directory:
|
|
128
|
+
|
|
129
|
+
Example prompts:
|
|
130
|
+
• "What files are in this directory?"
|
|
131
|
+
• "List the contents of this folder"
|
|
132
|
+
• "Show me the project structure"
|
|
133
|
+
|
|
134
|
+
Try one of these or write your own!
|
|
135
|
+
`.trim(),
|
|
136
|
+
action: "interact",
|
|
137
|
+
expectedOutcome: "Vellum should use the file listing tool",
|
|
138
|
+
hint: "Just type a natural language request",
|
|
139
|
+
estimatedDuration: 60,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
id: "tools-complete",
|
|
143
|
+
title: "Tools Complete!",
|
|
144
|
+
content: `
|
|
145
|
+
🎉 **Great Job!**
|
|
146
|
+
|
|
147
|
+
You now understand Vellum's tool system:
|
|
148
|
+
|
|
149
|
+
✅ What tools are and how they work
|
|
150
|
+
✅ How to list available tools
|
|
151
|
+
✅ Tool categories and permissions
|
|
152
|
+
✅ Natural language tool usage
|
|
153
|
+
|
|
154
|
+
**Pro Tips:**
|
|
155
|
+
• Let Vellum choose tools automatically
|
|
156
|
+
• Review tool actions before approving
|
|
157
|
+
• Use /tools to explore capabilities
|
|
158
|
+
|
|
159
|
+
Next: Try the "Modes" tutorial! 🎯
|
|
160
|
+
`.trim(),
|
|
161
|
+
action: "complete",
|
|
162
|
+
estimatedDuration: 15,
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Get the tools lesson
|
|
169
|
+
*/
|
|
170
|
+
export function getToolsLesson(): Lesson {
|
|
171
|
+
return toolsLesson;
|
|
172
|
+
}
|