cowork-os 0.3.21 → 0.3.25

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 (252) hide show
  1. package/README.md +372 -10
  2. package/connectors/README.md +20 -0
  3. package/connectors/asana-mcp/README.md +24 -0
  4. package/connectors/asana-mcp/dist/index.js +427 -0
  5. package/connectors/asana-mcp/package.json +15 -0
  6. package/connectors/asana-mcp/src/index.ts +553 -0
  7. package/connectors/asana-mcp/tsconfig.json +13 -0
  8. package/connectors/hubspot-mcp/README.md +35 -0
  9. package/connectors/hubspot-mcp/dist/index.js +454 -0
  10. package/connectors/hubspot-mcp/package.json +15 -0
  11. package/connectors/hubspot-mcp/src/index.ts +562 -0
  12. package/connectors/hubspot-mcp/tsconfig.json +13 -0
  13. package/connectors/jira-mcp/README.md +49 -0
  14. package/connectors/jira-mcp/dist/index.js +588 -0
  15. package/connectors/jira-mcp/package.json +15 -0
  16. package/connectors/jira-mcp/src/index.ts +711 -0
  17. package/connectors/jira-mcp/tsconfig.json +13 -0
  18. package/connectors/linear-mcp/README.md +22 -0
  19. package/connectors/linear-mcp/dist/index.js +402 -0
  20. package/connectors/linear-mcp/package.json +15 -0
  21. package/connectors/linear-mcp/src/index.ts +522 -0
  22. package/connectors/linear-mcp/tsconfig.json +13 -0
  23. package/connectors/okta-mcp/README.md +24 -0
  24. package/connectors/okta-mcp/dist/index.js +411 -0
  25. package/connectors/okta-mcp/package.json +15 -0
  26. package/connectors/okta-mcp/src/index.ts +520 -0
  27. package/connectors/okta-mcp/tsconfig.json +13 -0
  28. package/connectors/salesforce-mcp/README.md +47 -0
  29. package/connectors/salesforce-mcp/dist/index.js +584 -0
  30. package/connectors/salesforce-mcp/package.json +15 -0
  31. package/connectors/salesforce-mcp/src/index.ts +722 -0
  32. package/connectors/salesforce-mcp/tsconfig.json +13 -0
  33. package/connectors/servicenow-mcp/README.md +26 -0
  34. package/connectors/servicenow-mcp/dist/index.js +400 -0
  35. package/connectors/servicenow-mcp/package.json +15 -0
  36. package/connectors/servicenow-mcp/src/index.ts +500 -0
  37. package/connectors/servicenow-mcp/tsconfig.json +13 -0
  38. package/connectors/templates/mcp-connector/README.md +31 -0
  39. package/connectors/templates/mcp-connector/package.json +15 -0
  40. package/connectors/templates/mcp-connector/src/index.ts +330 -0
  41. package/connectors/templates/mcp-connector/tsconfig.json +13 -0
  42. package/connectors/zendesk-mcp/README.md +40 -0
  43. package/connectors/zendesk-mcp/dist/index.js +431 -0
  44. package/connectors/zendesk-mcp/package.json +15 -0
  45. package/connectors/zendesk-mcp/src/index.ts +543 -0
  46. package/connectors/zendesk-mcp/tsconfig.json +13 -0
  47. package/dist/electron/electron/agent/custom-skill-loader.js +31 -1
  48. package/dist/electron/electron/agent/daemon.js +189 -13
  49. package/dist/electron/electron/agent/executor.js +895 -78
  50. package/dist/electron/electron/agent/llm/anthropic-compatible-provider.js +177 -0
  51. package/dist/electron/electron/agent/llm/azure-openai-provider.js +328 -0
  52. package/dist/electron/electron/agent/llm/bedrock-provider.js +49 -9
  53. package/dist/electron/electron/agent/llm/github-copilot-provider.js +97 -0
  54. package/dist/electron/electron/agent/llm/groq-provider.js +33 -0
  55. package/dist/electron/electron/agent/llm/index.js +13 -1
  56. package/dist/electron/electron/agent/llm/kimi-provider.js +33 -0
  57. package/dist/electron/electron/agent/llm/openai-compatible-provider.js +116 -0
  58. package/dist/electron/electron/agent/llm/openai-compatible.js +111 -0
  59. package/dist/electron/electron/agent/llm/openai-oauth.js +2 -1
  60. package/dist/electron/electron/agent/llm/openrouter-provider.js +1 -1
  61. package/dist/electron/electron/agent/llm/provider-factory.js +350 -4
  62. package/dist/electron/electron/agent/llm/types.js +66 -1
  63. package/dist/electron/electron/agent/llm/xai-provider.js +33 -0
  64. package/dist/electron/electron/agent/search/provider-factory.js +38 -2
  65. package/dist/electron/electron/agent/tools/box-tools.js +231 -0
  66. package/dist/electron/electron/agent/tools/builtin-settings.js +28 -0
  67. package/dist/electron/electron/agent/tools/dropbox-tools.js +237 -0
  68. package/dist/electron/electron/agent/tools/file-tools.js +66 -3
  69. package/dist/electron/electron/agent/tools/google-drive-tools.js +227 -0
  70. package/dist/electron/electron/agent/tools/grep-tools.js +90 -10
  71. package/dist/electron/electron/agent/tools/image-tools.js +11 -1
  72. package/dist/electron/electron/agent/tools/notion-tools.js +312 -0
  73. package/dist/electron/electron/agent/tools/onedrive-tools.js +217 -0
  74. package/dist/electron/electron/agent/tools/registry.js +548 -10
  75. package/dist/electron/electron/agent/tools/search-tools.js +28 -10
  76. package/dist/electron/electron/agent/tools/sharepoint-tools.js +243 -0
  77. package/dist/electron/electron/agent/tools/shell-tools.js +12 -3
  78. package/dist/electron/electron/agent/tools/x-tools.js +1 -1
  79. package/dist/electron/electron/agents/agent-dispatch.js +63 -0
  80. package/dist/electron/electron/database/repositories.js +19 -5
  81. package/dist/electron/electron/database/schema.js +8 -0
  82. package/dist/electron/electron/gateway/channels/whatsapp.js +55 -0
  83. package/dist/electron/electron/gateway/index.js +75 -1
  84. package/dist/electron/electron/gateway/router.js +209 -154
  85. package/dist/electron/electron/ipc/canvas-handlers.js +5 -0
  86. package/dist/electron/electron/ipc/handlers.js +763 -267
  87. package/dist/electron/electron/main.js +63 -0
  88. package/dist/electron/electron/mcp/oauth/connector-oauth.js +333 -0
  89. package/dist/electron/electron/mcp/registry/MCPRegistryManager.js +503 -154
  90. package/dist/electron/electron/memory/MemoryService.js +2 -1
  91. package/dist/electron/electron/preload.js +78 -1
  92. package/dist/electron/electron/settings/appearance-manager.js +18 -1
  93. package/dist/electron/electron/settings/box-manager.js +54 -0
  94. package/dist/electron/electron/settings/dropbox-manager.js +54 -0
  95. package/dist/electron/electron/settings/google-drive-manager.js +54 -0
  96. package/dist/electron/electron/settings/notion-manager.js +56 -0
  97. package/dist/electron/electron/settings/onedrive-manager.js +54 -0
  98. package/dist/electron/electron/settings/sharepoint-manager.js +54 -0
  99. package/dist/electron/electron/utils/box-api.js +153 -0
  100. package/dist/electron/electron/utils/dropbox-api.js +144 -0
  101. package/dist/electron/electron/utils/env-migration.js +19 -0
  102. package/dist/electron/electron/utils/google-drive-api.js +152 -0
  103. package/dist/electron/electron/utils/notion-api.js +103 -0
  104. package/dist/electron/electron/utils/onedrive-api.js +113 -0
  105. package/dist/electron/electron/utils/sharepoint-api.js +109 -0
  106. package/dist/electron/electron/utils/validation.js +98 -3
  107. package/dist/electron/electron/utils/x-cli.js +1 -1
  108. package/dist/electron/shared/channelMessages.js +284 -3
  109. package/dist/electron/shared/llm-provider-catalog.js +198 -0
  110. package/dist/electron/shared/types.js +90 -1
  111. package/package.json +14 -3
  112. package/resources/skills/nano-banana-pro.json +4 -4
  113. package/resources/skills/openai-image-gen.json +3 -3
  114. package/resources/skills/scripts/gen.py +163 -0
  115. package/resources/skills/scripts/generate_image.py +91 -0
  116. package/src/electron/agent/custom-skill-loader.ts +34 -1
  117. package/src/electron/agent/daemon.ts +210 -14
  118. package/src/electron/agent/executor.ts +1124 -85
  119. package/src/electron/agent/llm/anthropic-compatible-provider.ts +214 -0
  120. package/src/electron/agent/llm/azure-openai-provider.ts +388 -0
  121. package/src/electron/agent/llm/bedrock-provider.ts +62 -9
  122. package/src/electron/agent/llm/github-copilot-provider.ts +117 -0
  123. package/src/electron/agent/llm/groq-provider.ts +39 -0
  124. package/src/electron/agent/llm/index.ts +6 -0
  125. package/src/electron/agent/llm/kimi-provider.ts +39 -0
  126. package/src/electron/agent/llm/openai-compatible-provider.ts +153 -0
  127. package/src/electron/agent/llm/openai-compatible.ts +133 -0
  128. package/src/electron/agent/llm/openai-oauth.ts +2 -1
  129. package/src/electron/agent/llm/openrouter-provider.ts +2 -1
  130. package/src/electron/agent/llm/provider-factory.ts +459 -6
  131. package/src/electron/agent/llm/types.ts +95 -1
  132. package/src/electron/agent/llm/xai-provider.ts +39 -0
  133. package/src/electron/agent/search/provider-factory.ts +43 -2
  134. package/src/electron/agent/tools/box-tools.ts +239 -0
  135. package/src/electron/agent/tools/builtin-settings.ts +36 -0
  136. package/src/electron/agent/tools/dropbox-tools.ts +237 -0
  137. package/src/electron/agent/tools/file-tools.ts +66 -3
  138. package/src/electron/agent/tools/gmail-tools.ts +240 -0
  139. package/src/electron/agent/tools/google-calendar-tools.ts +258 -0
  140. package/src/electron/agent/tools/google-drive-tools.ts +228 -0
  141. package/src/electron/agent/tools/grep-tools.ts +97 -12
  142. package/src/electron/agent/tools/image-tools.ts +11 -1
  143. package/src/electron/agent/tools/notion-tools.ts +330 -0
  144. package/src/electron/agent/tools/onedrive-tools.ts +217 -0
  145. package/src/electron/agent/tools/registry.ts +794 -10
  146. package/src/electron/agent/tools/search-tools.ts +29 -11
  147. package/src/electron/agent/tools/sharepoint-tools.ts +247 -0
  148. package/src/electron/agent/tools/shell-tools.ts +11 -3
  149. package/src/electron/agent/tools/x-tools.ts +1 -1
  150. package/src/electron/agents/agent-dispatch.ts +79 -0
  151. package/src/electron/database/SecureSettingsRepository.ts +7 -1
  152. package/src/electron/database/repositories.ts +58 -6
  153. package/src/electron/database/schema.ts +8 -0
  154. package/src/electron/gateway/channels/discord.ts +4 -0
  155. package/src/electron/gateway/channels/google-chat.ts +3 -0
  156. package/src/electron/gateway/channels/line.ts +3 -0
  157. package/src/electron/gateway/channels/matrix-client.ts +15 -0
  158. package/src/electron/gateway/channels/matrix.ts +31 -0
  159. package/src/electron/gateway/channels/mattermost.ts +3 -0
  160. package/src/electron/gateway/channels/signal.ts +3 -0
  161. package/src/electron/gateway/channels/slack.ts +9 -4
  162. package/src/electron/gateway/channels/teams.ts +4 -0
  163. package/src/electron/gateway/channels/telegram.ts +2 -0
  164. package/src/electron/gateway/channels/twitch.ts +2 -0
  165. package/src/electron/gateway/channels/types.ts +8 -0
  166. package/src/electron/gateway/channels/whatsapp.ts +66 -0
  167. package/src/electron/gateway/index.ts +95 -2
  168. package/src/electron/gateway/router.ts +231 -161
  169. package/src/electron/gateway/security.ts +21 -9
  170. package/src/electron/ipc/canvas-handlers.ts +10 -0
  171. package/src/electron/ipc/handlers.ts +848 -292
  172. package/src/electron/main.ts +35 -0
  173. package/src/electron/mcp/oauth/connector-oauth.ts +448 -0
  174. package/src/electron/mcp/registry/MCPRegistryManager.ts +343 -12
  175. package/src/electron/memory/MemoryService.ts +7 -1
  176. package/src/electron/preload.ts +200 -5
  177. package/src/electron/settings/appearance-manager.ts +20 -2
  178. package/src/electron/settings/box-manager.ts +58 -0
  179. package/src/electron/settings/dropbox-manager.ts +58 -0
  180. package/src/electron/settings/google-workspace-manager.ts +59 -0
  181. package/src/electron/settings/notion-manager.ts +60 -0
  182. package/src/electron/settings/onedrive-manager.ts +58 -0
  183. package/src/electron/settings/sharepoint-manager.ts +58 -0
  184. package/src/electron/utils/box-api.ts +184 -0
  185. package/src/electron/utils/dropbox-api.ts +171 -0
  186. package/src/electron/utils/env-migration.ts +22 -0
  187. package/src/electron/utils/gmail-api.ts +121 -0
  188. package/src/electron/utils/google-calendar-api.ts +115 -0
  189. package/src/electron/utils/google-workspace-api.ts +228 -0
  190. package/src/electron/utils/google-workspace-auth.ts +109 -0
  191. package/src/electron/utils/google-workspace-oauth.ts +232 -0
  192. package/src/electron/utils/notion-api.ts +126 -0
  193. package/src/electron/utils/onedrive-api.ts +137 -0
  194. package/src/electron/utils/sharepoint-api.ts +132 -0
  195. package/src/electron/utils/validation.ts +128 -1
  196. package/src/electron/utils/x-cli.ts +1 -1
  197. package/src/renderer/App.tsx +119 -8
  198. package/src/renderer/components/ActivityFeedItem.tsx +34 -17
  199. package/src/renderer/components/AgentWorkingStatePanel.tsx +7 -5
  200. package/src/renderer/components/AppearanceSettings.tsx +37 -2
  201. package/src/renderer/components/BlueBubblesSettings.tsx +18 -7
  202. package/src/renderer/components/BoxSettings.tsx +203 -0
  203. package/src/renderer/components/BrowserView.tsx +101 -0
  204. package/src/renderer/components/BuiltinToolsSettings.tsx +105 -0
  205. package/src/renderer/components/CanvasPreview.tsx +68 -1
  206. package/src/renderer/components/ConnectorEnvModal.tsx +116 -0
  207. package/src/renderer/components/ConnectorSetupModal.tsx +566 -0
  208. package/src/renderer/components/ConnectorsSettings.tsx +397 -0
  209. package/src/renderer/components/ControlPlaneSettings.tsx +2 -0
  210. package/src/renderer/components/DiscordSettings.tsx +18 -7
  211. package/src/renderer/components/DropboxSettings.tsx +202 -0
  212. package/src/renderer/components/EmailSettings.tsx +18 -7
  213. package/src/renderer/components/FileViewer.tsx +21 -13
  214. package/src/renderer/components/GoogleChatSettings.tsx +17 -7
  215. package/src/renderer/components/GoogleWorkspaceSettings.tsx +332 -0
  216. package/src/renderer/components/ImessageSettings.tsx +22 -11
  217. package/src/renderer/components/LineIcons.tsx +376 -0
  218. package/src/renderer/components/LineSettings.tsx +18 -7
  219. package/src/renderer/components/MCPSettings.tsx +56 -0
  220. package/src/renderer/components/MainContent.tsx +740 -76
  221. package/src/renderer/components/MatrixSettings.tsx +18 -7
  222. package/src/renderer/components/MattermostSettings.tsx +18 -7
  223. package/src/renderer/components/NodesSettings.tsx +58 -99
  224. package/src/renderer/components/NotificationPanel.tsx +25 -11
  225. package/src/renderer/components/NotionSettings.tsx +231 -0
  226. package/src/renderer/components/Onboarding/Onboarding.tsx +13 -1
  227. package/src/renderer/components/OnboardingModal.tsx +70 -1
  228. package/src/renderer/components/OneDriveSettings.tsx +212 -0
  229. package/src/renderer/components/RightPanel.tsx +141 -28
  230. package/src/renderer/components/ScheduledTasksSettings.tsx +10 -62
  231. package/src/renderer/components/SearchSettings.tsx +118 -114
  232. package/src/renderer/components/Settings.tsx +1425 -651
  233. package/src/renderer/components/SharePointSettings.tsx +224 -0
  234. package/src/renderer/components/Sidebar.tsx +94 -19
  235. package/src/renderer/components/SignalSettings.tsx +18 -7
  236. package/src/renderer/components/SkillHubBrowser.tsx +144 -185
  237. package/src/renderer/components/SlackSettings.tsx +18 -7
  238. package/src/renderer/components/TaskQuickActions.tsx +11 -6
  239. package/src/renderer/components/TaskTimeline.tsx +58 -26
  240. package/src/renderer/components/TeamsSettings.tsx +18 -7
  241. package/src/renderer/components/TelegramSettings.tsx +18 -7
  242. package/src/renderer/components/ThemeIcon.tsx +16 -0
  243. package/src/renderer/components/TwitchSettings.tsx +18 -7
  244. package/src/renderer/components/VoiceSettings.tsx +30 -74
  245. package/src/renderer/components/WhatsAppSettings.tsx +48 -37
  246. package/src/renderer/components/WorkingStateHistory.tsx +7 -5
  247. package/src/renderer/components/WorkspaceSelector.tsx +42 -13
  248. package/src/renderer/hooks/useOnboardingFlow.ts +21 -0
  249. package/src/renderer/styles/index.css +2333 -209
  250. package/src/shared/channelMessages.ts +367 -4
  251. package/src/shared/llm-provider-catalog.ts +217 -0
  252. package/src/shared/types.ts +251 -2
