@prestyj/cli 4.2.15
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 +150 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +585 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +27 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session.d.ts +65 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +349 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/agents.d.ts +32 -0
- package/dist/core/agents.d.ts.map +1 -0
- package/dist/core/agents.js +95 -0
- package/dist/core/agents.js.map +1 -0
- package/dist/core/auth-storage.d.ts +33 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +95 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/auto-update.d.ts +8 -0
- package/dist/core/auto-update.d.ts.map +1 -0
- package/dist/core/auto-update.js +152 -0
- package/dist/core/auto-update.js.map +1 -0
- package/dist/core/compaction/compactor.d.ts +39 -0
- package/dist/core/compaction/compactor.d.ts.map +1 -0
- package/dist/core/compaction/compactor.js +253 -0
- package/dist/core/compaction/compactor.js.map +1 -0
- package/dist/core/compaction/compactor.test.d.ts +2 -0
- package/dist/core/compaction/compactor.test.d.ts.map +1 -0
- package/dist/core/compaction/compactor.test.js +116 -0
- package/dist/core/compaction/compactor.test.js.map +1 -0
- package/dist/core/compaction/token-estimator.d.ts +5 -0
- package/dist/core/compaction/token-estimator.d.ts.map +1 -0
- package/dist/core/compaction/token-estimator.js +36 -0
- package/dist/core/compaction/token-estimator.js.map +1 -0
- package/dist/core/compaction/token-estimator.test.d.ts +2 -0
- package/dist/core/compaction/token-estimator.test.d.ts.map +1 -0
- package/dist/core/compaction/token-estimator.test.js +115 -0
- package/dist/core/compaction/token-estimator.test.js.map +1 -0
- package/dist/core/custom-commands.d.ts +13 -0
- package/dist/core/custom-commands.d.ts.map +1 -0
- package/dist/core/custom-commands.js +40 -0
- package/dist/core/custom-commands.js.map +1 -0
- package/dist/core/event-bus.d.ts +89 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +92 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +8 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +48 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/types.d.ts +19 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +2 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/index.d.ts +14 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +26 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +132 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/mcp/client.d.ts +35 -0
- package/dist/core/mcp/client.d.ts.map +1 -0
- package/dist/core/mcp/client.js +233 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/defaults.d.ts +9 -0
- package/dist/core/mcp/defaults.d.ts.map +1 -0
- package/dist/core/mcp/defaults.js +51 -0
- package/dist/core/mcp/defaults.js.map +1 -0
- package/dist/core/mcp/index.d.ts +4 -0
- package/dist/core/mcp/index.d.ts.map +1 -0
- package/dist/core/mcp/index.js +3 -0
- package/dist/core/mcp/index.js.map +1 -0
- package/dist/core/mcp/types.d.ts +17 -0
- package/dist/core/mcp/types.d.ts.map +1 -0
- package/dist/core/mcp/types.js +2 -0
- package/dist/core/mcp/types.js.map +1 -0
- package/dist/core/model-registry.d.ts +24 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +124 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/oauth/anthropic.d.ts +4 -0
- package/dist/core/oauth/anthropic.d.ts.map +1 -0
- package/dist/core/oauth/anthropic.js +75 -0
- package/dist/core/oauth/anthropic.js.map +1 -0
- package/dist/core/oauth/openai.d.ts +4 -0
- package/dist/core/oauth/openai.d.ts.map +1 -0
- package/dist/core/oauth/openai.js +186 -0
- package/dist/core/oauth/openai.js.map +1 -0
- package/dist/core/oauth/pkce.d.ts +5 -0
- package/dist/core/oauth/pkce.d.ts.map +1 -0
- package/dist/core/oauth/pkce.js +17 -0
- package/dist/core/oauth/pkce.js.map +1 -0
- package/dist/core/oauth/types.d.ts +12 -0
- package/dist/core/oauth/types.d.ts.map +1 -0
- package/dist/core/oauth/types.js +2 -0
- package/dist/core/oauth/types.js.map +1 -0
- package/dist/core/process-manager.d.ts +30 -0
- package/dist/core/process-manager.d.ts.map +1 -0
- package/dist/core/process-manager.js +125 -0
- package/dist/core/process-manager.js.map +1 -0
- package/dist/core/prompt-commands.d.ts +14 -0
- package/dist/core/prompt-commands.d.ts.map +1 -0
- package/dist/core/prompt-commands.js +475 -0
- package/dist/core/prompt-commands.js.map +1 -0
- package/dist/core/session-manager.d.ts +80 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +220 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/settings-manager.d.ts +43 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +64 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +23 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +89 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +31 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +161 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive.d.ts +3 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +154 -0
- package/dist/interactive.js.map +1 -0
- package/dist/modes/index.d.ts +2 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +2 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/json-mode.d.ts +13 -0
- package/dist/modes/json-mode.d.ts.map +1 -0
- package/dist/modes/json-mode.js +74 -0
- package/dist/modes/json-mode.js.map +1 -0
- package/dist/modes/print-mode.d.ts +12 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +49 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/session.d.ts +16 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +122 -0
- package/dist/session.js.map +1 -0
- package/dist/system-prompt.d.ts +6 -0
- package/dist/system-prompt.d.ts.map +1 -0
- package/dist/system-prompt.js +118 -0
- package/dist/system-prompt.js.map +1 -0
- package/dist/tools/bash.d.ts +11 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +115 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/edit-diff.d.ts +18 -0
- package/dist/tools/edit-diff.d.ts.map +1 -0
- package/dist/tools/edit-diff.js +92 -0
- package/dist/tools/edit-diff.js.map +1 -0
- package/dist/tools/edit.d.ts +10 -0
- package/dist/tools/edit.d.ts.map +1 -0
- package/dist/tools/edit.js +56 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/find.d.ts +9 -0
- package/dist/tools/find.d.ts.map +1 -0
- package/dist/tools/find.js +59 -0
- package/dist/tools/find.js.map +1 -0
- package/dist/tools/grep.d.ts +12 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +122 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/index.d.ts +26 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +47 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/ls.d.ts +9 -0
- package/dist/tools/ls.d.ts.map +1 -0
- package/dist/tools/ls.js +56 -0
- package/dist/tools/ls.js.map +1 -0
- package/dist/tools/path-utils.d.ts +2 -0
- package/dist/tools/path-utils.d.ts.map +1 -0
- package/dist/tools/path-utils.js +9 -0
- package/dist/tools/path-utils.js.map +1 -0
- package/dist/tools/read.d.ts +11 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +112 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/subagent.d.ts +26 -0
- package/dist/tools/subagent.d.ts.map +1 -0
- package/dist/tools/subagent.js +171 -0
- package/dist/tools/subagent.js.map +1 -0
- package/dist/tools/task-output.d.ts +10 -0
- package/dist/tools/task-output.d.ts.map +1 -0
- package/dist/tools/task-output.js +33 -0
- package/dist/tools/task-output.js.map +1 -0
- package/dist/tools/task-stop.d.ts +9 -0
- package/dist/tools/task-stop.d.ts.map +1 -0
- package/dist/tools/task-stop.js +15 -0
- package/dist/tools/task-stop.js.map +1 -0
- package/dist/tools/tasks.d.ts +16 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +132 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/truncate.d.ts +19 -0
- package/dist/tools/truncate.d.ts.map +1 -0
- package/dist/tools/truncate.js +59 -0
- package/dist/tools/truncate.js.map +1 -0
- package/dist/tools/truncate.test.d.ts +2 -0
- package/dist/tools/truncate.test.d.ts.map +1 -0
- package/dist/tools/truncate.test.js +100 -0
- package/dist/tools/truncate.test.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +9 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +50 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/write.d.ts +9 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +31 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/tools/write.test.d.ts +2 -0
- package/dist/tools/write.test.d.ts.map +1 -0
- package/dist/tools/write.test.js +84 -0
- package/dist/tools/write.test.js.map +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/App.d.ts +131 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js +1101 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/components/ActivityIndicator.d.ts +13 -0
- package/dist/ui/components/ActivityIndicator.d.ts.map +1 -0
- package/dist/ui/components/ActivityIndicator.js +313 -0
- package/dist/ui/components/ActivityIndicator.js.map +1 -0
- package/dist/ui/components/AssistantMessage.d.ts +9 -0
- package/dist/ui/components/AssistantMessage.d.ts.map +1 -0
- package/dist/ui/components/AssistantMessage.js +11 -0
- package/dist/ui/components/AssistantMessage.js.map +1 -0
- package/dist/ui/components/BackgroundTasksBar.d.ts +15 -0
- package/dist/ui/components/BackgroundTasksBar.d.ts.map +1 -0
- package/dist/ui/components/BackgroundTasksBar.js +74 -0
- package/dist/ui/components/BackgroundTasksBar.js.map +1 -0
- package/dist/ui/components/Banner.d.ts +11 -0
- package/dist/ui/components/Banner.d.ts.map +1 -0
- package/dist/ui/components/Banner.js +58 -0
- package/dist/ui/components/Banner.js.map +1 -0
- package/dist/ui/components/CompactionNotice.d.ts +10 -0
- package/dist/ui/components/CompactionNotice.d.ts.map +1 -0
- package/dist/ui/components/CompactionNotice.js +31 -0
- package/dist/ui/components/CompactionNotice.js.map +1 -0
- package/dist/ui/components/DiffView.d.ts +4 -0
- package/dist/ui/components/DiffView.d.ts.map +1 -0
- package/dist/ui/components/DiffView.js +20 -0
- package/dist/ui/components/DiffView.js.map +1 -0
- package/dist/ui/components/Footer.d.ts +10 -0
- package/dist/ui/components/Footer.d.ts.map +1 -0
- package/dist/ui/components/Footer.js +116 -0
- package/dist/ui/components/Footer.js.map +1 -0
- package/dist/ui/components/InputArea.d.ts +21 -0
- package/dist/ui/components/InputArea.d.ts.map +1 -0
- package/dist/ui/components/InputArea.js +476 -0
- package/dist/ui/components/InputArea.js.map +1 -0
- package/dist/ui/components/Markdown.d.ts +9 -0
- package/dist/ui/components/Markdown.d.ts.map +1 -0
- package/dist/ui/components/Markdown.js +246 -0
- package/dist/ui/components/Markdown.js.map +1 -0
- package/dist/ui/components/ModelSelector.d.ts +11 -0
- package/dist/ui/components/ModelSelector.d.ts.map +1 -0
- package/dist/ui/components/ModelSelector.js +20 -0
- package/dist/ui/components/ModelSelector.js.map +1 -0
- package/dist/ui/components/Overlay.d.ts +8 -0
- package/dist/ui/components/Overlay.d.ts.map +1 -0
- package/dist/ui/components/Overlay.js +9 -0
- package/dist/ui/components/Overlay.js.map +1 -0
- package/dist/ui/components/SelectList.d.ts +14 -0
- package/dist/ui/components/SelectList.d.ts.map +1 -0
- package/dist/ui/components/SelectList.js +46 -0
- package/dist/ui/components/SelectList.js.map +1 -0
- package/dist/ui/components/ServerToolExecution.d.ts +16 -0
- package/dist/ui/components/ServerToolExecution.d.ts.map +1 -0
- package/dist/ui/components/ServerToolExecution.js +25 -0
- package/dist/ui/components/ServerToolExecution.js.map +1 -0
- package/dist/ui/components/SessionSelector.d.ts +9 -0
- package/dist/ui/components/SessionSelector.d.ts.map +1 -0
- package/dist/ui/components/SessionSelector.js +13 -0
- package/dist/ui/components/SessionSelector.js.map +1 -0
- package/dist/ui/components/SettingsSelector.d.ts +9 -0
- package/dist/ui/components/SettingsSelector.d.ts.map +1 -0
- package/dist/ui/components/SettingsSelector.js +13 -0
- package/dist/ui/components/SettingsSelector.js.map +1 -0
- package/dist/ui/components/SlashCommandMenu.d.ts +15 -0
- package/dist/ui/components/SlashCommandMenu.d.ts.map +1 -0
- package/dist/ui/components/SlashCommandMenu.js +32 -0
- package/dist/ui/components/SlashCommandMenu.js.map +1 -0
- package/dist/ui/components/Spinner.d.ts +4 -0
- package/dist/ui/components/Spinner.d.ts.map +1 -0
- package/dist/ui/components/Spinner.js +17 -0
- package/dist/ui/components/Spinner.js.map +1 -0
- package/dist/ui/components/StreamingArea.d.ts +10 -0
- package/dist/ui/components/StreamingArea.d.ts.map +1 -0
- package/dist/ui/components/StreamingArea.js +56 -0
- package/dist/ui/components/StreamingArea.js.map +1 -0
- package/dist/ui/components/SubAgentPanel.d.ts +21 -0
- package/dist/ui/components/SubAgentPanel.d.ts.map +1 -0
- package/dist/ui/components/SubAgentPanel.js +83 -0
- package/dist/ui/components/SubAgentPanel.js.map +1 -0
- package/dist/ui/components/TaskOverlay.d.ts +10 -0
- package/dist/ui/components/TaskOverlay.d.ts.map +1 -0
- package/dist/ui/components/TaskOverlay.js +259 -0
- package/dist/ui/components/TaskOverlay.js.map +1 -0
- package/dist/ui/components/ThinkingBlock.d.ts +11 -0
- package/dist/ui/components/ThinkingBlock.d.ts.map +1 -0
- package/dist/ui/components/ThinkingBlock.js +40 -0
- package/dist/ui/components/ThinkingBlock.js.map +1 -0
- package/dist/ui/components/ThinkingIndicator.d.ts +6 -0
- package/dist/ui/components/ThinkingIndicator.d.ts.map +1 -0
- package/dist/ui/components/ThinkingIndicator.js +169 -0
- package/dist/ui/components/ThinkingIndicator.js.map +1 -0
- package/dist/ui/components/ToolExecution.d.ts +16 -0
- package/dist/ui/components/ToolExecution.d.ts.map +1 -0
- package/dist/ui/components/ToolExecution.js +456 -0
- package/dist/ui/components/ToolExecution.js.map +1 -0
- package/dist/ui/components/UserMessage.d.ts +7 -0
- package/dist/ui/components/UserMessage.d.ts.map +1 -0
- package/dist/ui/components/UserMessage.js +16 -0
- package/dist/ui/components/UserMessage.js.map +1 -0
- package/dist/ui/components/index.d.ts +14 -0
- package/dist/ui/components/index.d.ts.map +1 -0
- package/dist/ui/components/index.js +14 -0
- package/dist/ui/components/index.js.map +1 -0
- package/dist/ui/hooks/useAgentLoop.d.ts +69 -0
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -0
- package/dist/ui/hooks/useAgentLoop.js +466 -0
- package/dist/ui/hooks/useAgentLoop.js.map +1 -0
- package/dist/ui/hooks/useSessionManager.d.ts +13 -0
- package/dist/ui/hooks/useSessionManager.d.ts.map +1 -0
- package/dist/ui/hooks/useSessionManager.js +43 -0
- package/dist/ui/hooks/useSessionManager.js.map +1 -0
- package/dist/ui/hooks/useSlashCommands.d.ts +7 -0
- package/dist/ui/hooks/useSlashCommands.d.ts.map +1 -0
- package/dist/ui/hooks/useSlashCommands.js +11 -0
- package/dist/ui/hooks/useSlashCommands.js.map +1 -0
- package/dist/ui/hooks/useTerminalSize.d.ts +20 -0
- package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -0
- package/dist/ui/hooks/useTerminalSize.js +53 -0
- package/dist/ui/hooks/useTerminalSize.js.map +1 -0
- package/dist/ui/hooks/useTerminalTitle.d.ts +3 -0
- package/dist/ui/hooks/useTerminalTitle.d.ts.map +1 -0
- package/dist/ui/hooks/useTerminalTitle.js +49 -0
- package/dist/ui/hooks/useTerminalTitle.js.map +1 -0
- package/dist/ui/live-item-flush.d.ts +49 -0
- package/dist/ui/live-item-flush.d.ts.map +1 -0
- package/dist/ui/live-item-flush.js +56 -0
- package/dist/ui/live-item-flush.js.map +1 -0
- package/dist/ui/live-item-flush.test.d.ts +2 -0
- package/dist/ui/live-item-flush.test.d.ts.map +1 -0
- package/dist/ui/live-item-flush.test.js +307 -0
- package/dist/ui/live-item-flush.test.js.map +1 -0
- package/dist/ui/login.d.ts +3 -0
- package/dist/ui/login.d.ts.map +1 -0
- package/dist/ui/login.js +93 -0
- package/dist/ui/login.js.map +1 -0
- package/dist/ui/render.d.ts +38 -0
- package/dist/ui/render.d.ts.map +1 -0
- package/dist/ui/render.js +63 -0
- package/dist/ui/render.js.map +1 -0
- package/dist/ui/spinner-frames.d.ts +3 -0
- package/dist/ui/spinner-frames.d.ts.map +1 -0
- package/dist/ui/spinner-frames.js +7 -0
- package/dist/ui/spinner-frames.js.map +1 -0
- package/dist/ui/theme/dark.json +24 -0
- package/dist/ui/theme/detect-theme.d.ts +12 -0
- package/dist/ui/theme/detect-theme.d.ts.map +1 -0
- package/dist/ui/theme/detect-theme.js +152 -0
- package/dist/ui/theme/detect-theme.js.map +1 -0
- package/dist/ui/theme/light.json +24 -0
- package/dist/ui/theme/theme.d.ts +29 -0
- package/dist/ui/theme/theme.d.ts.map +1 -0
- package/dist/ui/theme/theme.js +11 -0
- package/dist/ui/theme/theme.js.map +1 -0
- package/dist/ui/utils/highlight.d.ts +8 -0
- package/dist/ui/utils/highlight.d.ts.map +1 -0
- package/dist/ui/utils/highlight.js +49 -0
- package/dist/ui/utils/highlight.js.map +1 -0
- package/dist/ui/utils/table-text.d.ts +25 -0
- package/dist/ui/utils/table-text.d.ts.map +1 -0
- package/dist/ui/utils/table-text.js +78 -0
- package/dist/ui/utils/table-text.js.map +1 -0
- package/dist/ui/utils/table-text.test.d.ts +2 -0
- package/dist/ui/utils/table-text.test.d.ts.map +1 -0
- package/dist/ui/utils/table-text.test.js +202 -0
- package/dist/ui/utils/table-text.test.js.map +1 -0
- package/dist/utils/error-handler.d.ts +5 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +108 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/format.d.ts +21 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +120 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/git.d.ts +2 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +13 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/image.d.ts +30 -0
- package/dist/utils/image.d.ts.map +1 -0
- package/dist/utils/image.js +176 -0
- package/dist/utils/image.js.map +1 -0
- package/dist/utils/markdown.d.ts +6 -0
- package/dist/utils/markdown.d.ts.map +1 -0
- package/dist/utils/markdown.js +25 -0
- package/dist/utils/markdown.js.map +1 -0
- package/dist/utils/process.d.ts +6 -0
- package/dist/utils/process.d.ts.map +1 -0
- package/dist/utils/process.js +19 -0
- package/dist/utils/process.js.map +1 -0
- package/dist/utils/shell.d.ts +3 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +8 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sound.d.ts +2 -0
- package/dist/utils/sound.d.ts.map +1 -0
- package/dist/utils/sound.js +11 -0
- package/dist/utils/sound.js.map +1 -0
- package/package.json +56 -0
package/dist/ui/login.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
const LOGO_LINES = [" █▀▀▀ ▀▀▀█", " █▀▀ ▄▀ ", " █▄▄▄ █▄▄▄"];
|
|
3
|
+
const GRADIENT = ["#60a5fa", "#6da1f9", "#7a9df7", "#8799f5", "#9495f3", "#a18ff1", "#a78bfa"];
|
|
4
|
+
const GAP = " ";
|
|
5
|
+
const PRIMARY = "#60a5fa";
|
|
6
|
+
const TEXT = "#e2e8f0";
|
|
7
|
+
const TEXT_DIM = "#64748b";
|
|
8
|
+
const PROVIDERS = [
|
|
9
|
+
{ label: "Anthropic", value: "anthropic", description: "Claude Opus, Sonnet, Haiku" },
|
|
10
|
+
{ label: "OpenAI", value: "openai", description: "GPT-5.3 Codex, GPT-5.1 Codex Mini" },
|
|
11
|
+
{ label: "Z.AI (GLM)", value: "glm", description: "GLM-5, GLM-4.7" },
|
|
12
|
+
{ label: "Moonshot", value: "moonshot", description: "Kimi K2.5" },
|
|
13
|
+
];
|
|
14
|
+
function gradientLine(text) {
|
|
15
|
+
let result = "";
|
|
16
|
+
let colorIdx = 0;
|
|
17
|
+
for (const ch of text) {
|
|
18
|
+
if (ch === " ") {
|
|
19
|
+
result += ch;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
const color = GRADIENT[Math.min(colorIdx, GRADIENT.length - 1)];
|
|
23
|
+
result += chalk.hex(color)(ch);
|
|
24
|
+
colorIdx++;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
function renderScreen(selectedIndex) {
|
|
30
|
+
const lines = [];
|
|
31
|
+
lines.push(gradientLine(LOGO_LINES[0]) + GAP + chalk.hex(PRIMARY).bold("Login"));
|
|
32
|
+
lines.push(gradientLine(LOGO_LINES[1]) + GAP + chalk.hex(TEXT_DIM)("Select a provider"));
|
|
33
|
+
lines.push(gradientLine(LOGO_LINES[2]));
|
|
34
|
+
lines.push("");
|
|
35
|
+
for (let i = 0; i < PROVIDERS.length; i++) {
|
|
36
|
+
const item = PROVIDERS[i];
|
|
37
|
+
const selected = i === selectedIndex;
|
|
38
|
+
const marker = selected ? "❯ " : " ";
|
|
39
|
+
const labelColor = selected ? PRIMARY : TEXT;
|
|
40
|
+
lines.push(chalk.hex(labelColor)(marker + item.label) + chalk.hex(TEXT_DIM)(` — ${item.description}`));
|
|
41
|
+
}
|
|
42
|
+
lines.push("");
|
|
43
|
+
lines.push(chalk.hex(TEXT_DIM)("↑↓ navigate · Enter select · Esc cancel"));
|
|
44
|
+
return lines.join("\n");
|
|
45
|
+
}
|
|
46
|
+
export function renderLoginSelector() {
|
|
47
|
+
return new Promise((resolve) => {
|
|
48
|
+
let selectedIndex = 0;
|
|
49
|
+
const draw = () => {
|
|
50
|
+
// Restore saved cursor position, clear everything below, then draw
|
|
51
|
+
process.stdout.write("\x1b[u\x1b[J" + renderScreen(selectedIndex) + "\n");
|
|
52
|
+
};
|
|
53
|
+
// Save cursor position, then draw
|
|
54
|
+
process.stdout.write("\n\x1b[s");
|
|
55
|
+
draw();
|
|
56
|
+
process.stdin.setRawMode(true);
|
|
57
|
+
process.stdin.resume();
|
|
58
|
+
const cleanup = () => {
|
|
59
|
+
process.stdin.removeListener("data", onData);
|
|
60
|
+
process.stdin.setRawMode(false);
|
|
61
|
+
process.stdin.pause();
|
|
62
|
+
// Clear the selector display
|
|
63
|
+
process.stdout.write("\x1b[u\x1b[J");
|
|
64
|
+
};
|
|
65
|
+
const onData = (chunk) => {
|
|
66
|
+
const key = chunk.toString();
|
|
67
|
+
// Escape or Ctrl+C → cancel
|
|
68
|
+
if (key === "\x1b" || key === "\x03") {
|
|
69
|
+
cleanup();
|
|
70
|
+
resolve(null);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// Enter → select
|
|
74
|
+
if (key === "\r" || key === "\n") {
|
|
75
|
+
cleanup();
|
|
76
|
+
resolve(PROVIDERS[selectedIndex].value);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Up arrow
|
|
80
|
+
if (key === "\x1b[A" && selectedIndex > 0) {
|
|
81
|
+
selectedIndex--;
|
|
82
|
+
draw();
|
|
83
|
+
}
|
|
84
|
+
// Down arrow
|
|
85
|
+
if (key === "\x1b[B" && selectedIndex < PROVIDERS.length - 1) {
|
|
86
|
+
selectedIndex++;
|
|
87
|
+
draw();
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
process.stdin.on("data", onData);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/ui/login.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Message, Provider, ThinkingLevel } from "@prestyj/ai";
|
|
2
|
+
import type { AgentTool } from "@prestyj/agent";
|
|
3
|
+
import type { ProcessManager } from "../core/process-manager.js";
|
|
4
|
+
import type { MCPClientManager } from "../core/mcp/index.js";
|
|
5
|
+
import type { AuthStorage } from "../core/auth-storage.js";
|
|
6
|
+
import { type CompletedItem } from "./App.js";
|
|
7
|
+
export interface RenderAppConfig {
|
|
8
|
+
provider: Provider;
|
|
9
|
+
model: string;
|
|
10
|
+
tools: AgentTool[];
|
|
11
|
+
webSearch?: boolean;
|
|
12
|
+
messages: Message[];
|
|
13
|
+
maxTokens: number;
|
|
14
|
+
thinking?: ThinkingLevel;
|
|
15
|
+
apiKey?: string;
|
|
16
|
+
baseUrl?: string;
|
|
17
|
+
accountId?: string;
|
|
18
|
+
cwd: string;
|
|
19
|
+
version: string;
|
|
20
|
+
theme?: "auto" | "dark" | "light";
|
|
21
|
+
showThinking?: boolean;
|
|
22
|
+
showTokenUsage?: boolean;
|
|
23
|
+
onSlashCommand?: (input: string) => Promise<string | null>;
|
|
24
|
+
loggedInProviders?: Provider[];
|
|
25
|
+
credentialsByProvider?: Record<string, {
|
|
26
|
+
accessToken: string;
|
|
27
|
+
accountId?: string;
|
|
28
|
+
}>;
|
|
29
|
+
initialHistory?: CompletedItem[];
|
|
30
|
+
sessionsDir?: string;
|
|
31
|
+
sessionPath?: string;
|
|
32
|
+
processManager?: ProcessManager;
|
|
33
|
+
settingsFile?: string;
|
|
34
|
+
mcpManager?: MCPClientManager;
|
|
35
|
+
authStorage?: AuthStorage;
|
|
36
|
+
}
|
|
37
|
+
export declare function renderApp(config: RenderAppConfig): Promise<void>;
|
|
38
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/ui/render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAO,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAInD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAoEtE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { render } from "ink";
|
|
3
|
+
import { App } from "./App.js";
|
|
4
|
+
import { ThemeContext, loadTheme } from "./theme/theme.js";
|
|
5
|
+
import { detectTheme } from "./theme/detect-theme.js";
|
|
6
|
+
export async function renderApp(config) {
|
|
7
|
+
const themeSetting = config.theme ?? "auto";
|
|
8
|
+
const resolvedTheme = themeSetting === "auto" ? await detectTheme() : themeSetting;
|
|
9
|
+
const theme = loadTheme(resolvedTheme);
|
|
10
|
+
// Clear screen
|
|
11
|
+
process.stdout.write("\x1b[2J\x1b[H");
|
|
12
|
+
const { waitUntilExit, clear } = render(React.createElement(ThemeContext.Provider, { value: theme }, React.createElement(App, {
|
|
13
|
+
provider: config.provider,
|
|
14
|
+
model: config.model,
|
|
15
|
+
tools: config.tools,
|
|
16
|
+
webSearch: config.webSearch,
|
|
17
|
+
messages: config.messages,
|
|
18
|
+
maxTokens: config.maxTokens,
|
|
19
|
+
thinking: config.thinking,
|
|
20
|
+
apiKey: config.apiKey,
|
|
21
|
+
baseUrl: config.baseUrl,
|
|
22
|
+
accountId: config.accountId,
|
|
23
|
+
cwd: config.cwd,
|
|
24
|
+
version: config.version,
|
|
25
|
+
showThinking: config.showThinking,
|
|
26
|
+
showTokenUsage: config.showTokenUsage,
|
|
27
|
+
onSlashCommand: config.onSlashCommand,
|
|
28
|
+
loggedInProviders: config.loggedInProviders,
|
|
29
|
+
credentialsByProvider: config.credentialsByProvider,
|
|
30
|
+
initialHistory: config.initialHistory,
|
|
31
|
+
sessionsDir: config.sessionsDir,
|
|
32
|
+
sessionPath: config.sessionPath,
|
|
33
|
+
processManager: config.processManager,
|
|
34
|
+
settingsFile: config.settingsFile,
|
|
35
|
+
mcpManager: config.mcpManager,
|
|
36
|
+
authStorage: config.authStorage,
|
|
37
|
+
})), {
|
|
38
|
+
// Enable kitty keyboard protocol so terminals that support it can
|
|
39
|
+
// distinguish Shift+Enter from Enter (needed for multiline input).
|
|
40
|
+
// Terminals without support gracefully ignore this.
|
|
41
|
+
kittyKeyboard: {
|
|
42
|
+
mode: "enabled",
|
|
43
|
+
flags: ["disambiguateEscapeCodes"],
|
|
44
|
+
},
|
|
45
|
+
// Ink's built-in exitOnCtrlC checks for the raw \x03 byte, but with
|
|
46
|
+
// kitty keyboard protocol Ctrl+C arrives as \x1b[99;5u so the check
|
|
47
|
+
// never matches. Worse, useInput skips calling our handler when
|
|
48
|
+
// exitOnCtrlC is true. Disable it so our InputArea handles Ctrl+C.
|
|
49
|
+
exitOnCtrlC: false,
|
|
50
|
+
});
|
|
51
|
+
// Resize handling (terminal clear + Static remount) is done inside the
|
|
52
|
+
// React tree via the useTerminalSize hook, which debounces 300ms then
|
|
53
|
+
// clears screen+scrollback and bumps a resizeKey to force Ink to
|
|
54
|
+
// re-render <Static> content. The render.ts layer only needs to call
|
|
55
|
+
// clear() so Ink forgets its stale line-count tracking.
|
|
56
|
+
const onResize = () => {
|
|
57
|
+
clear();
|
|
58
|
+
};
|
|
59
|
+
process.stdout.on("resize", onResize);
|
|
60
|
+
await waitUntilExit();
|
|
61
|
+
process.stdout.off("resize", onResize);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/ui/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAM7B,OAAO,EAAE,GAAG,EAAsB,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA8BtD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAuB;IACrD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC;IAC5C,MAAM,aAAa,GAAG,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;IACnF,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;IAEvC,eAAe;IACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAEtC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,MAAM,CACrC,KAAK,CAAC,aAAa,CACjB,YAAY,CAAC,QAAQ,EACrB,EAAE,KAAK,EAAE,KAAK,EAAE,EAChB,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;QACnD,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CACH,EACD;QACE,kEAAkE;QAClE,mEAAmE;QACnE,oDAAoD;QACpD,aAAa,EAAE;YACb,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,CAAC,yBAAyB,CAAC;SACnC;QACD,oEAAoE;QACpE,oEAAoE;QACpE,gEAAgE;QAChE,mEAAmE;QACnE,WAAW,EAAE,KAAK;KACnB,CACF,CAAC;IAEF,uEAAuE;IACvE,sEAAsE;IACtE,iEAAiE;IACjE,sEAAsE;IACtE,wDAAwD;IACxD,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,KAAK,EAAE,CAAC;IACV,CAAC,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEtC,MAAM,aAAa,EAAE,CAAC;IAEtB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner-frames.d.ts","sourceRoot":"","sources":["../../src/ui/spinner-frames.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,UAGkC,CAAC;AAE9D,eAAO,MAAM,gBAAgB,MAAM,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Sparkle character set — gives a more distinctive, playful feel
|
|
2
|
+
// compared to the standard braille dots every other CLI uses.
|
|
3
|
+
export const SPINNER_FRAMES = process.platform === "darwin"
|
|
4
|
+
? ["\u00B7", "\u2726", "\u2733", "\u2217", "\u273B", "\u273D"]
|
|
5
|
+
: ["\u00B7", "\u2726", "*", "\u2217", "\u273B", "\u273D"];
|
|
6
|
+
export const SPINNER_INTERVAL = 120;
|
|
7
|
+
//# sourceMappingURL=spinner-frames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner-frames.js","sourceRoot":"","sources":["../../src/ui/spinner-frames.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GACzB,OAAO,CAAC,QAAQ,KAAK,QAAQ;IAC3B,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC9D,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dark",
|
|
3
|
+
"primary": "#60a5fa",
|
|
4
|
+
"secondary": "#a78bfa",
|
|
5
|
+
"success": "#4ade80",
|
|
6
|
+
"error": "#f87171",
|
|
7
|
+
"warning": "#fbbf24",
|
|
8
|
+
"text": "#e5e7eb",
|
|
9
|
+
"textDim": "#6b7280",
|
|
10
|
+
"textMuted": "#9ca3af",
|
|
11
|
+
"border": "#374151",
|
|
12
|
+
"background": "",
|
|
13
|
+
"accent": "#818cf8",
|
|
14
|
+
"toolName": "#60a5fa",
|
|
15
|
+
"toolSuccess": "#4ade80",
|
|
16
|
+
"toolError": "#f87171",
|
|
17
|
+
"diffAdded": "#4ade80",
|
|
18
|
+
"diffRemoved": "#f87171",
|
|
19
|
+
"diffContext": "#6b7280",
|
|
20
|
+
"spinnerColor": "#60a5fa",
|
|
21
|
+
"inputPrompt": "#60a5fa",
|
|
22
|
+
"footerText": "#6b7280",
|
|
23
|
+
"commandColor": "#818cf8"
|
|
24
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect whether the terminal uses a dark or light background.
|
|
3
|
+
*
|
|
4
|
+
* Detection chain (first match wins):
|
|
5
|
+
* 1. VSCODE_THEME_KIND env var (VS Code integrated terminal)
|
|
6
|
+
* 2. OSC 11 escape sequence query (most modern terminals)
|
|
7
|
+
* 3. COLORFGBG env var (rxvt, some other terminals)
|
|
8
|
+
* 4. macOS system dark mode (defaults read -g AppleInterfaceStyle)
|
|
9
|
+
* 5. Default to "dark"
|
|
10
|
+
*/
|
|
11
|
+
export declare function detectTheme(): Promise<"dark" | "light">;
|
|
12
|
+
//# sourceMappingURL=detect-theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-theme.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/detect-theme.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAuC7D"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
/**
|
|
3
|
+
* Detect whether the terminal uses a dark or light background.
|
|
4
|
+
*
|
|
5
|
+
* Detection chain (first match wins):
|
|
6
|
+
* 1. VSCODE_THEME_KIND env var (VS Code integrated terminal)
|
|
7
|
+
* 2. OSC 11 escape sequence query (most modern terminals)
|
|
8
|
+
* 3. COLORFGBG env var (rxvt, some other terminals)
|
|
9
|
+
* 4. macOS system dark mode (defaults read -g AppleInterfaceStyle)
|
|
10
|
+
* 5. Default to "dark"
|
|
11
|
+
*/
|
|
12
|
+
export async function detectTheme() {
|
|
13
|
+
// 1. VS Code sets this reliably
|
|
14
|
+
const vscodeTheme = process.env["VSCODE_THEME_KIND"];
|
|
15
|
+
if (vscodeTheme) {
|
|
16
|
+
return vscodeTheme.includes("light") ? "light" : "dark";
|
|
17
|
+
}
|
|
18
|
+
// 2. OSC 11 — query actual terminal background color
|
|
19
|
+
const osc = await queryOSC11();
|
|
20
|
+
if (osc !== null)
|
|
21
|
+
return osc;
|
|
22
|
+
// 3. COLORFGBG — "fg;bg" ANSI color indices
|
|
23
|
+
const colorfgbg = process.env["COLORFGBG"];
|
|
24
|
+
if (colorfgbg) {
|
|
25
|
+
const parts = colorfgbg.split(";");
|
|
26
|
+
const bg = parseInt(parts[parts.length - 1], 10);
|
|
27
|
+
if (!isNaN(bg)) {
|
|
28
|
+
// ANSI colors: 0-6 and 8 are dark, 7 and 9-15 are light
|
|
29
|
+
return bg === 7 || (bg >= 9 && bg <= 15) ? "light" : "dark";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// 4. macOS system dark mode
|
|
33
|
+
if (process.platform === "darwin") {
|
|
34
|
+
try {
|
|
35
|
+
const result = execFileSync("defaults", ["read", "-g", "AppleInterfaceStyle"], {
|
|
36
|
+
encoding: "utf-8",
|
|
37
|
+
timeout: 500,
|
|
38
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
39
|
+
});
|
|
40
|
+
return result.trim().toLowerCase() === "dark" ? "dark" : "light";
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Command fails when in light mode (key doesn't exist) — that means light
|
|
44
|
+
return "light";
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// 5. Default
|
|
48
|
+
return "dark";
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Send OSC 11 query to the terminal and parse the background color response.
|
|
52
|
+
* Returns "dark" | "light" based on luminance, or null if unsupported.
|
|
53
|
+
*/
|
|
54
|
+
// ESC character built without a literal escape so ESLint's no-control-regex is satisfied
|
|
55
|
+
const ESC = String.fromCharCode(27);
|
|
56
|
+
const oscResponsePattern = new RegExp(ESC + "\\]11;rgb:([0-9a-fA-F]+)/([0-9a-fA-F]+)/([0-9a-fA-F]+)");
|
|
57
|
+
const cursorPositionPattern = new RegExp(ESC + "\\[\\d+;\\d+R");
|
|
58
|
+
function queryOSC11() {
|
|
59
|
+
return new Promise((resolve) => {
|
|
60
|
+
// Skip for multiplexers — they don't forward OSC queries
|
|
61
|
+
const term = process.env["TERM"] ?? "";
|
|
62
|
+
if (term.startsWith("screen") || term.startsWith("tmux")) {
|
|
63
|
+
resolve(null);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// Need a real TTY
|
|
67
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
68
|
+
resolve(null);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const wasRaw = process.stdin.isRaw;
|
|
72
|
+
let settled = false;
|
|
73
|
+
let buffer = "";
|
|
74
|
+
const cleanup = () => {
|
|
75
|
+
if (settled)
|
|
76
|
+
return;
|
|
77
|
+
settled = true;
|
|
78
|
+
process.stdin.removeListener("data", onData);
|
|
79
|
+
try {
|
|
80
|
+
process.stdin.setRawMode(wasRaw);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// ignore
|
|
84
|
+
}
|
|
85
|
+
// When we pause stdin after raw mode, Node's readline may lose
|
|
86
|
+
// the stream. Only pause if we turned raw mode on ourselves.
|
|
87
|
+
if (!wasRaw) {
|
|
88
|
+
try {
|
|
89
|
+
process.stdin.pause();
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// ignore
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
const timeout = setTimeout(() => {
|
|
97
|
+
cleanup();
|
|
98
|
+
resolve(null);
|
|
99
|
+
}, 200);
|
|
100
|
+
const onData = (data) => {
|
|
101
|
+
buffer += data.toString();
|
|
102
|
+
// Look for OSC 11 response: ESC]11;rgb:RRRR/GGGG/BBBB followed by BEL or ST
|
|
103
|
+
const match = buffer.match(oscResponsePattern);
|
|
104
|
+
if (match) {
|
|
105
|
+
clearTimeout(timeout);
|
|
106
|
+
cleanup();
|
|
107
|
+
// Parse RGB values (can be 1, 2, or 4 hex digits per channel)
|
|
108
|
+
const r = normalizeChannel(match[1]);
|
|
109
|
+
const g = normalizeChannel(match[2]);
|
|
110
|
+
const b = normalizeChannel(match[3]);
|
|
111
|
+
// Relative luminance (ITU-R BT.709)
|
|
112
|
+
const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
113
|
+
resolve(luminance < 0.5 ? "dark" : "light");
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// If we get a cursor position response (ESC[row;colR) without
|
|
117
|
+
// an OSC response, the terminal doesn't support OSC 11
|
|
118
|
+
if (buffer.match(cursorPositionPattern)) {
|
|
119
|
+
clearTimeout(timeout);
|
|
120
|
+
cleanup();
|
|
121
|
+
resolve(null);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
try {
|
|
125
|
+
process.stdin.setRawMode(true);
|
|
126
|
+
process.stdin.resume();
|
|
127
|
+
process.stdin.on("data", onData);
|
|
128
|
+
// Send OSC 11 query + cursor position query as sentinel
|
|
129
|
+
process.stdout.write("\x1b]11;?\x1b\\\x1b[6n");
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
clearTimeout(timeout);
|
|
133
|
+
cleanup();
|
|
134
|
+
resolve(null);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/** Normalize a hex color channel (1-4 hex digits) to 0.0–1.0 range. */
|
|
139
|
+
function normalizeChannel(hex) {
|
|
140
|
+
const value = parseInt(hex, 16);
|
|
141
|
+
switch (hex.length) {
|
|
142
|
+
case 1:
|
|
143
|
+
return value / 0xf;
|
|
144
|
+
case 2:
|
|
145
|
+
return value / 0xff;
|
|
146
|
+
case 4:
|
|
147
|
+
return value / 0xffff;
|
|
148
|
+
default:
|
|
149
|
+
return value / (Math.pow(16, hex.length) - 1);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=detect-theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-theme.js","sourceRoot":"","sources":["../../../src/ui/theme/detect-theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "light",
|
|
3
|
+
"primary": "#2563eb",
|
|
4
|
+
"secondary": "#7c3aed",
|
|
5
|
+
"success": "#16a34a",
|
|
6
|
+
"error": "#dc2626",
|
|
7
|
+
"warning": "#d97706",
|
|
8
|
+
"text": "#1f2937",
|
|
9
|
+
"textDim": "#9ca3af",
|
|
10
|
+
"textMuted": "#6b7280",
|
|
11
|
+
"border": "#d1d5db",
|
|
12
|
+
"background": "",
|
|
13
|
+
"accent": "#4f46e5",
|
|
14
|
+
"toolName": "#2563eb",
|
|
15
|
+
"toolSuccess": "#16a34a",
|
|
16
|
+
"toolError": "#dc2626",
|
|
17
|
+
"diffAdded": "#16a34a",
|
|
18
|
+
"diffRemoved": "#dc2626",
|
|
19
|
+
"diffContext": "#9ca3af",
|
|
20
|
+
"spinnerColor": "#2563eb",
|
|
21
|
+
"inputPrompt": "#2563eb",
|
|
22
|
+
"footerText": "#9ca3af",
|
|
23
|
+
"commandColor": "#4f46e5"
|
|
24
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import darkTheme from "./dark.json";
|
|
2
|
+
export type Theme = typeof darkTheme;
|
|
3
|
+
export declare function loadTheme(name: "dark" | "light"): Theme;
|
|
4
|
+
export declare const ThemeContext: import("react").Context<{
|
|
5
|
+
name: string;
|
|
6
|
+
primary: string;
|
|
7
|
+
secondary: string;
|
|
8
|
+
success: string;
|
|
9
|
+
error: string;
|
|
10
|
+
warning: string;
|
|
11
|
+
text: string;
|
|
12
|
+
textDim: string;
|
|
13
|
+
textMuted: string;
|
|
14
|
+
border: string;
|
|
15
|
+
background: string;
|
|
16
|
+
accent: string;
|
|
17
|
+
toolName: string;
|
|
18
|
+
toolSuccess: string;
|
|
19
|
+
toolError: string;
|
|
20
|
+
diffAdded: string;
|
|
21
|
+
diffRemoved: string;
|
|
22
|
+
diffContext: string;
|
|
23
|
+
spinnerColor: string;
|
|
24
|
+
inputPrompt: string;
|
|
25
|
+
footerText: string;
|
|
26
|
+
commandColor: string;
|
|
27
|
+
}>;
|
|
28
|
+
export declare function useTheme(): Theme;
|
|
29
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/theme.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAuB;AAG1D,MAAM,MAAM,KAAK,GAAG,OAAO,SAAS,CAAC;AAErC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAEvD;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;EAAkC,CAAC;AAE5D,wBAAgB,QAAQ,IAAI,KAAK,CAEhC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
import darkTheme from "./dark.json" with { type: "json" };
|
|
3
|
+
import lightTheme from "./light.json" with { type: "json" };
|
|
4
|
+
export function loadTheme(name) {
|
|
5
|
+
return name === "light" ? lightTheme : darkTheme;
|
|
6
|
+
}
|
|
7
|
+
export const ThemeContext = createContext(darkTheme);
|
|
8
|
+
export function useTheme() {
|
|
9
|
+
return useContext(ThemeContext);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/ui/theme/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,SAAS,MAAM,aAAa,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1D,OAAO,UAAU,MAAM,cAAc,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAI5D,MAAM,UAAU,SAAS,CAAC,IAAsB;IAC9C,OAAO,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAQ,SAAS,CAAC,CAAC;AAE5D,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Get language from a file path's extension */
|
|
2
|
+
export declare function langFromPath(filePath: string): string | undefined;
|
|
3
|
+
/**
|
|
4
|
+
* Syntax-highlight code. Returns ANSI string.
|
|
5
|
+
* Falls back to raw code if language unknown.
|
|
6
|
+
*/
|
|
7
|
+
export declare function highlightCode(code: string, language?: string): string;
|
|
8
|
+
//# sourceMappingURL=highlight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/highlight.ts"],"names":[],"mappings":"AA+BA,gDAAgD;AAChD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAOrE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { highlight, supportsLanguage } from "cli-highlight";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
/** Map file extension to cli-highlight language name */
|
|
4
|
+
const EXT_TO_LANG = {
|
|
5
|
+
ts: "typescript",
|
|
6
|
+
tsx: "typescript",
|
|
7
|
+
js: "javascript",
|
|
8
|
+
jsx: "javascript",
|
|
9
|
+
py: "python",
|
|
10
|
+
rb: "ruby",
|
|
11
|
+
rs: "rust",
|
|
12
|
+
go: "go",
|
|
13
|
+
java: "java",
|
|
14
|
+
kt: "kotlin",
|
|
15
|
+
sh: "bash",
|
|
16
|
+
zsh: "bash",
|
|
17
|
+
bash: "bash",
|
|
18
|
+
json: "json",
|
|
19
|
+
yaml: "yaml",
|
|
20
|
+
yml: "yaml",
|
|
21
|
+
md: "markdown",
|
|
22
|
+
html: "xml",
|
|
23
|
+
xml: "xml",
|
|
24
|
+
css: "css",
|
|
25
|
+
scss: "scss",
|
|
26
|
+
sql: "sql",
|
|
27
|
+
toml: "ini",
|
|
28
|
+
dockerfile: "dockerfile",
|
|
29
|
+
};
|
|
30
|
+
/** Get language from a file path's extension */
|
|
31
|
+
export function langFromPath(filePath) {
|
|
32
|
+
const ext = path.extname(filePath).replace(/^\./, "").toLowerCase();
|
|
33
|
+
return EXT_TO_LANG[ext];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Syntax-highlight code. Returns ANSI string.
|
|
37
|
+
* Falls back to raw code if language unknown.
|
|
38
|
+
*/
|
|
39
|
+
export function highlightCode(code, language) {
|
|
40
|
+
if (!language || !supportsLanguage(language))
|
|
41
|
+
return code;
|
|
42
|
+
try {
|
|
43
|
+
return highlight(code, { language, ignoreIllegals: true });
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return code;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=highlight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../src/ui/utils/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,wDAAwD;AACxD,MAAM,WAAW,GAA2B;IAC1C,EAAE,EAAE,YAAY;IAChB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,YAAY;IAChB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,MAAM;IACV,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,YAAY;CACzB,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAiB;IAC3D,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Token } from "marked";
|
|
2
|
+
/** Extract all plain text from a token tree. */
|
|
3
|
+
export declare function extractPlainText(tokens: Token[]): string;
|
|
4
|
+
/** Measure the visual display width of a string (handles CJK, emoji, etc). */
|
|
5
|
+
export declare function visualWidth(str: string): number;
|
|
6
|
+
/**
|
|
7
|
+
* Force a string to exactly `width` visual columns.
|
|
8
|
+
* Truncates if too wide (char-by-char to avoid splitting wide chars),
|
|
9
|
+
* pads with spaces if too narrow.
|
|
10
|
+
*/
|
|
11
|
+
export declare function fitToWidth(str: string, width: number): string;
|
|
12
|
+
/**
|
|
13
|
+
* Word-wrap plain text extracted from tokens into lines of at most `width`
|
|
14
|
+
* visual columns. Uses `wrap-ansi` for wrapping, then force-clamps each line
|
|
15
|
+
* to exactly `width` with `fitToWidth` to eliminate measurement mismatches.
|
|
16
|
+
*/
|
|
17
|
+
export declare function wrapPlainTextLines(tokens: Token[], width: number): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Center a string within `width` visual columns.
|
|
20
|
+
* Truncates if too wide, pads with spaces on both sides if too narrow.
|
|
21
|
+
*/
|
|
22
|
+
export declare function centerToWidth(str: string, width: number): string;
|
|
23
|
+
/** Measure the visual display width of plain text in a token tree. */
|
|
24
|
+
export declare function plainTextLength(tokens: Token[]): number;
|
|
25
|
+
//# sourceMappingURL=table-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-text.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/table-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAIpC,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAaxD;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAiB7D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ3E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAEvD"}
|