@qduc/term2 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/dist/agent.d.ts +19 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +143 -0
- package/dist/agent.js.map +1 -0
- package/dist/app.d.ts +22 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +403 -0
- package/dist/app.js.map +1 -0
- package/dist/app.model-command-feedback.test.d.ts +2 -0
- package/dist/app.model-command-feedback.test.d.ts.map +1 -0
- package/dist/app.model-command-feedback.test.js +19 -0
- package/dist/app.model-command-feedback.test.js.map +1 -0
- package/dist/app.parseInput.test.d.ts +2 -0
- package/dist/app.parseInput.test.d.ts.map +1 -0
- package/dist/app.parseInput.test.js +97 -0
- package/dist/app.parseInput.test.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +241 -0
- package/dist/cli.js.map +1 -0
- package/dist/components/ApprovalPrompt.d.ts +10 -0
- package/dist/components/ApprovalPrompt.d.ts.map +1 -0
- package/dist/components/ApprovalPrompt.js +163 -0
- package/dist/components/ApprovalPrompt.js.map +1 -0
- package/dist/components/Banner.d.ts +9 -0
- package/dist/components/Banner.d.ts.map +1 -0
- package/dist/components/Banner.js +86 -0
- package/dist/components/Banner.js.map +1 -0
- package/dist/components/BottomArea.d.ts +33 -0
- package/dist/components/BottomArea.d.ts.map +1 -0
- package/dist/components/BottomArea.js +31 -0
- package/dist/components/BottomArea.js.map +1 -0
- package/dist/components/BottomArea.test.d.ts +2 -0
- package/dist/components/BottomArea.test.d.ts.map +1 -0
- package/dist/components/BottomArea.test.js +73 -0
- package/dist/components/BottomArea.test.js.map +1 -0
- package/dist/components/ChatMessage.d.ts +7 -0
- package/dist/components/ChatMessage.d.ts.map +1 -0
- package/dist/components/ChatMessage.js +10 -0
- package/dist/components/ChatMessage.js.map +1 -0
- package/dist/components/CommandMessage.d.ts +15 -0
- package/dist/components/CommandMessage.d.ts.map +1 -0
- package/dist/components/CommandMessage.js +188 -0
- package/dist/components/CommandMessage.js.map +1 -0
- package/dist/components/CommandMessage.test.d.ts +2 -0
- package/dist/components/CommandMessage.test.d.ts.map +1 -0
- package/dist/components/CommandMessage.test.js +35 -0
- package/dist/components/CommandMessage.test.js.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +27 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +77 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/ErrorBoundary.test.d.ts +2 -0
- package/dist/components/ErrorBoundary.test.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.test.js +32 -0
- package/dist/components/ErrorBoundary.test.js.map +1 -0
- package/dist/components/Input/PopupManager.d.ts +42 -0
- package/dist/components/Input/PopupManager.d.ts.map +1 -0
- package/dist/components/Input/PopupManager.js +13 -0
- package/dist/components/Input/PopupManager.js.map +1 -0
- package/dist/components/InputBox.d.ts +18 -0
- package/dist/components/InputBox.d.ts.map +1 -0
- package/dist/components/InputBox.js +384 -0
- package/dist/components/InputBox.js.map +1 -0
- package/dist/components/InputBox.menu-logic.test.d.ts +2 -0
- package/dist/components/InputBox.menu-logic.test.d.ts.map +1 -0
- package/dist/components/InputBox.menu-logic.test.js +151 -0
- package/dist/components/InputBox.menu-logic.test.js.map +1 -0
- package/dist/components/InputBox.test.d.ts +2 -0
- package/dist/components/InputBox.test.d.ts.map +1 -0
- package/dist/components/InputBox.test.js +91 -0
- package/dist/components/InputBox.test.js.map +1 -0
- package/dist/components/LiveResponse.d.ts +13 -0
- package/dist/components/LiveResponse.d.ts.map +1 -0
- package/dist/components/LiveResponse.js +16 -0
- package/dist/components/LiveResponse.js.map +1 -0
- package/dist/components/MarkdownRenderer.d.ts +8 -0
- package/dist/components/MarkdownRenderer.d.ts.map +1 -0
- package/dist/components/MarkdownRenderer.js +225 -0
- package/dist/components/MarkdownRenderer.js.map +1 -0
- package/dist/components/MentorMode.test.d.ts +2 -0
- package/dist/components/MentorMode.test.d.ts.map +1 -0
- package/dist/components/MentorMode.test.js.map +1 -0
- package/dist/components/MessageList.d.ts +7 -0
- package/dist/components/MessageList.d.ts.map +1 -0
- package/dist/components/MessageList.js +29 -0
- package/dist/components/MessageList.js.map +1 -0
- package/dist/components/MessageList.test.d.ts +2 -0
- package/dist/components/MessageList.test.d.ts.map +1 -0
- package/dist/components/MessageList.test.js +15 -0
- package/dist/components/MessageList.test.js.map +1 -0
- package/dist/components/ModelSelectionMenu.d.ts +18 -0
- package/dist/components/ModelSelectionMenu.d.ts.map +1 -0
- package/dist/components/ModelSelectionMenu.js +91 -0
- package/dist/components/ModelSelectionMenu.js.map +1 -0
- package/dist/components/ModelSelectionMenu.test.d.ts +2 -0
- package/dist/components/ModelSelectionMenu.test.d.ts.map +1 -0
- package/dist/components/ModelSelectionMenu.test.js +83 -0
- package/dist/components/ModelSelectionMenu.test.js.map +1 -0
- package/dist/components/PathSelectionMenu.d.ts +12 -0
- package/dist/components/PathSelectionMenu.d.ts.map +1 -0
- package/dist/components/PathSelectionMenu.js +42 -0
- package/dist/components/PathSelectionMenu.js.map +1 -0
- package/dist/components/SettingsSelectionMenu.d.ts +9 -0
- package/dist/components/SettingsSelectionMenu.d.ts.map +1 -0
- package/dist/components/SettingsSelectionMenu.js +21 -0
- package/dist/components/SettingsSelectionMenu.js.map +1 -0
- package/dist/components/SlashCommandMenu.d.ts +15 -0
- package/dist/components/SlashCommandMenu.d.ts.map +1 -0
- package/dist/components/SlashCommandMenu.js +20 -0
- package/dist/components/SlashCommandMenu.js.map +1 -0
- package/dist/components/StatusBar.d.ts +11 -0
- package/dist/components/StatusBar.d.ts.map +1 -0
- package/dist/components/StatusBar.js +59 -0
- package/dist/components/StatusBar.js.map +1 -0
- package/dist/components/TextInput.d.ts +42 -0
- package/dist/components/TextInput.d.ts.map +1 -0
- package/dist/components/TextInput.js +397 -0
- package/dist/components/TextInput.js.map +1 -0
- package/dist/components/TextInput.test.d.ts +2 -0
- package/dist/components/TextInput.test.d.ts.map +1 -0
- package/dist/components/TextInput.test.js +75 -0
- package/dist/components/TextInput.test.js.map +1 -0
- package/dist/context/InputContext.d.ts +31 -0
- package/dist/context/InputContext.d.ts.map +1 -0
- package/dist/context/InputContext.js +36 -0
- package/dist/context/InputContext.js.map +1 -0
- package/dist/context/InputContext.stability.test.d.ts +2 -0
- package/dist/context/InputContext.stability.test.d.ts.map +1 -0
- package/dist/context/InputContext.stability.test.js +28 -0
- package/dist/context/InputContext.stability.test.js.map +1 -0
- package/dist/context/InputContext.test.d.ts +2 -0
- package/dist/context/InputContext.test.d.ts.map +1 -0
- package/dist/context/InputContext.test.js +168 -0
- package/dist/context/InputContext.test.js.map +1 -0
- package/dist/debug-schema.d.ts +2 -0
- package/dist/debug-schema.d.ts.map +1 -0
- package/dist/debug-schema.js +22 -0
- package/dist/debug-schema.js.map +1 -0
- package/dist/hooks/use-conversation.d.ts +78 -0
- package/dist/hooks/use-conversation.d.ts.map +1 -0
- package/dist/hooks/use-conversation.js +1017 -0
- package/dist/hooks/use-conversation.js.map +1 -0
- package/dist/hooks/use-input-history.d.ts +16 -0
- package/dist/hooks/use-input-history.d.ts.map +1 -0
- package/dist/hooks/use-input-history.js +71 -0
- package/dist/hooks/use-input-history.js.map +1 -0
- package/dist/hooks/use-model-selection.d.ts +27 -0
- package/dist/hooks/use-model-selection.d.ts.map +1 -0
- package/dist/hooks/use-model-selection.js +187 -0
- package/dist/hooks/use-model-selection.js.map +1 -0
- package/dist/hooks/use-model-selection.test.d.ts +2 -0
- package/dist/hooks/use-model-selection.test.d.ts.map +1 -0
- package/dist/hooks/use-model-selection.test.js +28 -0
- package/dist/hooks/use-model-selection.test.js.map +1 -0
- package/dist/hooks/use-path-completion.d.ts +22 -0
- package/dist/hooks/use-path-completion.d.ts.map +1 -0
- package/dist/hooks/use-path-completion.js +153 -0
- package/dist/hooks/use-path-completion.js.map +1 -0
- package/dist/hooks/use-path-completion.test.d.ts +2 -0
- package/dist/hooks/use-path-completion.test.d.ts.map +1 -0
- package/dist/hooks/use-path-completion.test.js +29 -0
- package/dist/hooks/use-path-completion.test.js.map +1 -0
- package/dist/hooks/use-setting.d.ts +7 -0
- package/dist/hooks/use-setting.d.ts.map +1 -0
- package/dist/hooks/use-setting.js +35 -0
- package/dist/hooks/use-setting.js.map +1 -0
- package/dist/hooks/use-settings-completion.d.ts +23 -0
- package/dist/hooks/use-settings-completion.d.ts.map +1 -0
- package/dist/hooks/use-settings-completion.js +164 -0
- package/dist/hooks/use-settings-completion.js.map +1 -0
- package/dist/hooks/use-settings-completion.test.d.ts +2 -0
- package/dist/hooks/use-settings-completion.test.d.ts.map +1 -0
- package/dist/hooks/use-settings-completion.test.js +334 -0
- package/dist/hooks/use-settings-completion.test.js.map +1 -0
- package/dist/hooks/use-slash-commands.d.ts +21 -0
- package/dist/hooks/use-slash-commands.d.ts.map +1 -0
- package/dist/hooks/use-slash-commands.js +87 -0
- package/dist/hooks/use-slash-commands.js.map +1 -0
- package/dist/hooks/use-slash-commands.test.d.ts +2 -0
- package/dist/hooks/use-slash-commands.test.d.ts.map +1 -0
- package/dist/hooks/use-slash-commands.test.js +246 -0
- package/dist/hooks/use-slash-commands.test.js.map +1 -0
- package/dist/lib/editor-impl.d.ts +23 -0
- package/dist/lib/editor-impl.d.ts.map +1 -0
- package/dist/lib/editor-impl.js +235 -0
- package/dist/lib/editor-impl.js.map +1 -0
- package/dist/lib/openai-agent-client.chat.test.d.ts +2 -0
- package/dist/lib/openai-agent-client.chat.test.d.ts.map +1 -0
- package/dist/lib/openai-agent-client.chat.test.js +68 -0
- package/dist/lib/openai-agent-client.chat.test.js.map +1 -0
- package/dist/lib/openai-agent-client.d.ts +48 -0
- package/dist/lib/openai-agent-client.d.ts.map +1 -0
- package/dist/lib/openai-agent-client.js +653 -0
- package/dist/lib/openai-agent-client.js.map +1 -0
- package/dist/lib/openai-agent-client.test.d.ts +2 -0
- package/dist/lib/openai-agent-client.test.d.ts.map +1 -0
- package/dist/lib/openai-agent-client.test.js +181 -0
- package/dist/lib/openai-agent-client.test.js.map +1 -0
- package/dist/lib/shell.d.ts +7 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +56 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/lib/tool-invoke.d.ts +4 -0
- package/dist/lib/tool-invoke.d.ts.map +1 -0
- package/dist/lib/tool-invoke.js +26 -0
- package/dist/lib/tool-invoke.js.map +1 -0
- package/dist/lib/tool-invoke.test.d.ts +2 -0
- package/dist/lib/tool-invoke.test.d.ts.map +1 -0
- package/dist/lib/tool-invoke.test.js +19 -0
- package/dist/lib/tool-invoke.test.js.map +1 -0
- package/dist/no-singleton-imports.test.d.ts +2 -0
- package/dist/no-singleton-imports.test.d.ts.map +1 -0
- package/dist/no-singleton-imports.test.js +30 -0
- package/dist/no-singleton-imports.test.js.map +1 -0
- package/dist/prompts/anthropic.md +79 -0
- package/dist/prompts/codex.md +97 -0
- package/dist/prompts/default.md +77 -0
- package/dist/prompts/default.md.bak +77 -0
- package/dist/prompts/gpt-5.md +318 -0
- package/dist/prompts/lite.md +29 -0
- package/dist/prompts/simple-mentor.md +207 -0
- package/dist/prompts/simple.md +189 -0
- package/dist/providers/index.d.ts +5 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +8 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-compatible/api.d.ts +17 -0
- package/dist/providers/openai-compatible/api.d.ts.map +1 -0
- package/dist/providers/openai-compatible/api.js +58 -0
- package/dist/providers/openai-compatible/api.js.map +1 -0
- package/dist/providers/openai-compatible/model.d.ts +17 -0
- package/dist/providers/openai-compatible/model.d.ts.map +1 -0
- package/dist/providers/openai-compatible/model.js +435 -0
- package/dist/providers/openai-compatible/model.js.map +1 -0
- package/dist/providers/openai-compatible/provider.d.ts +22 -0
- package/dist/providers/openai-compatible/provider.d.ts.map +1 -0
- package/dist/providers/openai-compatible/provider.js +43 -0
- package/dist/providers/openai-compatible/provider.js.map +1 -0
- package/dist/providers/openai-compatible/utils.d.ts +3 -0
- package/dist/providers/openai-compatible/utils.d.ts.map +1 -0
- package/dist/providers/openai-compatible/utils.js +11 -0
- package/dist/providers/openai-compatible/utils.js.map +1 -0
- package/dist/providers/openai-compatible.provider.d.ts +8 -0
- package/dist/providers/openai-compatible.provider.d.ts.map +1 -0
- package/dist/providers/openai-compatible.provider.js +71 -0
- package/dist/providers/openai-compatible.provider.js.map +1 -0
- package/dist/providers/openai.provider.d.ts +2 -0
- package/dist/providers/openai.provider.d.ts.map +1 -0
- package/dist/providers/openai.provider.js +36 -0
- package/dist/providers/openai.provider.js.map +1 -0
- package/dist/providers/openrouter/api.d.ts +39 -0
- package/dist/providers/openrouter/api.d.ts.map +1 -0
- package/dist/providers/openrouter/api.js +172 -0
- package/dist/providers/openrouter/api.js.map +1 -0
- package/dist/providers/openrouter/converters.d.ts +8 -0
- package/dist/providers/openrouter/converters.d.ts.map +1 -0
- package/dist/providers/openrouter/converters.js +382 -0
- package/dist/providers/openrouter/converters.js.map +1 -0
- package/dist/providers/openrouter/converters.test.d.ts +2 -0
- package/dist/providers/openrouter/converters.test.d.ts.map +1 -0
- package/dist/providers/openrouter/converters.test.js +158 -0
- package/dist/providers/openrouter/converters.test.js.map +1 -0
- package/dist/providers/openrouter/index.d.ts +4 -0
- package/dist/providers/openrouter/index.d.ts.map +1 -0
- package/dist/providers/openrouter/index.js +4 -0
- package/dist/providers/openrouter/index.js.map +1 -0
- package/dist/providers/openrouter/model.d.ts +14 -0
- package/dist/providers/openrouter/model.d.ts.map +1 -0
- package/dist/providers/openrouter/model.js +485 -0
- package/dist/providers/openrouter/model.js.map +1 -0
- package/dist/providers/openrouter/provider.d.ts +15 -0
- package/dist/providers/openrouter/provider.d.ts.map +1 -0
- package/dist/providers/openrouter/provider.js +21 -0
- package/dist/providers/openrouter/provider.js.map +1 -0
- package/dist/providers/openrouter/utils.d.ts +10 -0
- package/dist/providers/openrouter/utils.d.ts.map +1 -0
- package/dist/providers/openrouter/utils.js +27 -0
- package/dist/providers/openrouter/utils.js.map +1 -0
- package/dist/providers/openrouter.api.retry.test.d.ts +2 -0
- package/dist/providers/openrouter.api.retry.test.d.ts.map +1 -0
- package/dist/providers/openrouter.api.retry.test.js +148 -0
- package/dist/providers/openrouter.api.retry.test.js.map +1 -0
- package/dist/providers/openrouter.d.ts +2 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.history.test.d.ts +2 -0
- package/dist/providers/openrouter.history.test.d.ts.map +1 -0
- package/dist/providers/openrouter.history.test.js +533 -0
- package/dist/providers/openrouter.history.test.js.map +1 -0
- package/dist/providers/openrouter.js +4 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/openrouter.provider.createRunner.test.d.ts +2 -0
- package/dist/providers/openrouter.provider.createRunner.test.d.ts.map +1 -0
- package/dist/providers/openrouter.provider.createRunner.test.js +23 -0
- package/dist/providers/openrouter.provider.createRunner.test.js.map +1 -0
- package/dist/providers/openrouter.provider.d.ts +2 -0
- package/dist/providers/openrouter.provider.d.ts.map +1 -0
- package/dist/providers/openrouter.provider.js +56 -0
- package/dist/providers/openrouter.provider.js.map +1 -0
- package/dist/providers/openrouter.test.d.ts +2 -0
- package/dist/providers/openrouter.test.d.ts.map +1 -0
- package/dist/providers/openrouter.test.js +1382 -0
- package/dist/providers/openrouter.test.js.map +1 -0
- package/dist/providers/registry.d.ts +65 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +44 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/registry.test.d.ts +2 -0
- package/dist/providers/registry.test.d.ts.map +1 -0
- package/dist/providers/registry.test.js +76 -0
- package/dist/providers/registry.test.js.map +1 -0
- package/dist/providers/web-search/index.d.ts +8 -0
- package/dist/providers/web-search/index.d.ts.map +1 -0
- package/dist/providers/web-search/index.js +9 -0
- package/dist/providers/web-search/index.js.map +1 -0
- package/dist/providers/web-search/registry.d.ts +35 -0
- package/dist/providers/web-search/registry.d.ts.map +1 -0
- package/dist/providers/web-search/registry.js +56 -0
- package/dist/providers/web-search/registry.js.map +1 -0
- package/dist/providers/web-search/registry.test.d.ts +2 -0
- package/dist/providers/web-search/registry.test.d.ts.map +1 -0
- package/dist/providers/web-search/registry.test.js +105 -0
- package/dist/providers/web-search/registry.test.js.map +1 -0
- package/dist/providers/web-search/tavily.provider.d.ts +15 -0
- package/dist/providers/web-search/tavily.provider.d.ts.map +1 -0
- package/dist/providers/web-search/tavily.provider.js +69 -0
- package/dist/providers/web-search/tavily.provider.js.map +1 -0
- package/dist/providers/web-search/tavily.provider.test.d.ts +2 -0
- package/dist/providers/web-search/tavily.provider.test.d.ts.map +1 -0
- package/dist/providers/web-search/tavily.provider.test.js +67 -0
- package/dist/providers/web-search/tavily.provider.test.js.map +1 -0
- package/dist/providers/web-search/types.d.ts +55 -0
- package/dist/providers/web-search/types.d.ts.map +1 -0
- package/dist/providers/web-search/types.js +6 -0
- package/dist/providers/web-search/types.js.map +1 -0
- package/dist/safety-checker.js +57 -0
- package/dist/services/conversation-events.d.ts +76 -0
- package/dist/services/conversation-events.d.ts.map +1 -0
- package/dist/services/conversation-events.js +2 -0
- package/dist/services/conversation-events.js.map +1 -0
- package/dist/services/conversation-service.d.ts +31 -0
- package/dist/services/conversation-service.d.ts.map +1 -0
- package/dist/services/conversation-service.js +46 -0
- package/dist/services/conversation-service.js.map +1 -0
- package/dist/services/conversation-service.test.js +190 -0
- package/dist/services/conversation-session.d.ts +99 -0
- package/dist/services/conversation-session.d.ts.map +1 -0
- package/dist/services/conversation-session.js +978 -0
- package/dist/services/conversation-session.js.map +1 -0
- package/dist/services/conversation-store.d.ts +24 -0
- package/dist/services/conversation-store.d.ts.map +1 -0
- package/dist/services/conversation-store.js +216 -0
- package/dist/services/conversation-store.js.map +1 -0
- package/dist/services/conversation-store.test.d.ts +2 -0
- package/dist/services/conversation-store.test.d.ts.map +1 -0
- package/dist/services/conversation-store.test.js +167 -0
- package/dist/services/conversation-store.test.js.map +1 -0
- package/dist/services/execution-context.d.ts +10 -0
- package/dist/services/execution-context.d.ts.map +1 -0
- package/dist/services/execution-context.js +22 -0
- package/dist/services/execution-context.js.map +1 -0
- package/dist/services/execution-context.test.d.ts +2 -0
- package/dist/services/execution-context.test.d.ts.map +1 -0
- package/dist/services/execution-context.test.js +49 -0
- package/dist/services/execution-context.test.js.map +1 -0
- package/dist/services/file-service.d.ts +12 -0
- package/dist/services/file-service.d.ts.map +1 -0
- package/dist/services/file-service.js +90 -0
- package/dist/services/file-service.js.map +1 -0
- package/dist/services/history-service.d.ts +39 -0
- package/dist/services/history-service.d.ts.map +1 -0
- package/dist/services/history-service.js +152 -0
- package/dist/services/history-service.js.map +1 -0
- package/dist/services/logging-service.d.ts +75 -0
- package/dist/services/logging-service.d.ts.map +1 -0
- package/dist/services/logging-service.js +343 -0
- package/dist/services/logging-service.js.map +1 -0
- package/dist/services/model-service.d.ts +15 -0
- package/dist/services/model-service.d.ts.map +1 -0
- package/dist/services/model-service.js +46 -0
- package/dist/services/model-service.js.map +1 -0
- package/dist/services/model-service.test.d.ts +2 -0
- package/dist/services/model-service.test.d.ts.map +1 -0
- package/dist/services/model-service.test.js +128 -0
- package/dist/services/model-service.test.js.map +1 -0
- package/dist/services/service-interfaces.d.ts +33 -0
- package/dist/services/service-interfaces.d.ts.map +1 -0
- package/dist/services/service-interfaces.js +2 -0
- package/dist/services/service-interfaces.js.map +1 -0
- package/dist/services/settings-service.d.ts +316 -0
- package/dist/services/settings-service.d.ts.map +1 -0
- package/dist/services/settings-service.js +1128 -0
- package/dist/services/settings-service.js.map +1 -0
- package/dist/services/settings-service.mock.d.ts +20 -0
- package/dist/services/settings-service.mock.d.ts.map +1 -0
- package/dist/services/settings-service.mock.js +55 -0
- package/dist/services/settings-service.mock.js.map +1 -0
- package/dist/services/singleton-deprecation.test.d.ts +2 -0
- package/dist/services/singleton-deprecation.test.d.ts.map +1 -0
- package/dist/services/singleton-deprecation.test.js +59 -0
- package/dist/services/singleton-deprecation.test.js.map +1 -0
- package/dist/services/ssh-service.d.ts +32 -0
- package/dist/services/ssh-service.d.ts.map +1 -0
- package/dist/services/ssh-service.js +119 -0
- package/dist/services/ssh-service.js.map +1 -0
- package/dist/services/ssh-service.test.d.ts +2 -0
- package/dist/services/ssh-service.test.d.ts.map +1 -0
- package/dist/services/ssh-service.test.js +269 -0
- package/dist/services/ssh-service.test.js.map +1 -0
- package/dist/test-search-tool.d.ts +2 -0
- package/dist/test-search-tool.d.ts.map +1 -0
- package/dist/test-search-tool.js +36 -0
- package/dist/test-search-tool.js.map +1 -0
- package/dist/tools/apply-patch.d.ts +28 -0
- package/dist/tools/apply-patch.d.ts.map +1 -0
- package/dist/tools/apply-patch.js +399 -0
- package/dist/tools/apply-patch.js.map +1 -0
- package/dist/tools/apply-patch.test.d.ts +2 -0
- package/dist/tools/apply-patch.test.d.ts.map +1 -0
- package/dist/tools/apply-patch.test.js +155 -0
- package/dist/tools/apply-patch.test.js.map +1 -0
- package/dist/tools/ask-mentor.d.ts +11 -0
- package/dist/tools/ask-mentor.d.ts.map +1 -0
- package/dist/tools/ask-mentor.js +52 -0
- package/dist/tools/ask-mentor.js.map +1 -0
- package/dist/tools/ask-mentor.test.d.ts +2 -0
- package/dist/tools/ask-mentor.test.d.ts.map +1 -0
- package/dist/tools/ask-mentor.test.js +47 -0
- package/dist/tools/ask-mentor.test.js.map +1 -0
- package/dist/tools/bash.d.ts +10 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +55 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/find-files.d.ts +15 -0
- package/dist/tools/find-files.d.ts.map +1 -0
- package/dist/tools/find-files.js +179 -0
- package/dist/tools/find-files.js.map +1 -0
- package/dist/tools/find-files.test.d.ts +2 -0
- package/dist/tools/find-files.test.d.ts.map +1 -0
- package/dist/tools/find-files.test.js +131 -0
- package/dist/tools/find-files.test.js.map +1 -0
- package/dist/tools/format-helpers.d.ts +34 -0
- package/dist/tools/format-helpers.d.ts.map +1 -0
- package/dist/tools/format-helpers.js +131 -0
- package/dist/tools/format-helpers.js.map +1 -0
- package/dist/tools/grep.d.ts +16 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +211 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/read-file.d.ts +15 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +114 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/read-file.test.d.ts +2 -0
- package/dist/tools/read-file.test.d.ts.map +1 -0
- package/dist/tools/read-file.test.js +122 -0
- package/dist/tools/read-file.test.js.map +1 -0
- package/dist/tools/search-replace.d.ts +19 -0
- package/dist/tools/search-replace.d.ts.map +1 -0
- package/dist/tools/search-replace.js +411 -0
- package/dist/tools/search-replace.js.map +1 -0
- package/dist/tools/search-replace.test.d.ts +2 -0
- package/dist/tools/search-replace.test.d.ts.map +1 -0
- package/dist/tools/search-replace.test.js +302 -0
- package/dist/tools/search-replace.test.js.map +1 -0
- package/dist/tools/search.d.ts +15 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +143 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/shell.d.ts +19 -0
- package/dist/tools/shell.d.ts.map +1 -0
- package/dist/tools/shell.js +278 -0
- package/dist/tools/shell.js.map +1 -0
- package/dist/tools/tool-execution-context.d.ts +7 -0
- package/dist/tools/tool-execution-context.d.ts.map +1 -0
- package/dist/tools/tool-execution-context.js +7 -0
- package/dist/tools/tool-execution-context.js.map +1 -0
- package/dist/tools/types.d.ts +30 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/utils.d.ts +12 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +19 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/web-search.d.ts +29 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +106 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/web-search.test.d.ts +2 -0
- package/dist/tools/web-search.test.d.ts.map +1 -0
- package/dist/tools/web-search.test.js +176 -0
- package/dist/tools/web-search.test.js.map +1 -0
- package/dist/utils/command-logger.d.ts +11 -0
- package/dist/utils/command-logger.d.ts.map +1 -0
- package/dist/utils/command-logger.js +34 -0
- package/dist/utils/command-logger.js.map +1 -0
- package/dist/utils/command-safety/constants.d.ts +21 -0
- package/dist/utils/command-safety/constants.d.ts.map +1 -0
- package/dist/utils/command-safety/constants.js +245 -0
- package/dist/utils/command-safety/constants.js.map +1 -0
- package/dist/utils/command-safety/find-helpers.d.ts +15 -0
- package/dist/utils/command-safety/find-helpers.d.ts.map +1 -0
- package/dist/utils/command-safety/find-helpers.js +218 -0
- package/dist/utils/command-safety/find-helpers.js.map +1 -0
- package/dist/utils/command-safety/handlers/find-handler.d.ts +6 -0
- package/dist/utils/command-safety/handlers/find-handler.d.ts.map +1 -0
- package/dist/utils/command-safety/handlers/find-handler.js +113 -0
- package/dist/utils/command-safety/handlers/find-handler.js.map +1 -0
- package/dist/utils/command-safety/handlers/git-handler.d.ts +6 -0
- package/dist/utils/command-safety/handlers/git-handler.d.ts.map +1 -0
- package/dist/utils/command-safety/handlers/git-handler.js +68 -0
- package/dist/utils/command-safety/handlers/git-handler.js.map +1 -0
- package/dist/utils/command-safety/handlers/index.d.ts +13 -0
- package/dist/utils/command-safety/handlers/index.d.ts.map +1 -0
- package/dist/utils/command-safety/handlers/index.js +20 -0
- package/dist/utils/command-safety/handlers/index.js.map +1 -0
- package/dist/utils/command-safety/handlers/sed-handler.d.ts +6 -0
- package/dist/utils/command-safety/handlers/sed-handler.d.ts.map +1 -0
- package/dist/utils/command-safety/handlers/sed-handler.js +94 -0
- package/dist/utils/command-safety/handlers/sed-handler.js.map +1 -0
- package/dist/utils/command-safety/handlers/types.d.ts +36 -0
- package/dist/utils/command-safety/handlers/types.d.ts.map +1 -0
- package/dist/utils/command-safety/handlers/types.js +2 -0
- package/dist/utils/command-safety/handlers/types.js.map +1 -0
- package/dist/utils/command-safety/index.d.ts +14 -0
- package/dist/utils/command-safety/index.d.ts.map +1 -0
- package/dist/utils/command-safety/index.js +183 -0
- package/dist/utils/command-safety/index.js.map +1 -0
- package/dist/utils/command-safety/path-analysis.d.ts +4 -0
- package/dist/utils/command-safety/path-analysis.d.ts.map +1 -0
- package/dist/utils/command-safety/path-analysis.js +153 -0
- package/dist/utils/command-safety/path-analysis.js.map +1 -0
- package/dist/utils/command-safety/utils.d.ts +2 -0
- package/dist/utils/command-safety/utils.d.ts.map +1 -0
- package/dist/utils/command-safety/utils.js +22 -0
- package/dist/utils/command-safety/utils.js.map +1 -0
- package/dist/utils/command-safety.d.ts +21 -0
- package/dist/utils/command-safety.d.ts.map +1 -0
- package/dist/utils/command-safety.find.test.d.ts +2 -0
- package/dist/utils/command-safety.find.test.d.ts.map +1 -0
- package/dist/utils/command-safety.find.test.js +342 -0
- package/dist/utils/command-safety.find.test.js.map +1 -0
- package/dist/utils/command-safety.js +702 -0
- package/dist/utils/command-safety.js.map +1 -0
- package/dist/utils/command-safety.path.test.d.ts +2 -0
- package/dist/utils/command-safety.path.test.d.ts.map +1 -0
- package/dist/utils/command-safety.path.test.js +360 -0
- package/dist/utils/command-safety.path.test.js.map +1 -0
- package/dist/utils/diff.d.ts +2 -0
- package/dist/utils/diff.d.ts.map +1 -0
- package/dist/utils/diff.js +44 -0
- package/dist/utils/diff.js.map +1 -0
- package/dist/utils/diff.test.d.ts +2 -0
- package/dist/utils/diff.test.d.ts.map +1 -0
- package/dist/utils/diff.test.js +85 -0
- package/dist/utils/diff.test.js.map +1 -0
- package/dist/utils/error-helpers.d.ts +6 -0
- package/dist/utils/error-helpers.d.ts.map +1 -0
- package/dist/utils/error-helpers.js +46 -0
- package/dist/utils/error-helpers.js.map +1 -0
- package/dist/utils/error-helpers.test.d.ts +2 -0
- package/dist/utils/error-helpers.test.d.ts.map +1 -0
- package/dist/utils/error-helpers.test.js +152 -0
- package/dist/utils/error-helpers.test.js.map +1 -0
- package/dist/utils/execute-shell.d.ts +15 -0
- package/dist/utils/execute-shell.d.ts.map +1 -0
- package/dist/utils/execute-shell.js +34 -0
- package/dist/utils/execute-shell.js.map +1 -0
- package/dist/utils/execute-shell.test.d.ts +2 -0
- package/dist/utils/execute-shell.test.d.ts.map +1 -0
- package/dist/utils/execute-shell.test.js +20 -0
- package/dist/utils/execute-shell.test.js.map +1 -0
- package/dist/utils/extract-command-messages.d.ts +5 -0
- package/dist/utils/extract-command-messages.d.ts.map +1 -0
- package/dist/utils/extract-command-messages.js +140 -0
- package/dist/utils/extract-command-messages.js.map +1 -0
- package/dist/utils/extract-command-messages.repro.test.d.ts +2 -0
- package/dist/utils/extract-command-messages.repro.test.d.ts.map +1 -0
- package/dist/utils/extract-command-messages.repro.test.js +31 -0
- package/dist/utils/extract-command-messages.repro.test.js.map +1 -0
- package/dist/utils/extract-command-messages.test.js +57 -0
- package/dist/utils/message-buffer.d.ts +2 -0
- package/dist/utils/message-buffer.d.ts.map +1 -0
- package/dist/utils/message-buffer.js +15 -0
- package/dist/utils/message-buffer.js.map +1 -0
- package/dist/utils/message-buffer.test.d.ts +2 -0
- package/dist/utils/message-buffer.test.d.ts.map +1 -0
- package/dist/utils/message-buffer.test.js +17 -0
- package/dist/utils/message-buffer.test.js.map +1 -0
- package/dist/utils/output-trim.d.ts +31 -0
- package/dist/utils/output-trim.d.ts.map +1 -0
- package/dist/utils/output-trim.js +71 -0
- package/dist/utils/output-trim.js.map +1 -0
- package/dist/utils/provider-credentials.d.ts +10 -0
- package/dist/utils/provider-credentials.d.ts.map +1 -0
- package/dist/utils/provider-credentials.js +22 -0
- package/dist/utils/provider-credentials.js.map +1 -0
- package/dist/utils/settings-command.d.ts +13 -0
- package/dist/utils/settings-command.d.ts.map +1 -0
- package/dist/utils/settings-command.js +173 -0
- package/dist/utils/settings-command.js.map +1 -0
- package/dist/utils/ssh-config-parser.d.ts +21 -0
- package/dist/utils/ssh-config-parser.d.ts.map +1 -0
- package/dist/utils/ssh-config-parser.js +89 -0
- package/dist/utils/ssh-config-parser.js.map +1 -0
- package/dist/utils/ssh-config-parser.test.d.ts +2 -0
- package/dist/utils/ssh-config-parser.test.d.ts.map +1 -0
- package/dist/utils/ssh-config-parser.test.js +153 -0
- package/dist/utils/ssh-config-parser.test.js.map +1 -0
- package/dist/utils/streaming-updater.d.ts +7 -0
- package/dist/utils/streaming-updater.d.ts.map +1 -0
- package/dist/utils/streaming-updater.js +41 -0
- package/dist/utils/streaming-updater.js.map +1 -0
- package/dist/utils/throttle.d.ts +7 -0
- package/dist/utils/throttle.d.ts.map +1 -0
- package/dist/utils/throttle.js +49 -0
- package/dist/utils/throttle.js.map +1 -0
- package/package.json +108 -0
- package/readme.md +428 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { useSetting } from '../hooks/use-setting.js';
|
|
4
|
+
import { getProvider } from '../providers/index.js';
|
|
5
|
+
const Banner = ({ settingsService, isShellMode = false }) => {
|
|
6
|
+
const mentorMode = useSetting(settingsService, 'app.mentorMode') ?? false;
|
|
7
|
+
const editMode = useSetting(settingsService, 'app.editMode') ?? false;
|
|
8
|
+
const liteMode = useSetting(settingsService, 'app.liteMode') ?? false;
|
|
9
|
+
const model = useSetting(settingsService, 'agent.model');
|
|
10
|
+
const mentorModel = useSetting(settingsService, 'agent.mentorModel');
|
|
11
|
+
const providerKey = useSetting(settingsService, 'agent.provider') ?? 'openai';
|
|
12
|
+
const reasoningEffort = useSetting(settingsService, 'agent.reasoningEffort') ??
|
|
13
|
+
'default';
|
|
14
|
+
const mentorReasoningEffort = useSetting(settingsService, 'agent.mentorReasoningEffort') ??
|
|
15
|
+
'default';
|
|
16
|
+
const providerDef = getProvider(providerKey);
|
|
17
|
+
const providerLabel = providerDef?.label || providerKey;
|
|
18
|
+
const accent = '#0ed7b5';
|
|
19
|
+
const glow = '#fbbf24';
|
|
20
|
+
const slate = '#64748b';
|
|
21
|
+
const purple = '#a78bfa'; // Soft purple for mentor
|
|
22
|
+
const cyan = '#22d3ee'; // Soft cyan for provider
|
|
23
|
+
const lightSlate = '#94a3b8';
|
|
24
|
+
return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: accent, paddingX: 2, paddingY: 1 },
|
|
25
|
+
React.createElement(Box, { justifyContent: "space-between", alignItems: "center" },
|
|
26
|
+
React.createElement(Box, { alignItems: "center" },
|
|
27
|
+
React.createElement(Text, { color: glow, bold: true }, '▌'),
|
|
28
|
+
React.createElement(Text, { color: accent, bold: true },
|
|
29
|
+
' ',
|
|
30
|
+
"term\u00B2")),
|
|
31
|
+
React.createElement(Box, { gap: 1 },
|
|
32
|
+
liteMode && isShellMode ? (React.createElement(Text, { backgroundColor: "#ca8a04", color: "white", bold: true },
|
|
33
|
+
' ',
|
|
34
|
+
"SHELL",
|
|
35
|
+
' ')) : (liteMode && (React.createElement(Text, { backgroundColor: "#059669", color: "white", bold: true },
|
|
36
|
+
' ',
|
|
37
|
+
"LITE",
|
|
38
|
+
' '))),
|
|
39
|
+
editMode && (React.createElement(Text, { backgroundColor: "#1d4ed8", color: "white", bold: true },
|
|
40
|
+
' ',
|
|
41
|
+
"EDIT",
|
|
42
|
+
' ')),
|
|
43
|
+
mentorMode && (React.createElement(Text, { backgroundColor: "#7c3aed", color: "white", bold: true },
|
|
44
|
+
' ',
|
|
45
|
+
"MENTOR",
|
|
46
|
+
' ')),
|
|
47
|
+
!editMode && !mentorMode && !liteMode && (React.createElement(Text, { backgroundColor: "#0f766e", color: "white", bold: true },
|
|
48
|
+
' ',
|
|
49
|
+
"DEFAULT",
|
|
50
|
+
' ')))),
|
|
51
|
+
React.createElement(Box, { justifyContent: "space-between", marginTop: 1, flexWrap: "wrap" },
|
|
52
|
+
React.createElement(Box, { flexDirection: "column", marginRight: 3 },
|
|
53
|
+
React.createElement(Text, { color: slate },
|
|
54
|
+
"Provider:",
|
|
55
|
+
' ',
|
|
56
|
+
React.createElement(Text, { color: cyan, bold: true }, providerLabel)),
|
|
57
|
+
React.createElement(Box, { flexDirection: "column" },
|
|
58
|
+
React.createElement(Text, { color: slate },
|
|
59
|
+
"Model:",
|
|
60
|
+
' ',
|
|
61
|
+
React.createElement(Text, { color: glow, bold: true }, model
|
|
62
|
+
? model.length > 34
|
|
63
|
+
? `${model.slice(0, 31)}…`
|
|
64
|
+
: model
|
|
65
|
+
: '—'),
|
|
66
|
+
reasoningEffort !== 'none' && (React.createElement(Text, { color: slate },
|
|
67
|
+
' ',
|
|
68
|
+
React.createElement(Text, { color: lightSlate },
|
|
69
|
+
"(",
|
|
70
|
+
reasoningEffort,
|
|
71
|
+
")")))),
|
|
72
|
+
mentorMode && mentorModel && (React.createElement(Text, { color: slate },
|
|
73
|
+
"Mentor:",
|
|
74
|
+
' ',
|
|
75
|
+
React.createElement(Text, { color: purple, bold: true }, mentorModel.length > 34
|
|
76
|
+
? `${mentorModel.slice(0, 31)}…`
|
|
77
|
+
: mentorModel),
|
|
78
|
+
mentorReasoningEffort !== 'none' && (React.createElement(Text, { color: slate },
|
|
79
|
+
' ',
|
|
80
|
+
React.createElement(Text, { color: lightSlate },
|
|
81
|
+
"(",
|
|
82
|
+
mentorReasoningEffort,
|
|
83
|
+
")"))))))))));
|
|
84
|
+
};
|
|
85
|
+
export default Banner;
|
|
86
|
+
//# sourceMappingURL=Banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Banner.js","sourceRoot":"","sources":["../../source/components/Banner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import type { SlashCommand } from './SlashCommandMenu.js';
|
|
3
|
+
import type { SettingsService } from '../services/settings-service.js';
|
|
4
|
+
import type { LoggingService } from '../services/logging-service.js';
|
|
5
|
+
import type { HistoryService } from '../services/history-service.js';
|
|
6
|
+
import type { SSHInfo } from '../app.js';
|
|
7
|
+
export type PendingApproval = {
|
|
8
|
+
agentName: string;
|
|
9
|
+
toolName: string;
|
|
10
|
+
argumentsText: string;
|
|
11
|
+
rawInterruption: any;
|
|
12
|
+
callId?: string;
|
|
13
|
+
isMaxTurnsPrompt?: boolean;
|
|
14
|
+
};
|
|
15
|
+
export type BottomAreaProps = {
|
|
16
|
+
pendingApproval: PendingApproval | null;
|
|
17
|
+
waitingForApproval: boolean;
|
|
18
|
+
waitingForRejectionReason: boolean;
|
|
19
|
+
isProcessing: boolean;
|
|
20
|
+
isShellMode?: boolean;
|
|
21
|
+
onSubmit: (value: string) => Promise<void>;
|
|
22
|
+
slashCommands: SlashCommand[];
|
|
23
|
+
hasConversationHistory: boolean;
|
|
24
|
+
settingsService: SettingsService;
|
|
25
|
+
loggingService: LoggingService;
|
|
26
|
+
historyService: HistoryService;
|
|
27
|
+
onApprove: () => void;
|
|
28
|
+
onReject: () => void;
|
|
29
|
+
sshInfo?: SSHInfo;
|
|
30
|
+
};
|
|
31
|
+
declare const BottomArea: FC<BottomAreaProps>;
|
|
32
|
+
export default BottomArea;
|
|
33
|
+
//# sourceMappingURL=BottomArea.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BottomArea.d.ts","sourceRoot":"","sources":["../../source/components/BottomArea.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAC,EAAE,EAAsB,MAAM,OAAO,CAAC;AAKrD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAEvC,MAAM,MAAM,eAAe,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,GAAG,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,yBAAyB,EAAE,OAAO,CAAC;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,sBAAsB,EAAE,OAAO,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,QAAA,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAyEnC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import ApprovalPrompt from './ApprovalPrompt.js';
|
|
4
|
+
import InputBox from './InputBox.js';
|
|
5
|
+
import StatusBar from './StatusBar.js';
|
|
6
|
+
const BottomArea = ({ pendingApproval, waitingForApproval, waitingForRejectionReason, isProcessing, isShellMode = false, onSubmit, slashCommands, hasConversationHistory, settingsService, loggingService, historyService, onApprove, onReject, sshInfo, }) => {
|
|
7
|
+
const [dotCount, setDotCount] = useState(1);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
if (!isProcessing) {
|
|
10
|
+
setDotCount(1);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const interval = setInterval(() => {
|
|
14
|
+
setDotCount(prev => (prev === 3 ? 1 : prev + 1));
|
|
15
|
+
}, 800);
|
|
16
|
+
return () => clearInterval(interval);
|
|
17
|
+
}, [isProcessing]);
|
|
18
|
+
const showApprovalPrompt = waitingForApproval &&
|
|
19
|
+
!isProcessing &&
|
|
20
|
+
!waitingForRejectionReason &&
|
|
21
|
+
pendingApproval;
|
|
22
|
+
const showInput = (!isProcessing && !waitingForApproval) || waitingForRejectionReason;
|
|
23
|
+
return (React.createElement(Box, { flexDirection: "column" },
|
|
24
|
+
showApprovalPrompt ? (React.createElement(ApprovalPrompt, { approval: pendingApproval, onApprove: onApprove, onReject: onReject })) : showInput ? (React.createElement(InputBox, { onSubmit: onSubmit, slashCommands: slashCommands, hasConversationHistory: hasConversationHistory, waitingForRejectionReason: waitingForRejectionReason, isShellMode: isShellMode, settingsService: settingsService, loggingService: loggingService, historyService: historyService })) : null,
|
|
25
|
+
isProcessing && (React.createElement(Text, { color: "gray", dimColor: true },
|
|
26
|
+
"processing",
|
|
27
|
+
'.'.repeat(dotCount))),
|
|
28
|
+
React.createElement(StatusBar, { settingsService: settingsService, isShellMode: isShellMode, sshInfo: sshInfo })));
|
|
29
|
+
};
|
|
30
|
+
export default BottomArea;
|
|
31
|
+
//# sourceMappingURL=BottomArea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BottomArea.js","sourceRoot":"","sources":["../../source/components/BottomArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAK,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACrD,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAiCvC,MAAM,UAAU,GAAwB,CAAC,EACrC,eAAe,EACf,kBAAkB,EAClB,yBAAyB,EACzB,YAAY,EACZ,WAAW,GAAG,KAAK,EACnB,QAAQ,EACR,aAAa,EACb,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,cAAc,EACd,SAAS,EACT,QAAQ,EACR,OAAO,GACV,EAAE,EAAE;IACD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,WAAW,CAAC,CAAC,CAAC,CAAC;YACf,OAAO;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC9B,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,kBAAkB,GACpB,kBAAkB;QAClB,CAAC,YAAY;QACb,CAAC,yBAAyB;QAC1B,eAAe,CAAC;IACpB,MAAM,SAAS,GACX,CAAC,CAAC,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,yBAAyB,CAAC;IAExE,OAAO,CACH,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACtB,kBAAkB,CAAC,CAAC,CAAC,CAClB,oBAAC,cAAc,IACX,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,GACpB,CACL,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CACZ,oBAAC,QAAQ,IACL,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,sBAAsB,EAAE,sBAAsB,EAC9C,yBAAyB,EAAE,yBAAyB,EACpD,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,GAChC,CACL,CAAC,CAAC,CAAC,IAAI;QAEP,YAAY,IAAI,CACb,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ;;YACZ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAC5B,CACV;QAED,oBAAC,SAAS,IACN,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,GAClB,CACA,CACT,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BottomArea.test.d.ts","sourceRoot":"","sources":["../../source/components/BottomArea.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { render } from 'ink-testing-library';
|
|
4
|
+
import { InputProvider } from '../context/InputContext.js';
|
|
5
|
+
import BottomArea from './BottomArea.js';
|
|
6
|
+
import { createMockSettingsService } from '../services/settings-service.mock.js';
|
|
7
|
+
const mockSlashCommands = [
|
|
8
|
+
{ name: '/clear', description: 'Clear screen', action: () => { } },
|
|
9
|
+
];
|
|
10
|
+
const baseProps = {
|
|
11
|
+
pendingApproval: null,
|
|
12
|
+
waitingForApproval: false,
|
|
13
|
+
waitingForRejectionReason: false,
|
|
14
|
+
isProcessing: false,
|
|
15
|
+
onSubmit: async () => { },
|
|
16
|
+
slashCommands: mockSlashCommands,
|
|
17
|
+
isShellMode: false,
|
|
18
|
+
hasConversationHistory: false,
|
|
19
|
+
settingsService: createMockSettingsService(),
|
|
20
|
+
loggingService: {
|
|
21
|
+
info: () => { },
|
|
22
|
+
warn: () => { },
|
|
23
|
+
error: () => { },
|
|
24
|
+
debug: () => { },
|
|
25
|
+
security: () => { },
|
|
26
|
+
setCorrelationId: () => { },
|
|
27
|
+
clearCorrelationId: () => { },
|
|
28
|
+
},
|
|
29
|
+
historyService: {
|
|
30
|
+
getMessages: () => [],
|
|
31
|
+
addMessage: () => { },
|
|
32
|
+
clear: () => { },
|
|
33
|
+
},
|
|
34
|
+
onApprove: () => { },
|
|
35
|
+
onReject: () => { },
|
|
36
|
+
};
|
|
37
|
+
const renderBottomArea = (props) => render(React.createElement(InputProvider, null,
|
|
38
|
+
React.createElement(BottomArea, { ...props })));
|
|
39
|
+
test('BottomArea shows input when idle', t => {
|
|
40
|
+
const { lastFrame } = renderBottomArea(baseProps);
|
|
41
|
+
const output = lastFrame() ?? '';
|
|
42
|
+
t.true(output.includes('❯'));
|
|
43
|
+
t.false(output.includes('processing'));
|
|
44
|
+
t.false(output.includes('Allow this action?'));
|
|
45
|
+
});
|
|
46
|
+
test('BottomArea shows approval prompt when waiting for approval', t => {
|
|
47
|
+
const { lastFrame } = renderBottomArea({
|
|
48
|
+
...baseProps,
|
|
49
|
+
pendingApproval: {
|
|
50
|
+
agentName: 'Agent',
|
|
51
|
+
toolName: 'shell',
|
|
52
|
+
argumentsText: '{"commands":"ls"}',
|
|
53
|
+
rawInterruption: null,
|
|
54
|
+
},
|
|
55
|
+
waitingForApproval: true,
|
|
56
|
+
});
|
|
57
|
+
const output = lastFrame() ?? '';
|
|
58
|
+
t.true(output.includes('Allow this action?'));
|
|
59
|
+
t.true(output.includes('Approve'));
|
|
60
|
+
t.true(output.includes('Reject'));
|
|
61
|
+
t.false(output.includes('processing'));
|
|
62
|
+
});
|
|
63
|
+
test('BottomArea shows processing indicator when busy', t => {
|
|
64
|
+
const { lastFrame } = renderBottomArea({
|
|
65
|
+
...baseProps,
|
|
66
|
+
isProcessing: true,
|
|
67
|
+
});
|
|
68
|
+
const output = lastFrame() ?? '';
|
|
69
|
+
t.true(output.includes('processing.'));
|
|
70
|
+
t.false(output.includes('Allow this action?'));
|
|
71
|
+
t.false(output.includes('❯'));
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=BottomArea.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BottomArea.test.js","sourceRoot":"","sources":["../../source/components/BottomArea.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatMessage.d.ts","sourceRoot":"","sources":["../../source/components/ChatMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAW,MAAM,OAAO,CAAC;AAIhC,KAAK,KAAK,GAAG;IACT,GAAG,EAAE,GAAG,CAAC;CACZ,CAAC;;AAsBF,wBAAuC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import MarkdownRenderer from './MarkdownRenderer.js';
|
|
4
|
+
const ChatMessage = ({ msg }) => {
|
|
5
|
+
return (React.createElement(Box, { flexDirection: "column" }, msg.sender === 'user' ? (React.createElement(Text, { color: "blue" },
|
|
6
|
+
"\u276F ",
|
|
7
|
+
msg.text)) : msg.sender === 'system' ? (React.createElement(Text, { color: "gray", dimColor: true }, msg.text)) : msg.sender === 'reasoning' ? (React.createElement(Text, { color: "gray", dimColor: true }, msg.text)) : (React.createElement(MarkdownRenderer, null, msg.text))));
|
|
8
|
+
};
|
|
9
|
+
export default React.memo(ChatMessage);
|
|
10
|
+
//# sourceMappingURL=ChatMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatMessage.js","sourceRoot":"","sources":["../../source/components/ChatMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAW,MAAM,OAAO,CAAC;AAChC,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AAMrD,MAAM,WAAW,GAAc,CAAC,EAAC,GAAG,EAAC,EAAE,EAAE;IACrC,OAAO,CACH,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,IACtB,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CACrB,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;;QAAI,GAAG,CAAC,IAAI,CAAQ,CACzC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC1B,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,UACtB,GAAG,CAAC,IAAI,CACN,CACV,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,CAC7B,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,UACtB,GAAG,CAAC,IAAI,CACN,CACV,CAAC,CAAC,CAAC,CACA,oBAAC,gBAAgB,QAAE,GAAG,CAAC,IAAI,CAAoB,CAClD,CACC,CACT,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type Props = {
|
|
3
|
+
command: string;
|
|
4
|
+
output?: string;
|
|
5
|
+
status?: 'pending' | 'running' | 'completed' | 'failed';
|
|
6
|
+
success?: boolean | null;
|
|
7
|
+
failureReason?: string;
|
|
8
|
+
toolName?: string;
|
|
9
|
+
toolArgs?: any;
|
|
10
|
+
isApprovalRejection?: boolean;
|
|
11
|
+
hadApproval?: boolean;
|
|
12
|
+
};
|
|
13
|
+
declare const _default: React.NamedExoticComponent<Props>;
|
|
14
|
+
export default _default;
|
|
15
|
+
//# sourceMappingURL=CommandMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandMessage.d.ts","sourceRoot":"","sources":["../../source/components/CommandMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkC,MAAM,OAAO,CAAC;AAIvD,KAAK,KAAK,GAAG;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACxD,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;;AAsPF,wBAA0C"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { generateDiff } from '../utils/diff.js';
|
|
4
|
+
const DiffView = ({ diff }) => {
|
|
5
|
+
try {
|
|
6
|
+
const lines = diff.split('\n');
|
|
7
|
+
const maxLines = 30;
|
|
8
|
+
const truncated = lines.length > maxLines;
|
|
9
|
+
const displayLines = truncated ? lines.slice(0, maxLines) : lines;
|
|
10
|
+
return (React.createElement(Box, { flexDirection: "column", marginLeft: 2 },
|
|
11
|
+
displayLines.map((line, i) => {
|
|
12
|
+
let color;
|
|
13
|
+
if (line.startsWith('+')) {
|
|
14
|
+
color = 'green';
|
|
15
|
+
}
|
|
16
|
+
else if (line.startsWith('-')) {
|
|
17
|
+
color = 'red';
|
|
18
|
+
}
|
|
19
|
+
else if (line.startsWith('@@')) {
|
|
20
|
+
color = 'cyan';
|
|
21
|
+
}
|
|
22
|
+
return (React.createElement(Text, { key: i, color: color, dimColor: !color }, line));
|
|
23
|
+
}),
|
|
24
|
+
truncated && (React.createElement(Text, { dimColor: true },
|
|
25
|
+
"... (",
|
|
26
|
+
lines.length - maxLines,
|
|
27
|
+
" more lines)"))));
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
return (React.createElement(Box, { marginLeft: 2 },
|
|
31
|
+
React.createElement(Text, { color: "red", dimColor: true }, "[Failed to render diff preview]")));
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const formatToolArgs = (toolName, args) => {
|
|
35
|
+
if (!args || !toolName) {
|
|
36
|
+
return '';
|
|
37
|
+
}
|
|
38
|
+
const normalizedArgs = (() => {
|
|
39
|
+
if (typeof args !== 'string') {
|
|
40
|
+
return args;
|
|
41
|
+
}
|
|
42
|
+
const trimmed = args.trim();
|
|
43
|
+
if (!trimmed) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
return JSON.parse(trimmed);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
})();
|
|
53
|
+
if (!normalizedArgs || typeof normalizedArgs !== 'object') {
|
|
54
|
+
return '';
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
// Format based on tool type to match extract-command-messages.ts
|
|
58
|
+
switch (toolName) {
|
|
59
|
+
case 'shell': {
|
|
60
|
+
const command = normalizedArgs.command ?? normalizedArgs.commands;
|
|
61
|
+
const commandText = typeof command === 'string'
|
|
62
|
+
? command
|
|
63
|
+
: Array.isArray(command)
|
|
64
|
+
? command.join(' && ')
|
|
65
|
+
: '';
|
|
66
|
+
if (typeof commandText === 'string' && commandText.trim()) {
|
|
67
|
+
return commandText.length > 80
|
|
68
|
+
? `${commandText.slice(0, 80)}...`
|
|
69
|
+
: commandText;
|
|
70
|
+
}
|
|
71
|
+
return '';
|
|
72
|
+
}
|
|
73
|
+
case 'grep': {
|
|
74
|
+
const pattern = normalizedArgs.pattern || '';
|
|
75
|
+
const path = normalizedArgs.path || '.';
|
|
76
|
+
const parts = [`"${pattern}"`, `"${path}"`];
|
|
77
|
+
if (normalizedArgs.case_sensitive)
|
|
78
|
+
parts.push('--case-sensitive');
|
|
79
|
+
if (normalizedArgs.file_pattern)
|
|
80
|
+
parts.push(`--include "${normalizedArgs.file_pattern}"`);
|
|
81
|
+
if (normalizedArgs.exclude_pattern)
|
|
82
|
+
parts.push(`--exclude "${normalizedArgs.exclude_pattern}"`);
|
|
83
|
+
return parts.join(' ');
|
|
84
|
+
}
|
|
85
|
+
case 'apply_patch': {
|
|
86
|
+
const type = normalizedArgs.type || 'unknown';
|
|
87
|
+
const path = normalizedArgs.path || 'unknown';
|
|
88
|
+
return `${type} ${path}`;
|
|
89
|
+
}
|
|
90
|
+
case 'search_replace': {
|
|
91
|
+
const searchContent = normalizedArgs.search_content || '';
|
|
92
|
+
const replaceContent = normalizedArgs.replace_content || '';
|
|
93
|
+
const path = normalizedArgs.path || 'unknown';
|
|
94
|
+
const search = searchContent.length > 30
|
|
95
|
+
? `${searchContent.slice(0, 30)}...`
|
|
96
|
+
: searchContent;
|
|
97
|
+
const replace = replaceContent.length > 30
|
|
98
|
+
? `${replaceContent.slice(0, 30)}...`
|
|
99
|
+
: replaceContent;
|
|
100
|
+
return `"${search}" → "${replace}" "${path}"`;
|
|
101
|
+
}
|
|
102
|
+
case 'ask_mentor': {
|
|
103
|
+
const question = normalizedArgs.question || 'Unknown question';
|
|
104
|
+
return question.length > 80
|
|
105
|
+
? `${question.slice(0, 80)}...`
|
|
106
|
+
: question;
|
|
107
|
+
}
|
|
108
|
+
default:
|
|
109
|
+
// Generic fallback for unknown tools
|
|
110
|
+
const entries = Object.entries(normalizedArgs);
|
|
111
|
+
if (entries.length === 0)
|
|
112
|
+
return '';
|
|
113
|
+
return entries
|
|
114
|
+
.map(([key, value]) => {
|
|
115
|
+
const stringValue = typeof value === 'string'
|
|
116
|
+
? (value.length > 50 ? `${value.slice(0, 50)}...` : value)
|
|
117
|
+
: JSON.stringify(value);
|
|
118
|
+
return `${key}=${stringValue}`;
|
|
119
|
+
})
|
|
120
|
+
.join(' ');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return '';
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
const CommandMessage = ({ command, output, status, success, failureReason, toolName, toolArgs, hadApproval, }) => {
|
|
128
|
+
const isRunning = status === 'pending' || status === 'running';
|
|
129
|
+
const [isVisible, setIsVisible] = useState(!isRunning);
|
|
130
|
+
useEffect(() => {
|
|
131
|
+
if (!isRunning) {
|
|
132
|
+
setIsVisible(true);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const timer = setTimeout(() => {
|
|
136
|
+
setIsVisible(true);
|
|
137
|
+
}, 1000);
|
|
138
|
+
return () => clearTimeout(timer);
|
|
139
|
+
}, [isRunning]);
|
|
140
|
+
if (!isVisible) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
const outputText = output?.trim() ? output : (isRunning ? '(running...)' : '(no output)');
|
|
144
|
+
const displayed = outputText && outputText !== '(no output)'
|
|
145
|
+
? (() => {
|
|
146
|
+
const lines = (output || '').split('\n');
|
|
147
|
+
return lines.length > 3
|
|
148
|
+
? `${lines.slice(0, 3).join('\n')}\n... (${lines.length - 3} more lines)`
|
|
149
|
+
: output;
|
|
150
|
+
})()
|
|
151
|
+
: outputText;
|
|
152
|
+
// Special handling for search_replace
|
|
153
|
+
if (toolName === 'search_replace' && toolArgs) {
|
|
154
|
+
const diff = generateDiff(toolArgs.search_content, toolArgs.replace_content);
|
|
155
|
+
// For search_replace that had an approval prompt (user said 'y'), only show output
|
|
156
|
+
if (hadApproval) {
|
|
157
|
+
return (React.createElement(Box, { flexDirection: "column" },
|
|
158
|
+
React.createElement(Text, { color: success === false ? 'red' : 'gray' }, displayed)));
|
|
159
|
+
}
|
|
160
|
+
// For auto-approved search_replace (no approval prompt), show diff + output
|
|
161
|
+
return (React.createElement(Box, { flexDirection: "column" },
|
|
162
|
+
React.createElement(Box, null,
|
|
163
|
+
React.createElement(Text, { color: "yellow", bold: true }, "[SEARCH & REPLACE]"),
|
|
164
|
+
React.createElement(Text, null,
|
|
165
|
+
" ",
|
|
166
|
+
toolArgs.path),
|
|
167
|
+
toolArgs.replace_all && (React.createElement(Text, { color: "magenta" }, " (all occurrences)"))),
|
|
168
|
+
React.createElement(DiffView, { diff: diff }),
|
|
169
|
+
failureReason && (React.createElement(Text, { color: "red" },
|
|
170
|
+
"Error: ",
|
|
171
|
+
failureReason)),
|
|
172
|
+
React.createElement(Text, { color: success === false ? 'red' : 'gray' }, displayed)));
|
|
173
|
+
}
|
|
174
|
+
const formattedArgs = toolArgs ? formatToolArgs(toolName, toolArgs) : '';
|
|
175
|
+
return (React.createElement(Box, { flexDirection: "column" },
|
|
176
|
+
React.createElement(Text, { color: success === false ? 'red' : isRunning ? 'yellow' : 'cyan' },
|
|
177
|
+
"$ ",
|
|
178
|
+
React.createElement(Text, { bold: true }, command),
|
|
179
|
+
isRunning && formattedArgs && command === toolName && React.createElement(Text, { color: "yellow" },
|
|
180
|
+
" ",
|
|
181
|
+
formattedArgs)),
|
|
182
|
+
failureReason && React.createElement(Text, { color: "red" },
|
|
183
|
+
"Error: ",
|
|
184
|
+
failureReason),
|
|
185
|
+
React.createElement(Text, { color: success === false ? 'red' : 'gray' }, displayed)));
|
|
186
|
+
};
|
|
187
|
+
export default React.memo(CommandMessage);
|
|
188
|
+
//# sourceMappingURL=CommandMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandMessage.js","sourceRoot":"","sources":["../../source/components/CommandMessage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandMessage.test.d.ts","sourceRoot":"","sources":["../../source/components/CommandMessage.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { render } from 'ink-testing-library';
|
|
4
|
+
import CommandMessage from './CommandMessage.js';
|
|
5
|
+
test('CommandMessage does not duplicate parameters when they are already in command string', async (t) => {
|
|
6
|
+
const props = {
|
|
7
|
+
command: 'shell: ls -la',
|
|
8
|
+
toolName: 'shell',
|
|
9
|
+
toolArgs: { command: 'ls -la' },
|
|
10
|
+
status: 'running',
|
|
11
|
+
};
|
|
12
|
+
const { lastFrame } = render(React.createElement(CommandMessage, { ...props }));
|
|
13
|
+
await new Promise(resolve => setTimeout(resolve, 1100));
|
|
14
|
+
const output = lastFrame() ?? '';
|
|
15
|
+
// The bug would cause "ls -la" to appear twice
|
|
16
|
+
// e.g. "$ shell: ls -la ls -la"
|
|
17
|
+
// Count occurrences of "ls -la"
|
|
18
|
+
const count = (output.match(/ls -la/g) || []).length;
|
|
19
|
+
// It should only appear once in the command line
|
|
20
|
+
t.is(count, 1, `Expected "ls -la" to appear once, but found ${count}. Output: ${output}`);
|
|
21
|
+
});
|
|
22
|
+
test('CommandMessage still shows arguments for unknown tools where command is just toolName', async (t) => {
|
|
23
|
+
const props = {
|
|
24
|
+
command: 'unknown_tool',
|
|
25
|
+
toolName: 'unknown_tool',
|
|
26
|
+
toolArgs: { foo: 'bar' },
|
|
27
|
+
status: 'running',
|
|
28
|
+
};
|
|
29
|
+
const { lastFrame } = render(React.createElement(CommandMessage, { ...props }));
|
|
30
|
+
await new Promise(resolve => setTimeout(resolve, 1100));
|
|
31
|
+
const output = lastFrame() ?? '';
|
|
32
|
+
t.true(output.includes('unknown_tool'));
|
|
33
|
+
t.true(output.includes('foo=bar'));
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=CommandMessage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandMessage.test.js","sourceRoot":"","sources":["../../source/components/CommandMessage.test.tsx"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAC;AAC3C,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAEjD,IAAI,CAAC,sFAAsF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACnG,MAAM,KAAK,GAAG;QACV,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,EAAC,OAAO,EAAE,QAAQ,EAAC;QAC7B,MAAM,EAAE,SAA2D;KACtE,CAAC;IAEF,MAAM,EAAC,SAAS,EAAC,GAAG,MAAM,CAAC,oBAAC,cAAc,OAAK,KAAK,GAAI,CAAC,CAAC;IAC1D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;IAEjC,+CAA+C;IAC/C,gCAAgC;IAEhC,gCAAgC;IAChC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAErD,iDAAiD;IACjD,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,+CAA+C,KAAK,aAAa,MAAM,EAAE,CAAC,CAAC;AAC9F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uFAAuF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACpG,MAAM,KAAK,GAAG;QACV,OAAO,EAAE,cAAc;QACvB,QAAQ,EAAE,cAAc;QACxB,QAAQ,EAAE,EAAC,GAAG,EAAE,KAAK,EAAC;QACtB,MAAM,EAAE,SAA2D;KACtE,CAAC;IAEF,MAAM,EAAC,SAAS,EAAC,GAAG,MAAM,CAAC,oBAAC,cAAc,OAAK,KAAK,GAAI,CAAC,CAAC;IAC1D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;IAEjC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React, { Component, ReactNode } from 'react';
|
|
2
|
+
import type { LoggingService } from '../services/logging-service.js';
|
|
3
|
+
interface ErrorBoundaryProps {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
loggingService?: LoggingService;
|
|
6
|
+
}
|
|
7
|
+
interface ErrorBoundaryState {
|
|
8
|
+
hasError: boolean;
|
|
9
|
+
error: Error | null;
|
|
10
|
+
errorInfo: React.ErrorInfo | null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Error Boundary component to catch render exceptions and prevent app crashes.
|
|
14
|
+
*
|
|
15
|
+
* When a component throws during render:
|
|
16
|
+
* 1. Logs the error via loggingService
|
|
17
|
+
* 2. Shows a minimal fallback UI with recovery instructions
|
|
18
|
+
* 3. Keeps the app running so the user can recover
|
|
19
|
+
*/
|
|
20
|
+
export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
|
|
21
|
+
constructor(props: ErrorBoundaryProps);
|
|
22
|
+
static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState>;
|
|
23
|
+
componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void;
|
|
24
|
+
render(): ReactNode;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=ErrorBoundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../source/components/ErrorBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,SAAS,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAEnE,UAAU,kBAAkB;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;CACnC;AAED,UAAU,kBAAkB;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,qBAAa,aAAc,SAAQ,SAAS,CACxC,kBAAkB,EAClB,kBAAkB,CACrB;gBACe,KAAK,EAAE,kBAAkB;IASrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQ1E,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;IAoBjE,MAAM,IAAI,SAAS;CA8DtB"}
|