@@ -276,7 +276,8 @@ class MemoryService {
276
276
  // Get LLM provider for compression
277
277
  const provider = llm_1.LLMProviderFactory.createProvider();
278
278
  const settings = llm_1.LLMProviderFactory.getSettings();
279
- const modelId = llm_1.LLMProviderFactory.getModelId(settings.modelKey, settings.providerType, settings.ollama?.model, settings.gemini?.model, settings.openrouter?.model, settings.openai?.model);
279
+ const azureDeployment = settings.azure?.deployment || settings.azure?.deployments?.[0];
280
+ const modelId = llm_1.LLMProviderFactory.getModelId(settings.modelKey, settings.providerType, settings.ollama?.model, settings.gemini?.model, settings.openrouter?.model, settings.openai?.model, azureDeployment, settings.groq?.model, settings.xai?.model, settings.kimi?.model, settings.customProviders);
280
281
  const response = await provider.createMessage({
281
282
  model: modelId,
282
283
  maxTokens: 100,
@@ -20,6 +20,7 @@ const IPC_CHANNELS = {
20
20
  WORKSPACE_LIST: 'workspace:list',
21
21
  WORKSPACE_CREATE: 'workspace:create',
22
22
  WORKSPACE_UPDATE_PERMISSIONS: 'workspace:updatePermissions',
23
+ WORKSPACE_TOUCH: 'workspace:touch',
23
24
  WORKSPACE_GET_TEMP: 'workspace:getTemp',
24
25
  APPROVAL_RESPOND: 'approval:respond',
25
26
  ARTIFACT_LIST: 'artifact:list',
@@ -36,6 +37,9 @@ const IPC_CHANNELS = {
36
37
  LLM_GET_GEMINI_MODELS: 'llm:getGeminiModels',
37
38
  LLM_GET_OPENROUTER_MODELS: 'llm:getOpenRouterModels',
38
39
  LLM_GET_OPENAI_MODELS: 'llm:getOpenAIModels',
40
+ LLM_GET_GROQ_MODELS: 'llm:getGroqModels',
41
+ LLM_GET_XAI_MODELS: 'llm:getXAIModels',
42
+ LLM_GET_KIMI_MODELS: 'llm:getKimiModels',
39
43
  LLM_OPENAI_OAUTH_START: 'llm:openaiOAuthStart',
40
44
  LLM_OPENAI_OAUTH_LOGOUT: 'llm:openaiOAuthLogout',
41
45
  LLM_GET_BEDROCK_MODELS: 'llm:getBedrockModels',
@@ -61,6 +65,36 @@ const IPC_CHANNELS = {
61
65
  X_SAVE_SETTINGS: 'x:saveSettings',
62
66
  X_TEST_CONNECTION: 'x:testConnection',
63
67
  X_GET_STATUS: 'x:getStatus',
68
+ // Notion Settings
69
+ NOTION_GET_SETTINGS: 'notion:getSettings',
70
+ NOTION_SAVE_SETTINGS: 'notion:saveSettings',
71
+ NOTION_TEST_CONNECTION: 'notion:testConnection',
72
+ NOTION_GET_STATUS: 'notion:getStatus',
73
+ // Box Settings
74
+ BOX_GET_SETTINGS: 'box:getSettings',
75
+ BOX_SAVE_SETTINGS: 'box:saveSettings',
76
+ BOX_TEST_CONNECTION: 'box:testConnection',
77
+ BOX_GET_STATUS: 'box:getStatus',
78
+ // OneDrive Settings
79
+ ONEDRIVE_GET_SETTINGS: 'onedrive:getSettings',
80
+ ONEDRIVE_SAVE_SETTINGS: 'onedrive:saveSettings',
81
+ ONEDRIVE_TEST_CONNECTION: 'onedrive:testConnection',
82
+ ONEDRIVE_GET_STATUS: 'onedrive:getStatus',
83
+ // Google Drive Settings
84
+ GOOGLE_DRIVE_GET_SETTINGS: 'googleDrive:getSettings',
85
+ GOOGLE_DRIVE_SAVE_SETTINGS: 'googleDrive:saveSettings',
86
+ GOOGLE_DRIVE_TEST_CONNECTION: 'googleDrive:testConnection',
87
+ GOOGLE_DRIVE_GET_STATUS: 'googleDrive:getStatus',
88
+ // Dropbox Settings
89
+ DROPBOX_GET_SETTINGS: 'dropbox:getSettings',
90
+ DROPBOX_SAVE_SETTINGS: 'dropbox:saveSettings',
91
+ DROPBOX_TEST_CONNECTION: 'dropbox:testConnection',
92
+ DROPBOX_GET_STATUS: 'dropbox:getStatus',
93
+ // SharePoint Settings
94
+ SHAREPOINT_GET_SETTINGS: 'sharepoint:getSettings',
95
+ SHAREPOINT_SAVE_SETTINGS: 'sharepoint:saveSettings',
96
+ SHAREPOINT_TEST_CONNECTION: 'sharepoint:testConnection',
97
+ SHAREPOINT_GET_STATUS: 'sharepoint:getStatus',
64
98
  // App Updates
65
99
  APP_CHECK_UPDATES: 'app:checkUpdates',
66
100
  APP_DOWNLOAD_UPDATE: 'app:downloadUpdate',
@@ -128,6 +162,7 @@ const IPC_CHANNELS = {
128
162
  MCP_GET_SERVER_TOOLS: 'mcp:getServerTools',
129
163
  MCP_TEST_SERVER: 'mcp:testServer',
130
164
  MCP_SERVER_STATUS_CHANGE: 'mcp:serverStatusChange',
165
+ MCP_CONNECTOR_OAUTH_START: 'mcp:connectorOAuthStart',
131
166
  // MCP Registry
132
167
  MCP_REGISTRY_FETCH: 'mcp:registryFetch',
133
168
  MCP_REGISTRY_SEARCH: 'mcp:registrySearch',
@@ -229,6 +264,7 @@ const IPC_CHANNELS = {
229
264
  CANVAS_EXPORT_HTML: 'canvas:exportHTML',
230
265
  CANVAS_EXPORT_TO_FOLDER: 'canvas:exportToFolder',
231
266
  CANVAS_OPEN_IN_BROWSER: 'canvas:openInBrowser',
267
+ CANVAS_OPEN_URL: 'canvas:openUrl',
232
268
  CANVAS_GET_SESSION_DIR: 'canvas:getSessionDir',
233
269
  // Mobile Companion Nodes
234
270
  NODE_LIST: 'node:list',
@@ -351,10 +387,13 @@ const IPC_CHANNELS = {
351
387
  electron_1.contextBridge.exposeInMainWorld('electronAPI', {
352
388
  // Dialog APIs
353
389
  selectFolder: () => electron_1.ipcRenderer.invoke('dialog:selectFolder'),
390
+ selectFiles: () => electron_1.ipcRenderer.invoke('dialog:selectFiles'),
354
391
  // File APIs
355
392
  openFile: (filePath, workspacePath) => electron_1.ipcRenderer.invoke('file:open', filePath, workspacePath),
356
393
  showInFinder: (filePath, workspacePath) => electron_1.ipcRenderer.invoke('file:showInFinder', filePath, workspacePath),
357
394
  readFileForViewer: (filePath, workspacePath) => electron_1.ipcRenderer.invoke('file:readForViewer', { filePath, workspacePath }),
395
+ importFilesToWorkspace: (data) => electron_1.ipcRenderer.invoke('file:importToWorkspace', data),
396
+ importDataToWorkspace: (data) => electron_1.ipcRenderer.invoke('file:importDataToWorkspace', data),
358
397
  // Shell APIs
359
398
  openExternal: (url) => electron_1.ipcRenderer.invoke('shell:openExternal', url),
360
399
  // Task APIs
@@ -383,6 +422,7 @@ electron_1.contextBridge.exposeInMainWorld('electronAPI', {
383
422
  listWorkspaces: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.WORKSPACE_LIST),
384
423
  selectWorkspace: (id) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.WORKSPACE_SELECT, id),
385
424
  getTempWorkspace: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.WORKSPACE_GET_TEMP),
425
+ touchWorkspace: (id) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.WORKSPACE_TOUCH, id),
386
426
  updateWorkspacePermissions: (id, permissions) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.WORKSPACE_UPDATE_PERMISSIONS, id, permissions),
387
427
  // Approval APIs
388
428
  respondToApproval: (data) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.APPROVAL_RESPOND, data),
@@ -401,8 +441,11 @@ electron_1.contextBridge.exposeInMainWorld('electronAPI', {
401
441
  setLLMModel: (modelKey) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.LLM_SET_MODEL, modelKey),
402
442
  getOllamaModels: (baseUrl) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_OLLAMA_MODELS, baseUrl),
403
443
  getGeminiModels: (apiKey) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_GEMINI_MODELS, apiKey),
404
- getOpenRouterModels: (apiKey) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_OPENROUTER_MODELS, apiKey),
444
+ getOpenRouterModels: (apiKey, baseUrl) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_OPENROUTER_MODELS, apiKey, baseUrl),
405
445
  getOpenAIModels: (apiKey) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_OPENAI_MODELS, apiKey),
446
+ getGroqModels: (apiKey, baseUrl) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_GROQ_MODELS, apiKey, baseUrl),
447
+ getXAIModels: (apiKey, baseUrl) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_XAI_MODELS, apiKey, baseUrl),
448
+ getKimiModels: (apiKey, baseUrl) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_KIMI_MODELS, apiKey, baseUrl),
406
449
  openaiOAuthStart: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.LLM_OPENAI_OAUTH_START),
