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,295 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import {
3
+ BarChart,
4
+ Bar,
5
+ XAxis,
6
+ YAxis,
7
+ CartesianGrid,
8
+ Tooltip,
9
+ ResponsiveContainer,
10
+ PieChart,
11
+ Pie,
12
+ Cell,
13
+ LineChart,
14
+ Line,
15
+ } from 'recharts';
16
+ import {
17
+ Activity,
18
+ GitBranch,
19
+ FileCode,
20
+ AlertTriangle,
21
+ CheckCircle,
22
+ TrendingUp,
23
+ Code,
24
+ Clock,
25
+ } from 'lucide-react';
26
+
27
+ interface CodebaseMetrics {
28
+ totalFiles: number;
29
+ totalLines: number;
30
+ languages: Record<string, number>;
31
+ complexity: {
32
+ low: number;
33
+ medium: number;
34
+ high: number;
35
+ };
36
+ issues: {
37
+ errors: number;
38
+ warnings: number;
39
+ info: number;
40
+ };
41
+ testCoverage: number;
42
+ recentActivity: Array<{
43
+ date: string;
44
+ commits: number;
45
+ additions: number;
46
+ deletions: number;
47
+ }>;
48
+ }
49
+
50
+ interface CodebaseDashboardProps {
51
+ projectPath: string;
52
+ }
53
+
54
+ export const CodebaseDashboard: React.FC<CodebaseDashboardProps> = ({
55
+ projectPath,
56
+ }) => {
57
+ const [metrics, setMetrics] = useState<CodebaseMetrics | null>(null);
58
+ const [isLoading, setIsLoading] = useState(true);
59
+
60
+ useEffect(() => {
61
+ loadMetrics();
62
+ }, [projectPath]);
63
+
64
+ const loadMetrics = async () => {
65
+ setIsLoading(true);
66
+ try {
67
+ // In real implementation, this would call the main process
68
+ const mockMetrics: CodebaseMetrics = {
69
+ totalFiles: 156,
70
+ totalLines: 45230,
71
+ languages: {
72
+ TypeScript: 65,
73
+ JavaScript: 15,
74
+ CSS: 10,
75
+ JSON: 5,
76
+ Other: 5,
77
+ },
78
+ complexity: {
79
+ low: 120,
80
+ medium: 30,
81
+ high: 6,
82
+ },
83
+ issues: {
84
+ errors: 3,
85
+ warnings: 12,
86
+ info: 28,
87
+ },
88
+ testCoverage: 78,
89
+ recentActivity: [
90
+ { date: 'Mon', commits: 5, additions: 120, deletions: 45 },
91
+ { date: 'Tue', commits: 8, additions: 340, deletions: 120 },
92
+ { date: 'Wed', commits: 3, additions: 89, deletions: 67 },
93
+ { date: 'Thu', commits: 12, additions: 567, deletions: 234 },
94
+ { date: 'Fri', commits: 6, additions: 230, deletions: 89 },
95
+ { date: 'Sat', commits: 2, additions: 45, deletions: 12 },
96
+ { date: 'Sun', commits: 1, additions: 23, deletions: 5 },
97
+ ],
98
+ };
99
+
100
+ setMetrics(mockMetrics);
101
+ } catch (error) {
102
+ console.error('Failed to load metrics:', error);
103
+ }
104
+ setIsLoading(false);
105
+ };
106
+
107
+ const COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042', '#8884D8'];
108
+
109
+ if (isLoading) {
110
+ return (
111
+ <div className="flex items-center justify-center h-full">
112
+ <div className="animate-spin rounded-full h-12 w-12 border-b-2 border-primary" />
113
+ </div>
114
+ );
115
+ }
116
+
117
+ if (!metrics) return null;
118
+
119
+ const languageData = Object.entries(metrics.languages).map(([name, value]) => ({
120
+ name,
121
+ value,
122
+ }));
123
+
124
+ const complexityData = [
125
+ { name: 'Low', value: metrics.complexity.low, color: '#10B981' },
126
+ { name: 'Medium', value: metrics.complexity.medium, color: '#F59E0B' },
127
+ { name: 'High', value: metrics.complexity.high, color: '#EF4444' },
128
+ ];
129
+
130
+ return (
131
+ <div className="h-full overflow-auto p-6 space-y-6">
132
+ <div className="flex items-center justify-between">
133
+ <h1 className="text-2xl font-bold">Codebase Analytics</h1>
134
+ <button
135
+ onClick={loadMetrics}
136
+ className="px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90"
137
+ >
138
+ Refresh
139
+ </button>
140
+ </div>
141
+
142
+ {/* Key Metrics */}
143
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
144
+ <MetricCard
145
+ icon={<FileCode className="w-6 h-6" />}
146
+ title="Total Files"
147
+ value={metrics.totalFiles}
148
+ subtitle={`${metrics.totalLines.toLocaleString()} lines`}
149
+ />
150
+ <MetricCard
151
+ icon={<CheckCircle className="w-6 h-6" />}
152
+ title="Test Coverage"
153
+ value={`${metrics.testCoverage}%`}
154
+ subtitle="Good coverage"
155
+ color="text-green-500"
156
+ />
157
+ <MetricCard
158
+ icon={<AlertTriangle className="w-6 h-6" />}
159
+ title="Issues"
160
+ value={metrics.issues.errors + metrics.issues.warnings}
161
+ subtitle={`${metrics.issues.errors} errors, ${metrics.issues.warnings} warnings`}
162
+ color="text-yellow-500"
163
+ />
164
+ <MetricCard
165
+ icon={<GitBranch className="w-6 h-6" />}
166
+ title="Recent Commits"
167
+ value={metrics.recentActivity.reduce((sum, d) => sum + d.commits, 0)}
168
+ subtitle="Last 7 days"
169
+ />
170
+ </div>
171
+
172
+ {/* Charts Row 1 */}
173
+ <div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
174
+ <div className="bg-card rounded-lg p-6 border border-border">
175
+ <h3 className="text-lg font-semibold mb-4">Language Distribution</h3>
176
+ <ResponsiveContainer width="100%" height={300}>
177
+ <PieChart>
178
+ <Pie
179
+ data={languageData}
180
+ cx="50%"
181
+ cy="50%"
182
+ labelLine={false}
183
+ label={({ name, percent }) => `${name} ${(percent * 100).toFixed(0)}%`}
184
+ outerRadius={80}
185
+ fill="#8884d8"
186
+ dataKey="value"
187
+ >
188
+ {languageData.map((entry, index) => (
189
+ <Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} />
190
+ ))}
191
+ </Pie>
192
+ <Tooltip />
193
+ </PieChart>
194
+ </ResponsiveContainer>
195
+ </div>
196
+
197
+ <div className="bg-card rounded-lg p-6 border border-border">
198
+ <h3 className="text-lg font-semibold mb-4">Code Complexity</h3>
199
+ <ResponsiveContainer width="100%" height={300}>
200
+ <BarChart data={complexityData}>
201
+ <CartesianGrid strokeDasharray="3 3" />
202
+ <XAxis dataKey="name" />
203
+ <YAxis />
204
+ <Tooltip />
205
+ <Bar dataKey="value" fill="#8884d8">
206
+ {complexityData.map((entry, index) => (
207
+ <Cell key={`cell-${index}`} fill={entry.color} />
208
+ ))}
209
+ </Bar>
210
+ </BarChart>
211
+ </ResponsiveContainer>
212
+ </div>
213
+ </div>
214
+
215
+ {/* Charts Row 2 */}
216
+ <div className="bg-card rounded-lg p-6 border border-border">
217
+ <h3 className="text-lg font-semibold mb-4">Recent Activity</h3>
218
+ <ResponsiveContainer width="100%" height={300}>
219
+ <LineChart data={metrics.recentActivity}>
220
+ <CartesianGrid strokeDasharray="3 3" />
221
+ <XAxis dataKey="date" />
222
+ <YAxis />
223
+ <Tooltip />
224
+ <Line
225
+ type="monotone"
226
+ dataKey="additions"
227
+ stroke="#10B981"
228
+ strokeWidth={2}
229
+ name="Additions"
230
+ />
231
+ <Line
232
+ type="monotone"
233
+ dataKey="deletions"
234
+ stroke="#EF4444"
235
+ strokeWidth={2}
236
+ name="Deletions"
237
+ />
238
+ <Line
239
+ type="monotone"
240
+ dataKey="commits"
241
+ stroke="#3B82F6"
242
+ strokeWidth={2}
243
+ name="Commits"
244
+ />
245
+ </LineChart>
246
+ </ResponsiveContainer>
247
+ </div>
248
+
249
+ {/* AI Insights */}
250
+ <div className="bg-gradient-to-r from-primary/10 to-primary/5 rounded-lg p-6 border border-primary/20">
251
+ <div className="flex items-start gap-4">
252
+ <div className="p-3 bg-primary/10 rounded-lg">
253
+ <TrendingUp className="w-6 h-6 text-primary" />
254
+ </div>
255
+ <div>
256
+ <h3 className="text-lg font-semibold mb-2">AI Insights</h3>
257
+ <ul className="space-y-2 text-muted-foreground">
258
+ <li className="flex items-center gap-2">
259
+ <CheckCircle className="w-4 h-4 text-green-500" />
260
+ Codebase is well-structured with good separation of concerns
261
+ </li>
262
+ <li className="flex items-center gap-2">
263
+ <AlertTriangle className="w-4 h-4 text-yellow-500" />
264
+ Consider adding more tests to improve coverage to 85%+
265
+ </li>
266
+ <li className="flex items-center gap-2">
267
+ <Code className="w-4 h-4 text-blue-500" />
268
+ 6 files have high complexity - consider refactoring
269
+ </li>
270
+ </ul>
271
+ </div>
272
+ </div>
273
+ </div>
274
+ </div>
275
+ );
276
+ };
277
+
278
+ const MetricCard: React.FC<{
279
+ icon: React.ReactNode;
280
+ title: string;
281
+ value: string | number;
282
+ subtitle: string;
283
+ color?: string;
284
+ }> = ({ icon, title, value, subtitle, color }) => (
285
+ <div className="bg-card rounded-lg p-6 border border-border">
286
+ <div className="flex items-center gap-4">
287
+ <div className={`p-3 bg-muted rounded-lg ${color}`}>{icon}</div>
288
+ <div>
289
+ <p className="text-sm text-muted-foreground">{title}</p>
290
+ <p className="text-2xl font-bold">{value}</p>
291
+ <p className="text-xs text-muted-foreground">{subtitle}</p>
292
+ </div>
293
+ </div>
294
+ </div>
295
+ );
@@ -0,0 +1,262 @@
1
+ import React, { useState, useEffect, useCallback } from 'react';
2
+ import { ComputerTask, ComputerAction, UIElement } from '../../shared/types';
3
+
4
+ interface ComputerUsePanelProps {
5
+ onExecuteTask?: (description: string, goal: string) => Promise<string>;
6
+ onCancelTask?: (taskId: string) => Promise<boolean>;
7
+ activeTask?: ComputerTask;
8
+ screenshots?: string[];
9
+ isRunning?: boolean;
10
+ }
11
+
12
+ export const ComputerUsePanel: React.FC<ComputerUsePanelProps> = ({
13
+ onExecuteTask,
14
+ onCancelTask,
15
+ activeTask,
16
+ screenshots = [],
17
+ isRunning = false
18
+ }) => {
19
+ const [description, setDescription] = useState('');
20
+ const [goal, setGoal] = useState('');
21
+ const [selectedScreenshot, setSelectedScreenshot] = useState<number>(-1);
22
+ const [showOverlay, setShowOverlay] = useState(true);
23
+
24
+ useEffect(() => {
25
+ if (screenshots.length > 0) {
26
+ setSelectedScreenshot(screenshots.length - 1);
27
+ }
28
+ }, [screenshots.length]);
29
+
30
+ const handleExecute = useCallback(async () => {
31
+ if (!description || !goal || !onExecuteTask) return;
32
+
33
+ try {
34
+ await onExecuteTask(description, goal);
35
+ setDescription('');
36
+ setGoal('');
37
+ } catch (error) {
38
+ console.error('Failed to execute task:', error);
39
+ }
40
+ }, [description, goal, onExecuteTask]);
41
+
42
+ const handleCancel = useCallback(async () => {
43
+ if (activeTask && onCancelTask) {
44
+ await onCancelTask(activeTask.id);
45
+ }
46
+ }, [activeTask, onCancelTask]);
47
+
48
+ const getActionIcon = (action: ComputerAction): string => {
49
+ switch (action.type) {
50
+ case 'click': return '🖱️';
51
+ case 'doubleClick': return '🖱️🖱️';
52
+ case 'type': return '⌨️';
53
+ case 'scroll': return '📜';
54
+ case 'key': return '🔑';
55
+ case 'wait': return '⏱️';
56
+ case 'screenshot': return '📸';
57
+ default: return '⚡';
58
+ }
59
+ };
60
+
61
+ const getStatusColor = (status: string): string => {
62
+ switch (status) {
63
+ case 'running': return 'text-blue-400';
64
+ case 'completed': return 'text-green-400';
65
+ case 'failed': return 'text-red-400';
66
+ case 'cancelled': return 'text-yellow-400';
67
+ default: return 'text-gray-400';
68
+ }
69
+ };
70
+
71
+ return (
72
+ <div className="flex flex-col h-full bg-gray-900 text-gray-100 p-4">
73
+ {/* Header */}
74
+ <div className="mb-4">
75
+ <h2 className="text-2xl font-bold mb-2">🖥️ Computer Using Agent</h2>
76
+ <p className="text-gray-400 text-sm">
77
+ Let AI interact with your computer interface to complete tasks
78
+ </p>
79
+ </div>
80
+
81
+ {/* Task Input */}
82
+ {!isRunning && (
83
+ <div className="bg-gray-800 rounded-lg p-4 mb-4">
84
+ <div className="mb-3">
85
+ <label className="block text-sm font-medium mb-1">Task Description</label>
86
+ <input
87
+ type="text"
88
+ value={description}
89
+ onChange={(e) => setDescription(e.target.value)}
90
+ placeholder="e.g., Book a flight to Paris"
91
+ className="w-full bg-gray-700 border border-gray-600 rounded px-3 py-2 text-white placeholder-gray-500 focus:outline-none focus:border-blue-500"
92
+ />
93
+ </div>
94
+
95
+ <div className="mb-3">
96
+ <label className="block text-sm font-medium mb-1">Goal</label>
97
+ <textarea
98
+ value={goal}
99
+ onChange={(e) => setGoal(e.target.value)}
100
+ placeholder="Describe what you want to achieve..."
101
+ rows={3}
102
+ className="w-full bg-gray-700 border border-gray-600 rounded px-3 py-2 text-white placeholder-gray-500 focus:outline-none focus:border-blue-500 resize-none"
103
+ />
104
+ </div>
105
+
106
+ <button
107
+ onClick={handleExecute}
108
+ disabled={!description || !goal}
109
+ className="w-full bg-blue-600 hover:bg-blue-700 disabled:bg-gray-600 disabled:cursor-not-allowed text-white font-medium py-2 px-4 rounded transition-colors"
110
+ >
111
+ Execute Task
112
+ </button>
113
+ </div>
114
+ )}
115
+
116
+ {/* Active Task Status */}
117
+ {activeTask && (
118
+ <div className={`bg-gray-800 rounded-lg p-4 mb-4 border-l-4 ${
119
+ activeTask.status === 'running' ? 'border-blue-500' :
120
+ activeTask.status === 'completed' ? 'border-green-500' :
121
+ activeTask.status === 'failed' ? 'border-red-500' : 'border-yellow-500'
122
+ }`}>
123
+ <div className="flex justify-between items-start mb-2">
124
+ <div>
125
+ <h3 className="font-semibold">{activeTask.description}</h3>
126
+ <p className="text-sm text-gray-400">{activeTask.goal}</p>
127
+ </div>
128
+ <span className={`text-sm font-medium ${getStatusColor(activeTask.status)}`}>
129
+ {activeTask.status.toUpperCase()}
130
+ </span>
131
+ </div>
132
+
133
+ <div className="mt-3">
134
+ <div className="flex justify-between text-sm text-gray-400 mb-1">
135
+ <span>Progress</span>
136
+ <span>{activeTask.currentStep} / {activeTask.maxSteps} steps</span>
137
+ </div>
138
+ <div className="w-full bg-gray-700 rounded-full h-2">
139
+ <div
140
+ className="bg-blue-500 h-2 rounded-full transition-all"
141
+ style={{ width: `${(activeTask.currentStep / activeTask.maxSteps) * 100}%` }}
142
+ />
143
+ </div>
144
+ </div>
145
+
146
+ {isRunning && (
147
+ <button
148
+ onClick={handleCancel}
149
+ className="mt-3 text-red-400 hover:text-red-300 text-sm font-medium"
150
+ >
151
+ Cancel Task
152
+ </button>
153
+ )}
154
+
155
+ {activeTask.error && (
156
+ <div className="mt-3 p-2 bg-red-900/30 border border-red-500/30 rounded text-red-400 text-sm">
157
+ Error: {activeTask.error}
158
+ </div>
159
+ )}
160
+ </div>
161
+ )}
162
+
163
+ {/* Screenshots */}
164
+ {screenshots.length > 0 && (
165
+ <div className="flex-1 bg-gray-800 rounded-lg p-4 overflow-hidden flex flex-col">
166
+ <div className="flex justify-between items-center mb-2">
167
+ <h3 className="font-semibold">Screenshots</h3>
168
+ <div className="flex items-center gap-2">
169
+ <label className="flex items-center gap-1 text-sm text-gray-400 cursor-pointer">
170
+ <input
171
+ type="checkbox"
172
+ checked={showOverlay}
173
+ onChange={(e) => setShowOverlay(e.target.checked)}
174
+ className="rounded"
175
+ />
176
+ Show Elements
177
+ </label>
178
+ </div>
179
+ </div>
180
+
181
+ <div className="flex-1 bg-gray-900 rounded overflow-hidden relative">
182
+ {selectedScreenshot >= 0 && screenshots[selectedScreenshot] && (
183
+ <img
184
+ src={screenshots[selectedScreenshot]}
185
+ alt={`Screenshot ${selectedScreenshot + 1}`}
186
+ className="w-full h-full object-contain"
187
+ />
188
+ )}
189
+
190
+ {/* Navigation */}
191
+ <div className="absolute bottom-4 left-1/2 transform -translate-x-1/2 flex items-center gap-2 bg-gray-800/90 px-3 py-1 rounded-full">
192
+ <button
193
+ onClick={() => setSelectedScreenshot(Math.max(0, selectedScreenshot - 1))}
194
+ disabled={selectedScreenshot <= 0}
195
+ className="text-gray-400 hover:text-white disabled:opacity-30"
196
+ >
197
+
198
+ </button>
199
+ <span className="text-sm text-gray-300">
200
+ {selectedScreenshot + 1} / {screenshots.length}
201
+ </span>
202
+ <button
203
+ onClick={() => setSelectedScreenshot(Math.min(screenshots.length - 1, selectedScreenshot + 1))}
204
+ disabled={selectedScreenshot >= screenshots.length - 1}
205
+ className="text-gray-400 hover:text-white disabled:opacity-30"
206
+ >
207
+
208
+ </button>
209
+ </div>
210
+ </div>
211
+
212
+ {/* Thumbnails */}
213
+ <div className="flex gap-2 mt-2 overflow-x-auto pb-2">
214
+ {screenshots.map((screenshot, index) => (
215
+ <button
216
+ key={index}
217
+ onClick={() => setSelectedScreenshot(index)}
218
+ className={`flex-shrink-0 w-20 h-14 rounded overflow-hidden border-2 ${
219
+ index === selectedScreenshot ? 'border-blue-500' : 'border-transparent'
220
+ }`}
221
+ >
222
+ <img
223
+ src={screenshot}
224
+ alt={`Thumbnail ${index + 1}`}
225
+ className="w-full h-full object-cover"
226
+ />
227
+ </button>
228
+ ))}
229
+ </div>
230
+ </div>
231
+ )}
232
+
233
+ {/* Actions Log */}
234
+ {activeTask && activeTask.actions.length > 0 && (
235
+ <div className="mt-4 bg-gray-800 rounded-lg p-4 max-h-48 overflow-y-auto">
236
+ <h3 className="font-semibold mb-2">Actions Log</h3>
237
+ <div className="space-y-1">
238
+ {activeTask.actions.map((action: ComputerAction, index: number) => (
239
+ <div
240
+ key={index}
241
+ className="flex items-center gap-2 text-sm p-1 hover:bg-gray-700 rounded"
242
+ >
243
+ <span className="text-lg">{getActionIcon(action)}</span>
244
+ <span className="text-gray-300 capitalize">{action.type}</span>
245
+ {action.value && (
246
+ <span className="text-gray-500 truncate">"{action.value}"</span>
247
+ )}
248
+ {action.target?.coordinates && (
249
+ <span className="text-gray-500 text-xs">
250
+ at ({action.target.coordinates.x}, {action.target.coordinates.y})
251
+ </span>
252
+ )}
253
+ </div>
254
+ ))}
255
+ </div>
256
+ </div>
257
+ )}
258
+ </div>
259
+ );
260
+ };
261
+
262
+ export default ComputerUsePanel;