@ottocode/web-sdk 0.1.173
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/README.md +187 -0
- package/dist/assets/fonts/JetBrainsMonoNerdFontMono-Bold.woff2 +0 -0
- package/dist/assets/fonts/JetBrainsMonoNerdFontMono-BoldItalic.woff2 +0 -0
- package/dist/assets/fonts/JetBrainsMonoNerdFontMono-Italic.woff2 +0 -0
- package/dist/assets/fonts/JetBrainsMonoNerdFontMono-Regular.woff2 +0 -0
- package/dist/assets/provider-logos.d.ts +12 -0
- package/dist/assets/provider-logos.d.ts.map +1 -0
- package/dist/assets/provider-logos.js +40 -0
- package/dist/assets/provider-logos.js.map +1 -0
- package/dist/components/branch/BranchModal.d.ts +11 -0
- package/dist/components/branch/BranchModal.d.ts.map +1 -0
- package/dist/components/branch/BranchModal.js +45 -0
- package/dist/components/branch/BranchModal.js.map +1 -0
- package/dist/components/chat/ChatInput.d.ts +35 -0
- package/dist/components/chat/ChatInput.d.ts.map +1 -0
- package/dist/components/chat/ChatInput.js +210 -0
- package/dist/components/chat/ChatInput.js.map +1 -0
- package/dist/components/chat/ChatInputContainer.d.ts +12 -0
- package/dist/components/chat/ChatInputContainer.d.ts.map +1 -0
- package/dist/components/chat/ChatInputContainer.js +295 -0
- package/dist/components/chat/ChatInputContainer.js.map +1 -0
- package/dist/components/chat/ChatInputKeyHandler.d.ts +27 -0
- package/dist/components/chat/ChatInputKeyHandler.d.ts.map +1 -0
- package/dist/components/chat/ChatInputKeyHandler.js +75 -0
- package/dist/components/chat/ChatInputKeyHandler.js.map +1 -0
- package/dist/components/chat/CommandSuggestionsPopup.d.ts +11 -0
- package/dist/components/chat/CommandSuggestionsPopup.d.ts.map +1 -0
- package/dist/components/chat/CommandSuggestionsPopup.js +43 -0
- package/dist/components/chat/CommandSuggestionsPopup.js.map +1 -0
- package/dist/components/chat/ConfigModal.d.ts +19 -0
- package/dist/components/chat/ConfigModal.d.ts.map +1 -0
- package/dist/components/chat/ConfigModal.js +47 -0
- package/dist/components/chat/ConfigModal.js.map +1 -0
- package/dist/components/chat/ConfigSelector.d.ts +11 -0
- package/dist/components/chat/ConfigSelector.d.ts.map +1 -0
- package/dist/components/chat/ConfigSelector.js +47 -0
- package/dist/components/chat/ConfigSelector.js.map +1 -0
- package/dist/components/chat/FileMentionPopup.d.ts +15 -0
- package/dist/components/chat/FileMentionPopup.d.ts.map +1 -0
- package/dist/components/chat/FileMentionPopup.js +123 -0
- package/dist/components/chat/FileMentionPopup.js.map +1 -0
- package/dist/components/chat/ShortcutsModal.d.ts +7 -0
- package/dist/components/chat/ShortcutsModal.d.ts.map +1 -0
- package/dist/components/chat/ShortcutsModal.js +275 -0
- package/dist/components/chat/ShortcutsModal.js.map +1 -0
- package/dist/components/chat/StopButton.d.ts +8 -0
- package/dist/components/chat/StopButton.d.ts.map +1 -0
- package/dist/components/chat/StopButton.js +25 -0
- package/dist/components/chat/StopButton.js.map +1 -0
- package/dist/components/chat/UnifiedAgentSelector.d.ts +12 -0
- package/dist/components/chat/UnifiedAgentSelector.d.ts.map +1 -0
- package/dist/components/chat/UnifiedAgentSelector.js +107 -0
- package/dist/components/chat/UnifiedAgentSelector.js.map +1 -0
- package/dist/components/chat/UnifiedModelSelector.d.ts +12 -0
- package/dist/components/chat/UnifiedModelSelector.d.ts.map +1 -0
- package/dist/components/chat/UnifiedModelSelector.js +198 -0
- package/dist/components/chat/UnifiedModelSelector.js.map +1 -0
- package/dist/components/common/ProviderLogo.d.ts +8 -0
- package/dist/components/common/ProviderLogo.d.ts.map +1 -0
- package/dist/components/common/ProviderLogo.js +29 -0
- package/dist/components/common/ProviderLogo.js.map +1 -0
- package/dist/components/common/StatusIndicator.d.ts +10 -0
- package/dist/components/common/StatusIndicator.d.ts.map +1 -0
- package/dist/components/common/StatusIndicator.js +57 -0
- package/dist/components/common/StatusIndicator.js.map +1 -0
- package/dist/components/git/GitCommitModal.d.ts +2 -0
- package/dist/components/git/GitCommitModal.d.ts.map +1 -0
- package/dist/components/git/GitCommitModal.js +70 -0
- package/dist/components/git/GitCommitModal.js.map +1 -0
- package/dist/components/git/GitDiffPanel.d.ts +2 -0
- package/dist/components/git/GitDiffPanel.d.ts.map +1 -0
- package/dist/components/git/GitDiffPanel.js +54 -0
- package/dist/components/git/GitDiffPanel.js.map +1 -0
- package/dist/components/git/GitDiffViewer.d.ts +7 -0
- package/dist/components/git/GitDiffViewer.d.ts.map +1 -0
- package/dist/components/git/GitDiffViewer.js +203 -0
- package/dist/components/git/GitDiffViewer.js.map +1 -0
- package/dist/components/git/GitFileItem.d.ts +9 -0
- package/dist/components/git/GitFileItem.d.ts.map +1 -0
- package/dist/components/git/GitFileItem.js +145 -0
- package/dist/components/git/GitFileItem.js.map +1 -0
- package/dist/components/git/GitFileList.d.ts +7 -0
- package/dist/components/git/GitFileList.d.ts.map +1 -0
- package/dist/components/git/GitFileList.js +108 -0
- package/dist/components/git/GitFileList.js.map +1 -0
- package/dist/components/git/GitSidebar.d.ts +2 -0
- package/dist/components/git/GitSidebar.d.ts.map +1 -0
- package/dist/components/git/GitSidebar.js +52 -0
- package/dist/components/git/GitSidebar.js.map +1 -0
- package/dist/components/git/GitSidebarToggle.d.ts +2 -0
- package/dist/components/git/GitSidebarToggle.d.ts.map +1 -0
- package/dist/components/git/GitSidebarToggle.js +16 -0
- package/dist/components/git/GitSidebarToggle.js.map +1 -0
- package/dist/components/index.d.ts +47 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +60 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/messages/AssistantMessageGroup.d.ts +17 -0
- package/dist/components/messages/AssistantMessageGroup.d.ts.map +1 -0
- package/dist/components/messages/AssistantMessageGroup.js +176 -0
- package/dist/components/messages/AssistantMessageGroup.js.map +1 -0
- package/dist/components/messages/MessagePartItem.d.ts +20 -0
- package/dist/components/messages/MessagePartItem.d.ts.map +1 -0
- package/dist/components/messages/MessagePartItem.js +353 -0
- package/dist/components/messages/MessagePartItem.js.map +1 -0
- package/dist/components/messages/MessageThread.d.ts +12 -0
- package/dist/components/messages/MessageThread.d.ts.map +1 -0
- package/dist/components/messages/MessageThread.js +239 -0
- package/dist/components/messages/MessageThread.js.map +1 -0
- package/dist/components/messages/MessageThreadContainer.d.ts +7 -0
- package/dist/components/messages/MessageThreadContainer.d.ts.map +1 -0
- package/dist/components/messages/MessageThreadContainer.js +22 -0
- package/dist/components/messages/MessageThreadContainer.js.map +1 -0
- package/dist/components/messages/ToolApprovalCard.d.ts +11 -0
- package/dist/components/messages/ToolApprovalCard.d.ts.map +1 -0
- package/dist/components/messages/ToolApprovalCard.js +139 -0
- package/dist/components/messages/ToolApprovalCard.js.map +1 -0
- package/dist/components/messages/TopupApprovalCard.d.ts +9 -0
- package/dist/components/messages/TopupApprovalCard.d.ts.map +1 -0
- package/dist/components/messages/TopupApprovalCard.js +51 -0
- package/dist/components/messages/TopupApprovalCard.js.map +1 -0
- package/dist/components/messages/UserMessageGroup.d.ts +10 -0
- package/dist/components/messages/UserMessageGroup.d.ts.map +1 -0
- package/dist/components/messages/UserMessageGroup.js +132 -0
- package/dist/components/messages/UserMessageGroup.js.map +1 -0
- package/dist/components/messages/renderers/ApplyPatchRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/ApplyPatchRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/ApplyPatchRenderer.js +55 -0
- package/dist/components/messages/renderers/ApplyPatchRenderer.js.map +1 -0
- package/dist/components/messages/renderers/BashRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/BashRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/BashRenderer.js +55 -0
- package/dist/components/messages/renderers/BashRenderer.js.map +1 -0
- package/dist/components/messages/renderers/DatabaseToolRenderer.d.ts +8 -0
- package/dist/components/messages/renderers/DatabaseToolRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/DatabaseToolRenderer.js +151 -0
- package/dist/components/messages/renderers/DatabaseToolRenderer.js.map +1 -0
- package/dist/components/messages/renderers/DebugRenderer.d.ts +5 -0
- package/dist/components/messages/renderers/DebugRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/DebugRenderer.js +5 -0
- package/dist/components/messages/renderers/DebugRenderer.js.map +1 -0
- package/dist/components/messages/renderers/DiffView.d.ts +6 -0
- package/dist/components/messages/renderers/DiffView.d.ts.map +1 -0
- package/dist/components/messages/renderers/DiffView.js +206 -0
- package/dist/components/messages/renderers/DiffView.js.map +1 -0
- package/dist/components/messages/renderers/EditRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/EditRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/EditRenderer.js +25 -0
- package/dist/components/messages/renderers/EditRenderer.js.map +1 -0
- package/dist/components/messages/renderers/ErrorRenderer.d.ts +11 -0
- package/dist/components/messages/renderers/ErrorRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/ErrorRenderer.js +157 -0
- package/dist/components/messages/renderers/ErrorRenderer.js.map +1 -0
- package/dist/components/messages/renderers/FinishRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/FinishRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/FinishRenderer.js +7 -0
- package/dist/components/messages/renderers/FinishRenderer.js.map +1 -0
- package/dist/components/messages/renderers/GenericRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/GenericRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/GenericRenderer.js +45 -0
- package/dist/components/messages/renderers/GenericRenderer.js.map +1 -0
- package/dist/components/messages/renderers/GitCommitRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/GitCommitRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/GitCommitRenderer.js +21 -0
- package/dist/components/messages/renderers/GitCommitRenderer.js.map +1 -0
- package/dist/components/messages/renderers/GitDiffRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/GitDiffRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/GitDiffRenderer.js +34 -0
- package/dist/components/messages/renderers/GitDiffRenderer.js.map +1 -0
- package/dist/components/messages/renderers/GitStatusRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/GitStatusRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/GitStatusRenderer.js +60 -0
- package/dist/components/messages/renderers/GitStatusRenderer.js.map +1 -0
- package/dist/components/messages/renderers/ListRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/ListRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/ListRenderer.js +28 -0
- package/dist/components/messages/renderers/ListRenderer.js.map +1 -0
- package/dist/components/messages/renderers/ProgressUpdateRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/ProgressUpdateRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/ProgressUpdateRenderer.js +9 -0
- package/dist/components/messages/renderers/ProgressUpdateRenderer.js.map +1 -0
- package/dist/components/messages/renderers/ReadRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/ReadRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/ReadRenderer.js +87 -0
- package/dist/components/messages/renderers/ReadRenderer.js.map +1 -0
- package/dist/components/messages/renderers/ReasoningRenderer.d.ts +7 -0
- package/dist/components/messages/renderers/ReasoningRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/ReasoningRenderer.js +34 -0
- package/dist/components/messages/renderers/ReasoningRenderer.js.map +1 -0
- package/dist/components/messages/renderers/SearchRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/SearchRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/SearchRenderer.js +52 -0
- package/dist/components/messages/renderers/SearchRenderer.js.map +1 -0
- package/dist/components/messages/renderers/TodosRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/TodosRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/TodosRenderer.js +15 -0
- package/dist/components/messages/renderers/TodosRenderer.js.map +1 -0
- package/dist/components/messages/renderers/ToolErrorDisplay.d.ts +12 -0
- package/dist/components/messages/renderers/ToolErrorDisplay.d.ts.map +1 -0
- package/dist/components/messages/renderers/ToolErrorDisplay.js +10 -0
- package/dist/components/messages/renderers/ToolErrorDisplay.js.map +1 -0
- package/dist/components/messages/renderers/TreeRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/TreeRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/TreeRenderer.js +33 -0
- package/dist/components/messages/renderers/TreeRenderer.js.map +1 -0
- package/dist/components/messages/renderers/WebSearchRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/WebSearchRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/WebSearchRenderer.js +29 -0
- package/dist/components/messages/renderers/WebSearchRenderer.js.map +1 -0
- package/dist/components/messages/renderers/WriteRenderer.d.ts +3 -0
- package/dist/components/messages/renderers/WriteRenderer.d.ts.map +1 -0
- package/dist/components/messages/renderers/WriteRenderer.js +28 -0
- package/dist/components/messages/renderers/WriteRenderer.js.map +1 -0
- package/dist/components/messages/renderers/index.d.ts +16 -0
- package/dist/components/messages/renderers/index.d.ts.map +1 -0
- package/dist/components/messages/renderers/index.js +114 -0
- package/dist/components/messages/renderers/index.js.map +1 -0
- package/dist/components/messages/renderers/shared/CopyButton.d.ts +8 -0
- package/dist/components/messages/renderers/shared/CopyButton.d.ts.map +1 -0
- package/dist/components/messages/renderers/shared/CopyButton.js +27 -0
- package/dist/components/messages/renderers/shared/CopyButton.js.map +1 -0
- package/dist/components/messages/renderers/shared/ToolContentBox.d.ts +13 -0
- package/dist/components/messages/renderers/shared/ToolContentBox.d.ts.map +1 -0
- package/dist/components/messages/renderers/shared/ToolContentBox.js +9 -0
- package/dist/components/messages/renderers/shared/ToolContentBox.js.map +1 -0
- package/dist/components/messages/renderers/shared/ToolHeader.d.ts +29 -0
- package/dist/components/messages/renderers/shared/ToolHeader.d.ts.map +1 -0
- package/dist/components/messages/renderers/shared/ToolHeader.js +69 -0
- package/dist/components/messages/renderers/shared/ToolHeader.js.map +1 -0
- package/dist/components/messages/renderers/shared/index.d.ts +4 -0
- package/dist/components/messages/renderers/shared/index.d.ts.map +1 -0
- package/dist/components/messages/renderers/shared/index.js +4 -0
- package/dist/components/messages/renderers/shared/index.js.map +1 -0
- package/dist/components/messages/renderers/types.d.ts +118 -0
- package/dist/components/messages/renderers/types.d.ts.map +1 -0
- package/dist/components/messages/renderers/types.js +2 -0
- package/dist/components/messages/renderers/types.js.map +1 -0
- package/dist/components/messages/renderers/utils.d.ts +26 -0
- package/dist/components/messages/renderers/utils.d.ts.map +1 -0
- package/dist/components/messages/renderers/utils.js +60 -0
- package/dist/components/messages/renderers/utils.js.map +1 -0
- package/dist/components/onboarding/OnboardingModal.d.ts +6 -0
- package/dist/components/onboarding/OnboardingModal.d.ts.map +1 -0
- package/dist/components/onboarding/OnboardingModal.js +22 -0
- package/dist/components/onboarding/OnboardingModal.js.map +1 -0
- package/dist/components/onboarding/index.d.ts +4 -0
- package/dist/components/onboarding/index.d.ts.map +1 -0
- package/dist/components/onboarding/index.js +4 -0
- package/dist/components/onboarding/index.js.map +1 -0
- package/dist/components/onboarding/steps/DefaultsStep.d.ts +10 -0
- package/dist/components/onboarding/steps/DefaultsStep.d.ts.map +1 -0
- package/dist/components/onboarding/steps/DefaultsStep.js +99 -0
- package/dist/components/onboarding/steps/DefaultsStep.js.map +1 -0
- package/dist/components/onboarding/steps/ProviderSetupStep.d.ts +31 -0
- package/dist/components/onboarding/steps/ProviderSetupStep.d.ts.map +1 -0
- package/dist/components/onboarding/steps/ProviderSetupStep.js +253 -0
- package/dist/components/onboarding/steps/ProviderSetupStep.js.map +1 -0
- package/dist/components/research/ResearchSidebar.d.ts +7 -0
- package/dist/components/research/ResearchSidebar.d.ts.map +1 -0
- package/dist/components/research/ResearchSidebar.js +271 -0
- package/dist/components/research/ResearchSidebar.js.map +1 -0
- package/dist/components/research/ResearchSidebarToggle.d.ts +6 -0
- package/dist/components/research/ResearchSidebarToggle.d.ts.map +1 -0
- package/dist/components/research/ResearchSidebarToggle.js +13 -0
- package/dist/components/research/ResearchSidebarToggle.js.map +1 -0
- package/dist/components/research/index.d.ts +3 -0
- package/dist/components/research/index.d.ts.map +1 -0
- package/dist/components/research/index.js +3 -0
- package/dist/components/research/index.js.map +1 -0
- package/dist/components/session-files/SessionFilesDiffPanel.d.ts +2 -0
- package/dist/components/session-files/SessionFilesDiffPanel.d.ts.map +1 -0
- package/dist/components/session-files/SessionFilesDiffPanel.js +345 -0
- package/dist/components/session-files/SessionFilesDiffPanel.js.map +1 -0
- package/dist/components/session-files/SessionFilesSidebar.d.ts +6 -0
- package/dist/components/session-files/SessionFilesSidebar.d.ts.map +1 -0
- package/dist/components/session-files/SessionFilesSidebar.js +80 -0
- package/dist/components/session-files/SessionFilesSidebar.js.map +1 -0
- package/dist/components/session-files/SessionFilesSidebarToggle.d.ts +6 -0
- package/dist/components/session-files/SessionFilesSidebarToggle.d.ts.map +1 -0
- package/dist/components/session-files/SessionFilesSidebarToggle.js +15 -0
- package/dist/components/session-files/SessionFilesSidebarToggle.js.map +1 -0
- package/dist/components/session-files/index.d.ts +4 -0
- package/dist/components/session-files/index.d.ts.map +1 -0
- package/dist/components/session-files/index.js +4 -0
- package/dist/components/session-files/index.js.map +1 -0
- package/dist/components/sessions/LeanHeader.d.ts +10 -0
- package/dist/components/sessions/LeanHeader.d.ts.map +1 -0
- package/dist/components/sessions/LeanHeader.js +62 -0
- package/dist/components/sessions/LeanHeader.js.map +1 -0
- package/dist/components/sessions/SessionHeader.d.ts +8 -0
- package/dist/components/sessions/SessionHeader.d.ts.map +1 -0
- package/dist/components/sessions/SessionHeader.js +74 -0
- package/dist/components/sessions/SessionHeader.js.map +1 -0
- package/dist/components/sessions/SessionItem.d.ts +9 -0
- package/dist/components/sessions/SessionItem.d.ts.map +1 -0
- package/dist/components/sessions/SessionItem.js +28 -0
- package/dist/components/sessions/SessionItem.js.map +1 -0
- package/dist/components/sessions/SessionListContainer.d.ts +7 -0
- package/dist/components/sessions/SessionListContainer.d.ts.map +1 -0
- package/dist/components/sessions/SessionListContainer.js +47 -0
- package/dist/components/sessions/SessionListContainer.js.map +1 -0
- package/dist/components/settings/SettingsSidebar.d.ts +2 -0
- package/dist/components/settings/SettingsSidebar.d.ts.map +1 -0
- package/dist/components/settings/SettingsSidebar.js +134 -0
- package/dist/components/settings/SettingsSidebar.js.map +1 -0
- package/dist/components/settings/SettingsSidebarToggle.d.ts +2 -0
- package/dist/components/settings/SettingsSidebarToggle.d.ts.map +1 -0
- package/dist/components/settings/SettingsSidebarToggle.js +10 -0
- package/dist/components/settings/SettingsSidebarToggle.js.map +1 -0
- package/dist/components/settings/SetuTopupModal.d.ts +2 -0
- package/dist/components/settings/SetuTopupModal.d.ts.map +1 -0
- package/dist/components/settings/SetuTopupModal.js +196 -0
- package/dist/components/settings/SetuTopupModal.js.map +1 -0
- package/dist/components/terminals/TerminalList.d.ts +8 -0
- package/dist/components/terminals/TerminalList.d.ts.map +1 -0
- package/dist/components/terminals/TerminalList.js +32 -0
- package/dist/components/terminals/TerminalList.js.map +1 -0
- package/dist/components/terminals/TerminalViewer.d.ts +6 -0
- package/dist/components/terminals/TerminalViewer.d.ts.map +1 -0
- package/dist/components/terminals/TerminalViewer.js +263 -0
- package/dist/components/terminals/TerminalViewer.js.map +1 -0
- package/dist/components/terminals/TerminalsSidebar.d.ts +2 -0
- package/dist/components/terminals/TerminalsSidebar.d.ts.map +1 -0
- package/dist/components/terminals/TerminalsSidebar.js +34 -0
- package/dist/components/terminals/TerminalsSidebar.js.map +1 -0
- package/dist/components/terminals/TerminalsSidebarToggle.d.ts +2 -0
- package/dist/components/terminals/TerminalsSidebarToggle.d.ts.map +1 -0
- package/dist/components/terminals/TerminalsSidebarToggle.js +13 -0
- package/dist/components/terminals/TerminalsSidebarToggle.js.map +1 -0
- package/dist/components/terminals/index.d.ts +5 -0
- package/dist/components/terminals/index.d.ts.map +1 -0
- package/dist/components/terminals/index.js +5 -0
- package/dist/components/terminals/index.js.map +1 -0
- package/dist/components/ui/Button.d.ts +8 -0
- package/dist/components/ui/Button.d.ts.map +1 -0
- package/dist/components/ui/Button.js +19 -0
- package/dist/components/ui/Button.js.map +1 -0
- package/dist/components/ui/Card.d.ts +6 -0
- package/dist/components/ui/Card.d.ts.map +1 -0
- package/dist/components/ui/Card.js +7 -0
- package/dist/components/ui/Card.js.map +1 -0
- package/dist/components/ui/ConfirmationDialog.d.ts +2 -0
- package/dist/components/ui/ConfirmationDialog.d.ts.map +1 -0
- package/dist/components/ui/ConfirmationDialog.js +72 -0
- package/dist/components/ui/ConfirmationDialog.js.map +1 -0
- package/dist/components/ui/Input.d.ts +6 -0
- package/dist/components/ui/Input.d.ts.map +1 -0
- package/dist/components/ui/Input.js +7 -0
- package/dist/components/ui/Input.js.map +1 -0
- package/dist/components/ui/Modal.d.ts +14 -0
- package/dist/components/ui/Modal.d.ts.map +1 -0
- package/dist/components/ui/Modal.js +51 -0
- package/dist/components/ui/Modal.js.map +1 -0
- package/dist/components/ui/Textarea.d.ts +6 -0
- package/dist/components/ui/Textarea.d.ts.map +1 -0
- package/dist/components/ui/Textarea.js +7 -0
- package/dist/components/ui/Textarea.js.map +1 -0
- package/dist/components/ui/Toaster.d.ts +2 -0
- package/dist/components/ui/Toaster.d.ts.map +1 -0
- package/dist/components/ui/Toaster.js +41 -0
- package/dist/components/ui/Toaster.js.map +1 -0
- package/dist/components/ui/ToolApprovalDialog.d.ts +7 -0
- package/dist/components/ui/ToolApprovalDialog.d.ts.map +1 -0
- package/dist/components/ui/ToolApprovalDialog.js +57 -0
- package/dist/components/ui/ToolApprovalDialog.js.map +1 -0
- package/dist/hooks/index.d.ts +23 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +24 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useAuthStatus.d.ts +60 -0
- package/dist/hooks/useAuthStatus.d.ts.map +1 -0
- package/dist/hooks/useAuthStatus.js +247 -0
- package/dist/hooks/useAuthStatus.js.map +1 -0
- package/dist/hooks/useBranch.d.ts +5 -0
- package/dist/hooks/useBranch.d.ts.map +1 -0
- package/dist/hooks/useBranch.js +43 -0
- package/dist/hooks/useBranch.js.map +1 -0
- package/dist/hooks/useCommandSuggestions.d.ts +29 -0
- package/dist/hooks/useCommandSuggestions.d.ts.map +1 -0
- package/dist/hooks/useCommandSuggestions.js +85 -0
- package/dist/hooks/useCommandSuggestions.js.map +1 -0
- package/dist/hooks/useConfig.d.ts +35 -0
- package/dist/hooks/useConfig.d.ts.map +1 -0
- package/dist/hooks/useConfig.js +32 -0
- package/dist/hooks/useConfig.js.map +1 -0
- package/dist/hooks/useFileMention.d.ts +16 -0
- package/dist/hooks/useFileMention.d.ts.map +1 -0
- package/dist/hooks/useFileMention.js +56 -0
- package/dist/hooks/useFileMention.js.map +1 -0
- package/dist/hooks/useFileUpload.d.ts +34 -0
- package/dist/hooks/useFileUpload.d.ts.map +1 -0
- package/dist/hooks/useFileUpload.js +258 -0
- package/dist/hooks/useFileUpload.js.map +1 -0
- package/dist/hooks/useFiles.d.ts +9 -0
- package/dist/hooks/useFiles.d.ts.map +1 -0
- package/dist/hooks/useFiles.js +15 -0
- package/dist/hooks/useFiles.js.map +1 -0
- package/dist/hooks/useGit.d.ts +15 -0
- package/dist/hooks/useGit.d.ts.map +1 -0
- package/dist/hooks/useGit.js +99 -0
- package/dist/hooks/useGit.js.map +1 -0
- package/dist/hooks/useImageUpload.d.ts +28 -0
- package/dist/hooks/useImageUpload.d.ts.map +1 -0
- package/dist/hooks/useImageUpload.js +197 -0
- package/dist/hooks/useImageUpload.js.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts +27 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.js +242 -0
- package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/hooks/useMessages.d.ts +4 -0
- package/dist/hooks/useMessages.d.ts.map +1 -0
- package/dist/hooks/useMessages.js +25 -0
- package/dist/hooks/useMessages.js.map +1 -0
- package/dist/hooks/usePreferences.d.ts +10 -0
- package/dist/hooks/usePreferences.d.ts.map +1 -0
- package/dist/hooks/usePreferences.js +62 -0
- package/dist/hooks/usePreferences.js.map +1 -0
- package/dist/hooks/useQueueState.d.ts +15 -0
- package/dist/hooks/useQueueState.d.ts.map +1 -0
- package/dist/hooks/useQueueState.js +30 -0
- package/dist/hooks/useQueueState.js.map +1 -0
- package/dist/hooks/useResearch.d.ts +59 -0
- package/dist/hooks/useResearch.d.ts.map +1 -0
- package/dist/hooks/useResearch.js +138 -0
- package/dist/hooks/useResearch.js.map +1 -0
- package/dist/hooks/useSessionFiles.d.ts +2 -0
- package/dist/hooks/useSessionFiles.d.ts.map +1 -0
- package/dist/hooks/useSessionFiles.js +15 -0
- package/dist/hooks/useSessionFiles.js.map +1 -0
- package/dist/hooks/useSessionStream.d.ts +2 -0
- package/dist/hooks/useSessionStream.d.ts.map +1 -0
- package/dist/hooks/useSessionStream.js +455 -0
- package/dist/hooks/useSessionStream.js.map +1 -0
- package/dist/hooks/useSessions.d.ts +9 -0
- package/dist/hooks/useSessions.d.ts.map +1 -0
- package/dist/hooks/useSessions.js +43 -0
- package/dist/hooks/useSessions.js.map +1 -0
- package/dist/hooks/useSetuBalance.d.ts +4 -0
- package/dist/hooks/useSetuBalance.d.ts.map +1 -0
- package/dist/hooks/useSetuBalance.js +59 -0
- package/dist/hooks/useSetuBalance.js.map +1 -0
- package/dist/hooks/useSetuPayments.d.ts +2 -0
- package/dist/hooks/useSetuPayments.d.ts.map +1 -0
- package/dist/hooks/useSetuPayments.js +159 -0
- package/dist/hooks/useSetuPayments.js.map +1 -0
- package/dist/hooks/useShareStatus.d.ts +7 -0
- package/dist/hooks/useShareStatus.d.ts.map +1 -0
- package/dist/hooks/useShareStatus.js +12 -0
- package/dist/hooks/useShareStatus.js.map +1 -0
- package/dist/hooks/useTerminals.d.ts +37 -0
- package/dist/hooks/useTerminals.d.ts.map +1 -0
- package/dist/hooks/useTerminals.js +67 -0
- package/dist/hooks/useTerminals.js.map +1 -0
- package/dist/hooks/useTheme.d.ts +8 -0
- package/dist/hooks/useTheme.d.ts.map +1 -0
- package/dist/hooks/useTheme.js +57 -0
- package/dist/hooks/useTheme.js.map +1 -0
- package/dist/hooks/useToolApprovalShortcuts.d.ts +11 -0
- package/dist/hooks/useToolApprovalShortcuts.d.ts.map +1 -0
- package/dist/hooks/useToolApprovalShortcuts.js +88 -0
- package/dist/hooks/useToolApprovalShortcuts.js.map +1 -0
- package/dist/hooks/useTopupCallback.d.ts +2 -0
- package/dist/hooks/useTopupCallback.d.ts.map +1 -0
- package/dist/hooks/useTopupCallback.js +74 -0
- package/dist/hooks/useTopupCallback.js.map +1 -0
- package/dist/hooks/useVimMode.d.ts +16 -0
- package/dist/hooks/useVimMode.d.ts.map +1 -0
- package/dist/hooks/useVimMode.js +298 -0
- package/dist/hooks/useVimMode.js.map +1 -0
- package/dist/hooks/useWorkingDirectory.d.ts +2 -0
- package/dist/hooks/useWorkingDirectory.d.ts.map +1 -0
- package/dist/hooks/useWorkingDirectory.js +34 -0
- package/dist/hooks/useWorkingDirectory.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +245 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +783 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/commands.d.ts +16 -0
- package/dist/lib/commands.d.ts.map +1 -0
- package/dist/lib/commands.js +124 -0
- package/dist/lib/commands.js.map +1 -0
- package/dist/lib/config.d.ts +6 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +28 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/index.d.ts +4 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +5 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/open-url.d.ts +2 -0
- package/dist/lib/open-url.d.ts.map +1 -0
- package/dist/lib/open-url.js +9 -0
- package/dist/lib/open-url.js.map +1 -0
- package/dist/lib/parseResearchContext.d.ts +17 -0
- package/dist/lib/parseResearchContext.d.ts.map +1 -0
- package/dist/lib/parseResearchContext.js +30 -0
- package/dist/lib/parseResearchContext.js.map +1 -0
- package/dist/lib/sse-client.d.ts +13 -0
- package/dist/lib/sse-client.d.ts.map +1 -0
- package/dist/lib/sse-client.js +111 -0
- package/dist/lib/sse-client.js.map +1 -0
- package/dist/stores/confirmationStore.d.ts +23 -0
- package/dist/stores/confirmationStore.d.ts.map +1 -0
- package/dist/stores/confirmationStore.js +27 -0
- package/dist/stores/confirmationStore.js.map +1 -0
- package/dist/stores/focusStore.d.ts +14 -0
- package/dist/stores/focusStore.d.ts.map +1 -0
- package/dist/stores/focusStore.js +12 -0
- package/dist/stores/focusStore.js.map +1 -0
- package/dist/stores/gitStore.d.ts +24 -0
- package/dist/stores/gitStore.d.ts.map +1 -0
- package/dist/stores/gitStore.js +57 -0
- package/dist/stores/gitStore.js.map +1 -0
- package/dist/stores/index.d.ts +15 -0
- package/dist/stores/index.d.ts.map +1 -0
- package/dist/stores/index.js +15 -0
- package/dist/stores/index.js.map +1 -0
- package/dist/stores/onboardingStore.d.ts +46 -0
- package/dist/stores/onboardingStore.d.ts.map +1 -0
- package/dist/stores/onboardingStore.js +38 -0
- package/dist/stores/onboardingStore.js.map +1 -0
- package/dist/stores/pendingResearchStore.d.ts +17 -0
- package/dist/stores/pendingResearchStore.d.ts.map +1 -0
- package/dist/stores/pendingResearchStore.js +38 -0
- package/dist/stores/pendingResearchStore.js.map +1 -0
- package/dist/stores/queueStore.d.ts +8 -0
- package/dist/stores/queueStore.d.ts.map +1 -0
- package/dist/stores/queueStore.js +11 -0
- package/dist/stores/queueStore.js.map +1 -0
- package/dist/stores/researchStore.d.ts +14 -0
- package/dist/stores/researchStore.d.ts.map +1 -0
- package/dist/stores/researchStore.js +45 -0
- package/dist/stores/researchStore.js.map +1 -0
- package/dist/stores/sessionFilesStore.d.ts +17 -0
- package/dist/stores/sessionFilesStore.d.ts.map +1 -0
- package/dist/stores/sessionFilesStore.js +53 -0
- package/dist/stores/sessionFilesStore.js.map +1 -0
- package/dist/stores/settingsStore.d.ts +9 -0
- package/dist/stores/settingsStore.d.ts.map +1 -0
- package/dist/stores/settingsStore.js +23 -0
- package/dist/stores/settingsStore.js.map +1 -0
- package/dist/stores/setuStore.d.ts +22 -0
- package/dist/stores/setuStore.d.ts.map +1 -0
- package/dist/stores/setuStore.js +21 -0
- package/dist/stores/setuStore.js.map +1 -0
- package/dist/stores/sidebarStore.d.ts +20 -0
- package/dist/stores/sidebarStore.d.ts.map +1 -0
- package/dist/stores/sidebarStore.js +10 -0
- package/dist/stores/sidebarStore.js.map +1 -0
- package/dist/stores/terminalStore.d.ts +11 -0
- package/dist/stores/terminalStore.d.ts.map +1 -0
- package/dist/stores/terminalStore.js +25 -0
- package/dist/stores/terminalStore.js.map +1 -0
- package/dist/stores/toastStore.d.ts +32 -0
- package/dist/stores/toastStore.d.ts.map +1 -0
- package/dist/stores/toastStore.js +46 -0
- package/dist/stores/toastStore.js.map +1 -0
- package/dist/stores/toolApprovalStore.d.ts +18 -0
- package/dist/stores/toolApprovalStore.d.ts.map +1 -0
- package/dist/stores/toolApprovalStore.js +16 -0
- package/dist/stores/toolApprovalStore.js.map +1 -0
- package/dist/stores/topupApprovalStore.d.ts +20 -0
- package/dist/stores/topupApprovalStore.d.ts.map +1 -0
- package/dist/stores/topupApprovalStore.js +11 -0
- package/dist/stores/topupApprovalStore.js.map +1 -0
- package/dist/types/api.d.ts +269 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +2 -0
- package/dist/types/api.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useState, useEffect, useCallback, useRef } from 'react';
|
|
3
|
+
import { CreditCard, Wallet, Loader2, ExternalLink, RefreshCw, } from 'lucide-react';
|
|
4
|
+
import { Modal } from '../ui/Modal';
|
|
5
|
+
import { useSetuStore } from '../../stores/setuStore';
|
|
6
|
+
import { apiClient } from '../../lib/api-client';
|
|
7
|
+
import { toast } from '../../stores/toastStore';
|
|
8
|
+
import { StatusIndicator } from '../common/StatusIndicator';
|
|
9
|
+
const PRESET_AMOUNTS = [10, 25, 50, 100];
|
|
10
|
+
const MIN_AMOUNT = 5;
|
|
11
|
+
const MAX_AMOUNT = 500;
|
|
12
|
+
const POLL_INTERVAL = 5000;
|
|
13
|
+
const SUCCESS_PAGE_URL = 'https://share.ottocode.io/checkout/success';
|
|
14
|
+
export const SetuTopupModal = memo(function SetuTopupModal() {
|
|
15
|
+
const isOpen = useSetuStore((s) => s.isTopupModalOpen);
|
|
16
|
+
const closeModal = useSetuStore((s) => s.closeTopupModal);
|
|
17
|
+
const balance = useSetuStore((s) => s.balance);
|
|
18
|
+
const setBalance = useSetuStore((s) => s.setBalance);
|
|
19
|
+
const usdcBalance = useSetuStore((s) => s.usdcBalance);
|
|
20
|
+
const [view, setView] = useState('amount');
|
|
21
|
+
const [amount, setAmount] = useState(25);
|
|
22
|
+
const [customAmount, setCustomAmount] = useState('');
|
|
23
|
+
const [isCustom, setIsCustom] = useState(false);
|
|
24
|
+
const [estimate, setEstimate] = useState(null);
|
|
25
|
+
const [isLoadingEstimate, setIsLoadingEstimate] = useState(false);
|
|
26
|
+
const [isCreatingCheckout, setIsCreatingCheckout] = useState(false);
|
|
27
|
+
const [checkoutInfo, setCheckoutInfo] = useState(null);
|
|
28
|
+
const [isPolling, setIsPolling] = useState(false);
|
|
29
|
+
const [confirmedAmount, setConfirmedAmount] = useState(null);
|
|
30
|
+
const [pollCount, setPollCount] = useState(0);
|
|
31
|
+
const [isManualChecking, setIsManualChecking] = useState(false);
|
|
32
|
+
const pollRef = useRef(null);
|
|
33
|
+
const effectiveAmount = isCustom ? parseFloat(customAmount) || 0 : amount;
|
|
34
|
+
const fetchEstimate = useCallback(async (amt) => {
|
|
35
|
+
if (amt < MIN_AMOUNT || amt > MAX_AMOUNT) {
|
|
36
|
+
setEstimate(null);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
setIsLoadingEstimate(true);
|
|
40
|
+
try {
|
|
41
|
+
const result = await apiClient.getPolarTopupEstimate(amt);
|
|
42
|
+
setEstimate(result);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
setEstimate(null);
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
setIsLoadingEstimate(false);
|
|
49
|
+
}
|
|
50
|
+
}, []);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (isOpen && effectiveAmount >= MIN_AMOUNT && view === 'amount') {
|
|
53
|
+
const timeout = setTimeout(() => fetchEstimate(effectiveAmount), 300);
|
|
54
|
+
return () => clearTimeout(timeout);
|
|
55
|
+
}
|
|
56
|
+
}, [isOpen, effectiveAmount, fetchEstimate, view]);
|
|
57
|
+
const stopPolling = useCallback(() => {
|
|
58
|
+
if (pollRef.current) {
|
|
59
|
+
clearInterval(pollRef.current);
|
|
60
|
+
pollRef.current = null;
|
|
61
|
+
}
|
|
62
|
+
setIsPolling(false);
|
|
63
|
+
}, []);
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (!isOpen) {
|
|
66
|
+
stopPolling();
|
|
67
|
+
setView('amount');
|
|
68
|
+
setCheckoutInfo(null);
|
|
69
|
+
setConfirmedAmount(null);
|
|
70
|
+
setPollCount(0);
|
|
71
|
+
}
|
|
72
|
+
}, [isOpen, stopPolling]);
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
return () => stopPolling();
|
|
75
|
+
}, [stopPolling]);
|
|
76
|
+
const startPolling = useCallback((checkoutId) => {
|
|
77
|
+
if (pollRef.current)
|
|
78
|
+
return;
|
|
79
|
+
setIsPolling(true);
|
|
80
|
+
setPollCount(0);
|
|
81
|
+
const check = async () => {
|
|
82
|
+
try {
|
|
83
|
+
const status = await apiClient.getPolarTopupStatus(checkoutId);
|
|
84
|
+
console.log('[SetuTopupModal] Poll status:', status);
|
|
85
|
+
setPollCount((c) => c + 1);
|
|
86
|
+
if (status?.confirmed) {
|
|
87
|
+
stopPolling();
|
|
88
|
+
setConfirmedAmount(status.amountUsd);
|
|
89
|
+
localStorage.removeItem('pendingPolarCheckout');
|
|
90
|
+
const balanceData = await apiClient.getSetuBalance();
|
|
91
|
+
if (balanceData?.balance !== undefined) {
|
|
92
|
+
setBalance(balanceData.balance);
|
|
93
|
+
}
|
|
94
|
+
setView('confirmed');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
setPollCount((c) => c + 1);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
check();
|
|
102
|
+
pollRef.current = setInterval(check, POLL_INTERVAL);
|
|
103
|
+
}, [stopPolling, setBalance]);
|
|
104
|
+
const handlePresetClick = (preset) => {
|
|
105
|
+
setAmount(preset);
|
|
106
|
+
setIsCustom(false);
|
|
107
|
+
setCustomAmount('');
|
|
108
|
+
};
|
|
109
|
+
const handleCustomAmountChange = (value) => {
|
|
110
|
+
setCustomAmount(value);
|
|
111
|
+
setIsCustom(true);
|
|
112
|
+
};
|
|
113
|
+
const openCheckoutUrl = useCallback((url) => {
|
|
114
|
+
if (window.self !== window.top) {
|
|
115
|
+
window.parent.postMessage({ type: 'otto-open-url', url }, '*');
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
window.open(url, '_blank');
|
|
119
|
+
}
|
|
120
|
+
}, []);
|
|
121
|
+
const handlePolarCheckout = async () => {
|
|
122
|
+
if (effectiveAmount < MIN_AMOUNT || effectiveAmount > MAX_AMOUNT) {
|
|
123
|
+
toast.error(`Amount must be between $${MIN_AMOUNT} and $${MAX_AMOUNT}`);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
setIsCreatingCheckout(true);
|
|
127
|
+
try {
|
|
128
|
+
const result = await apiClient.createPolarCheckout(effectiveAmount, SUCCESS_PAGE_URL);
|
|
129
|
+
if (result.checkoutUrl && result.checkoutId) {
|
|
130
|
+
const info = {
|
|
131
|
+
url: result.checkoutUrl,
|
|
132
|
+
checkoutId: result.checkoutId,
|
|
133
|
+
creditAmount: result.creditAmount,
|
|
134
|
+
chargeAmount: result.chargeAmount,
|
|
135
|
+
};
|
|
136
|
+
setCheckoutInfo(info);
|
|
137
|
+
localStorage.setItem('pendingPolarCheckout', result.checkoutId);
|
|
138
|
+
setView('checkout');
|
|
139
|
+
openCheckoutUrl(result.checkoutUrl);
|
|
140
|
+
startPolling(result.checkoutId);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
toast.error(error instanceof Error ? error.message : 'Failed to create checkout');
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
setIsCreatingCheckout(false);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
const handleCheckNow = async () => {
|
|
151
|
+
if (!checkoutInfo)
|
|
152
|
+
return;
|
|
153
|
+
setIsManualChecking(true);
|
|
154
|
+
try {
|
|
155
|
+
const status = await apiClient.getPolarTopupStatus(checkoutInfo.checkoutId);
|
|
156
|
+
console.log('[SetuTopupModal] Manual check status:', status);
|
|
157
|
+
if (status?.confirmed) {
|
|
158
|
+
stopPolling();
|
|
159
|
+
setConfirmedAmount(status.amountUsd);
|
|
160
|
+
localStorage.removeItem('pendingPolarCheckout');
|
|
161
|
+
const balanceData = await apiClient.getSetuBalance();
|
|
162
|
+
if (balanceData?.balance !== undefined) {
|
|
163
|
+
setBalance(balanceData.balance);
|
|
164
|
+
}
|
|
165
|
+
setView('confirmed');
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
toast.error('Payment not confirmed yet. Keep waiting or try again.');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
console.error('[SetuTopupModal] Check failed:', err);
|
|
173
|
+
toast.error('Failed to check payment status');
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
setIsManualChecking(false);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
const handleDone = () => {
|
|
180
|
+
closeModal();
|
|
181
|
+
};
|
|
182
|
+
const isValidAmount = effectiveAmount >= MIN_AMOUNT && effectiveAmount <= MAX_AMOUNT;
|
|
183
|
+
const modalTitle = view === 'confirmed'
|
|
184
|
+
? 'Payment Confirmed'
|
|
185
|
+
: view === 'checkout'
|
|
186
|
+
? 'Waiting for Payment'
|
|
187
|
+
: 'Add Credits';
|
|
188
|
+
return (_jsx(Modal, { isOpen: isOpen, onClose: closeModal, title: modalTitle, maxWidth: "md", children: _jsxs("div", { className: "space-y-6", children: [view === 'confirmed' && (_jsxs(_Fragment, { children: [_jsx("div", { className: "py-4", children: _jsx(StatusIndicator, { status: "success", label: `+$${confirmedAmount?.toFixed(2) ?? checkoutInfo?.creditAmount.toFixed(2)}`, sublabel: "Credits added to your balance" }) }), _jsx("button", { type: "button", onClick: handleDone, className: "w-full h-12 bg-foreground text-background rounded-lg font-medium hover:bg-foreground/90 transition-colors flex items-center justify-center gap-2", children: "Done" })] })), view === 'checkout' && checkoutInfo && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "py-4", children: [_jsx(StatusIndicator, { status: "loading", label: "Complete your payment", sublabel: "A checkout window has been opened" }), _jsxs("div", { className: "flex items-center justify-center gap-2 mt-4 px-3 py-1.5 bg-muted/40 rounded-full w-fit mx-auto", children: [_jsx("div", { className: "w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse" }), _jsx("span", { className: "text-xs text-muted-foreground font-mono", children: isPolling ? `Checking... (${pollCount})` : 'Paused' })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsxs("button", { type: "button", onClick: handleCheckNow, disabled: isManualChecking, className: "w-full h-12 bg-foreground text-background rounded-lg font-medium hover:bg-foreground/90 transition-colors disabled:opacity-50 flex items-center justify-center gap-2", children: [isManualChecking ? (_jsx(Loader2, { className: "w-4 h-4 animate-spin" })) : (_jsx(RefreshCw, { className: "w-4 h-4" })), isManualChecking ? 'Checking...' : 'Check Now'] }), _jsxs("button", { type: "button", onClick: () => openCheckoutUrl(checkoutInfo.url), className: "w-full h-11 bg-transparent border border-border text-foreground rounded-lg font-medium hover:bg-muted/50 transition-colors flex items-center justify-center gap-2", children: [_jsx(ExternalLink, { className: "w-4 h-4" }), "Open Checkout Again"] })] }), _jsx("p", { className: "text-xs text-muted-foreground text-center", children: "Status checks automatically every 5 seconds. You can close this and it will keep checking." })] })), view === 'amount' && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between py-3 px-4 bg-muted/40 rounded-lg", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: "Current Balance" }), _jsxs("span", { className: "text-lg font-mono font-semibold", children: ["$", balance?.toFixed(2) ?? '0.00'] })] }), _jsxs("div", { className: "space-y-4", children: [_jsx("div", { className: "grid grid-cols-4 gap-2", children: PRESET_AMOUNTS.map((preset) => (_jsxs("button", { type: "button", onClick: () => handlePresetClick(preset), className: `h-12 text-base font-mono rounded-lg border-2 transition-all ${!isCustom && amount === preset
|
|
189
|
+
? 'bg-foreground text-background border-foreground'
|
|
190
|
+
: 'bg-transparent border-border text-foreground hover:border-foreground/40'}`, children: ["$", preset] }, preset))) }), _jsxs("div", { className: "relative", children: [_jsx("span", { className: "absolute left-4 top-1/2 -translate-y-1/2 text-muted-foreground text-lg", children: "$" }), _jsx("input", { type: "number", placeholder: "Custom", value: customAmount, onChange: (e) => handleCustomAmountChange(e.target.value), onFocus: () => setIsCustom(true), min: MIN_AMOUNT, max: MAX_AMOUNT, step: "1", className: `w-full h-12 pl-8 pr-4 text-base font-mono bg-transparent border-2 rounded-lg outline-none transition-all ${isCustom
|
|
191
|
+
? 'border-foreground'
|
|
192
|
+
: 'border-border focus:border-foreground/40'}` })] })] }), _jsx("div", { className: `grid transition-all duration-200 ease-out ${isValidAmount
|
|
193
|
+
? 'grid-rows-[1fr] opacity-100'
|
|
194
|
+
: 'grid-rows-[0fr] opacity-0'}`, children: _jsx("div", { className: "overflow-hidden", children: _jsx("div", { className: "space-y-3 py-4 border-t border-border", children: isLoadingEstimate ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: "Credits" }), _jsx("div", { className: "h-6 w-16 bg-muted/60 rounded animate-pulse" })] }), _jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: "Fee" }), _jsx("div", { className: "h-4 w-12 bg-muted/60 rounded animate-pulse" })] }), _jsxs("div", { className: "flex justify-between items-center pt-3 border-t border-border", children: [_jsx("span", { className: "font-medium", children: "Total" }), _jsx("div", { className: "h-7 w-20 bg-muted/60 rounded animate-pulse" })] })] })) : estimate ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: "Credits" }), _jsxs("span", { className: "font-mono text-lg", children: ["$", estimate.creditAmount.toFixed(2)] })] }), _jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: "Fee" }), _jsxs("span", { className: "font-mono text-sm text-muted-foreground", children: ["+$", estimate.feeAmount.toFixed(2)] })] }), _jsxs("div", { className: "flex justify-between items-center pt-3 border-t border-border", children: [_jsx("span", { className: "font-medium", children: "Total" }), _jsxs("span", { className: "font-mono text-xl font-semibold", children: ["$", estimate.chargeAmount.toFixed(2)] })] })] })) : null }) }) }), _jsxs("button", { type: "button", onClick: handlePolarCheckout, disabled: !isValidAmount || isCreatingCheckout, className: "w-full h-12 bg-foreground text-background rounded-lg font-medium hover:bg-foreground/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2", children: [isCreatingCheckout ? (_jsx(Loader2, { className: "w-4 h-4 animate-spin" })) : (_jsx(CreditCard, { className: "w-4 h-4" })), "Pay with Card"] }), _jsxs("div", { className: "relative pt-6", children: [_jsxs("div", { className: "absolute inset-x-0 top-0 flex items-center", children: [_jsx("div", { className: "flex-1 h-px bg-border" }), _jsx("span", { className: "px-3 text-xs text-muted-foreground", children: "OR" }), _jsx("div", { className: "flex-1 h-px bg-border" })] }), _jsxs("div", { className: "flex items-start gap-3 p-4 bg-muted/30 rounded-lg", children: [_jsx(Wallet, { className: "w-5 h-5 text-muted-foreground mt-0.5" }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "font-medium text-sm", children: "Pay with USDC" }), usdcBalance !== null && (_jsxs("span", { className: "text-xs font-mono text-muted-foreground", children: [usdcBalance.toFixed(2), " USDC"] }))] }), _jsx("p", { className: "text-xs text-muted-foreground mt-1", children: "Send USDC to your Setu wallet. Auto top-up when balance is low." })] })] })] })] }))] }) }));
|
|
195
|
+
});
|
|
196
|
+
//# sourceMappingURL=SetuTopupModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SetuTopupModal.js","sourceRoot":"","sources":["../../../src/components/settings/SetuTopupModal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Terminal } from '../../hooks/useTerminals';
|
|
2
|
+
interface TerminalListProps {
|
|
3
|
+
terminals: Terminal[];
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const TerminalList: import("react").NamedExoticComponent<TerminalListProps>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=TerminalList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalList.d.ts","sourceRoot":"","sources":["../../../src/components/terminals/TerminalList.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,UAAU,iBAAiB;IAC1B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,YAAY,yDA2EvB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from '../ui/Button';
|
|
3
|
+
import { memo } from 'react';
|
|
4
|
+
import { Terminal as TerminalIcon, User, Bot } from 'lucide-react';
|
|
5
|
+
import { useTerminalStore } from '../../stores/terminalStore';
|
|
6
|
+
export const TerminalList = memo(function TerminalList({ terminals, isLoading, }) {
|
|
7
|
+
const selectTerminal = useTerminalStore((state) => state.selectTerminal);
|
|
8
|
+
if (isLoading) {
|
|
9
|
+
return (_jsx("div", { className: "flex items-center justify-center h-full text-muted-foreground", children: _jsx("div", { className: "text-sm", children: "Loading terminals..." }) }));
|
|
10
|
+
}
|
|
11
|
+
if (terminals.length === 0) {
|
|
12
|
+
return (_jsxs("div", { className: "flex flex-col items-center justify-center h-full text-muted-foreground px-4 text-center", children: [_jsx(TerminalIcon, { className: "w-12 h-12 mb-3 opacity-50" }), _jsx("div", { className: "text-sm font-medium mb-1", children: "No active terminals" }), _jsx("div", { className: "text-xs", children: "Click the + button to create a new terminal" })] }));
|
|
13
|
+
}
|
|
14
|
+
return (_jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx("div", { className: "p-2 space-y-1", children: terminals.map((terminal) => (_jsx(Button, { variant: "ghost", className: "w-full justify-start h-auto py-3 px-3", onClick: () => selectTerminal(terminal.id), children: _jsxs("div", { className: "flex items-start gap-3 w-full", children: [_jsx("div", { className: "shrink-0 mt-0.5", children: terminal.createdBy === 'llm' ? (_jsx(Bot, { className: "w-4 h-4 text-blue-500" })) : (_jsx(User, { className: "w-4 h-4 text-green-500" })) }), _jsxs("div", { className: "flex-1 min-w-0 text-left", children: [_jsx("div", { className: "text-sm font-medium truncate", children: terminal.title }), _jsxs("div", { className: "text-xs text-muted-foreground truncate", children: [terminal.command, ' ', terminal.args.length > 0 && terminal.args.join(' ')] }), _jsxs("div", { className: "flex items-center gap-2 mt-1", children: [_jsx("span", { className: `text-xs ${terminal.status === 'running'
|
|
15
|
+
? 'text-green-600'
|
|
16
|
+
: 'text-orange-600'}`, children: terminal.status === 'running'
|
|
17
|
+
? 'Running'
|
|
18
|
+
: `Exited (${terminal.exitCode})` }), _jsxs("span", { className: "text-xs text-muted-foreground", children: ["\u2022 ", formatUptime(terminal.uptime)] })] })] })] }) }, terminal.id))) }) }));
|
|
19
|
+
});
|
|
20
|
+
function formatUptime(ms) {
|
|
21
|
+
const seconds = Math.floor(ms / 1000);
|
|
22
|
+
const minutes = Math.floor(seconds / 60);
|
|
23
|
+
const hours = Math.floor(minutes / 60);
|
|
24
|
+
if (hours > 0) {
|
|
25
|
+
return `${hours}h ${minutes % 60}m`;
|
|
26
|
+
}
|
|
27
|
+
if (minutes > 0) {
|
|
28
|
+
return `${minutes}m`;
|
|
29
|
+
}
|
|
30
|
+
return `${seconds}s`;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=TerminalList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalList.js","sourceRoot":"","sources":["../../../src/components/terminals/TerminalList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalViewer.d.ts","sourceRoot":"","sources":["../../../src/components/terminals/TerminalViewer.tsx"],"names":[],"mappings":"AA4FA,UAAU,mBAAmB;IAC5B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,EAAE,UAAU,EAAE,EAAE,mBAAmB,2CAqQjE"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { init, Terminal, FitAddon } from 'ghostty-web';
|
|
4
|
+
import { ArrowLeft, X } from 'lucide-react';
|
|
5
|
+
import { Button } from '../ui/Button';
|
|
6
|
+
import { useTerminals } from '../../hooks/useTerminals';
|
|
7
|
+
import { useTerminalStore } from '../../stores/terminalStore';
|
|
8
|
+
import { getRuntimeApiBaseUrl } from '../../lib/config';
|
|
9
|
+
import { client } from '@ottocode/api';
|
|
10
|
+
const FONT_FAMILY = '"JetBrainsMono NFM", monospace';
|
|
11
|
+
function resolveBackgroundColor() {
|
|
12
|
+
if (typeof document === 'undefined')
|
|
13
|
+
return '#121216';
|
|
14
|
+
const el = document.createElement('div');
|
|
15
|
+
el.style.display = 'none';
|
|
16
|
+
el.className = 'bg-background';
|
|
17
|
+
document.body.appendChild(el);
|
|
18
|
+
const computed = getComputedStyle(el).backgroundColor;
|
|
19
|
+
document.body.removeChild(el);
|
|
20
|
+
const match = computed.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
|
|
21
|
+
if (match) {
|
|
22
|
+
const r = Number(match[1]);
|
|
23
|
+
const g = Number(match[2]);
|
|
24
|
+
const b = Number(match[3]);
|
|
25
|
+
return `#${((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1)}`;
|
|
26
|
+
}
|
|
27
|
+
return '#121216';
|
|
28
|
+
}
|
|
29
|
+
let fontsLoaded = false;
|
|
30
|
+
async function loadEmbeddedFont() {
|
|
31
|
+
if (fontsLoaded)
|
|
32
|
+
return;
|
|
33
|
+
if (typeof document === 'undefined' || !('FontFace' in window))
|
|
34
|
+
return;
|
|
35
|
+
const variants = [
|
|
36
|
+
{
|
|
37
|
+
file: 'JetBrainsMonoNerdFontMono-Regular.woff2',
|
|
38
|
+
weight: '400',
|
|
39
|
+
style: 'normal',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
file: 'JetBrainsMonoNerdFontMono-Bold.woff2',
|
|
43
|
+
weight: '700',
|
|
44
|
+
style: 'normal',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
file: 'JetBrainsMonoNerdFontMono-Italic.woff2',
|
|
48
|
+
weight: '400',
|
|
49
|
+
style: 'italic',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
file: 'JetBrainsMonoNerdFontMono-BoldItalic.woff2',
|
|
53
|
+
weight: '700',
|
|
54
|
+
style: 'italic',
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
const loads = variants.map(async (v) => {
|
|
58
|
+
try {
|
|
59
|
+
const url = new URL(`../../assets/fonts/${v.file}`, import.meta.url).href;
|
|
60
|
+
const face = new FontFace('JetBrainsMono NFM', `url("${url}") format("woff2")`, {
|
|
61
|
+
weight: v.weight,
|
|
62
|
+
style: v.style,
|
|
63
|
+
});
|
|
64
|
+
const loaded = await face.load();
|
|
65
|
+
document.fonts.add(loaded);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// variant not available
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
await Promise.allSettled(loads);
|
|
72
|
+
fontsLoaded = true;
|
|
73
|
+
}
|
|
74
|
+
function resolveApiBaseUrl() {
|
|
75
|
+
const config = client.getConfig?.();
|
|
76
|
+
if (config &&
|
|
77
|
+
typeof config.baseURL === 'string' &&
|
|
78
|
+
config.baseURL.length > 0) {
|
|
79
|
+
return config.baseURL;
|
|
80
|
+
}
|
|
81
|
+
return getRuntimeApiBaseUrl();
|
|
82
|
+
}
|
|
83
|
+
export function TerminalViewer({ terminalId }) {
|
|
84
|
+
const termRef = useRef(null);
|
|
85
|
+
const xtermRef = useRef(null);
|
|
86
|
+
const fitAddonRef = useRef(null);
|
|
87
|
+
const eventSourceRef = useRef(null);
|
|
88
|
+
const [ready, setReady] = useState(false);
|
|
89
|
+
const { data: terminals } = useTerminals();
|
|
90
|
+
const { selectTerminal } = useTerminalStore();
|
|
91
|
+
const terminal = terminals?.terminals.find((t) => t.id === terminalId);
|
|
92
|
+
const handleKill = async () => {
|
|
93
|
+
try {
|
|
94
|
+
const baseUrl = resolveApiBaseUrl();
|
|
95
|
+
await fetch(`${baseUrl}/v1/terminals/${terminalId}`, {
|
|
96
|
+
method: 'DELETE',
|
|
97
|
+
});
|
|
98
|
+
selectTerminal(null);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.error('Failed to kill terminal:', error);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
if (!termRef.current || !terminalId)
|
|
106
|
+
return;
|
|
107
|
+
let disposed = false;
|
|
108
|
+
let xterm = null;
|
|
109
|
+
let fitAddon = null;
|
|
110
|
+
let handleResize = null;
|
|
111
|
+
setReady(false);
|
|
112
|
+
if (eventSourceRef.current) {
|
|
113
|
+
eventSourceRef.current.close();
|
|
114
|
+
eventSourceRef.current = null;
|
|
115
|
+
}
|
|
116
|
+
const setup = async () => {
|
|
117
|
+
await init();
|
|
118
|
+
if (disposed || !termRef.current)
|
|
119
|
+
return;
|
|
120
|
+
await loadEmbeddedFont();
|
|
121
|
+
await document.fonts.ready;
|
|
122
|
+
const bg = resolveBackgroundColor();
|
|
123
|
+
xterm = new Terminal({
|
|
124
|
+
theme: {
|
|
125
|
+
background: bg,
|
|
126
|
+
foreground: '#d4d4d4',
|
|
127
|
+
cursor: '#ffffff',
|
|
128
|
+
cursorAccent: '#000000',
|
|
129
|
+
selectionBackground: '#264f78',
|
|
130
|
+
black: '#000000',
|
|
131
|
+
red: '#cd3131',
|
|
132
|
+
green: '#0dbc79',
|
|
133
|
+
yellow: '#e5e510',
|
|
134
|
+
blue: '#2472c8',
|
|
135
|
+
magenta: '#bc3fbc',
|
|
136
|
+
cyan: '#11a8cd',
|
|
137
|
+
white: '#e5e5e5',
|
|
138
|
+
brightBlack: '#666666',
|
|
139
|
+
brightRed: '#f14c4c',
|
|
140
|
+
brightGreen: '#23d18b',
|
|
141
|
+
brightYellow: '#f5f543',
|
|
142
|
+
brightBlue: '#3b8eea',
|
|
143
|
+
brightMagenta: '#d670d6',
|
|
144
|
+
brightCyan: '#29b8db',
|
|
145
|
+
brightWhite: '#e5e5e5',
|
|
146
|
+
},
|
|
147
|
+
fontSize: 13,
|
|
148
|
+
fontFamily: FONT_FAMILY,
|
|
149
|
+
cursorBlink: true,
|
|
150
|
+
convertEol: true,
|
|
151
|
+
scrollback: 1000,
|
|
152
|
+
});
|
|
153
|
+
fitAddon = new FitAddon();
|
|
154
|
+
xterm.loadAddon(fitAddon);
|
|
155
|
+
xterm.open(termRef.current);
|
|
156
|
+
xterm.focus();
|
|
157
|
+
await new Promise((resolve) => {
|
|
158
|
+
requestAnimationFrame(() => {
|
|
159
|
+
try {
|
|
160
|
+
fitAddon?.fit();
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
console.error('Failed to fit terminal:', error);
|
|
164
|
+
}
|
|
165
|
+
resolve();
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
if (disposed)
|
|
169
|
+
return;
|
|
170
|
+
const baseUrl = resolveApiBaseUrl();
|
|
171
|
+
const sendResize = (cols, rows) => {
|
|
172
|
+
fetch(`${baseUrl}/v1/terminals/${terminalId}/resize`, {
|
|
173
|
+
method: 'POST',
|
|
174
|
+
headers: { 'Content-Type': 'application/json' },
|
|
175
|
+
body: JSON.stringify({ cols, rows }),
|
|
176
|
+
}).catch(() => { });
|
|
177
|
+
};
|
|
178
|
+
if (xterm) {
|
|
179
|
+
sendResize(xterm.cols, xterm.rows);
|
|
180
|
+
}
|
|
181
|
+
const eventSource = new EventSource(`${baseUrl}/v1/terminals/${terminalId}/output`);
|
|
182
|
+
eventSourceRef.current = eventSource;
|
|
183
|
+
let gotFirstData = false;
|
|
184
|
+
eventSource.onmessage = (event) => {
|
|
185
|
+
try {
|
|
186
|
+
const data = JSON.parse(event.data);
|
|
187
|
+
if (data.type === 'data') {
|
|
188
|
+
xterm?.write(data.line);
|
|
189
|
+
if (!gotFirstData) {
|
|
190
|
+
gotFirstData = true;
|
|
191
|
+
setTimeout(() => {
|
|
192
|
+
if (!disposed)
|
|
193
|
+
setReady(true);
|
|
194
|
+
}, 350);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else if (data.type === 'exit') {
|
|
198
|
+
xterm?.write(`\r\n\x1b[33m[Process exited with code ${data.exitCode}]\x1b[0m\r\n`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
console.error('Failed to parse terminal output:', error);
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
eventSource.onerror = (error) => {
|
|
206
|
+
if (eventSource.readyState !== EventSource.CLOSED) {
|
|
207
|
+
console.error('[TerminalViewer] SSE error:', error);
|
|
208
|
+
}
|
|
209
|
+
eventSource.close();
|
|
210
|
+
if (eventSourceRef.current === eventSource) {
|
|
211
|
+
eventSourceRef.current = null;
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
xterm.onData((data) => {
|
|
215
|
+
fetch(`${baseUrl}/v1/terminals/${terminalId}/input`, {
|
|
216
|
+
method: 'POST',
|
|
217
|
+
headers: { 'Content-Type': 'application/json' },
|
|
218
|
+
body: JSON.stringify({ input: data }),
|
|
219
|
+
}).catch((error) => {
|
|
220
|
+
console.error('Failed to send terminal input:', error);
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
xterm.onResize(({ cols, rows }) => {
|
|
224
|
+
sendResize(cols, rows);
|
|
225
|
+
});
|
|
226
|
+
xtermRef.current = xterm;
|
|
227
|
+
fitAddonRef.current = fitAddon;
|
|
228
|
+
handleResize = () => {
|
|
229
|
+
if (fitAddonRef.current) {
|
|
230
|
+
try {
|
|
231
|
+
fitAddonRef.current.fit();
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
console.error('Failed to fit terminal on resize:', error);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
window.addEventListener('resize', handleResize);
|
|
239
|
+
setTimeout(() => {
|
|
240
|
+
if (!disposed && !gotFirstData)
|
|
241
|
+
setReady(true);
|
|
242
|
+
}, 2000);
|
|
243
|
+
};
|
|
244
|
+
setup().catch((error) => {
|
|
245
|
+
console.error('[TerminalViewer] Failed to initialize:', error);
|
|
246
|
+
});
|
|
247
|
+
return () => {
|
|
248
|
+
disposed = true;
|
|
249
|
+
if (eventSourceRef.current) {
|
|
250
|
+
eventSourceRef.current.close();
|
|
251
|
+
eventSourceRef.current = null;
|
|
252
|
+
}
|
|
253
|
+
if (handleResize) {
|
|
254
|
+
window.removeEventListener('resize', handleResize);
|
|
255
|
+
}
|
|
256
|
+
if (xterm) {
|
|
257
|
+
xterm.dispose();
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
}, [terminalId]);
|
|
261
|
+
return (_jsxs("div", { className: "flex h-full flex-col overflow-hidden bg-background", children: [_jsxs("div", { className: "h-10 border-b border-border px-3 flex items-center justify-between shrink-0 bg-background", children: [_jsxs("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: () => selectTerminal(null), title: "Back to terminal list", className: "h-6 w-6 shrink-0", children: _jsx(ArrowLeft, { className: "w-3.5 h-3.5" }) }), _jsx("span", { className: "text-xs font-medium text-muted-foreground truncate", children: terminal?.title || terminal?.purpose || terminalId })] }), _jsx(Button, { variant: "ghost", size: "icon", onClick: handleKill, title: "Kill terminal", className: "h-6 w-6 shrink-0 text-destructive hover:text-destructive", children: _jsx(X, { className: "w-3.5 h-3.5" }) })] }), _jsxs("div", { className: "relative flex-1 min-h-0 overflow-hidden", children: [_jsx("div", { ref: termRef, className: "absolute inset-0 bg-background" }), _jsx("div", { className: "absolute inset-0 bg-background flex items-center justify-center pointer-events-none transition-opacity duration-300", style: { opacity: ready ? 0 : 1 }, children: _jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [_jsxs("svg", { className: "animate-spin h-4 w-4", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [_jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), _jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z" })] }), _jsx("span", { className: "text-xs", children: "Loading terminal\u2026" })] }) })] })] }));
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=TerminalViewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalViewer.js","sourceRoot":"","sources":["../../../src/components/terminals/TerminalViewer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalsSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/terminals/TerminalsSidebar.tsx"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,8CAoE3B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo } from 'react';
|
|
3
|
+
import { Terminal, ChevronRight, Plus } from 'lucide-react';
|
|
4
|
+
import { Button } from '../ui/Button';
|
|
5
|
+
import { useTerminalStore } from '../../stores/terminalStore';
|
|
6
|
+
import { useTerminals, useCreateTerminal } from '../../hooks/useTerminals';
|
|
7
|
+
import { TerminalList } from './TerminalList';
|
|
8
|
+
import { TerminalViewer } from './TerminalViewer';
|
|
9
|
+
export const TerminalsSidebar = memo(function TerminalsSidebar() {
|
|
10
|
+
const isExpanded = useTerminalStore((state) => state.isExpanded);
|
|
11
|
+
const collapseSidebar = useTerminalStore((state) => state.collapseSidebar);
|
|
12
|
+
const selectedTerminalId = useTerminalStore((state) => state.selectedTerminalId);
|
|
13
|
+
const selectTerminal = useTerminalStore((state) => state.selectTerminal);
|
|
14
|
+
const expandSidebar = useTerminalStore((state) => state.expandSidebar);
|
|
15
|
+
const { data: terminals, isLoading } = useTerminals();
|
|
16
|
+
const createTerminal = useCreateTerminal();
|
|
17
|
+
const handleNewTerminal = async () => {
|
|
18
|
+
try {
|
|
19
|
+
const result = await createTerminal.mutateAsync({
|
|
20
|
+
command: 'bash',
|
|
21
|
+
purpose: 'Manual shell',
|
|
22
|
+
});
|
|
23
|
+
selectTerminal(result.terminalId);
|
|
24
|
+
expandSidebar();
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
console.error('Failed to create terminal:', error);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
if (!isExpanded)
|
|
31
|
+
return null;
|
|
32
|
+
return (_jsxs("div", { className: "w-80 border-l border-border bg-background flex flex-col h-full", children: [_jsxs("div", { className: "h-14 border-b border-border px-4 flex items-center justify-between shrink-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Terminal, { className: "w-4 h-4" }), _jsx("span", { className: "font-medium", children: "Terminals" }), terminals && terminals.count > 0 && (_jsxs("span", { className: "text-xs text-muted-foreground", children: ["(", terminals.count, ")"] }))] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: handleNewTerminal, title: "New terminal", disabled: createTerminal.isPending, children: _jsx(Plus, { className: "w-4 h-4" }) }), _jsx(Button, { variant: "ghost", size: "icon", onClick: collapseSidebar, children: _jsx(ChevronRight, { className: "w-4 h-4" }) })] })] }), _jsx("div", { className: "flex-1 overflow-hidden flex flex-col", children: selectedTerminalId ? (_jsx(TerminalViewer, { terminalId: selectedTerminalId })) : (_jsx(TerminalList, { terminals: terminals?.terminals ?? [], isLoading: isLoading })) })] }));
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=TerminalsSidebar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalsSidebar.js","sourceRoot":"","sources":["../../../src/components/terminals/TerminalsSidebar.tsx"],"names":[],"mappings":"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"}
|