407
450
  openaiOAuthLogout: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.LLM_OPENAI_OAUTH_LOGOUT),
408
451
  getBedrockModels: (config) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_BEDROCK_MODELS, config),
@@ -447,6 +490,36 @@ electron_1.contextBridge.exposeInMainWorld('electronAPI', {
447
490
  saveXSettings: (settings) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.X_SAVE_SETTINGS, settings),
448
491
  testXConnection: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.X_TEST_CONNECTION),
449
492
  getXStatus: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.X_GET_STATUS),
493
+ // Notion Settings APIs
494
+ getNotionSettings: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.NOTION_GET_SETTINGS),
495
+ saveNotionSettings: (settings) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.NOTION_SAVE_SETTINGS, settings),
496
+ testNotionConnection: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.NOTION_TEST_CONNECTION),
497
+ getNotionStatus: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.NOTION_GET_STATUS),
498
+ // Box Settings APIs
499
+ getBoxSettings: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.BOX_GET_SETTINGS),
500
+ saveBoxSettings: (settings) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.BOX_SAVE_SETTINGS, settings),
501
+ testBoxConnection: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.BOX_TEST_CONNECTION),
502
+ getBoxStatus: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.BOX_GET_STATUS),
503
+ // OneDrive Settings APIs
504
+ getOneDriveSettings: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.ONEDRIVE_GET_SETTINGS),
505
+ saveOneDriveSettings: (settings) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.ONEDRIVE_SAVE_SETTINGS, settings),
506
+ testOneDriveConnection: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.ONEDRIVE_TEST_CONNECTION),
507
+ getOneDriveStatus: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.ONEDRIVE_GET_STATUS),
508
+ // Google Drive Settings APIs
509
+ getGoogleDriveSettings: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.GOOGLE_DRIVE_GET_SETTINGS),
510
+ saveGoogleDriveSettings: (settings) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.GOOGLE_DRIVE_SAVE_SETTINGS, settings),
511
+ testGoogleDriveConnection: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.GOOGLE_DRIVE_TEST_CONNECTION),
512
+ getGoogleDriveStatus: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.GOOGLE_DRIVE_GET_STATUS),
513
+ // Dropbox Settings APIs
514
+ getDropboxSettings: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.DROPBOX_GET_SETTINGS),
515
+ saveDropboxSettings: (settings) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.DROPBOX_SAVE_SETTINGS, settings),
516
+ testDropboxConnection: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.DROPBOX_TEST_CONNECTION),
517
+ getDropboxStatus: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.DROPBOX_GET_STATUS),
518
+ // SharePoint Settings APIs
519
+ getSharePointSettings: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.SHAREPOINT_GET_SETTINGS),
520
+ saveSharePointSettings: (settings) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.SHAREPOINT_SAVE_SETTINGS, settings),
521
+ testSharePointConnection: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.SHAREPOINT_TEST_CONNECTION),
522
+ getSharePointStatus: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.SHAREPOINT_GET_STATUS),
450
523
  // App Update APIs
