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,314 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { Routes, Route, useLocation, useNavigate } from 'react-router-dom';
3
+ import { Sidebar } from './components/Sidebar';
4
+ import { Header } from './components/Header';
5
+ import { AgentPanel } from './components/AgentPanel';
6
+ import { WorktreePanel } from './components/WorktreePanel';
7
+ import { SkillsPanel } from './components/SkillsPanel';
8
+ import { AutomationPanel } from './components/AutomationPanel';
9
+ import { SettingsPanel } from './components/SettingsPanel';
10
+ import { CodeWorkspace } from './components/CodeWorkspace';
11
+ import { AuditTrailPanel } from './components/AuditTrailPanel';
12
+ import { I18nProvider } from './i18n/I18nProvider';
13
+ import { Agent, Worktree, Skill, Automation, AIProvider, Settings } from '../shared/types';
14
+ import './styles/minimalist.css';
15
+
16
+ function App() {
17
+ const navigate = useNavigate();
18
+ const location = useLocation();
19
+
20
+ const [agents, setAgents] = useState<Agent[]>([]);
21
+ const [worktrees, setWorktrees] = useState<Worktree[]>([]);
22
+ const [skills, setSkills] = useState<Skill[]>([]);
23
+ const [automations, setAutomations] = useState<Automation[]>([]);
24
+ const [providers, setProviders] = useState<AIProvider[]>([]);
25
+ const [settings, setSettings] = useState<Settings | null>(null);
26
+ const [activeTab, setActiveTab] = useState('agents');
27
+ const [isLoading, setIsLoading] = useState(true);
28
+ const [streamingContent, setStreamingContent] = useState<Record<string, string>>({});
29
+
30
+ useEffect(() => {
31
+ const path = location.pathname;
32
+ if (path === '/' || path.startsWith('/agents')) {
33
+ setActiveTab('agents');
34
+ return;
35
+ }
36
+ if (path.startsWith('/code')) {
37
+ setActiveTab('code');
38
+ return;
39
+ }
40
+ if (path.startsWith('/worktrees')) {
41
+ setActiveTab('worktrees');
42
+ return;
43
+ }
44
+ if (path.startsWith('/skills')) {
45
+ setActiveTab('skills');
46
+ return;
47
+ }
48
+ if (path.startsWith('/automations')) {
49
+ setActiveTab('automations');
50
+ return;
51
+ }
52
+ if (path.startsWith('/settings')) {
53
+ setActiveTab('settings');
54
+ return;
55
+ }
56
+ setActiveTab('agents');
57
+ }, [location.pathname]);
58
+
59
+ const handleTabChange = (tab: string) => {
60
+ setActiveTab(tab);
61
+ switch (tab) {
62
+ case 'agents':
63
+ navigate('/');
64
+ break;
65
+ case 'code':
66
+ navigate('/code');
67
+ break;
68
+ case 'worktrees':
69
+ navigate('/worktrees');
70
+ break;
71
+ case 'skills':
72
+ navigate('/skills');
73
+ break;
74
+ case 'automations':
75
+ navigate('/automations');
76
+ break;
77
+ case 'settings':
78
+ navigate('/settings');
79
+ break;
80
+ default:
81
+ navigate('/');
82
+ }
83
+ };
84
+
85
+ useEffect(() => {
86
+ loadInitialData();
87
+
88
+ const handleStreamChunk = ({ agentId, chunk }: { agentId: string; chunk: string }) => {
89
+ setStreamingContent(prev => ({
90
+ ...prev,
91
+ [agentId]: (prev[agentId] || '') + chunk
92
+ }));
93
+ };
94
+
95
+ const handleStreamEnd = ({ agentId }: { agentId: string }) => {
96
+ setAgents(prev => prev.map(agent => {
97
+ if (agent.id === agentId && streamingContent[agentId]) {
98
+ return {
99
+ ...agent,
100
+ messages: [...agent.messages, {
101
+ id: Date.now().toString(),
102
+ role: 'assistant',
103
+ content: streamingContent[agentId],
104
+ timestamp: new Date()
105
+ }]
106
+ };
107
+ }
108
+ return agent;
109
+ }));
110
+ setStreamingContent(prev => {
111
+ const newContent = { ...prev };
112
+ delete newContent[agentId];
113
+ return newContent;
114
+ });
115
+ };
116
+
117
+ const handleStreamError = ({ agentId, error }: { agentId: string; error: string }) => {
118
+ console.error(`Stream error for agent ${agentId}:`, error);
119
+ setStreamingContent(prev => {
120
+ const newContent = { ...prev };
121
+ delete newContent[agentId];
122
+ return newContent;
123
+ });
124
+ };
125
+
126
+ window.electronAPI.on('agent:streamChunk', handleStreamChunk);
127
+ window.electronAPI.on('agent:streamEnd', handleStreamEnd);
128
+ window.electronAPI.on('agent:streamError', handleStreamError);
129
+
130
+ return () => {
131
+ window.electronAPI.removeListener('agent:streamChunk', handleStreamChunk);
132
+ window.electronAPI.removeListener('agent:streamEnd', handleStreamEnd);
133
+ window.electronAPI.removeListener('agent:streamError', handleStreamError);
134
+ };
135
+ }, []);
136
+
137
+ const loadInitialData = async () => {
138
+ try {
139
+ const [
140
+ agentsData,
141
+ skillsData,
142
+ automationsData,
143
+ providersData,
144
+ settingsData
145
+ ] = await Promise.all([
146
+ window.electronAPI.agent.list(),
147
+ window.electronAPI.skills.list(),
148
+ window.electronAPI.automation.list(),
149
+ window.electronAPI.providers.list(),
150
+ window.electronAPI.settings.getAll()
151
+ ]);
152
+
153
+ setAgents(agentsData);
154
+ setSkills(skillsData);
155
+ setAutomations(automationsData);
156
+ setProviders(providersData);
157
+ setSettings(settingsData);
158
+ } catch (error) {
159
+ console.error('Failed to load initial data:', error);
160
+ } finally {
161
+ setIsLoading(false);
162
+ }
163
+ };
164
+
165
+ const handleCreateAgent = async (config: any) => {
166
+ try {
167
+ const newAgent = await window.electronAPI.agent.create(config);
168
+ setAgents(prev => [...prev, newAgent]);
169
+ return newAgent;
170
+ } catch (error) {
171
+ console.error('Failed to create agent:', error);
172
+ throw error;
173
+ }
174
+ };
175
+
176
+ const handleDeleteAgent = async (agentId: string) => {
177
+ try {
178
+ await window.electronAPI.agent.delete(agentId);
179
+ setAgents(prev => prev.filter(a => a.id !== agentId));
180
+ } catch (error) {
181
+ console.error('Failed to delete agent:', error);
182
+ }
183
+ };
184
+
185
+ const handleCreateWorktree = async (repoPath: string, name: string) => {
186
+ try {
187
+ const worktree = await window.electronAPI.worktree.create(repoPath, name);
188
+ setWorktrees(prev => [...prev, worktree]);
189
+ return worktree;
190
+ } catch (error) {
191
+ console.error('Failed to create worktree:', error);
192
+ throw error;
193
+ }
194
+ };
195
+
196
+ const handleCreateSkill = async (config: any) => {
197
+ try {
198
+ const newSkill = await window.electronAPI.skills.create(config);
199
+ setSkills(prev => [...prev, newSkill]);
200
+ return newSkill;
201
+ } catch (error) {
202
+ console.error('Failed to create skill:', error);
203
+ throw error;
204
+ }
205
+ };
206
+
207
+ const handleCreateAutomation = async (config: any) => {
208
+ try {
209
+ const newAutomation = await window.electronAPI.automation.create(config);
210
+ setAutomations(prev => [...prev, newAutomation]);
211
+ return newAutomation;
212
+ } catch (error) {
213
+ console.error('Failed to create automation:', error);
214
+ throw error;
215
+ }
216
+ };
217
+
218
+ if (isLoading) {
219
+ return (
220
+ <div className="flex items-center justify-center h-screen bg-[var(--color-bg-primary)]" data-testid="app-loading">
221
+ <div className="flex flex-col items-center gap-4">
222
+ <div className="relative">
223
+ <div className="w-12 h-12 rounded-full border-2 border-neutral-200 border-t-neutral-800 animate-spin" />
224
+ </div>
225
+ <p className="text-sm text-neutral-500 animate-pulse">Loading Codex...</p>
226
+ </div>
227
+ </div>
228
+ );
229
+ }
230
+
231
+ return (
232
+ <I18nProvider>
233
+ <div className="flex h-screen bg-[var(--color-bg-primary)] text-[var(--color-text-primary)] overflow-hidden selection:bg-neutral-900 selection:text-white" data-testid="app-container">
234
+ <Sidebar activeTab={activeTab} onTabChange={handleTabChange} />
235
+
236
+ <div className="flex-1 flex flex-col min-w-0">
237
+ <Header
238
+ activeTab={activeTab}
239
+ agents={agents}
240
+ onSettingsClick={() => handleTabChange('settings')}
241
+ />
242
+
243
+ <main className="flex-1 overflow-hidden animate-fadeIn" data-testid="main-content">
244
+ <Routes>
245
+ <Route
246
+ path="/"
247
+ element={
248
+ <AgentPanel
249
+ agents={agents}
250
+ providers={providers}
251
+ skills={skills}
252
+ onCreateAgent={handleCreateAgent}
253
+ onDeleteAgent={handleDeleteAgent}
254
+ />
255
+ }
256
+ />
257
+ <Route
258
+ path="/code"
259
+ element={
260
+ <CodeWorkspace rootPath="/" />
261
+ }
262
+ />
263
+ <Route
264
+ path="/worktrees"
265
+ element={
266
+ <WorktreePanel
267
+ worktrees={worktrees}
268
+ onCreateWorktree={handleCreateWorktree}
269
+ />
270
+ }
271
+ />
272
+ <Route
273
+ path="/skills"
274
+ element={
275
+ <SkillsPanel
276
+ skills={skills}
277
+ onCreateSkill={handleCreateSkill}
278
+ />
279
+ }
280
+ />
281
+ <Route
282
+ path="/automations"
283
+ element={
284
+ <AutomationPanel
285
+ automations={automations}
286
+ agents={agents}
287
+ skills={skills}
288
+ onCreateAutomation={handleCreateAutomation}
289
+ />
290
+ }
291
+ />
292
+ <Route
293
+ path="/audit"
294
+ element={<AuditTrailPanel />}
295
+ />
296
+ <Route
297
+ path="/settings"
298
+ element={
299
+ <SettingsPanel
300
+ settings={settings!}
301
+ providers={providers}
302
+ onSettingsChange={setSettings}
303
+ />
304
+ }
305
+ />
306
+ </Routes>
307
+ </main>
308
+ </div>
309
+ </div>
310
+ </I18nProvider>
311
+ );
312
+ }
313
+
314
+ export default App;
@@ -0,0 +1,225 @@
1
+ import React, { useState } from 'react';
2
+ import { Folder, GitBranch, Zap, Save, RotateCcw } from 'lucide-react';
3
+
4
+ export interface WorktreeSettings {
5
+ worktreeLocation: string;
6
+ branchPrefix: string;
7
+ autoCleanup: boolean;
8
+ maxWorktrees: number;
9
+ }
10
+
11
+ export interface SessionSettings {
12
+ contextCompactionThreshold: number;
13
+ autoCompact: boolean;
14
+ compactOnClose: boolean;
15
+ }
16
+
17
+ interface AdvancedSettingsPanelProps {
18
+ worktreeSettings: WorktreeSettings;
19
+ sessionSettings: SessionSettings;
20
+ onWorktreeSettingsChange: (settings: Partial<WorktreeSettings>) => void;
21
+ onSessionSettingsChange: (settings: Partial<SessionSettings>) => void;
22
+ onSave: () => void;
23
+ onReset: () => void;
24
+ }
25
+
26
+ function cn(...inputs: (string | undefined | null | boolean)[]): string {
27
+ return inputs.filter(Boolean).join(' ');
28
+ }
29
+
30
+ export const AdvancedSettingsPanel: React.FC<AdvancedSettingsPanelProps> = ({
31
+ worktreeSettings,
32
+ sessionSettings,
33
+ onWorktreeSettingsChange,
34
+ onSessionSettingsChange,
35
+ onSave,
36
+ onReset,
37
+ }) => {
38
+ const [activeTab, setActiveTab] = useState<'worktree' | 'session'>('worktree');
39
+
40
+ return (
41
+ <div className="flex flex-col h-full bg-card">
42
+ <div className="px-4 py-3 border-b border-border">
43
+ <div className="flex items-center gap-2">
44
+ <Zap className="w-5 h-5" />
45
+ <h2 className="text-lg font-semibold">Advanced Settings</h2>
46
+ </div>
47
+ </div>
48
+
49
+ <div className="px-4 py-2 border-b border-border">
50
+ <div className="flex gap-2">
51
+ <button
52
+ onClick={() => setActiveTab('worktree')}
53
+ className={cn(
54
+ 'px-4 py-2 text-sm rounded-lg transition-colors',
55
+ activeTab === 'worktree'
56
+ ? 'bg-primary text-primary-foreground'
57
+ : 'hover:bg-muted'
58
+ )}
59
+ >
60
+ <GitBranch className="w-4 h-4 inline mr-2" />
61
+ Worktree
62
+ </button>
63
+ <button
64
+ onClick={() => setActiveTab('session')}
65
+ className={cn(
66
+ 'px-4 py-2 text-sm rounded-lg transition-colors',
67
+ activeTab === 'session'
68
+ ? 'bg-primary text-primary-foreground'
69
+ : 'hover:bg-muted'
70
+ )}
71
+ >
72
+ <Zap className="w-4 h-4 inline mr-2" />
73
+ Session
74
+ </button>
75
+ </div>
76
+ </div>
77
+
78
+ <div className="flex-1 overflow-y-auto p-4">
79
+ {activeTab === 'worktree' && (
80
+ <div className="space-y-4">
81
+ <div className="space-y-2">
82
+ <label className="flex items-center gap-2 text-sm font-medium">
83
+ <Folder className="w-4 h-4" />
84
+ Worktree Location
85
+ </label>
86
+ <input
87
+ type="text"
88
+ value={worktreeSettings.worktreeLocation}
89
+ onChange={(e) => onWorktreeSettingsChange({ worktreeLocation: e.target.value })}
90
+ className="w-full px-3 py-2 bg-muted border border-input rounded-lg text-sm"
91
+ placeholder=".claude/worktrees"
92
+ />
93
+ <p className="text-xs text-muted-foreground">
94
+ Directory where Git worktrees will be created
95
+ </p>
96
+ </div>
97
+
98
+ <div className="space-y-2">
99
+ <label className="flex items-center gap-2 text-sm font-medium">
100
+ <GitBranch className="w-4 h-4" />
101
+ Branch Prefix
102
+ </label>
103
+ <input
104
+ type="text"
105
+ value={worktreeSettings.branchPrefix}
106
+ onChange={(e) => onWorktreeSettingsChange({ branchPrefix: e.target.value })}
107
+ className="w-full px-3 py-2 bg-muted border border-input rounded-lg text-sm"
108
+ placeholder="claude-"
109
+ />
110
+ <p className="text-xs text-muted-foreground">
111
+ Prefix added to all Claude-created branches
112
+ </p>
113
+ </div>
114
+
115
+ <div className="space-y-2">
116
+ <label className="text-sm font-medium">Max Worktrees</label>
117
+ <input
118
+ type="number"
119
+ min="1"
120
+ max="50"
121
+ value={worktreeSettings.maxWorktrees}
122
+ onChange={(e) => onWorktreeSettingsChange({ maxWorktrees: parseInt(e.target.value) || 10 })}
123
+ className="w-full px-3 py-2 bg-muted border border-input rounded-lg text-sm"
124
+ />
125
+ </div>
126
+
127
+ <div className="flex items-center justify-between">
128
+ <div>
129
+ <label className="text-sm font-medium">Auto Cleanup</label>
130
+ <p className="text-xs text-muted-foreground">
131
+ Automatically remove worktrees when session ends
132
+ </p>
133
+ </div>
134
+ <label className="relative inline-flex items-center cursor-pointer">
135
+ <input
136
+ type="checkbox"
137
+ checked={worktreeSettings.autoCleanup}
138
+ onChange={(e) => onWorktreeSettingsChange({ autoCleanup: e.target.checked })}
139
+ className="sr-only peer"
140
+ />
141
+ <div className="w-11 h-6 bg-muted rounded-full peer peer-checked:bg-primary after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:after:translate-x-full"></div>
142
+ </label>
143
+ </div>
144
+ </div>
145
+ )}
146
+
147
+ {activeTab === 'session' && (
148
+ <div className="space-y-4">
149
+ <div className="space-y-2">
150
+ <label className="text-sm font-medium">
151
+ Context Compaction Threshold: {Math.round(sessionSettings.contextCompactionThreshold * 100)}%
152
+ </label>
153
+ <input
154
+ type="range"
155
+ min="0.5"
156
+ max="1"
157
+ step="0.05"
158
+ value={sessionSettings.contextCompactionThreshold}
159
+ onChange={(e) => onSessionSettingsChange({ contextCompactionThreshold: parseFloat(e.target.value) })}
160
+ className="w-full h-2 bg-muted rounded-lg appearance-none cursor-pointer"
161
+ />
162
+ </div>
163
+
164
+ <div className="flex items-center justify-between">
165
+ <div>
166
+ <label className="text-sm font-medium">Auto Compact</label>
167
+ </div>
168
+ <label className="relative inline-flex items-center cursor-pointer">
169
+ <input
170
+ type="checkbox"
171
+ checked={sessionSettings.autoCompact}
172
+ onChange={(e) => onSessionSettingsChange({ autoCompact: e.target.checked })}
173
+ className="sr-only peer"
174
+ />
175
+ <div className="w-11 h-6 bg-muted rounded-full peer peer-checked:bg-primary after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:after:translate-x-full"></div>
176
+ </label>
177
+ </div>
178
+
179
+ <div className="flex items-center justify-between">
180
+ <div>
181
+ <label className="text-sm font-medium">Compact on Close</label>
182
+ </div>
183
+ <label className="relative inline-flex items-center cursor-pointer">
184
+ <input
185
+ type="checkbox"
186
+ checked={sessionSettings.compactOnClose}
187
+ onChange={(e) => onSessionSettingsChange({ compactOnClose: e.target.checked })}
188
+ className="sr-only peer"
189
+ />
190
+ <div className="w-11 h-6 bg-muted rounded-full peer peer-checked:bg-primary after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:after:translate-x-full"></div>
191
+ </label>
192
+ </div>
193
+
194
+ <div className="p-3 bg-muted rounded-lg">
195
+ <p className="text-sm font-medium mb-1">Manual Compaction</p>
196
+ <p className="text-xs text-muted-foreground">
197
+ Type <code className="px-1 py-0.5 bg-background rounded">/compact</code> to manually trigger context compaction.
198
+ </p>
199
+ </div>
200
+ </div>
201
+ )}
202
+ </div>
203
+
204
+ <div className="px-4 py-3 border-t border-border flex items-center justify-between">
205
+ <button
206
+ onClick={onReset}
207
+ className="flex items-center gap-2 px-4 py-2 text-sm text-muted-foreground hover:text-foreground rounded-lg hover:bg-muted transition-colors"
208
+ >
209
+ <RotateCcw className="w-4 h-4" />
210
+ Reset
211
+ </button>
212
+
213
+ <button
214
+ onClick={onSave}
215
+ className="flex items-center gap-2 px-4 py-2 text-sm bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-colors"
216
+ >
217
+ <Save className="w-4 h-4" />
218
+ Save
219
+ </button>
220
+ </div>
221
+ </div>
222
+ );
223
+ };
224
+
225
+ export default AdvancedSettingsPanel;