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.
Files changed (367) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/.eslintrc.json +27 -0
  3. package/.github/workflows/ci.yml +156 -0
  4. package/.huskyrc +7 -0
  5. package/.lintstagedrc +13 -0
  6. package/.prettierrc +12 -0
  7. package/CLAUDE.md +163 -0
  8. package/DESIGN_SUPERIOR.md +73 -0
  9. package/Dockerfile +64 -0
  10. package/INSTALLATION.md +152 -0
  11. package/LICENSE +21 -0
  12. package/README.md +245 -0
  13. package/assets/skills/code-review/instructions.md +102 -0
  14. package/assets/skills/code-review/skill.yaml +15 -0
  15. package/assets/skills/refactoring/instructions.md +149 -0
  16. package/assets/skills/refactoring/skill.yaml +15 -0
  17. package/assets/skills/testing/skill.yaml +15 -0
  18. package/commitlint.config.js +23 -0
  19. package/dist/main/DatabaseManager.js +763 -0
  20. package/dist/main/DatabaseManager.js.map +1 -0
  21. package/dist/main/SettingsManager.js +61 -0
  22. package/dist/main/SettingsManager.js.map +1 -0
  23. package/dist/main/agents/AgentOrchestrator.js +787 -0
  24. package/dist/main/agents/AgentOrchestrator.js.map +1 -0
  25. package/dist/main/agents/AgentSDK.js +219 -0
  26. package/dist/main/agents/AgentSDK.js.map +1 -0
  27. package/dist/main/agents/AgentTools.js +348 -0
  28. package/dist/main/agents/AgentTools.js.map +1 -0
  29. package/dist/main/agents/CodeIndex.js +233 -0
  30. package/dist/main/agents/CodeIndex.js.map +1 -0
  31. package/dist/main/agents/EmbeddingService.js +80 -0
  32. package/dist/main/agents/EmbeddingService.js.map +1 -0
  33. package/dist/main/agents/NativeToolCalling.js +206 -0
  34. package/dist/main/agents/NativeToolCalling.js.map +1 -0
  35. package/dist/main/api/APIServer.js +278 -0
  36. package/dist/main/api/APIServer.js.map +1 -0
  37. package/dist/main/api/RateLimiter.js +138 -0
  38. package/dist/main/api/RateLimiter.js.map +1 -0
  39. package/dist/main/api/WebSocketManager.js +300 -0
  40. package/dist/main/api/WebSocketManager.js.map +1 -0
  41. package/dist/main/assistant/ContextOptimizer.js +192 -0
  42. package/dist/main/assistant/ContextOptimizer.js.map +1 -0
  43. package/dist/main/assistant/PredictedOutputManager.js +172 -0
  44. package/dist/main/assistant/PredictedOutputManager.js.map +1 -0
  45. package/dist/main/assistant/PromptCacheManager.js +193 -0
  46. package/dist/main/assistant/PromptCacheManager.js.map +1 -0
  47. package/dist/main/assistant/PromptOptimizer.js +626 -0
  48. package/dist/main/assistant/PromptOptimizer.js.map +1 -0
  49. package/dist/main/assistant/SmartCodeAssistant.js +224 -0
  50. package/dist/main/assistant/SmartCodeAssistant.js.map +1 -0
  51. package/dist/main/auth/SessionManager.js +300 -0
  52. package/dist/main/auth/SessionManager.js.map +1 -0
  53. package/dist/main/automations/AdvancedWebhookSystem.js +212 -0
  54. package/dist/main/automations/AdvancedWebhookSystem.js.map +1 -0
  55. package/dist/main/automations/AutomationScheduler.js +269 -0
  56. package/dist/main/automations/AutomationScheduler.js.map +1 -0
  57. package/dist/main/automations/BatchProcessingSystem.js +159 -0
  58. package/dist/main/automations/BatchProcessingSystem.js.map +1 -0
  59. package/dist/main/automations/BrowserAutomationManager.js +195 -0
  60. package/dist/main/automations/BrowserAutomationManager.js.map +1 -0
  61. package/dist/main/automations/GitHubActionsManager.js +129 -0
  62. package/dist/main/automations/GitHubActionsManager.js.map +1 -0
  63. package/dist/main/automations/GitLabCIManager.js +122 -0
  64. package/dist/main/automations/GitLabCIManager.js.map +1 -0
  65. package/dist/main/automations/PriorityQueueManager.js +240 -0
  66. package/dist/main/automations/PriorityQueueManager.js.map +1 -0
  67. package/dist/main/background/BackgroundModeManager.js +117 -0
  68. package/dist/main/background/BackgroundModeManager.js.map +1 -0
  69. package/dist/main/backup/BackupManager.js +254 -0
  70. package/dist/main/backup/BackupManager.js.map +1 -0
  71. package/dist/main/backup/MigrationManager.js +114 -0
  72. package/dist/main/backup/MigrationManager.js.map +1 -0
  73. package/dist/main/commands/SlashCommandManager.js +399 -0
  74. package/dist/main/commands/SlashCommandManager.js.map +1 -0
  75. package/dist/main/config/ClaudeMdParser.js +519 -0
  76. package/dist/main/config/ClaudeMdParser.js.map +1 -0
  77. package/dist/main/config/CustomizationManager.js +381 -0
  78. package/dist/main/config/CustomizationManager.js.map +1 -0
  79. package/dist/main/config/LaunchConfigManager.js +211 -0
  80. package/dist/main/config/LaunchConfigManager.js.map +1 -0
  81. package/dist/main/config/SettingsManager.js +166 -0
  82. package/dist/main/config/SettingsManager.js.map +1 -0
  83. package/dist/main/connectors/ConnectorManager.js +151 -0
  84. package/dist/main/connectors/ConnectorManager.js.map +1 -0
  85. package/dist/main/connectors/DatabaseConnector.js +222 -0
  86. package/dist/main/connectors/DatabaseConnector.js.map +1 -0
  87. package/dist/main/cowork/CoworkManager.js +324 -0
  88. package/dist/main/cowork/CoworkManager.js.map +1 -0
  89. package/dist/main/evals/AgentEvalFramework.js +538 -0
  90. package/dist/main/evals/AgentEvalFramework.js.map +1 -0
  91. package/dist/main/evals/GraderManager.js +285 -0
  92. package/dist/main/evals/GraderManager.js.map +1 -0
  93. package/dist/main/git/GitWorktreeManager.js +214 -0
  94. package/dist/main/git/GitWorktreeManager.js.map +1 -0
  95. package/dist/main/github/GitHubPRMonitor.js +244 -0
  96. package/dist/main/github/GitHubPRMonitor.js.map +1 -0
  97. package/dist/main/ide/ContinueInManager.js +181 -0
  98. package/dist/main/ide/ContinueInManager.js.map +1 -0
  99. package/dist/main/ide/IDEIntegration.js +277 -0
  100. package/dist/main/ide/IDEIntegration.js.map +1 -0
  101. package/dist/main/integrations/LinearManager.js +252 -0
  102. package/dist/main/integrations/LinearManager.js.map +1 -0
  103. package/dist/main/integrations/SlackBotManager.js +247 -0
  104. package/dist/main/integrations/SlackBotManager.js.map +1 -0
  105. package/dist/main/lsp/LSPManager.js +394 -0
  106. package/dist/main/lsp/LSPManager.js.map +1 -0
  107. package/dist/main/main.js +1087 -0
  108. package/dist/main/main.js.map +1 -0
  109. package/dist/main/mcp/MCPConfigurationManager.js +281 -0
  110. package/dist/main/mcp/MCPConfigurationManager.js.map +1 -0
  111. package/dist/main/mcp/MCPManager.js +710 -0
  112. package/dist/main/mcp/MCPManager.js.map +1 -0
  113. package/dist/main/mcp/MCPRegistry.js +272 -0
  114. package/dist/main/mcp/MCPRegistry.js.map +1 -0
  115. package/dist/main/monitoring/ErrorRecoveryManager.js +268 -0
  116. package/dist/main/monitoring/ErrorRecoveryManager.js.map +1 -0
  117. package/dist/main/monitoring/ErrorTracker.js +57 -0
  118. package/dist/main/monitoring/ErrorTracker.js.map +1 -0
  119. package/dist/main/monitoring/MetricsCollector.js +155 -0
  120. package/dist/main/monitoring/MetricsCollector.js.map +1 -0
  121. package/dist/main/monitoring/TraceGradingSystem.js +148 -0
  122. package/dist/main/monitoring/TraceGradingSystem.js.map +1 -0
  123. package/dist/main/notifications/NotificationManager.js +67 -0
  124. package/dist/main/notifications/NotificationManager.js.map +1 -0
  125. package/dist/main/pair/AIPairProgramming.js +200 -0
  126. package/dist/main/pair/AIPairProgramming.js.map +1 -0
  127. package/dist/main/plugins/PluginManager.js +222 -0
  128. package/dist/main/plugins/PluginManager.js.map +1 -0
  129. package/dist/main/plugins/PluginMarketplace.js +237 -0
  130. package/dist/main/plugins/PluginMarketplace.js.map +1 -0
  131. package/dist/main/preload.js +189 -0
  132. package/dist/main/preload.js.map +1 -0
  133. package/dist/main/preview/PreviewSessionManager.js +170 -0
  134. package/dist/main/preview/PreviewSessionManager.js.map +1 -0
  135. package/dist/main/providers/AIProviderManager.js +327 -0
  136. package/dist/main/providers/AIProviderManager.js.map +1 -0
  137. package/dist/main/providers/FineTuningManager.js +276 -0
  138. package/dist/main/providers/FineTuningManager.js.map +1 -0
  139. package/dist/main/providers/FreeModelsProvider.js +1104 -0
  140. package/dist/main/providers/FreeModelsProvider.js.map +1 -0
  141. package/dist/main/realtime/RealtimeManager.js +116 -0
  142. package/dist/main/realtime/RealtimeManager.js.map +1 -0
  143. package/dist/main/remote/CloudEnvironmentManager.js +232 -0
  144. package/dist/main/remote/CloudEnvironmentManager.js.map +1 -0
  145. package/dist/main/remote/RemoteSessionManager.js +255 -0
  146. package/dist/main/remote/RemoteSessionManager.js.map +1 -0
  147. package/dist/main/search/DeepResearchManager.js +335 -0
  148. package/dist/main/search/DeepResearchManager.js.map +1 -0
  149. package/dist/main/search/WebSearchIntegration.js +147 -0
  150. package/dist/main/search/WebSearchIntegration.js.map +1 -0
  151. package/dist/main/security/AdminConsoleManager.js +223 -0
  152. package/dist/main/security/AdminConsoleManager.js.map +1 -0
  153. package/dist/main/security/AuditLogger.js +136 -0
  154. package/dist/main/security/AuditLogger.js.map +1 -0
  155. package/dist/main/security/PermissionManager.js +144 -0
  156. package/dist/main/security/PermissionManager.js.map +1 -0
  157. package/dist/main/security/SSOManager.js +173 -0
  158. package/dist/main/security/SSOManager.js.map +1 -0
  159. package/dist/main/security/SecurityManager.js +152 -0
  160. package/dist/main/security/SecurityManager.js.map +1 -0
  161. package/dist/main/skills/SkillsManager.js +223 -0
  162. package/dist/main/skills/SkillsManager.js.map +1 -0
  163. package/dist/main/ssh/SSHManager.js +65 -0
  164. package/dist/main/ssh/SSHManager.js.map +1 -0
  165. package/dist/main/streaming/StreamingManager.js +225 -0
  166. package/dist/main/streaming/StreamingManager.js.map +1 -0
  167. package/dist/main/sync/CloudSyncManager.js +422 -0
  168. package/dist/main/sync/CloudSyncManager.js.map +1 -0
  169. package/dist/main/types.js +28 -0
  170. package/dist/main/types.js.map +1 -0
  171. package/dist/main/verification/AutoVerifyManager.js +235 -0
  172. package/dist/main/verification/AutoVerifyManager.js.map +1 -0
  173. package/dist/main/vision/ComputerUseManager.js +376 -0
  174. package/dist/main/vision/ComputerUseManager.js.map +1 -0
  175. package/dist/main/vision/ImageVideoGenerationManager.js +401 -0
  176. package/dist/main/vision/ImageVideoGenerationManager.js.map +1 -0
  177. package/dist/main/vision/VisionManager.js +172 -0
  178. package/dist/main/vision/VisionManager.js.map +1 -0
  179. package/dist/renderer/assets/main-DJlZQBCA.js +304 -0
  180. package/dist/renderer/assets/main-N33ZXEr8.css +1 -0
  181. package/dist/renderer/index.html +21 -0
  182. package/dist/renderer/manifest.json +42 -0
  183. package/dist/renderer/sw.ts +109 -0
  184. package/dist/shared/types.js +35 -0
  185. package/dist/shared/types.js.map +1 -0
  186. package/docker-compose.yml +65 -0
  187. package/docs/API.md +307 -0
  188. package/docs/USER_GUIDE.md +476 -0
  189. package/examples/plugins/sample-plugin/package.json +41 -0
  190. package/examples/plugins/sample-plugin/src/index.ts +75 -0
  191. package/index.html +20 -0
  192. package/jest.config.js +39 -0
  193. package/package.json +180 -0
  194. package/packages/cli/package.json +29 -0
  195. package/packages/cli/src/commands/agents.ts +199 -0
  196. package/packages/cli/src/commands/tasks.ts +61 -0
  197. package/packages/cli/src/index.ts +91 -0
  198. package/packages/cli/src/utils/api.ts +45 -0
  199. package/packages/cli/src/utils/config.ts +61 -0
  200. package/packages/npm-installer/bin/codex-linux +126 -0
  201. package/packages/npm-installer/lib/download.js +273 -0
  202. package/packages/npm-installer/package.json +42 -0
  203. package/packages/vscode-extension/package.json +167 -0
  204. package/packages/vscode-extension/src/api.ts +68 -0
  205. package/packages/vscode-extension/src/extension.ts +161 -0
  206. package/packages/vscode-extension/src/panels/chatPanel.ts +265 -0
  207. package/packages/vscode-extension/src/panels/createAgentPanel.ts +227 -0
  208. package/packages/vscode-extension/src/providers/agentsProvider.ts +80 -0
  209. package/postcss.config.js +6 -0
  210. package/public/manifest.json +42 -0
  211. package/public/sw.ts +109 -0
  212. package/scripts/install-dev.sh +103 -0
  213. package/scripts/install.sh +275 -0
  214. package/src/main/DatabaseManager.ts +950 -0
  215. package/src/main/SettingsManager.ts +63 -0
  216. package/src/main/agents/AgentOrchestrator.ts +930 -0
  217. package/src/main/agents/AgentSDK.ts +269 -0
  218. package/src/main/agents/AgentTools.ts +380 -0
  219. package/src/main/agents/CodeIndex.ts +240 -0
  220. package/src/main/agents/EmbeddingService.ts +88 -0
  221. package/src/main/agents/NativeToolCalling.ts +245 -0
  222. package/src/main/api/APIServer.ts +316 -0
  223. package/src/main/api/RateLimiter.ts +165 -0
  224. package/src/main/api/WebSocketManager.ts +398 -0
  225. package/src/main/assistant/ContextOptimizer.ts +214 -0
  226. package/src/main/assistant/PredictedOutputManager.ts +265 -0
  227. package/src/main/assistant/PromptCacheManager.ts +280 -0
  228. package/src/main/assistant/PromptOptimizer.ts +746 -0
  229. package/src/main/assistant/SmartCodeAssistant.ts +234 -0
  230. package/src/main/auth/SessionManager.ts +415 -0
  231. package/src/main/automations/AdvancedWebhookSystem.ts +281 -0
  232. package/src/main/automations/AutomationScheduler.ts +272 -0
  233. package/src/main/automations/BatchProcessingSystem.ts +207 -0
  234. package/src/main/automations/BrowserAutomationManager.ts +203 -0
  235. package/src/main/automations/GitHubActionsManager.ts +151 -0
  236. package/src/main/automations/GitLabCIManager.ts +206 -0
  237. package/src/main/automations/PriorityQueueManager.ts +328 -0
  238. package/src/main/background/BackgroundModeManager.ts +130 -0
  239. package/src/main/backup/BackupManager.ts +287 -0
  240. package/src/main/backup/MigrationManager.ts +132 -0
  241. package/src/main/commands/SlashCommandManager.ts +407 -0
  242. package/src/main/config/ClaudeMdParser.ts +539 -0
  243. package/src/main/config/CustomizationManager.ts +493 -0
  244. package/src/main/config/LaunchConfigManager.ts +212 -0
  245. package/src/main/config/SettingsManager.ts +163 -0
  246. package/src/main/connectors/ConnectorManager.ts +175 -0
  247. package/src/main/connectors/DatabaseConnector.ts +212 -0
  248. package/src/main/cowork/CoworkManager.ts +431 -0
  249. package/src/main/evals/AgentEvalFramework.ts +665 -0
  250. package/src/main/evals/GraderManager.ts +417 -0
  251. package/src/main/git/GitWorktreeManager.ts +211 -0
  252. package/src/main/github/GitHubPRMonitor.ts +317 -0
  253. package/src/main/ide/ContinueInManager.ts +180 -0
  254. package/src/main/ide/IDEIntegration.ts +288 -0
  255. package/src/main/integrations/LinearManager.ts +327 -0
  256. package/src/main/integrations/SlackBotManager.ts +312 -0
  257. package/src/main/lsp/LSPManager.ts +445 -0
  258. package/src/main/main.ts +1221 -0
  259. package/src/main/mcp/MCPConfigurationManager.ts +281 -0
  260. package/src/main/mcp/MCPManager.ts +799 -0
  261. package/src/main/mcp/MCPRegistry.ts +273 -0
  262. package/src/main/monitoring/ErrorRecoveryManager.ts +359 -0
  263. package/src/main/monitoring/ErrorTracker.ts +60 -0
  264. package/src/main/monitoring/MetricsCollector.ts +196 -0
  265. package/src/main/monitoring/TraceGradingSystem.ts +196 -0
  266. package/src/main/notifications/NotificationManager.ts +96 -0
  267. package/src/main/pair/AIPairProgramming.ts +290 -0
  268. package/src/main/plugins/PluginManager.ts +266 -0
  269. package/src/main/plugins/PluginMarketplace.ts +318 -0
  270. package/src/main/preload.ts +215 -0
  271. package/src/main/preview/PreviewSessionManager.ts +186 -0
  272. package/src/main/providers/AIProviderManager.ts +394 -0
  273. package/src/main/providers/FineTuningManager.ts +390 -0
  274. package/src/main/providers/FreeModelsProvider.ts +1156 -0
  275. package/src/main/realtime/RealtimeManager.ts +147 -0
  276. package/src/main/remote/CloudEnvironmentManager.ts +253 -0
  277. package/src/main/remote/RemoteSessionManager.ts +323 -0
  278. package/src/main/search/DeepResearchManager.ts +458 -0
  279. package/src/main/search/WebSearchIntegration.ts +203 -0
  280. package/src/main/security/AdminConsoleManager.ts +244 -0
  281. package/src/main/security/AuditLogger.ts +143 -0
  282. package/src/main/security/PermissionManager.ts +184 -0
  283. package/src/main/security/SSOManager.ts +241 -0
  284. package/src/main/security/SecurityManager.ts +139 -0
  285. package/src/main/skills/SkillsManager.ts +218 -0
  286. package/src/main/ssh/SSHManager.ts +86 -0
  287. package/src/main/streaming/StreamingManager.ts +306 -0
  288. package/src/main/sync/CloudSyncManager.ts +532 -0
  289. package/src/main/verification/AutoVerifyManager.ts +285 -0
  290. package/src/main/vision/ComputerUseManager.ts +475 -0
  291. package/src/main/vision/ImageVideoGenerationManager.ts +526 -0
  292. package/src/main/vision/VisionManager.ts +186 -0
  293. package/src/renderer/App.tsx +314 -0
  294. package/src/renderer/components/AdvancedSettingsPanel.tsx +225 -0
  295. package/src/renderer/components/AgentPanel.tsx +760 -0
  296. package/src/renderer/components/AppPreview.tsx +220 -0
  297. package/src/renderer/components/AuditTrailPanel.tsx +148 -0
  298. package/src/renderer/components/AutomationPanel.tsx +220 -0
  299. package/src/renderer/components/ChatInterface.tsx +595 -0
  300. package/src/renderer/components/ChatTab.tsx +296 -0
  301. package/src/renderer/components/CodeEditor.tsx +257 -0
  302. package/src/renderer/components/CodeReviewPanel.tsx +256 -0
  303. package/src/renderer/components/CodeWorkspace.tsx +192 -0
  304. package/src/renderer/components/CodebaseDashboard.tsx +295 -0
  305. package/src/renderer/components/ComputerUsePanel.tsx +262 -0
  306. package/src/renderer/components/ConnectorsPanel.tsx +471 -0
  307. package/src/renderer/components/ContextMenu.tsx +155 -0
  308. package/src/renderer/components/ContextUsageDisplay.tsx +248 -0
  309. package/src/renderer/components/CoworkPanel.tsx +415 -0
  310. package/src/renderer/components/DiffViewer.tsx +452 -0
  311. package/src/renderer/components/ErrorBoundary.tsx +273 -0
  312. package/src/renderer/components/ExtendedThinkingToggle.tsx +244 -0
  313. package/src/renderer/components/FileAttachments.tsx +247 -0
  314. package/src/renderer/components/FileExplorer.tsx +242 -0
  315. package/src/renderer/components/FileExplorerPanel.tsx +302 -0
  316. package/src/renderer/components/GitPanel.tsx +154 -0
  317. package/src/renderer/components/Header.tsx +113 -0
  318. package/src/renderer/components/MCPPanel.tsx +326 -0
  319. package/src/renderer/components/MentionAutocomplete.tsx +239 -0
  320. package/src/renderer/components/PermissionPanel.tsx +159 -0
  321. package/src/renderer/components/PermissionSelector.tsx +203 -0
  322. package/src/renderer/components/PluginMarketplace.tsx +325 -0
  323. package/src/renderer/components/PromptOptimizerPanel.tsx +399 -0
  324. package/src/renderer/components/SearchPanel.tsx +173 -0
  325. package/src/renderer/components/SearchReplace.tsx +284 -0
  326. package/src/renderer/components/SessionSidebar.tsx +367 -0
  327. package/src/renderer/components/SettingsPanel.tsx +426 -0
  328. package/src/renderer/components/Sidebar.tsx +100 -0
  329. package/src/renderer/components/SkillsPanel.tsx +245 -0
  330. package/src/renderer/components/SplitPane.tsx +173 -0
  331. package/src/renderer/components/Terminal.tsx +190 -0
  332. package/src/renderer/components/VoiceCommand.tsx +129 -0
  333. package/src/renderer/components/WorktreePanel.tsx +163 -0
  334. package/src/renderer/components/ui/AriaComponents.tsx +193 -0
  335. package/src/renderer/components/ui/Button.tsx +68 -0
  336. package/src/renderer/components/ui/Card.tsx +102 -0
  337. package/src/renderer/components/ui/Input.tsx +44 -0
  338. package/src/renderer/components/ui/Skeleton.tsx +55 -0
  339. package/src/renderer/components/ui/VirtualList.tsx +196 -0
  340. package/src/renderer/i18n/I18nProvider.tsx +101 -0
  341. package/src/renderer/i18n/de.ts +161 -0
  342. package/src/renderer/i18n/en.ts +163 -0
  343. package/src/renderer/i18n/es.ts +161 -0
  344. package/src/renderer/i18n/fr.ts +161 -0
  345. package/src/renderer/i18n/index.ts +44 -0
  346. package/src/renderer/index.css +129 -0
  347. package/src/renderer/lib/accessibility.tsx +287 -0
  348. package/src/renderer/lib/hooks.ts +304 -0
  349. package/src/renderer/lib/utils.ts +6 -0
  350. package/src/renderer/main.tsx +25 -0
  351. package/src/renderer/styles/minimalist.css +539 -0
  352. package/src/renderer/sw.ts +180 -0
  353. package/src/renderer/types.d.ts +138 -0
  354. package/src/shared/types.ts +813 -0
  355. package/supabase/schema.sql +234 -0
  356. package/tailwind.config.js +78 -0
  357. package/tests/e2e/package.json +15 -0
  358. package/tests/e2e/playwright.config.ts +31 -0
  359. package/tests/e2e/specs/app.spec.ts +194 -0
  360. package/tests/setup.ts +99 -0
  361. package/tests/unit/AgentOrchestrator.test.ts +274 -0
  362. package/tests/unit/DatabaseManager.test.ts +262 -0
  363. package/tests/unit/GitWorktreeManager.test.ts +150 -0
  364. package/tests/unit/SecurityManager.test.ts +110 -0
  365. package/tsconfig.main.json +22 -0
  366. package/tsconfig.renderer.json +27 -0
  367. 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;