451
524
  getAppVersion: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.APP_GET_VERSION),
452
525
  checkForUpdates: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.APP_CHECK_UPDATES),
@@ -533,6 +606,8 @@ electron_1.contextBridge.exposeInMainWorld('electronAPI', {
533
606
  getMCPAllTools: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.MCP_GET_ALL_TOOLS),
534
607
  getMCPServerTools: (serverId) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.MCP_GET_SERVER_TOOLS, serverId),
535
608
  testMCPServer: (serverId) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.MCP_TEST_SERVER, serverId),
609
+ // MCP Connector OAuth
610
+ startConnectorOAuth: (payload) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.MCP_CONNECTOR_OAUTH_START, payload),
536
611
  // MCP Status change event listener
537
612
  onMCPStatusChange: (callback) => {
538
613
  const subscription = (_, data) => callback(data);
@@ -603,6 +678,7 @@ electron_1.contextBridge.exposeInMainWorld('electronAPI', {
603
678
  getCronWebhookStatus: () => electron_1.ipcRenderer.invoke('cron:getWebhookStatus'),
604
679
  // Notification APIs
605
680
  listNotifications: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.NOTIFICATION_LIST),
681
+ addNotification: (data) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.NOTIFICATION_ADD, data),
606
682
  getUnreadNotificationCount: () => electron_1.ipcRenderer.invoke('notification:unreadCount'),
607
683
  markNotificationRead: (id) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.NOTIFICATION_MARK_READ, id),
