@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,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sensitive Data Handler
|
|
3
|
+
*
|
|
4
|
+
* Detects and masks sensitive data (API keys, tokens, passwords) in text.
|
|
5
|
+
* Provides configurable patterns for various credential formats.
|
|
6
|
+
*
|
|
7
|
+
* @module cli/commands/security/sensitive-data
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// Types
|
|
12
|
+
// =============================================================================
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Pattern definition for sensitive data detection
|
|
16
|
+
*/
|
|
17
|
+
export interface SensitivePattern {
|
|
18
|
+
/** Unique name for the pattern */
|
|
19
|
+
name: string;
|
|
20
|
+
/** Regular expression to match sensitive data */
|
|
21
|
+
regex: RegExp;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// =============================================================================
|
|
25
|
+
// T051: SensitiveDataHandler Class
|
|
26
|
+
// =============================================================================
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* SensitiveDataHandler - Detects and masks sensitive data in text
|
|
30
|
+
*
|
|
31
|
+
* Identifies sensitive information like API keys, tokens, and passwords,
|
|
32
|
+
* then masks them while preserving enough context for debugging.
|
|
33
|
+
*
|
|
34
|
+
* Masking format: Shows first 4 and last 4 characters, masks the middle.
|
|
35
|
+
* Example: `sk-proj-abcd...wxyz`
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const handler = createDefaultHandler();
|
|
40
|
+
*
|
|
41
|
+
* const text = 'API key: sk-proj-abcdefghij1234567890';
|
|
42
|
+
* console.log(handler.mask(text));
|
|
43
|
+
* // Output: 'API key: sk-p...7890'
|
|
44
|
+
*
|
|
45
|
+
* if (handler.isSensitive(text)) {
|
|
46
|
+
* console.log('Warning: sensitive data detected');
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export class SensitiveDataHandler {
|
|
51
|
+
private patterns: Map<string, SensitivePattern> = new Map();
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Create a new SensitiveDataHandler
|
|
55
|
+
*
|
|
56
|
+
* @param patterns - Initial patterns to register
|
|
57
|
+
*/
|
|
58
|
+
constructor(patterns?: SensitivePattern[]) {
|
|
59
|
+
if (patterns) {
|
|
60
|
+
for (const pattern of patterns) {
|
|
61
|
+
this.patterns.set(pattern.name, pattern);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Add a custom pattern for sensitive data detection
|
|
68
|
+
*
|
|
69
|
+
* @param name - Unique identifier for the pattern
|
|
70
|
+
* @param regex - Regular expression to match sensitive data
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* handler.addPattern('custom-key', /my-api-[a-z0-9]{32}/gi);
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
addPattern(name: string, regex: RegExp): void {
|
|
78
|
+
// Ensure the regex has global flag for proper replacement
|
|
79
|
+
const flags = regex.flags.includes("g") ? regex.flags : `${regex.flags}g`;
|
|
80
|
+
const globalRegex = new RegExp(regex.source, flags);
|
|
81
|
+
|
|
82
|
+
this.patterns.set(name, { name, regex: globalRegex });
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Remove a registered pattern
|
|
87
|
+
*
|
|
88
|
+
* @param name - Name of the pattern to remove
|
|
89
|
+
* @returns true if the pattern was removed, false if it didn't exist
|
|
90
|
+
*/
|
|
91
|
+
removePattern(name: string): boolean {
|
|
92
|
+
return this.patterns.delete(name);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Get all registered pattern names
|
|
97
|
+
*
|
|
98
|
+
* @returns Array of pattern names
|
|
99
|
+
*/
|
|
100
|
+
getPatternNames(): string[] {
|
|
101
|
+
return Array.from(this.patterns.keys());
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Check if text contains any sensitive data
|
|
106
|
+
*
|
|
107
|
+
* @param text - Text to check for sensitive data
|
|
108
|
+
* @returns true if sensitive data is detected
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* handler.isSensitive('My key is sk-abc123def456'); // true
|
|
113
|
+
* handler.isSensitive('Hello world'); // false
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
isSensitive(text: string): boolean {
|
|
117
|
+
if (!text || typeof text !== "string") {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
for (const pattern of this.patterns.values()) {
|
|
122
|
+
// Reset lastIndex for reuse
|
|
123
|
+
pattern.regex.lastIndex = 0;
|
|
124
|
+
if (pattern.regex.test(text)) {
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Mask sensitive data in text
|
|
134
|
+
*
|
|
135
|
+
* Replaces detected sensitive data with a masked version that shows
|
|
136
|
+
* the first 4 and last 4 characters with "..." in between.
|
|
137
|
+
*
|
|
138
|
+
* @param text - Text containing potentially sensitive data
|
|
139
|
+
* @returns Text with sensitive data masked
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* handler.mask('Key: sk-proj-abc123456789xyz');
|
|
144
|
+
* // Returns: 'Key: sk-p...9xyz'
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
mask(text: string): string {
|
|
148
|
+
if (!text || typeof text !== "string") {
|
|
149
|
+
return text ?? "";
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
let result = text;
|
|
153
|
+
|
|
154
|
+
for (const pattern of this.patterns.values()) {
|
|
155
|
+
// Reset lastIndex for fresh matching
|
|
156
|
+
pattern.regex.lastIndex = 0;
|
|
157
|
+
result = result.replace(pattern.regex, (match) => this.maskValue(match));
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Mask a single sensitive value
|
|
165
|
+
*
|
|
166
|
+
* @param value - The sensitive value to mask
|
|
167
|
+
* @returns Masked value showing first 4 and last 4 chars
|
|
168
|
+
*/
|
|
169
|
+
private maskValue(value: string): string {
|
|
170
|
+
const minLengthForMasking = 12;
|
|
171
|
+
|
|
172
|
+
if (value.length <= minLengthForMasking) {
|
|
173
|
+
// For short values, just show asterisks
|
|
174
|
+
return "****";
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const visibleChars = 4;
|
|
178
|
+
const prefix = value.slice(0, visibleChars);
|
|
179
|
+
const suffix = value.slice(-visibleChars);
|
|
180
|
+
|
|
181
|
+
return `${prefix}...${suffix}`;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// =============================================================================
|
|
186
|
+
// Default Patterns
|
|
187
|
+
// =============================================================================
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Default patterns for common sensitive data formats
|
|
191
|
+
*/
|
|
192
|
+
export const DEFAULT_SENSITIVE_PATTERNS: SensitivePattern[] = [
|
|
193
|
+
// OpenAI API Keys (sk-proj-*, sk-*)
|
|
194
|
+
{
|
|
195
|
+
name: "openai-key",
|
|
196
|
+
regex: /sk-(?:proj-)?[a-zA-Z0-9]{20,}/g,
|
|
197
|
+
},
|
|
198
|
+
|
|
199
|
+
// GitHub Personal Access Tokens (fine-grained)
|
|
200
|
+
{
|
|
201
|
+
name: "github-token-fine",
|
|
202
|
+
regex: /ghp_[a-zA-Z0-9]{36}/g,
|
|
203
|
+
},
|
|
204
|
+
|
|
205
|
+
// GitHub Personal Access Tokens (classic with pat prefix)
|
|
206
|
+
{
|
|
207
|
+
name: "github-token-classic",
|
|
208
|
+
regex: /github_pat_[a-zA-Z0-9_]{22,}/g,
|
|
209
|
+
},
|
|
210
|
+
|
|
211
|
+
// GitHub OAuth tokens
|
|
212
|
+
{
|
|
213
|
+
name: "github-oauth",
|
|
214
|
+
regex: /gho_[a-zA-Z0-9]{36}/g,
|
|
215
|
+
},
|
|
216
|
+
|
|
217
|
+
// GitHub App tokens
|
|
218
|
+
{
|
|
219
|
+
name: "github-app",
|
|
220
|
+
regex: /(?:ghu|ghs)_[a-zA-Z0-9]{36}/g,
|
|
221
|
+
},
|
|
222
|
+
|
|
223
|
+
// Anthropic API Keys
|
|
224
|
+
{
|
|
225
|
+
name: "anthropic-key",
|
|
226
|
+
regex: /sk-ant-[a-zA-Z0-9-]{20,}/g,
|
|
227
|
+
},
|
|
228
|
+
|
|
229
|
+
// Google AI API Keys
|
|
230
|
+
{
|
|
231
|
+
name: "google-ai-key",
|
|
232
|
+
regex: /AIza[a-zA-Z0-9_-]{35}/g,
|
|
233
|
+
},
|
|
234
|
+
|
|
235
|
+
// AWS Access Key IDs
|
|
236
|
+
{
|
|
237
|
+
name: "aws-access-key",
|
|
238
|
+
regex: /(?:AKIA|ABIA|ACCA|ASIA)[A-Z0-9]{16}/g,
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
// AWS Secret Access Keys (40 char base64)
|
|
242
|
+
{
|
|
243
|
+
name: "aws-secret-key",
|
|
244
|
+
regex: /(?<=aws_secret_access_key[\s]*[=:]\s*["']?)[a-zA-Z0-9/+=]{40}(?=["']?)/gi,
|
|
245
|
+
},
|
|
246
|
+
|
|
247
|
+
// Generic API key patterns (keyword + long alphanumeric)
|
|
248
|
+
{
|
|
249
|
+
name: "generic-api-key",
|
|
250
|
+
regex:
|
|
251
|
+
/(?:api[_-]?key|apikey|api[_-]?secret|secret[_-]?key)[\s]*[=:]\s*["']?([a-zA-Z0-9_-]{20,})["']?/gi,
|
|
252
|
+
},
|
|
253
|
+
|
|
254
|
+
// Bearer tokens in headers
|
|
255
|
+
{
|
|
256
|
+
name: "bearer-token",
|
|
257
|
+
regex: /Bearer\s+[a-zA-Z0-9_-]{20,}/gi,
|
|
258
|
+
},
|
|
259
|
+
|
|
260
|
+
// Authorization headers with tokens
|
|
261
|
+
{
|
|
262
|
+
name: "auth-header",
|
|
263
|
+
regex: /(?:Authorization|X-Api-Key|X-Auth-Token)[\s]*[=:]\s*["']?([a-zA-Z0-9_-]{20,})["']?/gi,
|
|
264
|
+
},
|
|
265
|
+
|
|
266
|
+
// Password patterns (password=value, pwd=value)
|
|
267
|
+
{
|
|
268
|
+
name: "password-assign",
|
|
269
|
+
regex: /(?:password|passwd|pwd|pass)[\s]*[=:]\s*["']?([^\s"']{4,})["']?/gi,
|
|
270
|
+
},
|
|
271
|
+
|
|
272
|
+
// Connection strings with passwords
|
|
273
|
+
{
|
|
274
|
+
name: "connection-string-password",
|
|
275
|
+
regex: /(?:mongodb|mysql|postgres|redis|amqp):\/\/[^:]+:([^@\s]{4,})@/gi,
|
|
276
|
+
},
|
|
277
|
+
|
|
278
|
+
// Private keys (PEM format markers)
|
|
279
|
+
{
|
|
280
|
+
name: "private-key",
|
|
281
|
+
regex:
|
|
282
|
+
/-----BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY-----[\s\S]*?-----END\s+(?:RSA\s+)?PRIVATE\s+KEY-----/g,
|
|
283
|
+
},
|
|
284
|
+
|
|
285
|
+
// NPM tokens
|
|
286
|
+
{
|
|
287
|
+
name: "npm-token",
|
|
288
|
+
regex: /npm_[a-zA-Z0-9]{36}/g,
|
|
289
|
+
},
|
|
290
|
+
|
|
291
|
+
// Slack tokens
|
|
292
|
+
{
|
|
293
|
+
name: "slack-token",
|
|
294
|
+
regex: /xox[baprs]-[a-zA-Z0-9-]{10,}/g,
|
|
295
|
+
},
|
|
296
|
+
|
|
297
|
+
// Discord tokens
|
|
298
|
+
{
|
|
299
|
+
name: "discord-token",
|
|
300
|
+
regex: /[MN][a-zA-Z0-9_-]{23,}\.[a-zA-Z0-9_-]{6}\.[a-zA-Z0-9_-]{27,}/g,
|
|
301
|
+
},
|
|
302
|
+
|
|
303
|
+
// Stripe keys
|
|
304
|
+
{
|
|
305
|
+
name: "stripe-key",
|
|
306
|
+
regex: /(?:sk|pk)_(?:test|live)_[a-zA-Z0-9]{24,}/g,
|
|
307
|
+
},
|
|
308
|
+
|
|
309
|
+
// Twilio keys
|
|
310
|
+
{
|
|
311
|
+
name: "twilio-key",
|
|
312
|
+
regex: /SK[a-f0-9]{32}/g,
|
|
313
|
+
},
|
|
314
|
+
];
|
|
315
|
+
|
|
316
|
+
// =============================================================================
|
|
317
|
+
// Factory Function
|
|
318
|
+
// =============================================================================
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Create a SensitiveDataHandler with default patterns
|
|
322
|
+
*
|
|
323
|
+
* Includes patterns for:
|
|
324
|
+
* - OpenAI API keys
|
|
325
|
+
* - GitHub tokens (fine-grained and classic)
|
|
326
|
+
* - Anthropic API keys
|
|
327
|
+
* - Google AI keys
|
|
328
|
+
* - AWS credentials
|
|
329
|
+
* - Generic API keys and secrets
|
|
330
|
+
* - Bearer tokens
|
|
331
|
+
* - Passwords in various formats
|
|
332
|
+
* - Private keys (PEM format)
|
|
333
|
+
* - Various service tokens (Slack, Discord, Stripe, etc.)
|
|
334
|
+
*
|
|
335
|
+
* @returns SensitiveDataHandler configured with default patterns
|
|
336
|
+
*
|
|
337
|
+
* @example
|
|
338
|
+
* ```typescript
|
|
339
|
+
* const handler = createDefaultHandler();
|
|
340
|
+
*
|
|
341
|
+
* // Mask all sensitive data
|
|
342
|
+
* const safe = handler.mask(logOutput);
|
|
343
|
+
*
|
|
344
|
+
* // Add custom pattern
|
|
345
|
+
* handler.addPattern('my-service', /my-svc-[a-z0-9]{32}/gi);
|
|
346
|
+
* ```
|
|
347
|
+
*/
|
|
348
|
+
export function createDefaultHandler(): SensitiveDataHandler {
|
|
349
|
+
return new SensitiveDataHandler(DEFAULT_SENSITIVE_PATTERNS);
|
|
350
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Delete Command (T034)
|
|
3
|
+
* @module cli/commands/session/delete
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { CommandResult, SlashCommand } from "../types.js";
|
|
7
|
+
import { success } from "../types.js";
|
|
8
|
+
|
|
9
|
+
export interface SessionDeleteOptions {
|
|
10
|
+
force?: boolean;
|
|
11
|
+
all?: boolean;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Delete command for removing sessions
|
|
16
|
+
*/
|
|
17
|
+
export const deleteCommand: SlashCommand = {
|
|
18
|
+
name: "delete",
|
|
19
|
+
aliases: ["rm", "remove"],
|
|
20
|
+
description: "Delete a session",
|
|
21
|
+
kind: "builtin",
|
|
22
|
+
category: "session",
|
|
23
|
+
execute: async (): Promise<CommandResult> => success("Session delete not yet implemented"),
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Factory function to create delete command with context
|
|
28
|
+
*/
|
|
29
|
+
export function createDeleteCommand(): SlashCommand {
|
|
30
|
+
return deleteCommand;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Handle session delete
|
|
35
|
+
*/
|
|
36
|
+
export async function handleSessionDelete(_options: SessionDeleteOptions): Promise<void> {
|
|
37
|
+
// Placeholder
|
|
38
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Export Command (T033)
|
|
3
|
+
* @module cli/commands/session/export
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { CommandResult, SlashCommand } from "../types.js";
|
|
7
|
+
import { success } from "../types.js";
|
|
8
|
+
|
|
9
|
+
export type SessionExportFormat = "json" | "markdown" | "html";
|
|
10
|
+
|
|
11
|
+
export interface SessionExportOptions {
|
|
12
|
+
format?: SessionExportFormat;
|
|
13
|
+
output?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Export command for exporting session data
|
|
18
|
+
*/
|
|
19
|
+
export const exportCommand: SlashCommand = {
|
|
20
|
+
name: "export",
|
|
21
|
+
description: "Export session data",
|
|
22
|
+
kind: "builtin",
|
|
23
|
+
category: "session",
|
|
24
|
+
execute: async (): Promise<CommandResult> => success("Session export not yet implemented"),
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Factory function to create export command with context
|
|
29
|
+
*/
|
|
30
|
+
export function createExportCommand(): SlashCommand {
|
|
31
|
+
return exportCommand;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Handle session export
|
|
36
|
+
*/
|
|
37
|
+
export async function handleSessionExport(_options: SessionExportOptions): Promise<void> {
|
|
38
|
+
// Placeholder
|
|
39
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Commands Index
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all session-related CLI commands.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/commands/session
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// Resume Command (T032)
|
|
10
|
+
export {
|
|
11
|
+
createResumeCommand,
|
|
12
|
+
findSessionById,
|
|
13
|
+
getMostRecentSession,
|
|
14
|
+
type ResumeSessionEventData,
|
|
15
|
+
resumeCommand,
|
|
16
|
+
type SessionLookupOptions,
|
|
17
|
+
type SessionLookupResult,
|
|
18
|
+
SHORT_ID_LENGTH,
|
|
19
|
+
} from "./resume.js";
|
|
20
|
+
|
|
21
|
+
// Search Command
|
|
22
|
+
export {
|
|
23
|
+
createSearchCommand,
|
|
24
|
+
type SearchSessionEventData,
|
|
25
|
+
searchCommand,
|
|
26
|
+
} from "./search.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session List Command (T016)
|
|
3
|
+
* @module cli/commands/session/list
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { CommandResult, SlashCommand } from "../types.js";
|
|
7
|
+
import { success } from "../types.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* List command for displaying sessions
|
|
11
|
+
*/
|
|
12
|
+
export const listCommand: SlashCommand = {
|
|
13
|
+
name: "list",
|
|
14
|
+
aliases: ["ls"],
|
|
15
|
+
description: "List all sessions",
|
|
16
|
+
kind: "builtin",
|
|
17
|
+
category: "session",
|
|
18
|
+
execute: async (): Promise<CommandResult> => success("Session list not yet implemented"),
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Factory function to create list command with context
|
|
23
|
+
*/
|
|
24
|
+
export function createListCommand(): SlashCommand {
|
|
25
|
+
return listCommand;
|
|
26
|
+
}
|