@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,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agents Command Group
|
|
3
|
+
*
|
|
4
|
+
* Command group for AGENTS.md management operations.
|
|
5
|
+
*
|
|
6
|
+
* Subcommands:
|
|
7
|
+
* - `vellum agents show` - Display merged configuration
|
|
8
|
+
* - `vellum agents validate` - Validate syntax and structure
|
|
9
|
+
* - `vellum agents generate` - Generate optimized AGENTS.md
|
|
10
|
+
*
|
|
11
|
+
* @module cli/commands/agents
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { CommandContext, CommandResult, SlashCommand } from "../types.js";
|
|
15
|
+
import { success } from "../types.js";
|
|
16
|
+
import { handleAgentsGenerate } from "./generate.js";
|
|
17
|
+
// Import subcommand handlers
|
|
18
|
+
import { handleAgentsShow } from "./show.js";
|
|
19
|
+
import { handleAgentsValidate } from "./validate.js";
|
|
20
|
+
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// Types
|
|
23
|
+
// =============================================================================
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Agents subcommand names
|
|
27
|
+
*/
|
|
28
|
+
export type AgentsSubcommand = "show" | "validate" | "generate" | "help";
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Options for agents subcommands
|
|
32
|
+
*/
|
|
33
|
+
export interface AgentsShowOptions {
|
|
34
|
+
/** Output as JSON */
|
|
35
|
+
json?: boolean;
|
|
36
|
+
/** Show all details including sources */
|
|
37
|
+
verbose?: boolean;
|
|
38
|
+
/** Show config for specific file/directory */
|
|
39
|
+
scope?: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface AgentsValidateOptions {
|
|
43
|
+
/** Path to AGENTS.md file */
|
|
44
|
+
file?: string;
|
|
45
|
+
/** Show verbose output */
|
|
46
|
+
verbose?: boolean;
|
|
47
|
+
/** Output as JSON */
|
|
48
|
+
json?: boolean;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface AgentsGenerateOptions {
|
|
52
|
+
/** Output file path */
|
|
53
|
+
output?: string;
|
|
54
|
+
/** Merge with existing file */
|
|
55
|
+
merge?: boolean;
|
|
56
|
+
/** Dry run - show what would be generated */
|
|
57
|
+
dryRun?: boolean;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// =============================================================================
|
|
61
|
+
// Help Text
|
|
62
|
+
// =============================================================================
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Generate help text for agents command group
|
|
66
|
+
*/
|
|
67
|
+
function getAgentsHelp(): string {
|
|
68
|
+
return `📋 Agents Commands
|
|
69
|
+
|
|
70
|
+
Manage AGENTS.md configuration files.
|
|
71
|
+
|
|
72
|
+
Subcommands:
|
|
73
|
+
show Display merged AGENTS.md configuration
|
|
74
|
+
validate Validate syntax and structure
|
|
75
|
+
generate Generate optimized AGENTS.md from codebase
|
|
76
|
+
|
|
77
|
+
Usage:
|
|
78
|
+
/agents Show this help
|
|
79
|
+
/agents show Display current config
|
|
80
|
+
/agents show --json Output as JSON
|
|
81
|
+
/agents show --verbose Show all details
|
|
82
|
+
/agents validate Validate current config
|
|
83
|
+
/agents validate <file> Validate specific file
|
|
84
|
+
/agents generate Generate new config
|
|
85
|
+
|
|
86
|
+
Examples:
|
|
87
|
+
/agents show --scope ./src Show config for src directory
|
|
88
|
+
/agents validate --verbose Validate with detailed output
|
|
89
|
+
/agents generate --dry-run Preview generated config
|
|
90
|
+
|
|
91
|
+
See also:
|
|
92
|
+
/init Create new AGENTS.md file`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// =============================================================================
|
|
96
|
+
// Subcommand Handlers
|
|
97
|
+
// =============================================================================
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Handle agents show subcommand
|
|
101
|
+
*/
|
|
102
|
+
async function handleShow(options: AgentsShowOptions): Promise<CommandResult> {
|
|
103
|
+
return handleAgentsShow(options);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Handle agents validate subcommand
|
|
108
|
+
*/
|
|
109
|
+
async function handleValidate(options: AgentsValidateOptions): Promise<CommandResult> {
|
|
110
|
+
return handleAgentsValidate(options);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Handle agents generate subcommand
|
|
115
|
+
*/
|
|
116
|
+
async function handleGenerate(options: AgentsGenerateOptions): Promise<CommandResult> {
|
|
117
|
+
return handleAgentsGenerate(options);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// =============================================================================
|
|
121
|
+
// Command Execution
|
|
122
|
+
// =============================================================================
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Parse agents subcommand from positional args
|
|
126
|
+
*/
|
|
127
|
+
function parseSubcommand(positional: readonly unknown[]): AgentsSubcommand {
|
|
128
|
+
const first = positional[0];
|
|
129
|
+
if (typeof first === "string") {
|
|
130
|
+
const sub = first.toLowerCase();
|
|
131
|
+
if (sub === "show" || sub === "validate" || sub === "generate") {
|
|
132
|
+
return sub;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return "help";
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Execute agents command group
|
|
140
|
+
*
|
|
141
|
+
* @param ctx - Command context
|
|
142
|
+
* @returns Command result
|
|
143
|
+
*/
|
|
144
|
+
export async function executeAgents(ctx: CommandContext): Promise<CommandResult> {
|
|
145
|
+
const subcommand = parseSubcommand(ctx.parsedArgs.positional);
|
|
146
|
+
const named = ctx.parsedArgs.named;
|
|
147
|
+
|
|
148
|
+
switch (subcommand) {
|
|
149
|
+
case "show":
|
|
150
|
+
return handleShow({
|
|
151
|
+
json: named.json as boolean | undefined,
|
|
152
|
+
verbose: named.verbose as boolean | undefined,
|
|
153
|
+
scope: named.scope as string | undefined,
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
case "validate":
|
|
157
|
+
return handleValidate({
|
|
158
|
+
file: ctx.parsedArgs.positional[1] as string | undefined,
|
|
159
|
+
verbose: named.verbose as boolean | undefined,
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
case "generate":
|
|
163
|
+
return handleGenerate({
|
|
164
|
+
output: named.output as string | undefined,
|
|
165
|
+
merge: named.merge as boolean | undefined,
|
|
166
|
+
dryRun: named["dry-run"] as boolean | undefined,
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
default:
|
|
170
|
+
return success(getAgentsHelp());
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// =============================================================================
|
|
175
|
+
// Slash Command Definition
|
|
176
|
+
// =============================================================================
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Agents command group for TUI
|
|
180
|
+
*
|
|
181
|
+
* Provides access to AGENTS.md management operations.
|
|
182
|
+
*/
|
|
183
|
+
export const agentsCommand: SlashCommand = {
|
|
184
|
+
name: "agents",
|
|
185
|
+
description: "Manage AGENTS.md configuration",
|
|
186
|
+
kind: "builtin",
|
|
187
|
+
category: "config",
|
|
188
|
+
aliases: ["agent"],
|
|
189
|
+
positionalArgs: [
|
|
190
|
+
{
|
|
191
|
+
name: "subcommand",
|
|
192
|
+
type: "string",
|
|
193
|
+
description: "Subcommand: show, validate, generate",
|
|
194
|
+
required: false,
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
name: "file",
|
|
198
|
+
type: "path",
|
|
199
|
+
description: "Target file (for validate subcommand)",
|
|
200
|
+
required: false,
|
|
201
|
+
},
|
|
202
|
+
],
|
|
203
|
+
namedArgs: [
|
|
204
|
+
{
|
|
205
|
+
name: "json",
|
|
206
|
+
shorthand: "j",
|
|
207
|
+
type: "boolean",
|
|
208
|
+
description: "Output as JSON (for show)",
|
|
209
|
+
required: false,
|
|
210
|
+
default: false,
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
name: "verbose",
|
|
214
|
+
shorthand: "v",
|
|
215
|
+
type: "boolean",
|
|
216
|
+
description: "Show verbose output",
|
|
217
|
+
required: false,
|
|
218
|
+
default: false,
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
name: "scope",
|
|
222
|
+
shorthand: "s",
|
|
223
|
+
type: "path",
|
|
224
|
+
description: "Scope to specific file/directory (for show)",
|
|
225
|
+
required: false,
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
name: "output",
|
|
229
|
+
shorthand: "o",
|
|
230
|
+
type: "path",
|
|
231
|
+
description: "Output file path (for generate)",
|
|
232
|
+
required: false,
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
name: "merge",
|
|
236
|
+
shorthand: "m",
|
|
237
|
+
type: "boolean",
|
|
238
|
+
description: "Merge with existing file (for generate)",
|
|
239
|
+
required: false,
|
|
240
|
+
default: false,
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
name: "dry-run",
|
|
244
|
+
type: "boolean",
|
|
245
|
+
description: "Preview without writing (for generate)",
|
|
246
|
+
required: false,
|
|
247
|
+
default: false,
|
|
248
|
+
},
|
|
249
|
+
],
|
|
250
|
+
examples: [
|
|
251
|
+
"/agents - Show help",
|
|
252
|
+
"/agents show - Display current config",
|
|
253
|
+
"/agents show --json - Output as JSON",
|
|
254
|
+
"/agents show --verbose - Show all details",
|
|
255
|
+
"/agents validate - Validate current config",
|
|
256
|
+
"/agents validate ./AGENTS.md - Validate specific file",
|
|
257
|
+
"/agents generate --dry-run - Preview generated config",
|
|
258
|
+
],
|
|
259
|
+
subcommands: [
|
|
260
|
+
{ name: "show", description: "Show agent details" },
|
|
261
|
+
{ name: "validate", description: "Validate agents" },
|
|
262
|
+
{ name: "generate", description: "Generate agent" },
|
|
263
|
+
],
|
|
264
|
+
|
|
265
|
+
execute: executeAgents,
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
// =============================================================================
|
|
269
|
+
// Re-exports
|
|
270
|
+
// =============================================================================
|
|
271
|
+
|
|
272
|
+
export { getAgentsHelp };
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agents Show Command
|
|
3
|
+
*
|
|
4
|
+
* Displays merged AGENTS.md configuration with all contributing sources.
|
|
5
|
+
* Supports JSON output for programmatic usage and verbose mode for debugging.
|
|
6
|
+
*
|
|
7
|
+
* @module cli/commands/agents/show
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import * as path from "node:path";
|
|
11
|
+
import {
|
|
12
|
+
type AgentsConfig,
|
|
13
|
+
AgentsLoader,
|
|
14
|
+
type AgentsLoadResult,
|
|
15
|
+
type AgentsWarning,
|
|
16
|
+
type ToolPermission,
|
|
17
|
+
} from "@vellum/core";
|
|
18
|
+
import chalk from "chalk";
|
|
19
|
+
|
|
20
|
+
import type { CommandContext, CommandResult } from "../types.js";
|
|
21
|
+
import { error, success } from "../types.js";
|
|
22
|
+
import type { AgentsShowOptions } from "./index.js";
|
|
23
|
+
|
|
24
|
+
// =============================================================================
|
|
25
|
+
// Types
|
|
26
|
+
// =============================================================================
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* JSON output format for agents show
|
|
30
|
+
*/
|
|
31
|
+
export interface AgentsShowJsonOutput {
|
|
32
|
+
/** Whether the configuration was loaded successfully */
|
|
33
|
+
success: boolean;
|
|
34
|
+
/** Merged configuration (null if failed) */
|
|
35
|
+
config: AgentsConfig | null;
|
|
36
|
+
/** Source files that contributed to configuration */
|
|
37
|
+
sources: string[];
|
|
38
|
+
/** Warnings during loading */
|
|
39
|
+
warnings: Array<{
|
|
40
|
+
file: string;
|
|
41
|
+
message: string;
|
|
42
|
+
severity: string;
|
|
43
|
+
line?: number;
|
|
44
|
+
}>;
|
|
45
|
+
/** Whether result came from cache */
|
|
46
|
+
fromCache: boolean;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// =============================================================================
|
|
50
|
+
// Formatters
|
|
51
|
+
// =============================================================================
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Format tool permissions for display
|
|
55
|
+
*/
|
|
56
|
+
function formatToolPermissions(config: AgentsConfig): string {
|
|
57
|
+
if (config.allowedTools.length === 0) {
|
|
58
|
+
return chalk.gray(" No explicit tool permissions set");
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return config.allowedTools
|
|
62
|
+
.map((tool: ToolPermission) => {
|
|
63
|
+
const icon = tool.negated ? chalk.red("❌") : chalk.green("✅");
|
|
64
|
+
const pattern = tool.negated ? tool.pattern.replace(/^!/, "") : tool.pattern;
|
|
65
|
+
const args = tool.args?.length ? chalk.gray(` (args: ${tool.args.join(", ")})`) : "";
|
|
66
|
+
return ` ${icon} ${tool.negated ? chalk.red(pattern) : chalk.cyan(pattern)}${args}`;
|
|
67
|
+
})
|
|
68
|
+
.join("\n");
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Format sources list for display
|
|
73
|
+
*/
|
|
74
|
+
function formatSources(sources: string[], cwd: string): string {
|
|
75
|
+
if (sources.length === 0) {
|
|
76
|
+
return chalk.gray(" No sources found");
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return sources
|
|
80
|
+
.map((source, index) => {
|
|
81
|
+
// Make paths relative to cwd for readability
|
|
82
|
+
const relativePath = path.relative(cwd, source) || source;
|
|
83
|
+
return ` ${chalk.gray(`${index + 1}.`)} ${chalk.blue(relativePath)}`;
|
|
84
|
+
})
|
|
85
|
+
.join("\n");
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Format warnings list for display
|
|
90
|
+
*/
|
|
91
|
+
function formatWarnings(result: AgentsLoadResult): string {
|
|
92
|
+
if (result.warnings.length === 0) {
|
|
93
|
+
return "";
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const warningLines = result.warnings.map((w: AgentsWarning) => {
|
|
97
|
+
const loc = w.line ? `:${w.line}` : "";
|
|
98
|
+
const file = chalk.gray(`${path.basename(w.file)}${loc}`);
|
|
99
|
+
const icon = w.severity === "warn" ? chalk.yellow("⚠") : chalk.blue("ℹ");
|
|
100
|
+
return ` ${icon} ${file}: ${w.message}`;
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
return `\n${chalk.yellow("⚠️ Warnings:")}\n${warningLines.join("\n")}`;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Format configuration for human-readable display
|
|
108
|
+
*/
|
|
109
|
+
function formatConfigDisplay(result: AgentsLoadResult, cwd: string, verbose: boolean): string {
|
|
110
|
+
const config = result.config;
|
|
111
|
+
|
|
112
|
+
if (!config) {
|
|
113
|
+
return chalk.yellow(
|
|
114
|
+
"No AGENTS.md configuration found.\n\n" +
|
|
115
|
+
"Run " +
|
|
116
|
+
chalk.cyan("/init") +
|
|
117
|
+
" to create one, or create AGENTS.md manually."
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const lines: string[] = [
|
|
122
|
+
chalk.bold("📋 AGENTS.md Configuration"),
|
|
123
|
+
chalk.gray("━".repeat(40)),
|
|
124
|
+
"",
|
|
125
|
+
];
|
|
126
|
+
|
|
127
|
+
// Name and description
|
|
128
|
+
if (config.name) {
|
|
129
|
+
lines.push(`${chalk.gray("Name:")} ${chalk.white(config.name)}`);
|
|
130
|
+
}
|
|
131
|
+
if (config.description) {
|
|
132
|
+
lines.push(`${chalk.gray("Description:")} ${config.description}`);
|
|
133
|
+
}
|
|
134
|
+
lines.push(`${chalk.gray("Priority:")} ${config.priority}`);
|
|
135
|
+
lines.push("");
|
|
136
|
+
|
|
137
|
+
// Instructions
|
|
138
|
+
if (config.instructions) {
|
|
139
|
+
lines.push(chalk.bold("📝 Instructions:"));
|
|
140
|
+
const instructionPreview =
|
|
141
|
+
config.instructions.length > 200
|
|
142
|
+
? config.instructions.slice(0, 200) + chalk.gray("...")
|
|
143
|
+
: config.instructions;
|
|
144
|
+
lines.push(chalk.gray(` ${instructionPreview.split("\n").join("\n ")}`));
|
|
145
|
+
lines.push("");
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Tools
|
|
149
|
+
lines.push(chalk.bold("🔧 Allowed Tools:"));
|
|
150
|
+
lines.push(formatToolPermissions(config));
|
|
151
|
+
lines.push("");
|
|
152
|
+
|
|
153
|
+
// Merge config (verbose only)
|
|
154
|
+
if (verbose) {
|
|
155
|
+
lines.push(chalk.bold("🔀 Merge Configuration:"));
|
|
156
|
+
lines.push(` Strategy: ${chalk.cyan(config.merge.strategy)}`);
|
|
157
|
+
lines.push(` Arrays: ${chalk.cyan(config.merge.arrays)}`);
|
|
158
|
+
lines.push("");
|
|
159
|
+
|
|
160
|
+
// Scope (verbose only)
|
|
161
|
+
if (config.scope.include.length > 0 || config.scope.exclude.length > 0) {
|
|
162
|
+
lines.push(chalk.bold("📂 Scope:"));
|
|
163
|
+
if (config.scope.include.length > 0) {
|
|
164
|
+
lines.push(` Include: ${chalk.green(config.scope.include.join(", "))}`);
|
|
165
|
+
}
|
|
166
|
+
if (config.scope.exclude.length > 0) {
|
|
167
|
+
lines.push(` Exclude: ${chalk.red(config.scope.exclude.join(", "))}`);
|
|
168
|
+
}
|
|
169
|
+
lines.push("");
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Sources
|
|
174
|
+
lines.push(chalk.bold("📁 Sources:"));
|
|
175
|
+
lines.push(formatSources(config.sources, cwd));
|
|
176
|
+
|
|
177
|
+
// Warnings (if any)
|
|
178
|
+
lines.push(formatWarnings(result));
|
|
179
|
+
|
|
180
|
+
// Cache info (verbose only)
|
|
181
|
+
if (verbose && result.fromCache) {
|
|
182
|
+
lines.push("");
|
|
183
|
+
lines.push(chalk.gray("(Loaded from cache)"));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return lines.join("\n");
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Convert load result to JSON output format
|
|
191
|
+
*/
|
|
192
|
+
function toJsonOutput(result: AgentsLoadResult): AgentsShowJsonOutput {
|
|
193
|
+
return {
|
|
194
|
+
success: result.config !== null,
|
|
195
|
+
config: result.config,
|
|
196
|
+
sources: result.config?.sources ?? [],
|
|
197
|
+
warnings: result.warnings.map((w: AgentsWarning) => ({
|
|
198
|
+
file: w.file,
|
|
199
|
+
message: w.message,
|
|
200
|
+
severity: w.severity,
|
|
201
|
+
line: w.line,
|
|
202
|
+
})),
|
|
203
|
+
fromCache: result.fromCache,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// =============================================================================
|
|
208
|
+
// Command Handler
|
|
209
|
+
// =============================================================================
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Execute agents show command
|
|
213
|
+
*
|
|
214
|
+
* @param options - Command options
|
|
215
|
+
* @returns Command result
|
|
216
|
+
*/
|
|
217
|
+
export async function handleAgentsShow(options: AgentsShowOptions): Promise<CommandResult> {
|
|
218
|
+
const cwd = options.scope ? path.resolve(options.scope) : process.cwd();
|
|
219
|
+
|
|
220
|
+
try {
|
|
221
|
+
// Create loader with cache disabled for fresh results
|
|
222
|
+
const loader = new AgentsLoader({
|
|
223
|
+
enableCache: !options.verbose, // Disable cache in verbose mode
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
// Load configuration
|
|
227
|
+
const result = await loader.load(cwd);
|
|
228
|
+
|
|
229
|
+
// JSON output
|
|
230
|
+
if (options.json) {
|
|
231
|
+
const jsonOutput = toJsonOutput(result);
|
|
232
|
+
return success(JSON.stringify(jsonOutput, null, 2), {
|
|
233
|
+
format: "json",
|
|
234
|
+
data: jsonOutput,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Human-readable output
|
|
239
|
+
const display = formatConfigDisplay(result, cwd, options.verbose ?? false);
|
|
240
|
+
return success(display);
|
|
241
|
+
} catch (err) {
|
|
242
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
243
|
+
|
|
244
|
+
if (options.json) {
|
|
245
|
+
const jsonError = {
|
|
246
|
+
success: false,
|
|
247
|
+
config: null,
|
|
248
|
+
sources: [],
|
|
249
|
+
warnings: [],
|
|
250
|
+
fromCache: false,
|
|
251
|
+
error: message,
|
|
252
|
+
};
|
|
253
|
+
return error("INTERNAL_ERROR", JSON.stringify(jsonError, null, 2));
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return error("INTERNAL_ERROR", `Failed to load AGENTS.md configuration: ${message}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Execute handler for command context
|
|
262
|
+
*/
|
|
263
|
+
export async function executeShow(ctx: CommandContext): Promise<CommandResult> {
|
|
264
|
+
const options: AgentsShowOptions = {
|
|
265
|
+
json: ctx.parsedArgs.named.json as boolean | undefined,
|
|
266
|
+
verbose: ctx.parsedArgs.named.verbose as boolean | undefined,
|
|
267
|
+
scope: ctx.parsedArgs.named.scope as string | undefined,
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
return handleAgentsShow(options);
|
|
271
|
+
}
|