608
684
  markAllNotificationsRead: () => electron_1.ipcRenderer.invoke(IPC_CHANNELS.NOTIFICATION_MARK_ALL_READ),
@@ -684,6 +760,7 @@ electron_1.contextBridge.exposeInMainWorld('electronAPI', {
684
760
  canvasExportHTML: (sessionId) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.CANVAS_EXPORT_HTML, sessionId),
685
761
  canvasExportToFolder: (data) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.CANVAS_EXPORT_TO_FOLDER, data),
686
762
  canvasOpenInBrowser: (sessionId) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.CANVAS_OPEN_IN_BROWSER, sessionId),
763
+ canvasOpenUrl: (data) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.CANVAS_OPEN_URL, data),
687
764
  canvasGetSessionDir: (sessionId) => electron_1.ipcRenderer.invoke(IPC_CHANNELS.CANVAS_GET_SESSION_DIR, sessionId),
688
765
  onCanvasEvent: (callback) => {
689
766
  const subscription = (_, data) => callback(data);
@@ -47,6 +47,7 @@ const SecureSettingsRepository_1 = require("../database/SecureSettingsRepository
47
47
  const LEGACY_SETTINGS_FILE = 'appearance-settings.json';
48
48
  const DEFAULT_SETTINGS = {
49
49
  themeMode: 'dark',
50
+ visualTheme: 'terminal',
50
51
  accentColor: 'cyan',
51
52
  disclaimerAccepted: false,
52
53
  onboardingCompleted: false,
@@ -135,6 +136,13 @@ class AppearanceManager {
135
136
  if (!isValidThemeMode(settings.themeMode)) {
136
137
  settings.themeMode = DEFAULT_SETTINGS.themeMode;
137
138
  }
139
+ if (!isValidVisualTheme(settings.visualTheme)) {
140
+ settings.visualTheme = DEFAULT_SETTINGS.visualTheme;
141
+ }
142
+ // Normalize deprecated 'oblivion' theme to 'warm'
143
+ if (settings.visualTheme === 'oblivion') {
144
+ settings.visualTheme = 'warm';
145
+ }
138
146
  if (!isValidAccentColor(settings.accentColor)) {
139
147
  settings.accentColor = DEFAULT_SETTINGS.accentColor;
140
148
  }
@@ -157,8 +165,14 @@ class AppearanceManager {
157
165
  // Load existing settings to preserve fields not being updated
158
166
  const existingSettings = this.loadSettings();
159
167
  // Validate and merge with existing settings
168
+ // Normalize deprecated 'oblivion' to 'warm' before saving
169
+ let normalizedVisualTheme = isValidVisualTheme(settings.visualTheme) ? settings.visualTheme : existingSettings.visualTheme;
170
+ if (normalizedVisualTheme === 'oblivion') {
171
+ normalizedVisualTheme = 'warm';
172
+ }
160
173
  const validatedSettings = {
161
174
  themeMode: isValidThemeMode(settings.themeMode) ? settings.themeMode : existingSettings.themeMode,
175
+ visualTheme: normalizedVisualTheme,
162
176
  accentColor: isValidAccentColor(settings.accentColor) ? settings.accentColor : existingSettings.accentColor,
163
177
  disclaimerAccepted: settings.disclaimerAccepted ?? existingSettings.disclaimerAccepted,
164
178
  onboardingCompleted: settings.onboardingCompleted ?? existingSettings.onboardingCompleted,
@@ -187,7 +201,10 @@ AppearanceManager.migrationCompleted = false;
187
201
  function isValidThemeMode(value) {
188
202
  return value === 'light' || value === 'dark' || value === 'system';
189
203
  }
204
+ function isValidVisualTheme(value) {
205
+ return value === 'terminal' || value === 'warm' || value === 'oblivion';
206
+ }
190
207
  function isValidAccentColor(value) {
191
- const validColors = ['cyan', 'blue', 'purple', 'pink', 'rose', 'orange', 'green', 'teal'];
208
+ const validColors = ['cyan', 'blue', 'purple', 'pink', 'rose', 'orange', 'green', 'teal', 'coral'];
192
209
  return validColors.includes(value);
193
210
  }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * Box Settings Manager
4
+ *
5
+ * Stores Box integration settings in encrypted database.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.BoxSettingsManager = void 0;
9
+ const SecureSettingsRepository_1 = require("../database/SecureSettingsRepository");
10
+ const DEFAULT_SETTINGS = {
11
+ enabled: false,
12
+ timeoutMs: 20000,
13
+ };
14
+ class BoxSettingsManager {
15
+ static loadSettings() {
16
+ if (this.cachedSettings) {
17
+ return this.cachedSettings;
18
+ }
19
+ let settings = { ...DEFAULT_SETTINGS };
20
+ try {
21
+ if (SecureSettingsRepository_1.SecureSettingsRepository.isInitialized()) {
22
+ const repository = SecureSettingsRepository_1.SecureSettingsRepository.getInstance();
23
+ const stored = repository.load('box');
24
+ if (stored) {
25
+ settings = { ...DEFAULT_SETTINGS, ...stored };
26
+ }
27
+ }
28
+ }
29
+ catch (error) {
30
+ console.error('[BoxSettingsManager] Failed to load settings:', error);
31
+ }
32
+ this.cachedSettings = settings;
33
+ return settings;
34
+ }
35
+ static saveSettings(settings) {
36
+ try {
37
+ if (!SecureSettingsRepository_1.SecureSettingsRepository.isInitialized()) {
38
+ throw new Error('SecureSettingsRepository not initialized');
39
+ }
40
+ const repository = SecureSettingsRepository_1.SecureSettingsRepository.getInstance();
41
+ repository.save('box', settings);
42
+ this.cachedSettings = settings;
43
+ console.log('[BoxSettingsManager] Settings saved');
44
+ }
45
+ catch (error) {
46
+ console.error('[BoxSettingsManager] Failed to save settings:', error);
47
+ }
48
+ }
49
+ static clearCache() {
50
+ this.cachedSettings = null;
51
+ }
52
+ }
53
+ exports.BoxSettingsManager = BoxSettingsManager;
54
+ BoxSettingsManager.cachedSettings = null;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * Dropbox Settings Manager
4
+ *
5
+ * Stores Dropbox integration settings in encrypted database.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.DropboxSettingsManager = void 0;
9
+ const SecureSettingsRepository_1 = require("../database/SecureSettingsRepository");
10
+ const DEFAULT_SETTINGS = {
11
+ enabled: false,
12
+ timeoutMs: 20000,
13
+ };
14
+ class DropboxSettingsManager {
15
+ static loadSettings() {
16
+ if (this.cachedSettings) {
17
+ return this.cachedSettings;
18
+ }
19
+ let settings = { ...DEFAULT_SETTINGS };
20
+ try {
21
+ if (SecureSettingsRepository_1.SecureSettingsRepository.isInitialized()) {
22
+ const repository = SecureSettingsRepository_1.SecureSettingsRepository.getInstance();
23
+ const stored = repository.load('dropbox');
24
+ if (stored) {
25
+ settings = { ...DEFAULT_SETTINGS, ...stored };
26
+ }
27
+ }
28
+ }
29
+ catch (error) {
30
+ console.error('[DropboxSettingsManager] Failed to load settings:', error);
31
+ }
32
+ this.cachedSettings = settings;
33
+ return settings;
34
+ }
35
+ static saveSettings(settings) {
36
+ try {
37
+ if (!SecureSettingsRepository_1.SecureSettingsRepository.isInitialized()) {
38
+ throw new Error('SecureSettingsRepository not initialized');
39
+ }
40
+ const repository = SecureSettingsRepository_1.SecureSettingsRepository.getInstance();
41
+ repository.save('dropbox', settings);
42
+ this.cachedSettings = settings;
43
+ console.log('[DropboxSettingsManager] Settings saved');
44
+ }
45
+ catch (error) {
46
+ console.error('[DropboxSettingsManager] Failed to save settings:', error);
47
+ }
48
+ }
49
+ static clearCache() {
50
+ this.cachedSettings = null;
51
+ }
52
+ }
53
+ exports.DropboxSettingsManager = DropboxSettingsManager;
54
+ DropboxSettingsManager.cachedSettings = null;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * Google Drive Settings Manager
4
+ *
5
+ * Stores Google Drive integration settings in encrypted database.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.GoogleDriveSettingsManager = void 0;
9
+ const SecureSettingsRepository_1 = require("../database/SecureSettingsRepository");
10
+ const DEFAULT_SETTINGS = {
11
+ enabled: false,
12
+ timeoutMs: 20000,
13
+ };
14
+ class GoogleDriveSettingsManager {
15
+ static loadSettings() {
16
+ if (this.cachedSettings) {
17
+ return this.cachedSettings;
18
+ }
19
+ let settings = { ...DEFAULT_SETTINGS };
20
+ try {
21
+ if (SecureSettingsRepository_1.SecureSettingsRepository.isInitialized()) {
22
+ const repository = SecureSettingsRepository_1.SecureSettingsRepository.getInstance();
23
+ const stored = repository.load('google-drive');
24
+ if (stored) {
25
+ settings = { ...DEFAULT_SETTINGS, ...stored };
26
+ }
27
+ }
28
+ }
29
+ catch (error) {
30
+ console.error('[GoogleDriveSettingsManager] Failed to load settings:', error);
31
+ }
32
+ this.cachedSettings = settings;
33
+ return settings;
34
+ }
35
+ static saveSettings(settings) {
36
+ try {
37
+ if (!SecureSettingsRepository_1.SecureSettingsRepository.isInitialized()) {
38
+ throw new Error('SecureSettingsRepository not initialized');
39
+ }
40
+ const repository = SecureSettingsRepository_1.SecureSettingsRepository.getInstance();
41
+ repository.save('google-drive', settings);
42
+ this.cachedSettings = settings;
43
+ console.log('[GoogleDriveSettingsManager] Settings saved');
44
+ }
45
+ catch (error) {
46
+ console.error('[GoogleDriveSettingsManager] Failed to save settings:', error);
47
+ }
48
+ }
49
+ static clearCache() {
50
+ this.cachedSettings = null;
51
+ }
52
+ }
53
+ exports.GoogleDriveSettingsManager = GoogleDriveSettingsManager;
54
+ GoogleDriveSettingsManager.cachedSettings = null;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /**
3
+ * Notion Settings Manager
4
+ *
5
+ * Stores Notion integration settings in encrypted database.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.NotionSettingsManager = void 0;
9
+ const SecureSettingsRepository_1 = require("../database/SecureSettingsRepository");
10
+ const notion_api_1 = require("../utils/notion-api");
11
+ const DEFAULT_SETTINGS = {
12
+ enabled: false,
13
+ notionVersion: notion_api_1.DEFAULT_NOTION_VERSION,
14
+ timeoutMs: 20000,
15
+ };
16
+ class NotionSettingsManager {
17
+ static loadSettings() {
18
+ if (this.cachedSettings) {
19
+ return this.cachedSettings;
20
+ }
21
+ let settings = { ...DEFAULT_SETTINGS };
22
+ try {
23
+ if (SecureSettingsRepository_1.SecureSettingsRepository.isInitialized()) {
24
+ const repository = SecureSettingsRepository_1.SecureSettingsRepository.getInstance();
25
+ const stored = repository.load('notion');
26
+ if (stored) {
27
+ settings = { ...DEFAULT_SETTINGS, ...stored };
28
+ }
29
+ }
30
+ }
31
+ catch (error) {
32
+ console.error('[NotionSettingsManager] Failed to load settings:', error);
33
+ }
34
+ this.cachedSettings = settings;
35
+ return settings;
36
+ }
37
+ static saveSettings(settings) {
38
+ try {
39
+ if (!SecureSettingsRepository_1.SecureSettingsRepository.isInitialized()) {
40
+ throw new Error('SecureSettingsRepository not initialized');
41
+ }
42
+ const repository = SecureSettingsRepository_1.SecureSettingsRepository.getInstance();
43
+ repository.save('notion', settings);
44
+ this.cachedSettings = settings;
45
+ console.log('[NotionSettingsManager] Settings saved');
46
+ }
47
+ catch (error) {
48
+ console.error('[NotionSettingsManager] Failed to save settings:', error);
49
+ }
50
+ }
51
+ static clearCache() {
52
+ this.cachedSettings = null;
53
+ }
54
+ }
55
+ exports.NotionSettingsManager = NotionSettingsManager;
56
+ NotionSettingsManager.cachedSettings = null;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * OneDrive Settings Manager
4
+ *
5
+ * Stores OneDrive integration settings in encrypted database.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.OneDriveSettingsManager = void 0;
9
+ const SecureSettingsRepository_1 = require("../database/SecureSettingsRepository");
10
+ const DEFAULT_SETTINGS = {
11
+ enabled: false,
12
+ timeoutMs: 20000,
13
+ };
14
+ class OneDriveSettingsManager {
15
+ static loadSettings() {
16
+ if (this.cachedSettings) {
17
+ return this.cachedSettings;
18
+ }
19
+ let settings = { ...DEFAULT_SETTINGS };
20
+ try {
21
+ if (SecureSettingsRepository_1.SecureSettingsRepository.isInitialized()) {
22
+ const repository = SecureSettingsRepository_1.SecureSettingsRepository.getInstance();
23
+ const stored = repository.load('onedrive');
24
+ if (stored) {
25
+ settings = { ...DEFAULT_SETTINGS, ...stored };
26
+ }
27
+ }
28
+ }
29
+ catch (error) {
30
+ console.error('[OneDriveSettingsManager] Failed to load settings:', error);
31
+ }
32
+ this.cachedSettings = settings;
33
+ return settings;
34
+ }
35
+ static saveSettings(settings) {
36
+ try {
37
+ if (!SecureSettingsRepository_1.SecureSettingsRepository.isInitialized()) {
38
+ throw new Error('SecureSettingsRepository not initialized');
39
+ }
40
+ const repository = SecureSettingsRepository_1.SecureSettingsRepository.getInstance();
41
+ repository.save('onedrive', settings);
42
+ this.cachedSettings = settings;
43
+ console.log('[OneDriveSettingsManager] Settings saved');
44
+ }
45
+ catch (error) {
46
+ console.error('[OneDriveSettingsManager] Failed to save settings:', error);
47
+ }
48
+ }
49
+ static clearCache() {
50
+ this.cachedSettings = null;
51
+ }
52
+ }
53
+ exports.OneDriveSettingsManager = OneDriveSettingsManager;
54
+ OneDriveSettingsManager.cachedSettings = null;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * SharePoint Settings Manager
4
+ *
5
+ * Stores SharePoint integration settings in encrypted database.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.SharePointSettingsManager = void 0;
9
+ const SecureSettingsRepository_1 = require("../database/SecureSettingsRepository");
10
+ const DEFAULT_SETTINGS = {
11
+ enabled: false,
12
+ timeoutMs: 20000,
13
+ };
14
+ class SharePointSettingsManager {
15
+ static loadSettings() {
16
+ if (this.cachedSettings) {
17
+ return this.cachedSettings;
18
+ }
19
+ let settings = { ...DEFAULT_SETTINGS };
20
+ try {
21
+ if (SecureSettingsRepository_1.SecureSettingsRepository.isInitialized()) {
22
+ const repository = SecureSettingsRepository_1.SecureSettingsRepository.getInstance();
23
+ const stored = repository.load('sharepoint');
24
+ if (stored) {
25
+ settings = { ...DEFAULT_SETTINGS, ...stored };
26
+ }
27
+ }
28
+ }
29
+ catch (error) {
30
+ console.error('[SharePointSettingsManager] Failed to load settings:', error);
31
+ }
32
+ this.cachedSettings = settings;
33
+ return settings;
34
+ }
35
+ static saveSettings(settings) {
36
+ try {
37
+ if (!SecureSettingsRepository_1.SecureSettingsRepository.isInitialized()) {
38
+ throw new Error('SecureSettingsRepository not initialized');
39
+ }
40
+ const repository = SecureSettingsRepository_1.SecureSettingsRepository.getInstance();
41
+ repository.save('sharepoint', settings);
42
+ this.cachedSettings = settings;
43
+ console.log('[SharePointSettingsManager] Settings saved');
44
+ }
45
+ catch (error) {
46
+ console.error('[SharePointSettingsManager] Failed to save settings:', error);
47
+ }
48
+ }
49
+ static clearCache() {
50
+ this.cachedSettings = null;
51
+ }
52
+ }
53
+ exports.SharePointSettingsManager = SharePointSettingsManager;
54
+ SharePointSettingsManager.cachedSettings = null;