codex-linux 1.0.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/.claude/settings.local.json +10 -0
- package/.eslintrc.json +27 -0
- package/.github/workflows/ci.yml +156 -0
- package/.huskyrc +7 -0
- package/.lintstagedrc +13 -0
- package/.prettierrc +12 -0
- package/CLAUDE.md +163 -0
- package/DESIGN_SUPERIOR.md +73 -0
- package/Dockerfile +64 -0
- package/INSTALLATION.md +152 -0
- package/LICENSE +21 -0
- package/README.md +245 -0
- package/assets/skills/code-review/instructions.md +102 -0
- package/assets/skills/code-review/skill.yaml +15 -0
- package/assets/skills/refactoring/instructions.md +149 -0
- package/assets/skills/refactoring/skill.yaml +15 -0
- package/assets/skills/testing/skill.yaml +15 -0
- package/commitlint.config.js +23 -0
- package/dist/main/DatabaseManager.js +763 -0
- package/dist/main/DatabaseManager.js.map +1 -0
- package/dist/main/SettingsManager.js +61 -0
- package/dist/main/SettingsManager.js.map +1 -0
- package/dist/main/agents/AgentOrchestrator.js +787 -0
- package/dist/main/agents/AgentOrchestrator.js.map +1 -0
- package/dist/main/agents/AgentSDK.js +219 -0
- package/dist/main/agents/AgentSDK.js.map +1 -0
- package/dist/main/agents/AgentTools.js +348 -0
- package/dist/main/agents/AgentTools.js.map +1 -0
- package/dist/main/agents/CodeIndex.js +233 -0
- package/dist/main/agents/CodeIndex.js.map +1 -0
- package/dist/main/agents/EmbeddingService.js +80 -0
- package/dist/main/agents/EmbeddingService.js.map +1 -0
- package/dist/main/agents/NativeToolCalling.js +206 -0
- package/dist/main/agents/NativeToolCalling.js.map +1 -0
- package/dist/main/api/APIServer.js +278 -0
- package/dist/main/api/APIServer.js.map +1 -0
- package/dist/main/api/RateLimiter.js +138 -0
- package/dist/main/api/RateLimiter.js.map +1 -0
- package/dist/main/api/WebSocketManager.js +300 -0
- package/dist/main/api/WebSocketManager.js.map +1 -0
- package/dist/main/assistant/ContextOptimizer.js +192 -0
- package/dist/main/assistant/ContextOptimizer.js.map +1 -0
- package/dist/main/assistant/PredictedOutputManager.js +172 -0
- package/dist/main/assistant/PredictedOutputManager.js.map +1 -0
- package/dist/main/assistant/PromptCacheManager.js +193 -0
- package/dist/main/assistant/PromptCacheManager.js.map +1 -0
- package/dist/main/assistant/PromptOptimizer.js +626 -0
- package/dist/main/assistant/PromptOptimizer.js.map +1 -0
- package/dist/main/assistant/SmartCodeAssistant.js +224 -0
- package/dist/main/assistant/SmartCodeAssistant.js.map +1 -0
- package/dist/main/auth/SessionManager.js +300 -0
- package/dist/main/auth/SessionManager.js.map +1 -0
- package/dist/main/automations/AdvancedWebhookSystem.js +212 -0
- package/dist/main/automations/AdvancedWebhookSystem.js.map +1 -0
- package/dist/main/automations/AutomationScheduler.js +269 -0
- package/dist/main/automations/AutomationScheduler.js.map +1 -0
- package/dist/main/automations/BatchProcessingSystem.js +159 -0
- package/dist/main/automations/BatchProcessingSystem.js.map +1 -0
- package/dist/main/automations/BrowserAutomationManager.js +195 -0
- package/dist/main/automations/BrowserAutomationManager.js.map +1 -0
- package/dist/main/automations/GitHubActionsManager.js +129 -0
- package/dist/main/automations/GitHubActionsManager.js.map +1 -0
- package/dist/main/automations/GitLabCIManager.js +122 -0
- package/dist/main/automations/GitLabCIManager.js.map +1 -0
- package/dist/main/automations/PriorityQueueManager.js +240 -0
- package/dist/main/automations/PriorityQueueManager.js.map +1 -0
- package/dist/main/background/BackgroundModeManager.js +117 -0
- package/dist/main/background/BackgroundModeManager.js.map +1 -0
- package/dist/main/backup/BackupManager.js +254 -0
- package/dist/main/backup/BackupManager.js.map +1 -0
- package/dist/main/backup/MigrationManager.js +114 -0
- package/dist/main/backup/MigrationManager.js.map +1 -0
- package/dist/main/commands/SlashCommandManager.js +399 -0
- package/dist/main/commands/SlashCommandManager.js.map +1 -0
- package/dist/main/config/ClaudeMdParser.js +519 -0
- package/dist/main/config/ClaudeMdParser.js.map +1 -0
- package/dist/main/config/CustomizationManager.js +381 -0
- package/dist/main/config/CustomizationManager.js.map +1 -0
- package/dist/main/config/LaunchConfigManager.js +211 -0
- package/dist/main/config/LaunchConfigManager.js.map +1 -0
- package/dist/main/config/SettingsManager.js +166 -0
- package/dist/main/config/SettingsManager.js.map +1 -0
- package/dist/main/connectors/ConnectorManager.js +151 -0
- package/dist/main/connectors/ConnectorManager.js.map +1 -0
- package/dist/main/connectors/DatabaseConnector.js +222 -0
- package/dist/main/connectors/DatabaseConnector.js.map +1 -0
- package/dist/main/cowork/CoworkManager.js +324 -0
- package/dist/main/cowork/CoworkManager.js.map +1 -0
- package/dist/main/evals/AgentEvalFramework.js +538 -0
- package/dist/main/evals/AgentEvalFramework.js.map +1 -0
- package/dist/main/evals/GraderManager.js +285 -0
- package/dist/main/evals/GraderManager.js.map +1 -0
- package/dist/main/git/GitWorktreeManager.js +214 -0
- package/dist/main/git/GitWorktreeManager.js.map +1 -0
- package/dist/main/github/GitHubPRMonitor.js +244 -0
- package/dist/main/github/GitHubPRMonitor.js.map +1 -0
- package/dist/main/ide/ContinueInManager.js +181 -0
- package/dist/main/ide/ContinueInManager.js.map +1 -0
- package/dist/main/ide/IDEIntegration.js +277 -0
- package/dist/main/ide/IDEIntegration.js.map +1 -0
- package/dist/main/integrations/LinearManager.js +252 -0
- package/dist/main/integrations/LinearManager.js.map +1 -0
- package/dist/main/integrations/SlackBotManager.js +247 -0
- package/dist/main/integrations/SlackBotManager.js.map +1 -0
- package/dist/main/lsp/LSPManager.js +394 -0
- package/dist/main/lsp/LSPManager.js.map +1 -0
- package/dist/main/main.js +1087 -0
- package/dist/main/main.js.map +1 -0
- package/dist/main/mcp/MCPConfigurationManager.js +281 -0
- package/dist/main/mcp/MCPConfigurationManager.js.map +1 -0
- package/dist/main/mcp/MCPManager.js +710 -0
- package/dist/main/mcp/MCPManager.js.map +1 -0
- package/dist/main/mcp/MCPRegistry.js +272 -0
- package/dist/main/mcp/MCPRegistry.js.map +1 -0
- package/dist/main/monitoring/ErrorRecoveryManager.js +268 -0
- package/dist/main/monitoring/ErrorRecoveryManager.js.map +1 -0
- package/dist/main/monitoring/ErrorTracker.js +57 -0
- package/dist/main/monitoring/ErrorTracker.js.map +1 -0
- package/dist/main/monitoring/MetricsCollector.js +155 -0
- package/dist/main/monitoring/MetricsCollector.js.map +1 -0
- package/dist/main/monitoring/TraceGradingSystem.js +148 -0
- package/dist/main/monitoring/TraceGradingSystem.js.map +1 -0
- package/dist/main/notifications/NotificationManager.js +67 -0
- package/dist/main/notifications/NotificationManager.js.map +1 -0
- package/dist/main/pair/AIPairProgramming.js +200 -0
- package/dist/main/pair/AIPairProgramming.js.map +1 -0
- package/dist/main/plugins/PluginManager.js +222 -0
- package/dist/main/plugins/PluginManager.js.map +1 -0
- package/dist/main/plugins/PluginMarketplace.js +237 -0
- package/dist/main/plugins/PluginMarketplace.js.map +1 -0
- package/dist/main/preload.js +189 -0
- package/dist/main/preload.js.map +1 -0
- package/dist/main/preview/PreviewSessionManager.js +170 -0
- package/dist/main/preview/PreviewSessionManager.js.map +1 -0
- package/dist/main/providers/AIProviderManager.js +327 -0
- package/dist/main/providers/AIProviderManager.js.map +1 -0
- package/dist/main/providers/FineTuningManager.js +276 -0
- package/dist/main/providers/FineTuningManager.js.map +1 -0
- package/dist/main/providers/FreeModelsProvider.js +1104 -0
- package/dist/main/providers/FreeModelsProvider.js.map +1 -0
- package/dist/main/realtime/RealtimeManager.js +116 -0
- package/dist/main/realtime/RealtimeManager.js.map +1 -0
- package/dist/main/remote/CloudEnvironmentManager.js +232 -0
- package/dist/main/remote/CloudEnvironmentManager.js.map +1 -0
- package/dist/main/remote/RemoteSessionManager.js +255 -0
- package/dist/main/remote/RemoteSessionManager.js.map +1 -0
- package/dist/main/search/DeepResearchManager.js +335 -0
- package/dist/main/search/DeepResearchManager.js.map +1 -0
- package/dist/main/search/WebSearchIntegration.js +147 -0
- package/dist/main/search/WebSearchIntegration.js.map +1 -0
- package/dist/main/security/AdminConsoleManager.js +223 -0
- package/dist/main/security/AdminConsoleManager.js.map +1 -0
- package/dist/main/security/AuditLogger.js +136 -0
- package/dist/main/security/AuditLogger.js.map +1 -0
- package/dist/main/security/PermissionManager.js +144 -0
- package/dist/main/security/PermissionManager.js.map +1 -0
- package/dist/main/security/SSOManager.js +173 -0
- package/dist/main/security/SSOManager.js.map +1 -0
- package/dist/main/security/SecurityManager.js +152 -0
- package/dist/main/security/SecurityManager.js.map +1 -0
- package/dist/main/skills/SkillsManager.js +223 -0
- package/dist/main/skills/SkillsManager.js.map +1 -0
- package/dist/main/ssh/SSHManager.js +65 -0
- package/dist/main/ssh/SSHManager.js.map +1 -0
- package/dist/main/streaming/StreamingManager.js +225 -0
- package/dist/main/streaming/StreamingManager.js.map +1 -0
- package/dist/main/sync/CloudSyncManager.js +422 -0
- package/dist/main/sync/CloudSyncManager.js.map +1 -0
- package/dist/main/types.js +28 -0
- package/dist/main/types.js.map +1 -0
- package/dist/main/verification/AutoVerifyManager.js +235 -0
- package/dist/main/verification/AutoVerifyManager.js.map +1 -0
- package/dist/main/vision/ComputerUseManager.js +376 -0
- package/dist/main/vision/ComputerUseManager.js.map +1 -0
- package/dist/main/vision/ImageVideoGenerationManager.js +401 -0
- package/dist/main/vision/ImageVideoGenerationManager.js.map +1 -0
- package/dist/main/vision/VisionManager.js +172 -0
- package/dist/main/vision/VisionManager.js.map +1 -0
- package/dist/renderer/assets/main-DJlZQBCA.js +304 -0
- package/dist/renderer/assets/main-N33ZXEr8.css +1 -0
- package/dist/renderer/index.html +21 -0
- package/dist/renderer/manifest.json +42 -0
- package/dist/renderer/sw.ts +109 -0
- package/dist/shared/types.js +35 -0
- package/dist/shared/types.js.map +1 -0
- package/docker-compose.yml +65 -0
- package/docs/API.md +307 -0
- package/docs/USER_GUIDE.md +476 -0
- package/examples/plugins/sample-plugin/package.json +41 -0
- package/examples/plugins/sample-plugin/src/index.ts +75 -0
- package/index.html +20 -0
- package/jest.config.js +39 -0
- package/package.json +180 -0
- package/packages/cli/package.json +29 -0
- package/packages/cli/src/commands/agents.ts +199 -0
- package/packages/cli/src/commands/tasks.ts +61 -0
- package/packages/cli/src/index.ts +91 -0
- package/packages/cli/src/utils/api.ts +45 -0
- package/packages/cli/src/utils/config.ts +61 -0
- package/packages/npm-installer/bin/codex-linux +126 -0
- package/packages/npm-installer/lib/download.js +273 -0
- package/packages/npm-installer/package.json +42 -0
- package/packages/vscode-extension/package.json +167 -0
- package/packages/vscode-extension/src/api.ts +68 -0
- package/packages/vscode-extension/src/extension.ts +161 -0
- package/packages/vscode-extension/src/panels/chatPanel.ts +265 -0
- package/packages/vscode-extension/src/panels/createAgentPanel.ts +227 -0
- package/packages/vscode-extension/src/providers/agentsProvider.ts +80 -0
- package/postcss.config.js +6 -0
- package/public/manifest.json +42 -0
- package/public/sw.ts +109 -0
- package/scripts/install-dev.sh +103 -0
- package/scripts/install.sh +275 -0
- package/src/main/DatabaseManager.ts +950 -0
- package/src/main/SettingsManager.ts +63 -0
- package/src/main/agents/AgentOrchestrator.ts +930 -0
- package/src/main/agents/AgentSDK.ts +269 -0
- package/src/main/agents/AgentTools.ts +380 -0
- package/src/main/agents/CodeIndex.ts +240 -0
- package/src/main/agents/EmbeddingService.ts +88 -0
- package/src/main/agents/NativeToolCalling.ts +245 -0
- package/src/main/api/APIServer.ts +316 -0
- package/src/main/api/RateLimiter.ts +165 -0
- package/src/main/api/WebSocketManager.ts +398 -0
- package/src/main/assistant/ContextOptimizer.ts +214 -0
- package/src/main/assistant/PredictedOutputManager.ts +265 -0
- package/src/main/assistant/PromptCacheManager.ts +280 -0
- package/src/main/assistant/PromptOptimizer.ts +746 -0
- package/src/main/assistant/SmartCodeAssistant.ts +234 -0
- package/src/main/auth/SessionManager.ts +415 -0
- package/src/main/automations/AdvancedWebhookSystem.ts +281 -0
- package/src/main/automations/AutomationScheduler.ts +272 -0
- package/src/main/automations/BatchProcessingSystem.ts +207 -0
- package/src/main/automations/BrowserAutomationManager.ts +203 -0
- package/src/main/automations/GitHubActionsManager.ts +151 -0
- package/src/main/automations/GitLabCIManager.ts +206 -0
- package/src/main/automations/PriorityQueueManager.ts +328 -0
- package/src/main/background/BackgroundModeManager.ts +130 -0
- package/src/main/backup/BackupManager.ts +287 -0
- package/src/main/backup/MigrationManager.ts +132 -0
- package/src/main/commands/SlashCommandManager.ts +407 -0
- package/src/main/config/ClaudeMdParser.ts +539 -0
- package/src/main/config/CustomizationManager.ts +493 -0
- package/src/main/config/LaunchConfigManager.ts +212 -0
- package/src/main/config/SettingsManager.ts +163 -0
- package/src/main/connectors/ConnectorManager.ts +175 -0
- package/src/main/connectors/DatabaseConnector.ts +212 -0
- package/src/main/cowork/CoworkManager.ts +431 -0
- package/src/main/evals/AgentEvalFramework.ts +665 -0
- package/src/main/evals/GraderManager.ts +417 -0
- package/src/main/git/GitWorktreeManager.ts +211 -0
- package/src/main/github/GitHubPRMonitor.ts +317 -0
- package/src/main/ide/ContinueInManager.ts +180 -0
- package/src/main/ide/IDEIntegration.ts +288 -0
- package/src/main/integrations/LinearManager.ts +327 -0
- package/src/main/integrations/SlackBotManager.ts +312 -0
- package/src/main/lsp/LSPManager.ts +445 -0
- package/src/main/main.ts +1221 -0
- package/src/main/mcp/MCPConfigurationManager.ts +281 -0
- package/src/main/mcp/MCPManager.ts +799 -0
- package/src/main/mcp/MCPRegistry.ts +273 -0
- package/src/main/monitoring/ErrorRecoveryManager.ts +359 -0
- package/src/main/monitoring/ErrorTracker.ts +60 -0
- package/src/main/monitoring/MetricsCollector.ts +196 -0
- package/src/main/monitoring/TraceGradingSystem.ts +196 -0
- package/src/main/notifications/NotificationManager.ts +96 -0
- package/src/main/pair/AIPairProgramming.ts +290 -0
- package/src/main/plugins/PluginManager.ts +266 -0
- package/src/main/plugins/PluginMarketplace.ts +318 -0
- package/src/main/preload.ts +215 -0
- package/src/main/preview/PreviewSessionManager.ts +186 -0
- package/src/main/providers/AIProviderManager.ts +394 -0
- package/src/main/providers/FineTuningManager.ts +390 -0
- package/src/main/providers/FreeModelsProvider.ts +1156 -0
- package/src/main/realtime/RealtimeManager.ts +147 -0
- package/src/main/remote/CloudEnvironmentManager.ts +253 -0
- package/src/main/remote/RemoteSessionManager.ts +323 -0
- package/src/main/search/DeepResearchManager.ts +458 -0
- package/src/main/search/WebSearchIntegration.ts +203 -0
- package/src/main/security/AdminConsoleManager.ts +244 -0
- package/src/main/security/AuditLogger.ts +143 -0
- package/src/main/security/PermissionManager.ts +184 -0
- package/src/main/security/SSOManager.ts +241 -0
- package/src/main/security/SecurityManager.ts +139 -0
- package/src/main/skills/SkillsManager.ts +218 -0
- package/src/main/ssh/SSHManager.ts +86 -0
- package/src/main/streaming/StreamingManager.ts +306 -0
- package/src/main/sync/CloudSyncManager.ts +532 -0
- package/src/main/verification/AutoVerifyManager.ts +285 -0
- package/src/main/vision/ComputerUseManager.ts +475 -0
- package/src/main/vision/ImageVideoGenerationManager.ts +526 -0
- package/src/main/vision/VisionManager.ts +186 -0
- package/src/renderer/App.tsx +314 -0
- package/src/renderer/components/AdvancedSettingsPanel.tsx +225 -0
- package/src/renderer/components/AgentPanel.tsx +760 -0
- package/src/renderer/components/AppPreview.tsx +220 -0
- package/src/renderer/components/AuditTrailPanel.tsx +148 -0
- package/src/renderer/components/AutomationPanel.tsx +220 -0
- package/src/renderer/components/ChatInterface.tsx +595 -0
- package/src/renderer/components/ChatTab.tsx +296 -0
- package/src/renderer/components/CodeEditor.tsx +257 -0
- package/src/renderer/components/CodeReviewPanel.tsx +256 -0
- package/src/renderer/components/CodeWorkspace.tsx +192 -0
- package/src/renderer/components/CodebaseDashboard.tsx +295 -0
- package/src/renderer/components/ComputerUsePanel.tsx +262 -0
- package/src/renderer/components/ConnectorsPanel.tsx +471 -0
- package/src/renderer/components/ContextMenu.tsx +155 -0
- package/src/renderer/components/ContextUsageDisplay.tsx +248 -0
- package/src/renderer/components/CoworkPanel.tsx +415 -0
- package/src/renderer/components/DiffViewer.tsx +452 -0
- package/src/renderer/components/ErrorBoundary.tsx +273 -0
- package/src/renderer/components/ExtendedThinkingToggle.tsx +244 -0
- package/src/renderer/components/FileAttachments.tsx +247 -0
- package/src/renderer/components/FileExplorer.tsx +242 -0
- package/src/renderer/components/FileExplorerPanel.tsx +302 -0
- package/src/renderer/components/GitPanel.tsx +154 -0
- package/src/renderer/components/Header.tsx +113 -0
- package/src/renderer/components/MCPPanel.tsx +326 -0
- package/src/renderer/components/MentionAutocomplete.tsx +239 -0
- package/src/renderer/components/PermissionPanel.tsx +159 -0
- package/src/renderer/components/PermissionSelector.tsx +203 -0
- package/src/renderer/components/PluginMarketplace.tsx +325 -0
- package/src/renderer/components/PromptOptimizerPanel.tsx +399 -0
- package/src/renderer/components/SearchPanel.tsx +173 -0
- package/src/renderer/components/SearchReplace.tsx +284 -0
- package/src/renderer/components/SessionSidebar.tsx +367 -0
- package/src/renderer/components/SettingsPanel.tsx +426 -0
- package/src/renderer/components/Sidebar.tsx +100 -0
- package/src/renderer/components/SkillsPanel.tsx +245 -0
- package/src/renderer/components/SplitPane.tsx +173 -0
- package/src/renderer/components/Terminal.tsx +190 -0
- package/src/renderer/components/VoiceCommand.tsx +129 -0
- package/src/renderer/components/WorktreePanel.tsx +163 -0
- package/src/renderer/components/ui/AriaComponents.tsx +193 -0
- package/src/renderer/components/ui/Button.tsx +68 -0
- package/src/renderer/components/ui/Card.tsx +102 -0
- package/src/renderer/components/ui/Input.tsx +44 -0
- package/src/renderer/components/ui/Skeleton.tsx +55 -0
- package/src/renderer/components/ui/VirtualList.tsx +196 -0
- package/src/renderer/i18n/I18nProvider.tsx +101 -0
- package/src/renderer/i18n/de.ts +161 -0
- package/src/renderer/i18n/en.ts +163 -0
- package/src/renderer/i18n/es.ts +161 -0
- package/src/renderer/i18n/fr.ts +161 -0
- package/src/renderer/i18n/index.ts +44 -0
- package/src/renderer/index.css +129 -0
- package/src/renderer/lib/accessibility.tsx +287 -0
- package/src/renderer/lib/hooks.ts +304 -0
- package/src/renderer/lib/utils.ts +6 -0
- package/src/renderer/main.tsx +25 -0
- package/src/renderer/styles/minimalist.css +539 -0
- package/src/renderer/sw.ts +180 -0
- package/src/renderer/types.d.ts +138 -0
- package/src/shared/types.ts +813 -0
- package/supabase/schema.sql +234 -0
- package/tailwind.config.js +78 -0
- package/tests/e2e/package.json +15 -0
- package/tests/e2e/playwright.config.ts +31 -0
- package/tests/e2e/specs/app.spec.ts +194 -0
- package/tests/setup.ts +99 -0
- package/tests/unit/AgentOrchestrator.test.ts +274 -0
- package/tests/unit/DatabaseManager.test.ts +262 -0
- package/tests/unit/GitWorktreeManager.test.ts +150 -0
- package/tests/unit/SecurityManager.test.ts +110 -0
- package/tsconfig.main.json +22 -0
- package/tsconfig.renderer.json +27 -0
- package/vite.config.ts +28 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import React, { Component, ErrorInfo, ReactNode } from 'react';
|
|
2
|
+
import { AlertTriangle, RefreshCw, Home, Copy, ChevronDown, ChevronUp } from 'lucide-react';
|
|
3
|
+
import { Button } from './ui/Button';
|
|
4
|
+
|
|
5
|
+
interface ErrorBoundaryProps {
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
fallback?: ReactNode;
|
|
8
|
+
onError?: (error: Error, errorInfo: ErrorInfo) => void;
|
|
9
|
+
resetKeys?: unknown[];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface ErrorBoundaryState {
|
|
13
|
+
hasError: boolean;
|
|
14
|
+
error: Error | null;
|
|
15
|
+
errorInfo: ErrorInfo | null;
|
|
16
|
+
showDetails: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
|
|
20
|
+
constructor(props: ErrorBoundaryProps) {
|
|
21
|
+
super(props);
|
|
22
|
+
this.state = {
|
|
23
|
+
hasError: false,
|
|
24
|
+
error: null,
|
|
25
|
+
errorInfo: null,
|
|
26
|
+
showDetails: false,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {
|
|
31
|
+
return {
|
|
32
|
+
hasError: true,
|
|
33
|
+
error,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
componentDidCatch(error: Error, errorInfo: ErrorInfo): void {
|
|
38
|
+
this.setState({
|
|
39
|
+
error,
|
|
40
|
+
errorInfo,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
console.error('ErrorBoundary caught an error:', error, errorInfo);
|
|
44
|
+
|
|
45
|
+
if (this.props.onError) {
|
|
46
|
+
this.props.onError(error, errorInfo);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
componentDidUpdate(prevProps: ErrorBoundaryProps): void {
|
|
51
|
+
if (this.state.hasError && this.props.resetKeys) {
|
|
52
|
+
const hasResetKeyChanged = this.props.resetKeys.some(
|
|
53
|
+
(key, index) => key !== prevProps.resetKeys?.[index]
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
if (hasResetKeyChanged) {
|
|
57
|
+
this.reset();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
reset = (): void => {
|
|
63
|
+
this.setState({
|
|
64
|
+
hasError: false,
|
|
65
|
+
error: null,
|
|
66
|
+
errorInfo: null,
|
|
67
|
+
showDetails: false,
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
copyError = (): void => {
|
|
72
|
+
if (this.state.error) {
|
|
73
|
+
const errorText = `${this.state.error.message}\n\n${this.state.error.stack || ''}`;
|
|
74
|
+
navigator.clipboard.writeText(errorText);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
toggleDetails = (): void => {
|
|
79
|
+
this.setState((prev) => ({ showDetails: !prev.showDetails }));
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
render(): ReactNode {
|
|
83
|
+
if (this.state.hasError) {
|
|
84
|
+
if (this.props.fallback) {
|
|
85
|
+
return this.props.fallback;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return (
|
|
89
|
+
<div className="min-h-screen flex items-center justify-center bg-background p-4">
|
|
90
|
+
<div className="max-w-lg w-full bg-card border border-border rounded-lg p-6 shadow-lg">
|
|
91
|
+
<div className="flex items-center gap-3 mb-4">
|
|
92
|
+
<div className="p-3 bg-destructive/10 rounded-full">
|
|
93
|
+
<AlertTriangle className="w-8 h-8 text-destructive" />
|
|
94
|
+
</div>
|
|
95
|
+
<div>
|
|
96
|
+
<h1 className="text-xl font-semibold">Something went wrong</h1>
|
|
97
|
+
<p className="text-muted-foreground text-sm">
|
|
98
|
+
An unexpected error occurred
|
|
99
|
+
</p>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
{this.state.error && (
|
|
104
|
+
<div className="mb-4">
|
|
105
|
+
<p className="text-sm font-medium mb-2">
|
|
106
|
+
{this.state.error.message}
|
|
107
|
+
</p>
|
|
108
|
+
|
|
109
|
+
<Button
|
|
110
|
+
variant="ghost"
|
|
111
|
+
size="sm"
|
|
112
|
+
onClick={this.toggleDetails}
|
|
113
|
+
className="flex items-center gap-2 text-muted-foreground"
|
|
114
|
+
>
|
|
115
|
+
{this.state.showDetails ? (
|
|
116
|
+
<>
|
|
117
|
+
<ChevronUp className="w-4 h-4" />
|
|
118
|
+
Hide details
|
|
119
|
+
</>
|
|
120
|
+
) : (
|
|
121
|
+
<>
|
|
122
|
+
<ChevronDown className="w-4 h-4" />
|
|
123
|
+
Show details
|
|
124
|
+
</>
|
|
125
|
+
)}
|
|
126
|
+
</Button>
|
|
127
|
+
|
|
128
|
+
{this.state.showDetails && this.state.errorInfo && (
|
|
129
|
+
<pre className="mt-3 p-3 bg-muted rounded-md text-xs overflow-auto max-h-48">
|
|
130
|
+
<code>{this.state.errorInfo.componentStack || this.state.error.stack}</code>
|
|
131
|
+
</pre>
|
|
132
|
+
)}
|
|
133
|
+
</div>
|
|
134
|
+
)}
|
|
135
|
+
|
|
136
|
+
<div className="flex gap-3">
|
|
137
|
+
<Button onClick={this.reset} className="flex-1">
|
|
138
|
+
<RefreshCw className="w-4 h-4 mr-2" />
|
|
139
|
+
Try again
|
|
140
|
+
</Button>
|
|
141
|
+
<Button variant="outline" onClick={() => window.location.href = '/'}>
|
|
142
|
+
<Home className="w-4 h-4 mr-2" />
|
|
143
|
+
Go home
|
|
144
|
+
</Button>
|
|
145
|
+
<Button variant="ghost" size="icon" onClick={this.copyError} title="Copy error">
|
|
146
|
+
<Copy className="w-4 h-4" />
|
|
147
|
+
</Button>
|
|
148
|
+
</div>
|
|
149
|
+
|
|
150
|
+
<p className="mt-4 text-xs text-muted-foreground text-center">
|
|
151
|
+
If this problem persists, please{' '}
|
|
152
|
+
<a
|
|
153
|
+
href="https://github.com/codex-linux/codex-linux/issues"
|
|
154
|
+
target="_blank"
|
|
155
|
+
rel="noopener noreferrer"
|
|
156
|
+
className="underline hover:text-foreground"
|
|
157
|
+
>
|
|
158
|
+
report an issue
|
|
159
|
+
</a>
|
|
160
|
+
</p>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return this.props.children;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
interface AsyncErrorBoundaryProps {
|
|
171
|
+
children: ReactNode;
|
|
172
|
+
fallback?: ReactNode;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
interface AsyncErrorBoundaryState {
|
|
176
|
+
hasError: boolean;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export class AsyncErrorBoundary extends Component<
|
|
180
|
+
AsyncErrorBoundaryProps,
|
|
181
|
+
AsyncErrorBoundaryState
|
|
182
|
+
> {
|
|
183
|
+
constructor(props: AsyncErrorBoundaryProps) {
|
|
184
|
+
super(props);
|
|
185
|
+
this.state = { hasError: false };
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
static getDerivedStateFromError(): AsyncErrorBoundaryState {
|
|
189
|
+
return { hasError: true };
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
render(): ReactNode {
|
|
193
|
+
if (this.state.hasError) {
|
|
194
|
+
return (
|
|
195
|
+
this.props.fallback || (
|
|
196
|
+
<div className="p-4 border border-destructive rounded-md bg-destructive/10">
|
|
197
|
+
<div className="flex items-center gap-2 text-destructive">
|
|
198
|
+
<AlertTriangle className="w-5 h-5" />
|
|
199
|
+
<span>Failed to load content</span>
|
|
200
|
+
</div>
|
|
201
|
+
<Button
|
|
202
|
+
variant="outline"
|
|
203
|
+
size="sm"
|
|
204
|
+
onClick={() => this.setState({ hasError: false })}
|
|
205
|
+
className="mt-2"
|
|
206
|
+
>
|
|
207
|
+
Retry
|
|
208
|
+
</Button>
|
|
209
|
+
</div>
|
|
210
|
+
)
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return this.props.children;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
interface PanelErrorBoundaryProps {
|
|
219
|
+
children: ReactNode;
|
|
220
|
+
title?: string;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export class PanelErrorBoundary extends Component<
|
|
224
|
+
PanelErrorBoundaryProps,
|
|
225
|
+
ErrorBoundaryState
|
|
226
|
+
> {
|
|
227
|
+
constructor(props: PanelErrorBoundaryProps) {
|
|
228
|
+
super(props);
|
|
229
|
+
this.state = {
|
|
230
|
+
hasError: false,
|
|
231
|
+
error: null,
|
|
232
|
+
errorInfo: null,
|
|
233
|
+
showDetails: false,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {
|
|
238
|
+
return { hasError: true, error };
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
render(): ReactNode {
|
|
242
|
+
if (this.state.hasError) {
|
|
243
|
+
return (
|
|
244
|
+
<div className="p-4 border border-destructive/30 rounded-md bg-destructive/5">
|
|
245
|
+
<div className="flex items-center justify-between mb-2">
|
|
246
|
+
<div className="flex items-center gap-2 text-destructive">
|
|
247
|
+
<AlertTriangle className="w-4 h-4" />
|
|
248
|
+
<span className="font-medium">
|
|
249
|
+
{this.props.title || 'Panel Error'}
|
|
250
|
+
</span>
|
|
251
|
+
</div>
|
|
252
|
+
<Button
|
|
253
|
+
variant="ghost"
|
|
254
|
+
size="sm"
|
|
255
|
+
onClick={() =>
|
|
256
|
+
this.setState({ hasError: false, error: null, errorInfo: null })
|
|
257
|
+
}
|
|
258
|
+
>
|
|
259
|
+
<RefreshCw className="w-3 h-3" />
|
|
260
|
+
</Button>
|
|
261
|
+
</div>
|
|
262
|
+
<p className="text-sm text-muted-foreground">
|
|
263
|
+
{this.state.error?.message || 'An error occurred in this panel'}
|
|
264
|
+
</p>
|
|
265
|
+
</div>
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
return this.props.children;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
export default ErrorBoundary;
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Brain, Info, AlertTriangle, Zap, Gauge } from 'lucide-react';
|
|
3
|
+
import { ExtendedThinkingConfig } from '../../shared/types';
|
|
4
|
+
|
|
5
|
+
interface ExtendedThinkingToggleProps {
|
|
6
|
+
config: ExtendedThinkingConfig;
|
|
7
|
+
onChange: (config: ExtendedThinkingConfig) => void;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
model?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const ExtendedThinkingToggle: React.FC<ExtendedThinkingToggleProps> = ({
|
|
13
|
+
config,
|
|
14
|
+
onChange,
|
|
15
|
+
disabled = false,
|
|
16
|
+
model = ''
|
|
17
|
+
}) => {
|
|
18
|
+
const [showDetails, setShowDetails] = useState(false);
|
|
19
|
+
|
|
20
|
+
const handleToggle = () => {
|
|
21
|
+
onChange({
|
|
22
|
+
...config,
|
|
23
|
+
enabled: !config.enabled
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const handleMaxTokensChange = (value: number) => {
|
|
28
|
+
onChange({
|
|
29
|
+
...config,
|
|
30
|
+
maxTokens: Math.max(0, Math.min(32000, value))
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const handleReasoningEffortChange = (effort: 'low' | 'medium' | 'high') => {
|
|
35
|
+
onChange({
|
|
36
|
+
...config,
|
|
37
|
+
reasoningEffort: effort
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// Check if model supports extended thinking
|
|
42
|
+
const supportsExtendedThinking = model.startsWith('o1') || model.includes('opus');
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div className="space-y-3">
|
|
46
|
+
<div className="flex items-center justify-between">
|
|
47
|
+
<div className="flex items-center gap-2">
|
|
48
|
+
<Brain className="w-4 h-4 text-purple-500" />
|
|
49
|
+
<span className="font-medium">Extended Thinking</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<button
|
|
53
|
+
onClick={handleToggle}
|
|
54
|
+
disabled={disabled || !supportsExtendedThinking}
|
|
55
|
+
className={`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${
|
|
56
|
+
config.enabled ? 'bg-purple-500' : 'bg-muted'
|
|
57
|
+
} ${disabled || !supportsExtendedThinking ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}
|
|
58
|
+
>
|
|
59
|
+
<span
|
|
60
|
+
className={`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${
|
|
61
|
+
config.enabled ? 'translate-x-6' : 'translate-x-1'
|
|
62
|
+
}`}
|
|
63
|
+
/>
|
|
64
|
+
</button>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<p className="text-xs text-muted-foreground">
|
|
68
|
+
Improves performance on complex reasoning tasks by using additional tokens for thinking.
|
|
69
|
+
</p>
|
|
70
|
+
|
|
71
|
+
{!supportsExtendedThinking && (
|
|
72
|
+
<div className="flex items-start gap-2 text-xs text-yellow-600 bg-yellow-500/10 p-2 rounded">
|
|
73
|
+
<AlertTriangle className="w-3.5 h-3.5 flex-shrink-0 mt-0.5" />
|
|
74
|
+
<span>
|
|
75
|
+
Extended thinking is only available with o1 and Claude 3 Opus models.
|
|
76
|
+
</span>
|
|
77
|
+
</div>
|
|
78
|
+
)}
|
|
79
|
+
|
|
80
|
+
{config.enabled && supportsExtendedThinking && (
|
|
81
|
+
<div className="space-y-3 p-3 bg-purple-500/5 border border-purple-500/20 rounded-lg">
|
|
82
|
+
{/* Reasoning Effort Selector */}
|
|
83
|
+
<div>
|
|
84
|
+
<label className="text-xs font-medium mb-2 block">Reasoning Effort</label>
|
|
85
|
+
<div className="grid grid-cols-3 gap-2">
|
|
86
|
+
<button
|
|
87
|
+
onClick={() => handleReasoningEffortChange('low')}
|
|
88
|
+
className={`flex items-center justify-center gap-1 px-2 py-1.5 text-xs rounded transition-colors ${
|
|
89
|
+
config.reasoningEffort === 'low'
|
|
90
|
+
? 'bg-purple-500 text-white'
|
|
91
|
+
: 'bg-muted hover:bg-muted/80'
|
|
92
|
+
}`}
|
|
93
|
+
>
|
|
94
|
+
<Zap className="w-3 h-3" />
|
|
95
|
+
Low
|
|
96
|
+
</button>
|
|
97
|
+
<button
|
|
98
|
+
onClick={() => handleReasoningEffortChange('medium')}
|
|
99
|
+
className={`flex items-center justify-center gap-1 px-2 py-1.5 text-xs rounded transition-colors ${
|
|
100
|
+
config.reasoningEffort === 'medium'
|
|
101
|
+
? 'bg-purple-500 text-white'
|
|
102
|
+
: 'bg-muted hover:bg-muted/80'
|
|
103
|
+
}`}
|
|
104
|
+
>
|
|
105
|
+
<Gauge className="w-3 h-3" />
|
|
106
|
+
Medium
|
|
107
|
+
</button>
|
|
108
|
+
<button
|
|
109
|
+
onClick={() => handleReasoningEffortChange('high')}
|
|
110
|
+
className={`flex items-center justify-center gap-1 px-2 py-1.5 text-xs rounded transition-colors ${
|
|
111
|
+
config.reasoningEffort === 'high'
|
|
112
|
+
? 'bg-purple-500 text-white'
|
|
113
|
+
: 'bg-muted hover:bg-muted/80'
|
|
114
|
+
}`}
|
|
115
|
+
>
|
|
116
|
+
<Brain className="w-3 h-3" />
|
|
117
|
+
High
|
|
118
|
+
</button>
|
|
119
|
+
</div>
|
|
120
|
+
<p className="text-xs text-muted-foreground mt-1">
|
|
121
|
+
{config.reasoningEffort === 'low' && 'Minimal thinking, faster responses'}
|
|
122
|
+
{config.reasoningEffort === 'medium' && 'Balanced thinking for most tasks'}
|
|
123
|
+
{config.reasoningEffort === 'high' && 'Deep reasoning for complex problems'}
|
|
124
|
+
</p>
|
|
125
|
+
</div>
|
|
126
|
+
|
|
127
|
+
<div>
|
|
128
|
+
<div className="flex items-center justify-between mb-1">
|
|
129
|
+
<label className="text-xs font-medium">Max Thinking Tokens</label>
|
|
130
|
+
<span className="text-xs text-muted-foreground">{config.maxTokens}</span>
|
|
131
|
+
</div>
|
|
132
|
+
<input
|
|
133
|
+
type="range"
|
|
134
|
+
min="0"
|
|
135
|
+
max="32000"
|
|
136
|
+
step="1000"
|
|
137
|
+
value={config.maxTokens}
|
|
138
|
+
onChange={e => handleMaxTokensChange(parseInt(e.target.value))}
|
|
139
|
+
disabled={disabled}
|
|
140
|
+
className="w-full h-2 bg-muted rounded-lg appearance-none cursor-pointer accent-purple-500"
|
|
141
|
+
/>
|
|
142
|
+
<div className="flex justify-between text-xs text-muted-foreground mt-1">
|
|
143
|
+
<span>0 (disabled)</span>
|
|
144
|
+
<span>16000</span>
|
|
145
|
+
<span>32000</span>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
|
|
149
|
+
<div className="flex items-start gap-2 text-xs text-yellow-600 bg-yellow-500/10 p-2 rounded">
|
|
150
|
+
<AlertTriangle className="w-3.5 h-3.5 flex-shrink-0 mt-0.5" />
|
|
151
|
+
<span>
|
|
152
|
+
Extended thinking uses additional tokens and may increase costs.
|
|
153
|
+
Set to 0 to disable thinking entirely.
|
|
154
|
+
</span>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
)}
|
|
158
|
+
|
|
159
|
+
<button
|
|
160
|
+
onClick={() => setShowDetails(!showDetails)}
|
|
161
|
+
className="flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground"
|
|
162
|
+
>
|
|
163
|
+
<Info className="w-3 h-3" />
|
|
164
|
+
{showDetails ? 'Hide details' : 'Learn more'}
|
|
165
|
+
</button>
|
|
166
|
+
|
|
167
|
+
{showDetails && (
|
|
168
|
+
<div className="text-xs text-muted-foreground space-y-2 bg-muted/50 p-3 rounded-lg">
|
|
169
|
+
<p>
|
|
170
|
+
<strong>How it works:</strong> When enabled, the model uses a portion of your token budget
|
|
171
|
+
to "think" through complex problems before responding. This improves accuracy on tasks
|
|
172
|
+
requiring multi-step reasoning, math, or logic.
|
|
173
|
+
</p>
|
|
174
|
+
<p>
|
|
175
|
+
<strong>Reasoning Effort:</strong> Controls how deeply the model thinks before responding.
|
|
176
|
+
Low = faster responses, High = deeper analysis.
|
|
177
|
+
</p>
|
|
178
|
+
<p>
|
|
179
|
+
<strong>Cost:</strong> Thinking tokens count toward your input token usage and pricing.
|
|
180
|
+
Disable by setting max tokens to 0.
|
|
181
|
+
</p>
|
|
182
|
+
</div>
|
|
183
|
+
)}
|
|
184
|
+
</div>
|
|
185
|
+
);
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
// Component to display reasoning tokens in messages
|
|
189
|
+
interface ReasoningDisplayProps {
|
|
190
|
+
reasoning?: string;
|
|
191
|
+
tokens?: number;
|
|
192
|
+
effort?: 'low' | 'medium' | 'high';
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export const ReasoningDisplay: React.FC<ReasoningDisplayProps> = ({
|
|
196
|
+
reasoning,
|
|
197
|
+
tokens,
|
|
198
|
+
effort
|
|
199
|
+
}) => {
|
|
200
|
+
const [isExpanded, setIsExpanded] = useState(false);
|
|
201
|
+
|
|
202
|
+
if (!reasoning && !tokens) return null;
|
|
203
|
+
|
|
204
|
+
return (
|
|
205
|
+
<div className="mt-2 p-2 bg-purple-500/5 border border-purple-500/20 rounded-lg">
|
|
206
|
+
<button
|
|
207
|
+
onClick={() => setIsExpanded(!isExpanded)}
|
|
208
|
+
className="flex items-center justify-between w-full text-left"
|
|
209
|
+
>
|
|
210
|
+
<div className="flex items-center gap-2">
|
|
211
|
+
<Brain className="w-3.5 h-3.5 text-purple-500" />
|
|
212
|
+
<span className="text-xs font-medium text-purple-700 dark:text-purple-300">
|
|
213
|
+
Reasoning Process
|
|
214
|
+
</span>
|
|
215
|
+
{effort && (
|
|
216
|
+
<span className="text-xs px-1.5 py-0.5 bg-purple-500/10 rounded text-purple-600 dark:text-purple-400 capitalize">
|
|
217
|
+
{effort}
|
|
218
|
+
</span>
|
|
219
|
+
)}
|
|
220
|
+
</div>
|
|
221
|
+
<div className="flex items-center gap-2">
|
|
222
|
+
{tokens && (
|
|
223
|
+
<span className="text-xs text-muted-foreground">
|
|
224
|
+
{tokens.toLocaleString()} tokens
|
|
225
|
+
</span>
|
|
226
|
+
)}
|
|
227
|
+
<span className="text-xs text-muted-foreground">
|
|
228
|
+
{isExpanded ? '▼' : '▶'}
|
|
229
|
+
</span>
|
|
230
|
+
</div>
|
|
231
|
+
</button>
|
|
232
|
+
|
|
233
|
+
{isExpanded && reasoning && (
|
|
234
|
+
<div className="mt-2 pt-2 border-t border-purple-500/10">
|
|
235
|
+
<pre className="text-xs text-muted-foreground whitespace-pre-wrap font-mono bg-muted/50 p-2 rounded">
|
|
236
|
+
{reasoning}
|
|
237
|
+
</pre>
|
|
238
|
+
</div>
|
|
239
|
+
)}
|
|
240
|
+
</div>
|
|
241
|
+
);
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
export default ExtendedThinkingToggle;
|