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.
- package/README.md +372 -10
- package/connectors/README.md +20 -0
- package/connectors/asana-mcp/README.md +24 -0
- package/connectors/asana-mcp/dist/index.js +427 -0
- package/connectors/asana-mcp/package.json +15 -0
- package/connectors/asana-mcp/src/index.ts +553 -0
- package/connectors/asana-mcp/tsconfig.json +13 -0
- package/connectors/hubspot-mcp/README.md +35 -0
- package/connectors/hubspot-mcp/dist/index.js +454 -0
- package/connectors/hubspot-mcp/package.json +15 -0
- package/connectors/hubspot-mcp/src/index.ts +562 -0
- package/connectors/hubspot-mcp/tsconfig.json +13 -0
- package/connectors/jira-mcp/README.md +49 -0
- package/connectors/jira-mcp/dist/index.js +588 -0
- package/connectors/jira-mcp/package.json +15 -0
- package/connectors/jira-mcp/src/index.ts +711 -0
- package/connectors/jira-mcp/tsconfig.json +13 -0
- package/connectors/linear-mcp/README.md +22 -0
- package/connectors/linear-mcp/dist/index.js +402 -0
- package/connectors/linear-mcp/package.json +15 -0
- package/connectors/linear-mcp/src/index.ts +522 -0
- package/connectors/linear-mcp/tsconfig.json +13 -0
- package/connectors/okta-mcp/README.md +24 -0
- package/connectors/okta-mcp/dist/index.js +411 -0
- package/connectors/okta-mcp/package.json +15 -0
- package/connectors/okta-mcp/src/index.ts +520 -0
- package/connectors/okta-mcp/tsconfig.json +13 -0
- package/connectors/salesforce-mcp/README.md +47 -0
- package/connectors/salesforce-mcp/dist/index.js +584 -0
- package/connectors/salesforce-mcp/package.json +15 -0
- package/connectors/salesforce-mcp/src/index.ts +722 -0
- package/connectors/salesforce-mcp/tsconfig.json +13 -0
- package/connectors/servicenow-mcp/README.md +26 -0
- package/connectors/servicenow-mcp/dist/index.js +400 -0
- package/connectors/servicenow-mcp/package.json +15 -0
- package/connectors/servicenow-mcp/src/index.ts +500 -0
- package/connectors/servicenow-mcp/tsconfig.json +13 -0
- package/connectors/templates/mcp-connector/README.md +31 -0
- package/connectors/templates/mcp-connector/package.json +15 -0
- package/connectors/templates/mcp-connector/src/index.ts +330 -0
- package/connectors/templates/mcp-connector/tsconfig.json +13 -0
- package/connectors/zendesk-mcp/README.md +40 -0
- package/connectors/zendesk-mcp/dist/index.js +431 -0
- package/connectors/zendesk-mcp/package.json +15 -0
- package/connectors/zendesk-mcp/src/index.ts +543 -0
- package/connectors/zendesk-mcp/tsconfig.json +13 -0
- package/dist/electron/electron/agent/custom-skill-loader.js +31 -1
- package/dist/electron/electron/agent/daemon.js +189 -13
- package/dist/electron/electron/agent/executor.js +895 -78
- package/dist/electron/electron/agent/llm/anthropic-compatible-provider.js +177 -0
- package/dist/electron/electron/agent/llm/azure-openai-provider.js +328 -0
- package/dist/electron/electron/agent/llm/bedrock-provider.js +49 -9
- package/dist/electron/electron/agent/llm/github-copilot-provider.js +97 -0
- package/dist/electron/electron/agent/llm/groq-provider.js +33 -0
- package/dist/electron/electron/agent/llm/index.js +13 -1
- package/dist/electron/electron/agent/llm/kimi-provider.js +33 -0
- package/dist/electron/electron/agent/llm/openai-compatible-provider.js +116 -0
- package/dist/electron/electron/agent/llm/openai-compatible.js +111 -0
- package/dist/electron/electron/agent/llm/openai-oauth.js +2 -1
- package/dist/electron/electron/agent/llm/openrouter-provider.js +1 -1
- package/dist/electron/electron/agent/llm/provider-factory.js +350 -4
- package/dist/electron/electron/agent/llm/types.js +66 -1
- package/dist/electron/electron/agent/llm/xai-provider.js +33 -0
- package/dist/electron/electron/agent/search/provider-factory.js +38 -2
- package/dist/electron/electron/agent/tools/box-tools.js +231 -0
- package/dist/electron/electron/agent/tools/builtin-settings.js +28 -0
- package/dist/electron/electron/agent/tools/dropbox-tools.js +237 -0
- package/dist/electron/electron/agent/tools/file-tools.js +66 -3
- package/dist/electron/electron/agent/tools/google-drive-tools.js +227 -0
- package/dist/electron/electron/agent/tools/grep-tools.js +90 -10
- package/dist/electron/electron/agent/tools/image-tools.js +11 -1
- package/dist/electron/electron/agent/tools/notion-tools.js +312 -0
- package/dist/electron/electron/agent/tools/onedrive-tools.js +217 -0
- package/dist/electron/electron/agent/tools/registry.js +548 -10
- package/dist/electron/electron/agent/tools/search-tools.js +28 -10
- package/dist/electron/electron/agent/tools/sharepoint-tools.js +243 -0
- package/dist/electron/electron/agent/tools/shell-tools.js +12 -3
- package/dist/electron/electron/agent/tools/x-tools.js +1 -1
- package/dist/electron/electron/agents/agent-dispatch.js +63 -0
- package/dist/electron/electron/database/repositories.js +19 -5
- package/dist/electron/electron/database/schema.js +8 -0
- package/dist/electron/electron/gateway/channels/whatsapp.js +55 -0
- package/dist/electron/electron/gateway/index.js +75 -1
- package/dist/electron/electron/gateway/router.js +209 -154
- package/dist/electron/electron/ipc/canvas-handlers.js +5 -0
- package/dist/electron/electron/ipc/handlers.js +763 -267
- package/dist/electron/electron/main.js +63 -0
- package/dist/electron/electron/mcp/oauth/connector-oauth.js +333 -0
- package/dist/electron/electron/mcp/registry/MCPRegistryManager.js +503 -154
- package/dist/electron/electron/memory/MemoryService.js +2 -1
- package/dist/electron/electron/preload.js +78 -1
- package/dist/electron/electron/settings/appearance-manager.js +18 -1
- package/dist/electron/electron/settings/box-manager.js +54 -0
- package/dist/electron/electron/settings/dropbox-manager.js +54 -0
- package/dist/electron/electron/settings/google-drive-manager.js +54 -0
- package/dist/electron/electron/settings/notion-manager.js +56 -0
- package/dist/electron/electron/settings/onedrive-manager.js +54 -0
- package/dist/electron/electron/settings/sharepoint-manager.js +54 -0
- package/dist/electron/electron/utils/box-api.js +153 -0
- package/dist/electron/electron/utils/dropbox-api.js +144 -0
- package/dist/electron/electron/utils/env-migration.js +19 -0
- package/dist/electron/electron/utils/google-drive-api.js +152 -0
- package/dist/electron/electron/utils/notion-api.js +103 -0
- package/dist/electron/electron/utils/onedrive-api.js +113 -0
- package/dist/electron/electron/utils/sharepoint-api.js +109 -0
- package/dist/electron/electron/utils/validation.js +98 -3
- package/dist/electron/electron/utils/x-cli.js +1 -1
- package/dist/electron/shared/channelMessages.js +284 -3
- package/dist/electron/shared/llm-provider-catalog.js +198 -0
- package/dist/electron/shared/types.js +90 -1
- package/package.json +14 -3
- package/resources/skills/nano-banana-pro.json +4 -4
- package/resources/skills/openai-image-gen.json +3 -3
- package/resources/skills/scripts/gen.py +163 -0
- package/resources/skills/scripts/generate_image.py +91 -0
- package/src/electron/agent/custom-skill-loader.ts +34 -1
- package/src/electron/agent/daemon.ts +210 -14
- package/src/electron/agent/executor.ts +1124 -85
- package/src/electron/agent/llm/anthropic-compatible-provider.ts +214 -0
- package/src/electron/agent/llm/azure-openai-provider.ts +388 -0
- package/src/electron/agent/llm/bedrock-provider.ts +62 -9
- package/src/electron/agent/llm/github-copilot-provider.ts +117 -0
- package/src/electron/agent/llm/groq-provider.ts +39 -0
- package/src/electron/agent/llm/index.ts +6 -0
- package/src/electron/agent/llm/kimi-provider.ts +39 -0
- package/src/electron/agent/llm/openai-compatible-provider.ts +153 -0
- package/src/electron/agent/llm/openai-compatible.ts +133 -0
- package/src/electron/agent/llm/openai-oauth.ts +2 -1
- package/src/electron/agent/llm/openrouter-provider.ts +2 -1
- package/src/electron/agent/llm/provider-factory.ts +459 -6
- package/src/electron/agent/llm/types.ts +95 -1
- package/src/electron/agent/llm/xai-provider.ts +39 -0
- package/src/electron/agent/search/provider-factory.ts +43 -2
- package/src/electron/agent/tools/box-tools.ts +239 -0
- package/src/electron/agent/tools/builtin-settings.ts +36 -0
- package/src/electron/agent/tools/dropbox-tools.ts +237 -0
- package/src/electron/agent/tools/file-tools.ts +66 -3
- package/src/electron/agent/tools/gmail-tools.ts +240 -0
- package/src/electron/agent/tools/google-calendar-tools.ts +258 -0
- package/src/electron/agent/tools/google-drive-tools.ts +228 -0
- package/src/electron/agent/tools/grep-tools.ts +97 -12
- package/src/electron/agent/tools/image-tools.ts +11 -1
- package/src/electron/agent/tools/notion-tools.ts +330 -0
- package/src/electron/agent/tools/onedrive-tools.ts +217 -0
- package/src/electron/agent/tools/registry.ts +794 -10
- package/src/electron/agent/tools/search-tools.ts +29 -11
- package/src/electron/agent/tools/sharepoint-tools.ts +247 -0
- package/src/electron/agent/tools/shell-tools.ts +11 -3
- package/src/electron/agent/tools/x-tools.ts +1 -1
- package/src/electron/agents/agent-dispatch.ts +79 -0
- package/src/electron/database/SecureSettingsRepository.ts +7 -1
- package/src/electron/database/repositories.ts +58 -6
- package/src/electron/database/schema.ts +8 -0
- package/src/electron/gateway/channels/discord.ts +4 -0
- package/src/electron/gateway/channels/google-chat.ts +3 -0
- package/src/electron/gateway/channels/line.ts +3 -0
- package/src/electron/gateway/channels/matrix-client.ts +15 -0
- package/src/electron/gateway/channels/matrix.ts +31 -0
- package/src/electron/gateway/channels/mattermost.ts +3 -0
- package/src/electron/gateway/channels/signal.ts +3 -0
- package/src/electron/gateway/channels/slack.ts +9 -4
- package/src/electron/gateway/channels/teams.ts +4 -0
- package/src/electron/gateway/channels/telegram.ts +2 -0
- package/src/electron/gateway/channels/twitch.ts +2 -0
- package/src/electron/gateway/channels/types.ts +8 -0
- package/src/electron/gateway/channels/whatsapp.ts +66 -0
- package/src/electron/gateway/index.ts +95 -2
- package/src/electron/gateway/router.ts +231 -161
- package/src/electron/gateway/security.ts +21 -9
- package/src/electron/ipc/canvas-handlers.ts +10 -0
- package/src/electron/ipc/handlers.ts +848 -292
- package/src/electron/main.ts +35 -0
- package/src/electron/mcp/oauth/connector-oauth.ts +448 -0
- package/src/electron/mcp/registry/MCPRegistryManager.ts +343 -12
- package/src/electron/memory/MemoryService.ts +7 -1
- package/src/electron/preload.ts +200 -5
- package/src/electron/settings/appearance-manager.ts +20 -2
- package/src/electron/settings/box-manager.ts +58 -0
- package/src/electron/settings/dropbox-manager.ts +58 -0
- package/src/electron/settings/google-workspace-manager.ts +59 -0
- package/src/electron/settings/notion-manager.ts +60 -0
- package/src/electron/settings/onedrive-manager.ts +58 -0
- package/src/electron/settings/sharepoint-manager.ts +58 -0
- package/src/electron/utils/box-api.ts +184 -0
- package/src/electron/utils/dropbox-api.ts +171 -0
- package/src/electron/utils/env-migration.ts +22 -0
- package/src/electron/utils/gmail-api.ts +121 -0
- package/src/electron/utils/google-calendar-api.ts +115 -0
- package/src/electron/utils/google-workspace-api.ts +228 -0
- package/src/electron/utils/google-workspace-auth.ts +109 -0
- package/src/electron/utils/google-workspace-oauth.ts +232 -0
- package/src/electron/utils/notion-api.ts +126 -0
- package/src/electron/utils/onedrive-api.ts +137 -0
- package/src/electron/utils/sharepoint-api.ts +132 -0
- package/src/electron/utils/validation.ts +128 -1
- package/src/electron/utils/x-cli.ts +1 -1
- package/src/renderer/App.tsx +119 -8
- package/src/renderer/components/ActivityFeedItem.tsx +34 -17
- package/src/renderer/components/AgentWorkingStatePanel.tsx +7 -5
- package/src/renderer/components/AppearanceSettings.tsx +37 -2
- package/src/renderer/components/BlueBubblesSettings.tsx +18 -7
- package/src/renderer/components/BoxSettings.tsx +203 -0
- package/src/renderer/components/BrowserView.tsx +101 -0
- package/src/renderer/components/BuiltinToolsSettings.tsx +105 -0
- package/src/renderer/components/CanvasPreview.tsx +68 -1
- package/src/renderer/components/ConnectorEnvModal.tsx +116 -0
- package/src/renderer/components/ConnectorSetupModal.tsx +566 -0
- package/src/renderer/components/ConnectorsSettings.tsx +397 -0
- package/src/renderer/components/ControlPlaneSettings.tsx +2 -0
- package/src/renderer/components/DiscordSettings.tsx +18 -7
- package/src/renderer/components/DropboxSettings.tsx +202 -0
- package/src/renderer/components/EmailSettings.tsx +18 -7
- package/src/renderer/components/FileViewer.tsx +21 -13
- package/src/renderer/components/GoogleChatSettings.tsx +17 -7
- package/src/renderer/components/GoogleWorkspaceSettings.tsx +332 -0
- package/src/renderer/components/ImessageSettings.tsx +22 -11
- package/src/renderer/components/LineIcons.tsx +376 -0
- package/src/renderer/components/LineSettings.tsx +18 -7
- package/src/renderer/components/MCPSettings.tsx +56 -0
- package/src/renderer/components/MainContent.tsx +740 -76
- package/src/renderer/components/MatrixSettings.tsx +18 -7
- package/src/renderer/components/MattermostSettings.tsx +18 -7
- package/src/renderer/components/NodesSettings.tsx +58 -99
- package/src/renderer/components/NotificationPanel.tsx +25 -11
- package/src/renderer/components/NotionSettings.tsx +231 -0
- package/src/renderer/components/Onboarding/Onboarding.tsx +13 -1
- package/src/renderer/components/OnboardingModal.tsx +70 -1
- package/src/renderer/components/OneDriveSettings.tsx +212 -0
- package/src/renderer/components/RightPanel.tsx +141 -28
- package/src/renderer/components/ScheduledTasksSettings.tsx +10 -62
- package/src/renderer/components/SearchSettings.tsx +118 -114
- package/src/renderer/components/Settings.tsx +1425 -651
- package/src/renderer/components/SharePointSettings.tsx +224 -0
- package/src/renderer/components/Sidebar.tsx +94 -19
- package/src/renderer/components/SignalSettings.tsx +18 -7
- package/src/renderer/components/SkillHubBrowser.tsx +144 -185
- package/src/renderer/components/SlackSettings.tsx +18 -7
- package/src/renderer/components/TaskQuickActions.tsx +11 -6
- package/src/renderer/components/TaskTimeline.tsx +58 -26
- package/src/renderer/components/TeamsSettings.tsx +18 -7
- package/src/renderer/components/TelegramSettings.tsx +18 -7
- package/src/renderer/components/ThemeIcon.tsx +16 -0
- package/src/renderer/components/TwitchSettings.tsx +18 -7
- package/src/renderer/components/VoiceSettings.tsx +30 -74
- package/src/renderer/components/WhatsAppSettings.tsx +48 -37
- package/src/renderer/components/WorkingStateHistory.tsx +7 -5
- package/src/renderer/components/WorkspaceSelector.tsx +42 -13
- package/src/renderer/hooks/useOnboardingFlow.ts +21 -0
- package/src/renderer/styles/index.css +2333 -209
- package/src/shared/channelMessages.ts +367 -4
- package/src/shared/llm-provider-catalog.ts +217 -0
- package/src/shared/types.ts +251 -2
package/src/electron/preload.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { contextBridge, ipcRenderer } from 'electron';
|
|
2
|
+
import type { LLMProviderType } from '../shared/types';
|
|
2
3
|
|
|
3
4
|
// IPC Channel names - inlined to avoid require() issues in sandboxed preload
|
|
4
5
|
const IPC_CHANNELS = {
|
|
@@ -19,6 +20,7 @@ const IPC_CHANNELS = {
|
|
|
19
20
|
WORKSPACE_LIST: 'workspace:list',
|
|
20
21
|
WORKSPACE_CREATE: 'workspace:create',
|
|
21
22
|
WORKSPACE_UPDATE_PERMISSIONS: 'workspace:updatePermissions',
|
|
23
|
+
WORKSPACE_TOUCH: 'workspace:touch',
|
|
22
24
|
WORKSPACE_GET_TEMP: 'workspace:getTemp',
|
|
23
25
|
APPROVAL_RESPOND: 'approval:respond',
|
|
24
26
|
ARTIFACT_LIST: 'artifact:list',
|
|
@@ -35,6 +37,9 @@ const IPC_CHANNELS = {
|
|
|
35
37
|
LLM_GET_GEMINI_MODELS: 'llm:getGeminiModels',
|
|
36
38
|
LLM_GET_OPENROUTER_MODELS: 'llm:getOpenRouterModels',
|
|
37
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',
|
|
38
43
|
LLM_OPENAI_OAUTH_START: 'llm:openaiOAuthStart',
|
|
39
44
|
LLM_OPENAI_OAUTH_LOGOUT: 'llm:openaiOAuthLogout',
|
|
40
45
|
LLM_GET_BEDROCK_MODELS: 'llm:getBedrockModels',
|
|
@@ -60,6 +65,37 @@ const IPC_CHANNELS = {
|
|
|
60
65
|
X_SAVE_SETTINGS: 'x:saveSettings',
|
|
61
66
|
X_TEST_CONNECTION: 'x:testConnection',
|
|
62
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 Workspace Settings
|
|
84
|
+
GOOGLE_WORKSPACE_GET_SETTINGS: 'googleWorkspace:getSettings',
|
|
85
|
+
GOOGLE_WORKSPACE_SAVE_SETTINGS: 'googleWorkspace:saveSettings',
|
|
86
|
+
GOOGLE_WORKSPACE_TEST_CONNECTION: 'googleWorkspace:testConnection',
|
|
87
|
+
GOOGLE_WORKSPACE_GET_STATUS: 'googleWorkspace:getStatus',
|
|
88
|
+
GOOGLE_WORKSPACE_OAUTH_START: 'googleWorkspace:oauthStart',
|
|
89
|
+
// Dropbox Settings
|
|
90
|
+
DROPBOX_GET_SETTINGS: 'dropbox:getSettings',
|
|
91
|
+
DROPBOX_SAVE_SETTINGS: 'dropbox:saveSettings',
|
|
92
|
+
DROPBOX_TEST_CONNECTION: 'dropbox:testConnection',
|
|
93
|
+
DROPBOX_GET_STATUS: 'dropbox:getStatus',
|
|
94
|
+
// SharePoint Settings
|
|
95
|
+
SHAREPOINT_GET_SETTINGS: 'sharepoint:getSettings',
|
|
96
|
+
SHAREPOINT_SAVE_SETTINGS: 'sharepoint:saveSettings',
|
|
97
|
+
SHAREPOINT_TEST_CONNECTION: 'sharepoint:testConnection',
|
|
98
|
+
SHAREPOINT_GET_STATUS: 'sharepoint:getStatus',
|
|
63
99
|
// App Updates
|
|
64
100
|
APP_CHECK_UPDATES: 'app:checkUpdates',
|
|
65
101
|
APP_DOWNLOAD_UPDATE: 'app:downloadUpdate',
|
|
@@ -127,6 +163,7 @@ const IPC_CHANNELS = {
|
|
|
127
163
|
MCP_GET_SERVER_TOOLS: 'mcp:getServerTools',
|
|
128
164
|
MCP_TEST_SERVER: 'mcp:testServer',
|
|
129
165
|
MCP_SERVER_STATUS_CHANGE: 'mcp:serverStatusChange',
|
|
166
|
+
MCP_CONNECTOR_OAUTH_START: 'mcp:connectorOAuthStart',
|
|
130
167
|
// MCP Registry
|
|
131
168
|
MCP_REGISTRY_FETCH: 'mcp:registryFetch',
|
|
132
169
|
MCP_REGISTRY_SEARCH: 'mcp:registrySearch',
|
|
@@ -228,6 +265,7 @@ const IPC_CHANNELS = {
|
|
|
228
265
|
CANVAS_EXPORT_HTML: 'canvas:exportHTML',
|
|
229
266
|
CANVAS_EXPORT_TO_FOLDER: 'canvas:exportToFolder',
|
|
230
267
|
CANVAS_OPEN_IN_BROWSER: 'canvas:openInBrowser',
|
|
268
|
+
CANVAS_OPEN_URL: 'canvas:openUrl',
|
|
231
269
|
CANVAS_GET_SESSION_DIR: 'canvas:getSessionDir',
|
|
232
270
|
// Mobile Companion Nodes
|
|
233
271
|
NODE_LIST: 'node:list',
|
|
@@ -606,6 +644,8 @@ interface BuiltinToolsSettings {
|
|
|
606
644
|
image: ToolCategoryConfig;
|
|
607
645
|
};
|
|
608
646
|
toolOverrides: Record<string, { enabled: boolean; priority?: 'high' | 'normal' | 'low' }>;
|
|
647
|
+
toolTimeouts: Record<string, number>;
|
|
648
|
+
toolAutoApprove: Record<string, boolean>;
|
|
609
649
|
version: string;
|
|
610
650
|
}
|
|
611
651
|
|
|
@@ -744,7 +784,7 @@ interface CronEvent {
|
|
|
744
784
|
}
|
|
745
785
|
|
|
746
786
|
// Notification Types (inlined for sandboxed preload)
|
|
747
|
-
type NotificationType = 'task_completed' | 'task_failed' | 'scheduled_task' | 'info' | 'warning' | 'error';
|
|
787
|
+
type NotificationType = 'task_completed' | 'task_failed' | 'scheduled_task' | 'input_required' | 'info' | 'warning' | 'error';
|
|
748
788
|
|
|
749
789
|
interface AppNotification {
|
|
750
790
|
id: string;
|
|
@@ -1388,11 +1428,15 @@ interface UpdateContextPolicyOptions {
|
|
|
1388
1428
|
contextBridge.exposeInMainWorld('electronAPI', {
|
|
1389
1429
|
// Dialog APIs
|
|
1390
1430
|
selectFolder: () => ipcRenderer.invoke('dialog:selectFolder'),
|
|
1431
|
+
selectFiles: () => ipcRenderer.invoke('dialog:selectFiles'),
|
|
1391
1432
|
|
|
1392
1433
|
// File APIs
|
|
1393
1434
|
openFile: (filePath: string, workspacePath?: string) => ipcRenderer.invoke('file:open', filePath, workspacePath),
|
|
1394
1435
|
showInFinder: (filePath: string, workspacePath?: string) => ipcRenderer.invoke('file:showInFinder', filePath, workspacePath),
|
|
1395
1436
|
readFileForViewer: (filePath: string, workspacePath?: string) => ipcRenderer.invoke('file:readForViewer', { filePath, workspacePath }),
|
|
1437
|
+
importFilesToWorkspace: (data: { workspaceId: string; files: string[] }) => ipcRenderer.invoke('file:importToWorkspace', data),
|
|
1438
|
+
importDataToWorkspace: (data: { workspaceId: string; files: Array<{ name: string; data: string; mimeType?: string }> }) =>
|
|
1439
|
+
ipcRenderer.invoke('file:importDataToWorkspace', data),
|
|
1396
1440
|
|
|
1397
1441
|
// Shell APIs
|
|
1398
1442
|
openExternal: (url: string) => ipcRenderer.invoke('shell:openExternal', url),
|
|
@@ -1428,6 +1472,7 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
|
|
1428
1472
|
listWorkspaces: () => ipcRenderer.invoke(IPC_CHANNELS.WORKSPACE_LIST),
|
|
1429
1473
|
selectWorkspace: (id: string) => ipcRenderer.invoke(IPC_CHANNELS.WORKSPACE_SELECT, id),
|
|
1430
1474
|
getTempWorkspace: () => ipcRenderer.invoke(IPC_CHANNELS.WORKSPACE_GET_TEMP),
|
|
1475
|
+
touchWorkspace: (id: string) => ipcRenderer.invoke(IPC_CHANNELS.WORKSPACE_TOUCH, id),
|
|
1431
1476
|
updateWorkspacePermissions: (id: string, permissions: { shell?: boolean; network?: boolean }) =>
|
|
1432
1477
|
ipcRenderer.invoke(IPC_CHANNELS.WORKSPACE_UPDATE_PERMISSIONS, id, permissions),
|
|
1433
1478
|
|
|
@@ -1451,8 +1496,11 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
|
|
1451
1496
|
setLLMModel: (modelKey: string) => ipcRenderer.invoke(IPC_CHANNELS.LLM_SET_MODEL, modelKey),
|
|
1452
1497
|
getOllamaModels: (baseUrl?: string) => ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_OLLAMA_MODELS, baseUrl),
|
|
1453
1498
|
getGeminiModels: (apiKey?: string) => ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_GEMINI_MODELS, apiKey),
|
|
1454
|
-
getOpenRouterModels: (apiKey?: string) => ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_OPENROUTER_MODELS, apiKey),
|
|
1499
|
+
getOpenRouterModels: (apiKey?: string, baseUrl?: string) => ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_OPENROUTER_MODELS, apiKey, baseUrl),
|
|
1455
1500
|
getOpenAIModels: (apiKey?: string) => ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_OPENAI_MODELS, apiKey),
|
|
1501
|
+
getGroqModels: (apiKey?: string, baseUrl?: string) => ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_GROQ_MODELS, apiKey, baseUrl),
|
|
1502
|
+
getXAIModels: (apiKey?: string, baseUrl?: string) => ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_XAI_MODELS, apiKey, baseUrl),
|
|
1503
|
+
getKimiModels: (apiKey?: string, baseUrl?: string) => ipcRenderer.invoke(IPC_CHANNELS.LLM_GET_KIMI_MODELS, apiKey, baseUrl),
|
|
1456
1504
|
openaiOAuthStart: () => ipcRenderer.invoke(IPC_CHANNELS.LLM_OPENAI_OAUTH_START),
|
|
1457
1505
|
openaiOAuthLogout: () => ipcRenderer.invoke(IPC_CHANNELS.LLM_OPENAI_OAUTH_LOGOUT),
|
|
1458
1506
|
getBedrockModels: (config?: { region?: string; accessKeyId?: string; secretAccessKey?: string; profile?: string }) =>
|
|
@@ -1480,6 +1528,11 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
|
|
1480
1528
|
ipcRenderer.on('gateway:message', subscription);
|
|
1481
1529
|
return () => ipcRenderer.removeListener('gateway:message', subscription);
|
|
1482
1530
|
},
|
|
1531
|
+
onGatewayUsersUpdated: (callback: (data: { channelId: string; channelType: string }) => void) => {
|
|
1532
|
+
const subscription = (_: any, data: { channelId: string; channelType: string }) => callback(data);
|
|
1533
|
+
ipcRenderer.on('gateway:users-updated', subscription);
|
|
1534
|
+
return () => ipcRenderer.removeListener('gateway:users-updated', subscription);
|
|
1535
|
+
},
|
|
1483
1536
|
|
|
1484
1537
|
// WhatsApp-specific APIs
|
|
1485
1538
|
getWhatsAppInfo: () => ipcRenderer.invoke('whatsapp:get-info'),
|
|
@@ -1508,6 +1561,44 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
|
|
1508
1561
|
testXConnection: () => ipcRenderer.invoke(IPC_CHANNELS.X_TEST_CONNECTION),
|
|
1509
1562
|
getXStatus: () => ipcRenderer.invoke(IPC_CHANNELS.X_GET_STATUS),
|
|
1510
1563
|
|
|
1564
|
+
// Notion Settings APIs
|
|
1565
|
+
getNotionSettings: () => ipcRenderer.invoke(IPC_CHANNELS.NOTION_GET_SETTINGS),
|
|
1566
|
+
saveNotionSettings: (settings: any) => ipcRenderer.invoke(IPC_CHANNELS.NOTION_SAVE_SETTINGS, settings),
|
|
1567
|
+
testNotionConnection: () => ipcRenderer.invoke(IPC_CHANNELS.NOTION_TEST_CONNECTION),
|
|
1568
|
+
getNotionStatus: () => ipcRenderer.invoke(IPC_CHANNELS.NOTION_GET_STATUS),
|
|
1569
|
+
|
|
1570
|
+
// Box Settings APIs
|
|
1571
|
+
getBoxSettings: () => ipcRenderer.invoke(IPC_CHANNELS.BOX_GET_SETTINGS),
|
|
1572
|
+
saveBoxSettings: (settings: any) => ipcRenderer.invoke(IPC_CHANNELS.BOX_SAVE_SETTINGS, settings),
|
|
1573
|
+
testBoxConnection: () => ipcRenderer.invoke(IPC_CHANNELS.BOX_TEST_CONNECTION),
|
|
1574
|
+
getBoxStatus: () => ipcRenderer.invoke(IPC_CHANNELS.BOX_GET_STATUS),
|
|
1575
|
+
|
|
1576
|
+
// OneDrive Settings APIs
|
|
1577
|
+
getOneDriveSettings: () => ipcRenderer.invoke(IPC_CHANNELS.ONEDRIVE_GET_SETTINGS),
|
|
1578
|
+
saveOneDriveSettings: (settings: any) => ipcRenderer.invoke(IPC_CHANNELS.ONEDRIVE_SAVE_SETTINGS, settings),
|
|
1579
|
+
testOneDriveConnection: () => ipcRenderer.invoke(IPC_CHANNELS.ONEDRIVE_TEST_CONNECTION),
|
|
1580
|
+
getOneDriveStatus: () => ipcRenderer.invoke(IPC_CHANNELS.ONEDRIVE_GET_STATUS),
|
|
1581
|
+
|
|
1582
|
+
// Google Workspace Settings APIs
|
|
1583
|
+
getGoogleWorkspaceSettings: () => ipcRenderer.invoke(IPC_CHANNELS.GOOGLE_WORKSPACE_GET_SETTINGS),
|
|
1584
|
+
saveGoogleWorkspaceSettings: (settings: any) => ipcRenderer.invoke(IPC_CHANNELS.GOOGLE_WORKSPACE_SAVE_SETTINGS, settings),
|
|
1585
|
+
testGoogleWorkspaceConnection: () => ipcRenderer.invoke(IPC_CHANNELS.GOOGLE_WORKSPACE_TEST_CONNECTION),
|
|
1586
|
+
getGoogleWorkspaceStatus: () => ipcRenderer.invoke(IPC_CHANNELS.GOOGLE_WORKSPACE_GET_STATUS),
|
|
1587
|
+
startGoogleWorkspaceOAuth: (payload: { clientId: string; clientSecret?: string; scopes?: string[] }) =>
|
|
1588
|
+
ipcRenderer.invoke(IPC_CHANNELS.GOOGLE_WORKSPACE_OAUTH_START, payload),
|
|
1589
|
+
|
|
1590
|
+
// Dropbox Settings APIs
|
|
1591
|
+
getDropboxSettings: () => ipcRenderer.invoke(IPC_CHANNELS.DROPBOX_GET_SETTINGS),
|
|
1592
|
+
saveDropboxSettings: (settings: any) => ipcRenderer.invoke(IPC_CHANNELS.DROPBOX_SAVE_SETTINGS, settings),
|
|
1593
|
+
testDropboxConnection: () => ipcRenderer.invoke(IPC_CHANNELS.DROPBOX_TEST_CONNECTION),
|
|
1594
|
+
getDropboxStatus: () => ipcRenderer.invoke(IPC_CHANNELS.DROPBOX_GET_STATUS),
|
|
1595
|
+
|
|
1596
|
+
// SharePoint Settings APIs
|
|
1597
|
+
getSharePointSettings: () => ipcRenderer.invoke(IPC_CHANNELS.SHAREPOINT_GET_SETTINGS),
|
|
1598
|
+
saveSharePointSettings: (settings: any) => ipcRenderer.invoke(IPC_CHANNELS.SHAREPOINT_SAVE_SETTINGS, settings),
|
|
1599
|
+
testSharePointConnection: () => ipcRenderer.invoke(IPC_CHANNELS.SHAREPOINT_TEST_CONNECTION),
|
|
1600
|
+
getSharePointStatus: () => ipcRenderer.invoke(IPC_CHANNELS.SHAREPOINT_GET_STATUS),
|
|
1601
|
+
|
|
1511
1602
|
// App Update APIs
|
|
1512
1603
|
getAppVersion: () => ipcRenderer.invoke(IPC_CHANNELS.APP_GET_VERSION),
|
|
1513
1604
|
checkForUpdates: () => ipcRenderer.invoke(IPC_CHANNELS.APP_CHECK_UPDATES),
|
|
@@ -1609,6 +1700,10 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
|
|
1609
1700
|
getMCPServerTools: (serverId: string) => ipcRenderer.invoke(IPC_CHANNELS.MCP_GET_SERVER_TOOLS, serverId),
|
|
1610
1701
|
testMCPServer: (serverId: string) => ipcRenderer.invoke(IPC_CHANNELS.MCP_TEST_SERVER, serverId),
|
|
1611
1702
|
|
|
1703
|
+
// MCP Connector OAuth
|
|
1704
|
+
startConnectorOAuth: (payload: { provider: 'salesforce' | 'jira' | 'hubspot' | 'zendesk'; clientId: string; clientSecret?: string; scopes?: string[]; loginUrl?: string; subdomain?: string }) =>
|
|
1705
|
+
ipcRenderer.invoke(IPC_CHANNELS.MCP_CONNECTOR_OAUTH_START, payload),
|
|
1706
|
+
|
|
1612
1707
|
// MCP Status change event listener
|
|
1613
1708
|
onMCPStatusChange: (callback: (status: any[]) => void) => {
|
|
1614
1709
|
const subscription = (_: any, data: any) => callback(data);
|
|
@@ -1692,6 +1787,8 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
|
|
1692
1787
|
|
|
1693
1788
|
// Notification APIs
|
|
1694
1789
|
listNotifications: () => ipcRenderer.invoke(IPC_CHANNELS.NOTIFICATION_LIST),
|
|
1790
|
+
addNotification: (data: { type: NotificationType; title: string; message: string; taskId?: string; cronJobId?: string; workspaceId?: string }) =>
|
|
1791
|
+
ipcRenderer.invoke(IPC_CHANNELS.NOTIFICATION_ADD, data),
|
|
1695
1792
|
getUnreadNotificationCount: () => ipcRenderer.invoke('notification:unreadCount'),
|
|
1696
1793
|
markNotificationRead: (id: string) => ipcRenderer.invoke(IPC_CHANNELS.NOTIFICATION_MARK_READ, id),
|
|
1697
1794
|
markAllNotificationsRead: () => ipcRenderer.invoke(IPC_CHANNELS.NOTIFICATION_MARK_ALL_READ),
|
|
@@ -1791,6 +1888,8 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
|
|
1791
1888
|
ipcRenderer.invoke(IPC_CHANNELS.CANVAS_EXPORT_TO_FOLDER, data),
|
|
1792
1889
|
canvasOpenInBrowser: (sessionId: string) =>
|
|
1793
1890
|
ipcRenderer.invoke(IPC_CHANNELS.CANVAS_OPEN_IN_BROWSER, sessionId),
|
|
1891
|
+
canvasOpenUrl: (data: { sessionId: string; url: string; show?: boolean }) =>
|
|
1892
|
+
ipcRenderer.invoke(IPC_CHANNELS.CANVAS_OPEN_URL, data),
|
|
1794
1893
|
canvasGetSessionDir: (sessionId: string) =>
|
|
1795
1894
|
ipcRenderer.invoke(IPC_CHANNELS.CANVAS_GET_SESSION_DIR, sessionId),
|
|
1796
1895
|
onCanvasEvent: (callback: (event: CanvasEvent) => void) => {
|
|
@@ -2149,9 +2248,12 @@ export type {
|
|
|
2149
2248
|
|
|
2150
2249
|
export interface ElectronAPI {
|
|
2151
2250
|
selectFolder: () => Promise<string | null>;
|
|
2251
|
+
selectFiles: () => Promise<Array<{ path: string; name: string; size: number; mimeType?: string }>>;
|
|
2152
2252
|
openFile: (filePath: string, workspacePath?: string) => Promise<string>;
|
|
2153
2253
|
showInFinder: (filePath: string, workspacePath?: string) => Promise<void>;
|
|
2154
2254
|
readFileForViewer: (filePath: string, workspacePath?: string) => Promise<FileViewerResult>;
|
|
2255
|
+
importFilesToWorkspace: (data: { workspaceId: string; files: string[] }) => Promise<Array<{ relativePath: string; fileName: string; size: number; mimeType?: string }>>;
|
|
2256
|
+
importDataToWorkspace: (data: { workspaceId: string; files: Array<{ name: string; data: string; mimeType?: string }> }) => Promise<Array<{ relativePath: string; fileName: string; size: number; mimeType?: string }>>;
|
|
2155
2257
|
openExternal: (url: string) => Promise<void>;
|
|
2156
2258
|
createTask: (data: any) => Promise<any>;
|
|
2157
2259
|
getTask: (id: string) => Promise<any>;
|
|
@@ -2170,6 +2272,7 @@ export interface ElectronAPI {
|
|
|
2170
2272
|
listWorkspaces: () => Promise<any[]>;
|
|
2171
2273
|
selectWorkspace: (id: string) => Promise<any>;
|
|
2172
2274
|
getTempWorkspace: () => Promise<any>;
|
|
2275
|
+
touchWorkspace: (id: string) => Promise<any>;
|
|
2173
2276
|
updateWorkspacePermissions: (id: string, permissions: { shell?: boolean; network?: boolean }) => Promise<any>;
|
|
2174
2277
|
respondToApproval: (data: any) => Promise<void>;
|
|
2175
2278
|
listArtifacts: (taskId: string) => Promise<any[]>;
|
|
@@ -2182,16 +2285,24 @@ export interface ElectronAPI {
|
|
|
2182
2285
|
testLLMProvider: (config: any) => Promise<{ success: boolean; error?: string }>;
|
|
2183
2286
|
getLLMModels: () => Promise<Array<{ key: string; displayName: string; description: string }>>;
|
|
2184
2287
|
getLLMConfigStatus: () => Promise<{
|
|
2185
|
-
currentProvider:
|
|
2288
|
+
currentProvider: LLMProviderType;
|
|
2186
2289
|
currentModel: string;
|
|
2187
|
-
providers: Array<{
|
|
2290
|
+
providers: Array<{
|
|
2291
|
+
type: LLMProviderType;
|
|
2292
|
+
name: string;
|
|
2293
|
+
configured: boolean;
|
|
2294
|
+
source?: string;
|
|
2295
|
+
}>;
|
|
2188
2296
|
models: Array<{ key: string; displayName: string; description: string }>;
|
|
2189
2297
|
}>;
|
|
2190
2298
|
setLLMModel: (modelKey: string) => Promise<{ success: boolean }>;
|
|
2191
2299
|
getOllamaModels: (baseUrl?: string) => Promise<Array<{ name: string; size: number; modified: string }>>;
|
|
2192
2300
|
getGeminiModels: (apiKey?: string) => Promise<Array<{ name: string; displayName: string; description: string }>>;
|
|
2193
|
-
getOpenRouterModels: (apiKey?: string) => Promise<Array<{ id: string; name: string; context_length: number }>>;
|
|
2301
|
+
getOpenRouterModels: (apiKey?: string, baseUrl?: string) => Promise<Array<{ id: string; name: string; context_length: number }>>;
|
|
2194
2302
|
getOpenAIModels: (apiKey?: string) => Promise<Array<{ id: string; name: string; description: string }>>;
|
|
2303
|
+
getGroqModels: (apiKey?: string, baseUrl?: string) => Promise<Array<{ id: string; name: string }>>;
|
|
2304
|
+
getXAIModels: (apiKey?: string, baseUrl?: string) => Promise<Array<{ id: string; name: string }>>;
|
|
2305
|
+
getKimiModels: (apiKey?: string, baseUrl?: string) => Promise<Array<{ id: string; name: string }>>;
|
|
2195
2306
|
openaiOAuthStart: () => Promise<{ success: boolean; error?: string }>;
|
|
2196
2307
|
openaiOAuthLogout: () => Promise<{ success: boolean }>;
|
|
2197
2308
|
getBedrockModels: (config?: { region?: string; accessKeyId?: string; secretAccessKey?: string; profile?: string }) => Promise<Array<{ id: string; name: string; provider: string; description: string }>>;
|
|
@@ -2208,6 +2319,7 @@ export interface ElectronAPI {
|
|
|
2208
2319
|
revokeGatewayAccess: (channelId: string, userId: string) => Promise<void>;
|
|
2209
2320
|
generateGatewayPairing: (channelId: string, userId: string, displayName?: string) => Promise<string>;
|
|
2210
2321
|
onGatewayMessage: (callback: (data: any) => void) => () => void;
|
|
2322
|
+
onGatewayUsersUpdated: (callback: (data: { channelId: string; channelType: string }) => void) => () => void;
|
|
2211
2323
|
// WhatsApp-specific APIs
|
|
2212
2324
|
getWhatsAppInfo: () => Promise<{ qrCode?: string; phoneNumber?: string; status?: string }>;
|
|
2213
2325
|
whatsAppLogout: () => Promise<void>;
|
|
@@ -2250,6 +2362,76 @@ export interface ElectronAPI {
|
|
|
2250
2362
|
saveXSettings: (settings: any) => Promise<{ success: boolean }>;
|
|
2251
2363
|
testXConnection: () => Promise<{ success: boolean; error?: string; username?: string; userId?: string }>;
|
|
2252
2364
|
getXStatus: () => Promise<{ installed: boolean; connected: boolean; username?: string; error?: string }>;
|
|
2365
|
+
// Notion Settings
|
|
2366
|
+
getNotionSettings: () => Promise<{
|
|
2367
|
+
enabled: boolean;
|
|
2368
|
+
apiKey?: string;
|
|
2369
|
+
notionVersion?: string;
|
|
2370
|
+
timeoutMs?: number;
|
|
2371
|
+
}>;
|
|
2372
|
+
saveNotionSettings: (settings: any) => Promise<{ success: boolean }>;
|
|
2373
|
+
testNotionConnection: () => Promise<{ success: boolean; error?: string; name?: string; userId?: string }>;
|
|
2374
|
+
getNotionStatus: () => Promise<{ configured: boolean; connected: boolean; name?: string; error?: string }>;
|
|
2375
|
+
// Box Settings
|
|
2376
|
+
getBoxSettings: () => Promise<{
|
|
2377
|
+
enabled: boolean;
|
|
2378
|
+
accessToken?: string;
|
|
2379
|
+
timeoutMs?: number;
|
|
2380
|
+
}>;
|
|
2381
|
+
saveBoxSettings: (settings: any) => Promise<{ success: boolean }>;
|
|
2382
|
+
testBoxConnection: () => Promise<{ success: boolean; error?: string; name?: string; userId?: string }>;
|
|
2383
|
+
getBoxStatus: () => Promise<{ configured: boolean; connected: boolean; name?: string; error?: string }>;
|
|
2384
|
+
// OneDrive Settings
|
|
2385
|
+
getOneDriveSettings: () => Promise<{
|
|
2386
|
+
enabled: boolean;
|
|
2387
|
+
accessToken?: string;
|
|
2388
|
+
driveId?: string;
|
|
2389
|
+
timeoutMs?: number;
|
|
2390
|
+
}>;
|
|
2391
|
+
saveOneDriveSettings: (settings: any) => Promise<{ success: boolean }>;
|
|
2392
|
+
testOneDriveConnection: () => Promise<{ success: boolean; error?: string; name?: string; userId?: string; driveId?: string }>;
|
|
2393
|
+
getOneDriveStatus: () => Promise<{ configured: boolean; connected: boolean; name?: string; error?: string }>;
|
|
2394
|
+
// Google Workspace Settings
|
|
2395
|
+
getGoogleWorkspaceSettings: () => Promise<{
|
|
2396
|
+
enabled: boolean;
|
|
2397
|
+
clientId?: string;
|
|
2398
|
+
clientSecret?: string;
|
|
2399
|
+
accessToken?: string;
|
|
2400
|
+
refreshToken?: string;
|
|
2401
|
+
tokenExpiresAt?: number;
|
|
2402
|
+
scopes?: string[];
|
|
2403
|
+
timeoutMs?: number;
|
|
2404
|
+
}>;
|
|
2405
|
+
saveGoogleWorkspaceSettings: (settings: any) => Promise<{ success: boolean }>;
|
|
2406
|
+
testGoogleWorkspaceConnection: () => Promise<{ success: boolean; error?: string; name?: string; userId?: string; email?: string }>;
|
|
2407
|
+
getGoogleWorkspaceStatus: () => Promise<{ configured: boolean; connected: boolean; name?: string; error?: string }>;
|
|
2408
|
+
startGoogleWorkspaceOAuth: (payload: { clientId: string; clientSecret?: string; scopes?: string[] }) => Promise<{
|
|
2409
|
+
accessToken: string;
|
|
2410
|
+
refreshToken?: string;
|
|
2411
|
+
expiresIn?: number;
|
|
2412
|
+
tokenType?: string;
|
|
2413
|
+
scopes?: string[];
|
|
2414
|
+
}>;
|
|
2415
|
+
// Dropbox Settings
|
|
2416
|
+
getDropboxSettings: () => Promise<{
|
|
2417
|
+
enabled: boolean;
|
|
2418
|
+
accessToken?: string;
|
|
2419
|
+
timeoutMs?: number;
|
|
2420
|
+
}>;
|
|
2421
|
+
saveDropboxSettings: (settings: any) => Promise<{ success: boolean }>;
|
|
2422
|
+
testDropboxConnection: () => Promise<{ success: boolean; error?: string; name?: string; userId?: string; email?: string }>;
|
|
2423
|
+
getDropboxStatus: () => Promise<{ configured: boolean; connected: boolean; name?: string; error?: string }>;
|
|
2424
|
+
// SharePoint Settings
|
|
2425
|
+
getSharePointSettings: () => Promise<{
|
|
2426
|
+
enabled: boolean;
|
|
2427
|
+
accessToken?: string;
|
|
2428
|
+
siteId?: string;
|
|
2429
|
+
driveId?: string;
|
|
2430
|
+
timeoutMs?: number;
|
|
2431
|
+
}>;
|
|
2432
|
+
saveSharePointSettings: (settings: any) => Promise<{ success: boolean }>;
|
|
2433
|
+
testSharePointConnection: () => Promise<{ success: boolean; error?: string; name?: string; userId?: string }>;
|
|
2434
|
+
getSharePointStatus: () => Promise<{ configured: boolean; connected: boolean; name?: string; error?: string }>;
|
|
2253
2435
|
// App Updates
|
|
2254
2436
|
getAppVersion: () => Promise<{
|
|
2255
2437
|
version: string;
|
|
@@ -2316,6 +2498,7 @@ export interface ElectronAPI {
|
|
|
2316
2498
|
// Appearance Settings
|
|
2317
2499
|
getAppearanceSettings: () => Promise<{
|
|
2318
2500
|
themeMode: 'light' | 'dark' | 'system';
|
|
2501
|
+
visualTheme: 'terminal' | 'warm' | 'oblivion';
|
|
2319
2502
|
accentColor: 'cyan' | 'blue' | 'purple' | 'pink' | 'rose' | 'orange' | 'green' | 'teal' | 'coral';
|
|
2320
2503
|
disclaimerAccepted?: boolean;
|
|
2321
2504
|
onboardingCompleted?: boolean;
|
|
@@ -2324,6 +2507,7 @@ export interface ElectronAPI {
|
|
|
2324
2507
|
}>;
|
|
2325
2508
|
saveAppearanceSettings: (settings: {
|
|
2326
2509
|
themeMode?: 'light' | 'dark' | 'system';
|
|
2510
|
+
visualTheme?: 'terminal' | 'warm' | 'oblivion';
|
|
2327
2511
|
accentColor?: 'cyan' | 'blue' | 'purple' | 'pink' | 'rose' | 'orange' | 'green' | 'teal' | 'coral';
|
|
2328
2512
|
disclaimerAccepted?: boolean;
|
|
2329
2513
|
onboardingCompleted?: boolean;
|
|
@@ -2466,6 +2650,15 @@ export interface ElectronAPI {
|
|
|
2466
2650
|
getMCPAllTools: () => Promise<MCPTool[]>;
|
|
2467
2651
|
getMCPServerTools: (serverId: string) => Promise<MCPTool[]>;
|
|
2468
2652
|
testMCPServer: (serverId: string) => Promise<{ success: boolean; error?: string; tools?: number }>;
|
|
2653
|
+
startConnectorOAuth: (payload: { provider: 'salesforce' | 'jira' | 'hubspot' | 'zendesk'; clientId: string; clientSecret?: string; scopes?: string[]; loginUrl?: string; subdomain?: string }) => Promise<{
|
|
2654
|
+
provider: 'salesforce' | 'jira' | 'hubspot' | 'zendesk';
|
|
2655
|
+
accessToken: string;
|
|
2656
|
+
refreshToken?: string;
|
|
2657
|
+
expiresIn?: number;
|
|
2658
|
+
tokenType?: string;
|
|
2659
|
+
instanceUrl?: string;
|
|
2660
|
+
resources?: Array<{ id: string; name: string; url: string; scopes?: string[] }>;
|
|
2661
|
+
}>;
|
|
2469
2662
|
onMCPStatusChange: (callback: (status: MCPServerStatus[]) => void) => () => void;
|
|
2470
2663
|
// MCP Registry
|
|
2471
2664
|
fetchMCPRegistry: () => Promise<MCPRegistry>;
|
|
@@ -2508,6 +2701,7 @@ export interface ElectronAPI {
|
|
|
2508
2701
|
getCronWebhookStatus: () => Promise<CronWebhookStatus>;
|
|
2509
2702
|
// Notifications
|
|
2510
2703
|
listNotifications: () => Promise<AppNotification[]>;
|
|
2704
|
+
addNotification: (data: { type: NotificationType; title: string; message: string; taskId?: string; cronJobId?: string; workspaceId?: string }) => Promise<AppNotification | null>;
|
|
2511
2705
|
getUnreadNotificationCount: () => Promise<number>;
|
|
2512
2706
|
markNotificationRead: (id: string) => Promise<AppNotification | null>;
|
|
2513
2707
|
markAllNotificationsRead: () => Promise<void>;
|
|
@@ -2579,6 +2773,7 @@ export interface ElectronAPI {
|
|
|
2579
2773
|
canvasExportHTML: (sessionId: string) => Promise<{ content: string; filename: string }>;
|
|
2580
2774
|
canvasExportToFolder: (data: { sessionId: string; targetDir: string }) => Promise<{ files: string[]; targetDir: string }>;
|
|
2581
2775
|
canvasOpenInBrowser: (sessionId: string) => Promise<{ success: boolean; path: string }>;
|
|
2776
|
+
canvasOpenUrl: (data: { sessionId: string; url: string; show?: boolean }) => Promise<{ success: boolean; url: string }>;
|
|
2582
2777
|
canvasGetSessionDir: (sessionId: string) => Promise<string | null>;
|
|
2583
2778
|
onCanvasEvent: (callback: (event: CanvasEvent) => void) => () => void;
|
|
2584
2779
|
|
|
@@ -8,13 +8,14 @@
|
|
|
8
8
|
import { app } from 'electron';
|
|
9
9
|
import * as fs from 'fs';
|
|
10
10
|
import * as path from 'path';
|
|
11
|
-
import { AppearanceSettings, ThemeMode, AccentColor } from '../../shared/types';
|
|
11
|
+
import { AppearanceSettings, ThemeMode, VisualTheme, AccentColor } from '../../shared/types';
|
|
12
12
|
import { SecureSettingsRepository } from '../database/SecureSettingsRepository';
|
|
13
13
|
|
|
14
14
|
const LEGACY_SETTINGS_FILE = 'appearance-settings.json';
|
|
15
15
|
|
|
16
16
|
const DEFAULT_SETTINGS: AppearanceSettings = {
|
|
17
17
|
themeMode: 'dark',
|
|
18
|
+
visualTheme: 'terminal',
|
|
18
19
|
accentColor: 'cyan',
|
|
19
20
|
disclaimerAccepted: false,
|
|
20
21
|
onboardingCompleted: false,
|
|
@@ -121,6 +122,13 @@ export class AppearanceManager {
|
|
|
121
122
|
if (!isValidThemeMode(settings.themeMode)) {
|
|
122
123
|
settings.themeMode = DEFAULT_SETTINGS.themeMode;
|
|
123
124
|
}
|
|
125
|
+
if (!isValidVisualTheme(settings.visualTheme)) {
|
|
126
|
+
settings.visualTheme = DEFAULT_SETTINGS.visualTheme;
|
|
127
|
+
}
|
|
128
|
+
// Normalize deprecated 'oblivion' theme to 'warm'
|
|
129
|
+
if (settings.visualTheme === 'oblivion') {
|
|
130
|
+
settings.visualTheme = 'warm';
|
|
131
|
+
}
|
|
124
132
|
if (!isValidAccentColor(settings.accentColor)) {
|
|
125
133
|
settings.accentColor = DEFAULT_SETTINGS.accentColor;
|
|
126
134
|
}
|
|
@@ -146,8 +154,14 @@ export class AppearanceManager {
|
|
|
146
154
|
const existingSettings = this.loadSettings();
|
|
147
155
|
|
|
148
156
|
// Validate and merge with existing settings
|
|
157
|
+
// Normalize deprecated 'oblivion' to 'warm' before saving
|
|
158
|
+
let normalizedVisualTheme = isValidVisualTheme(settings.visualTheme) ? settings.visualTheme : existingSettings.visualTheme;
|
|
159
|
+
if (normalizedVisualTheme === 'oblivion') {
|
|
160
|
+
normalizedVisualTheme = 'warm';
|
|
161
|
+
}
|
|
149
162
|
const validatedSettings: AppearanceSettings = {
|
|
150
163
|
themeMode: isValidThemeMode(settings.themeMode) ? settings.themeMode : existingSettings.themeMode,
|
|
164
|
+
visualTheme: normalizedVisualTheme,
|
|
151
165
|
accentColor: isValidAccentColor(settings.accentColor) ? settings.accentColor : existingSettings.accentColor,
|
|
152
166
|
disclaimerAccepted: settings.disclaimerAccepted ?? existingSettings.disclaimerAccepted,
|
|
153
167
|
onboardingCompleted: settings.onboardingCompleted ?? existingSettings.onboardingCompleted,
|
|
@@ -176,7 +190,11 @@ function isValidThemeMode(value: unknown): value is ThemeMode {
|
|
|
176
190
|
return value === 'light' || value === 'dark' || value === 'system';
|
|
177
191
|
}
|
|
178
192
|
|
|
193
|
+
function isValidVisualTheme(value: unknown): value is VisualTheme {
|
|
194
|
+
return value === 'terminal' || value === 'warm' || value === 'oblivion';
|
|
195
|
+
}
|
|
196
|
+
|
|
179
197
|
function isValidAccentColor(value: unknown): value is AccentColor {
|
|
180
|
-
const validColors: AccentColor[] = ['cyan', 'blue', 'purple', 'pink', 'rose', 'orange', 'green', 'teal'];
|
|
198
|
+
const validColors: AccentColor[] = ['cyan', 'blue', 'purple', 'pink', 'rose', 'orange', 'green', 'teal', 'coral'];
|
|
181
199
|
return validColors.includes(value as AccentColor);
|
|
182
200
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Box Settings Manager
|
|
3
|
+
*
|
|
4
|
+
* Stores Box integration settings in encrypted database.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { SecureSettingsRepository } from '../database/SecureSettingsRepository';
|
|
8
|
+
import { BoxSettingsData } from '../../shared/types';
|
|
9
|
+
|
|
10
|
+
const DEFAULT_SETTINGS: BoxSettingsData = {
|
|
11
|
+
enabled: false,
|
|
12
|
+
timeoutMs: 20000,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export class BoxSettingsManager {
|
|
16
|
+
private static cachedSettings: BoxSettingsData | null = null;
|
|
17
|
+
|
|
18
|
+
static loadSettings(): BoxSettingsData {
|
|
19
|
+
if (this.cachedSettings) {
|
|
20
|
+
return this.cachedSettings;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let settings: BoxSettingsData = { ...DEFAULT_SETTINGS };
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
if (SecureSettingsRepository.isInitialized()) {
|
|
27
|
+
const repository = SecureSettingsRepository.getInstance();
|
|
28
|
+
const stored = repository.load<BoxSettingsData>('box');
|
|
29
|
+
if (stored) {
|
|
30
|
+
settings = { ...DEFAULT_SETTINGS, ...stored };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
} catch (error) {
|
|
34
|
+
console.error('[BoxSettingsManager] Failed to load settings:', error);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
this.cachedSettings = settings;
|
|
38
|
+
return settings;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
static saveSettings(settings: BoxSettingsData): void {
|
|
42
|
+
try {
|
|
43
|
+
if (!SecureSettingsRepository.isInitialized()) {
|
|
44
|
+
throw new Error('SecureSettingsRepository not initialized');
|
|
45
|
+
}
|
|
46
|
+
const repository = SecureSettingsRepository.getInstance();
|
|
47
|
+
repository.save('box', settings);
|
|
48
|
+
this.cachedSettings = settings;
|
|
49
|
+
console.log('[BoxSettingsManager] Settings saved');
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.error('[BoxSettingsManager] Failed to save settings:', error);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static clearCache(): void {
|
|
56
|
+
this.cachedSettings = null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dropbox Settings Manager
|
|
3
|
+
*
|
|
4
|
+
* Stores Dropbox integration settings in encrypted database.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { SecureSettingsRepository } from '../database/SecureSettingsRepository';
|
|
8
|
+
import { DropboxSettingsData } from '../../shared/types';
|
|
9
|
+
|
|
10
|
+
const DEFAULT_SETTINGS: DropboxSettingsData = {
|
|
11
|
+
enabled: false,
|
|
12
|
+
timeoutMs: 20000,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export class DropboxSettingsManager {
|
|
16
|
+
private static cachedSettings: DropboxSettingsData | null = null;
|
|
17
|
+
|
|
18
|
+
static loadSettings(): DropboxSettingsData {
|
|
19
|
+
if (this.cachedSettings) {
|
|
20
|
+
return this.cachedSettings;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let settings: DropboxSettingsData = { ...DEFAULT_SETTINGS };
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
if (SecureSettingsRepository.isInitialized()) {
|
|
27
|
+
const repository = SecureSettingsRepository.getInstance();
|
|
28
|
+
const stored = repository.load<DropboxSettingsData>('dropbox');
|
|
29
|
+
if (stored) {
|
|
30
|
+
settings = { ...DEFAULT_SETTINGS, ...stored };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
} catch (error) {
|
|
34
|
+
console.error('[DropboxSettingsManager] Failed to load settings:', error);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
this.cachedSettings = settings;
|
|
38
|
+
return settings;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
static saveSettings(settings: DropboxSettingsData): void {
|
|
42
|
+
try {
|
|
43
|
+
if (!SecureSettingsRepository.isInitialized()) {
|
|
44
|
+
throw new Error('SecureSettingsRepository not initialized');
|
|
45
|
+
}
|
|
46
|
+
const repository = SecureSettingsRepository.getInstance();
|
|
47
|
+
repository.save('dropbox', settings);
|
|
48
|
+
this.cachedSettings = settings;
|
|
49
|
+
console.log('[DropboxSettingsManager] Settings saved');
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.error('[DropboxSettingsManager] Failed to save settings:', error);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static clearCache(): void {
|
|
56
|
+
this.cachedSettings = null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Workspace Settings Manager
|
|
3
|
+
*
|
|
4
|
+
* Stores Google Workspace integration settings in encrypted database.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { SecureSettingsRepository } from '../database/SecureSettingsRepository';
|
|
8
|
+
import { GoogleWorkspaceSettingsData } from '../../shared/types';
|
|
9
|
+
|
|
10
|
+
const DEFAULT_SETTINGS: GoogleWorkspaceSettingsData = {
|
|
11
|
+
enabled: false,
|
|
12
|
+
timeoutMs: 20000,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export class GoogleWorkspaceSettingsManager {
|
|
16
|
+
private static cachedSettings: GoogleWorkspaceSettingsData | null = null;
|
|
17
|
+
|
|
18
|
+
static loadSettings(): GoogleWorkspaceSettingsData {
|
|
19
|
+
if (this.cachedSettings) {
|
|
20
|
+
return this.cachedSettings;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let settings: GoogleWorkspaceSettingsData = { ...DEFAULT_SETTINGS };
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
if (SecureSettingsRepository.isInitialized()) {
|
|
27
|
+
const repository = SecureSettingsRepository.getInstance();
|
|
28
|
+
// Keep legacy category key for backwards compatibility with existing Google Drive settings.
|
|
29
|
+
const stored = repository.load<GoogleWorkspaceSettingsData>('google-drive');
|
|
30
|
+
if (stored) {
|
|
31
|
+
settings = { ...DEFAULT_SETTINGS, ...stored };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
} catch (error) {
|
|
35
|
+
console.error('[GoogleWorkspaceSettingsManager] Failed to load settings:', error);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
this.cachedSettings = settings;
|
|
39
|
+
return settings;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
static saveSettings(settings: GoogleWorkspaceSettingsData): void {
|
|
43
|
+
try {
|
|
44
|
+
if (!SecureSettingsRepository.isInitialized()) {
|
|
45
|
+
throw new Error('SecureSettingsRepository not initialized');
|
|
46
|
+
}
|
|
47
|
+
const repository = SecureSettingsRepository.getInstance();
|
|
48
|
+
repository.save('google-drive', settings);
|
|
49
|
+
this.cachedSettings = settings;
|
|
50
|
+
console.log('[GoogleWorkspaceSettingsManager] Settings saved');
|
|
51
|
+
} catch (error) {
|
|
52
|
+
console.error('[GoogleWorkspaceSettingsManager] Failed to save settings:', error);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
static clearCache(): void {
|
|
57
|
+
this.cachedSettings = null;
|
|
58
|
+
}
|
|
59
|
+
}
|