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
@@ -18,6 +18,14 @@ import { CronTools } from './cron-tools';
18
18
  import { CanvasTools } from './canvas-tools';
19
19
  import { MentionTools } from './mention-tools';
20
20
  import { XTools } from './x-tools';
21
+ import { NotionTools } from './notion-tools';
22
+ import { BoxTools } from './box-tools';
23
+ import { OneDriveTools } from './onedrive-tools';
24
+ import { GoogleDriveTools } from './google-drive-tools';
25
+ import { GmailTools } from './gmail-tools';
26
+ import { GoogleCalendarTools } from './google-calendar-tools';
27
+ import { DropboxTools } from './dropbox-tools';
28
+ import { SharePointTools } from './sharepoint-tools';
21
29
  import { LLMTool } from '../llm/types';
22
30
  import { SearchProviderFactory } from '../search';
23
31
  import { MCPClientManager } from '../../mcp/client/MCPClientManager';
@@ -48,6 +56,14 @@ export class ToolRegistry {
48
56
  private canvasTools: CanvasTools;
49
57
  private mentionTools: MentionTools;
50
58
  private xTools: XTools;
59
+ private notionTools: NotionTools;
60
+ private boxTools: BoxTools;
61
+ private oneDriveTools: OneDriveTools;
62
+ private googleDriveTools: GoogleDriveTools;
63
+ private gmailTools: GmailTools;
64
+ private googleCalendarTools: GoogleCalendarTools;
65
+ private dropboxTools: DropboxTools;
66
+ private sharePointTools: SharePointTools;
51
67
  private gatewayContext?: GatewayContextType;
52
68
  private shadowedToolsLogged = false;
53
69
 
@@ -72,6 +88,14 @@ export class ToolRegistry {
72
88
  this.canvasTools = new CanvasTools(workspace, daemon, taskId);
73
89
  this.mentionTools = new MentionTools(workspace.id, taskId, daemon);
74
90
  this.xTools = new XTools(workspace, daemon, taskId);
91
+ this.notionTools = new NotionTools(workspace, daemon, taskId);
92
+ this.boxTools = new BoxTools(workspace, daemon, taskId);
93
+ this.oneDriveTools = new OneDriveTools(workspace, daemon, taskId);
94
+ this.googleDriveTools = new GoogleDriveTools(workspace, daemon, taskId);
95
+ this.gmailTools = new GmailTools(workspace, daemon, taskId);
96
+ this.googleCalendarTools = new GoogleCalendarTools(workspace, daemon, taskId);
97
+ this.dropboxTools = new DropboxTools(workspace, daemon, taskId);
98
+ this.sharePointTools = new SharePointTools(workspace, daemon, taskId);
75
99
  this.gatewayContext = gatewayContext;
76
100
  }
77
101
 
@@ -102,6 +126,14 @@ export class ToolRegistry {
102
126
  this.cronTools.setWorkspace(workspace);
103
127
  this.canvasTools.setWorkspace(workspace);
104
128
  this.xTools.setWorkspace(workspace);
129
+ this.notionTools.setWorkspace(workspace);
130
+ this.boxTools.setWorkspace(workspace);
131
+ this.oneDriveTools.setWorkspace(workspace);
132
+ this.googleDriveTools.setWorkspace(workspace);
133
+ this.gmailTools.setWorkspace(workspace);
134
+ this.googleCalendarTools.setWorkspace(workspace);
135
+ this.dropboxTools.setWorkspace(workspace);
136
+ this.sharePointTools.setWorkspace(workspace);
105
137
  }
106
138
 
107
139
  /**
@@ -175,15 +207,53 @@ export class ToolRegistry {
175
207
  allTools.push(...this.getXToolDefinitions());
176
208
  }
177
209
 
210
+ // Only add Notion tool if integration is enabled
211
+ if (NotionTools.isEnabled()) {
212
+ allTools.push(...this.getNotionToolDefinitions());
213
+ }
214
+
215
+ // Only add Box tool if integration is enabled
216
+ if (BoxTools.isEnabled()) {
217
+ allTools.push(...this.getBoxToolDefinitions());
218
+ }
219
+
220
+ // Only add OneDrive tool if integration is enabled
221
+ if (OneDriveTools.isEnabled()) {
222
+ allTools.push(...this.getOneDriveToolDefinitions());
223
+ }
224
+
225
+ // Only add Google Drive tool if integration is enabled
226
+ if (GoogleDriveTools.isEnabled()) {
227
+ allTools.push(...this.getGoogleDriveToolDefinitions());
228
+ }
229
+
230
+ // Only add Gmail tool if integration is enabled
231
+ if (GmailTools.isEnabled()) {
232
+ allTools.push(...this.getGmailToolDefinitions());
233
+ }
234
+
235
+ // Only add Google Calendar tool if integration is enabled
236
+ if (GoogleCalendarTools.isEnabled()) {
237
+ allTools.push(...this.getGoogleCalendarToolDefinitions());
238
+ }
239
+
240
+ // Only add Dropbox tool if integration is enabled
241
+ if (DropboxTools.isEnabled()) {
242
+ allTools.push(...this.getDropboxToolDefinitions());
243
+ }
244
+
245
+ // Only add SharePoint tool if integration is enabled
246
+ if (SharePointTools.isEnabled()) {
247
+ allTools.push(...this.getSharePointToolDefinitions());
248
+ }
249
+
178
250
  // Only add shell tool if workspace has shell permission
179
251
  if (this.workspace.permissions.shell) {
180
252
  allTools.push(...this.getShellToolDefinitions());
181
253
  }
182
254
 
183
- // Only add image tools if Gemini API is configured
184
- if (ImageTools.isAvailable()) {
185
- allTools.push(...ImageTools.getToolDefinitions());
186
- }
255
+ // Always add image tools; they will surface setup guidance if API keys are missing
256
+ allTools.push(...ImageTools.getToolDefinitions());
187
257
 
188
258
  // Always add system tools (they enable broader system interaction)
189
259
  allTools.push(...SystemTools.getToolDefinitions());
@@ -504,15 +574,13 @@ Shell Commands:
504
574
  - run_command: Execute shell commands (requires user approval)`;
505
575
  }
506
576
 
507
- // Add image generation if Gemini is configured
508
- if (ImageTools.isAvailable()) {
509
- descriptions += `
577
+ descriptions += `
510
578
 
511
579
  Image Generation (Nano Banana):
512
580
  - generate_image: Generate images from text descriptions using AI
513
581
  - nano-banana: Fast generation for quick iterations
514
- - nano-banana-pro: High-quality generation for production use`;
515
- }
582
+ - nano-banana-pro: High-quality generation for production use
583
+ - Requires Gemini API key; the tool will prompt setup guidance if missing.`;
516
584
 
517
585
  // System tools are always available
518
586
  descriptions += `
@@ -625,6 +693,30 @@ ${skillDescriptions}`;
625
693
  // X/Twitter tools
626
694
  if (name === 'x_action') return await this.xTools.executeAction(input);
627
695
 
696
+ // Notion tools
697
+ if (name === 'notion_action') return await this.notionTools.executeAction(input);
698
+
699
+ // Box tools
700
+ if (name === 'box_action') return await this.boxTools.executeAction(input);
701
+
702
+ // OneDrive tools
703
+ if (name === 'onedrive_action') return await this.oneDriveTools.executeAction(input);
704
+
705
+ // Google Drive tools
706
+ if (name === 'google_drive_action') return await this.googleDriveTools.executeAction(input);
707
+
708
+ // Gmail tools
709
+ if (name === 'gmail_action') return await this.gmailTools.executeAction(input);
710
+
711
+ // Google Calendar tools
712
+ if (name === 'calendar_action') return await this.googleCalendarTools.executeAction(input);
713
+
714
+ // Dropbox tools
715
+ if (name === 'dropbox_action') return await this.dropboxTools.executeAction(input);
716
+
717
+ // SharePoint tools
718
+ if (name === 'sharepoint_action') return await this.sharePointTools.executeAction(input);
719
+
628
720
  // Shell tools
629
721
  if (name === 'run_command') return await this.shellTools.runCommand(input.command, input);
630
722
 
@@ -1061,13 +1153,14 @@ ${skillDescriptions}`;
1061
1153
  }
1062
1154
 
1063
1155
  // Return full skill definition (useful for duplication/modification)
1156
+ const promptWithBaseDir = skillLoader.expandBaseDir(skill.prompt, skill);
1064
1157
  return {
1065
1158
  success: true,
1066
1159
  skill: {
1067
1160
  id: skill.id,
1068
1161
  name: skill.name,
1069
1162
  description: skill.description,
1070
- prompt: skill.prompt,
1163
+ prompt: promptWithBaseDir,
1071
1164
  icon: skill.icon,
1072
1165
  category: skill.category,
1073
1166
  priority: skill.priority,
@@ -2035,6 +2128,697 @@ ${skillDescriptions}`;
2035
2128
  ];
2036
2129
  }
2037
2130
 
2131
+ /**
2132
+ * Define Notion tools
2133
+ */
2134
+ private getNotionToolDefinitions(): LLMTool[] {
2135
+ return [
2136
+ {
2137
+ name: 'notion_action',
2138
+ description:
2139
+ 'Use the connected Notion account to search, read, and update pages/data sources. ' +
2140
+ 'Write actions (create/update/append) require user approval.',
2141
+ input_schema: {
2142
+ type: 'object',
2143
+ properties: {
2144
+ action: {
2145
+ type: 'string',
2146
+ enum: [
2147
+ 'search',
2148
+ 'list_users',
2149
+ 'get_user',
2150
+ 'get_page',
2151
+ 'get_page_property',
2152
+ 'get_database',
2153
+ 'get_block',
2154
+ 'get_block_children',
2155
+ 'update_block',
2156
+ 'delete_block',
2157
+ 'create_page',
2158
+ 'update_page',
2159
+ 'append_blocks',
2160
+ 'query_data_source',
2161
+ 'get_data_source',
2162
+ 'create_data_source',
2163
+ 'update_data_source',
2164
+ ],
2165
+ description: 'Action to perform',
2166
+ },
2167
+ query: {
2168
+ type: 'string',
2169
+ description: 'Search query (for search)',
2170
+ },
2171
+ user_id: {
2172
+ type: 'string',
2173
+ description: 'User ID (for get_user)',
2174
+ },
2175
+ page_id: {
2176
+ type: 'string',
2177
+ description: 'Page ID (for get_page/update_page)',
2178
+ },
2179
+ property_id: {
2180
+ type: 'string',
2181
+ description: 'Property ID (for get_page_property)',
2182
+ },
2183
+ block_id: {
2184
+ type: 'string',
2185
+ description: 'Block ID (for get_block/get_block_children/append_blocks/update_block/delete_block)',
2186
+ },
2187
+ block_type: {
2188
+ type: 'string',
2189
+ description: 'Block type key for update_block (e.g., "paragraph")',
2190
+ },
2191
+ block: {
2192
+ type: 'object',
2193
+ description: 'Block payload for update_block (e.g., { rich_text: [...] })',
2194
+ },
2195
+ data_source_id: {
2196
+ type: 'string',
2197
+ description: 'Data source ID (for query_data_source/get_data_source)',
2198
+ },
2199
+ database_id: {
2200
+ type: 'string',
2201
+ description: 'Database ID (for create_page/get_database)',
2202
+ },
2203
+ parent_page_id: {
2204
+ type: 'string',
2205
+ description: 'Parent page ID (for create_page or create_data_source)',
2206
+ },
2207
+ properties: {
2208
+ type: 'object',
2209
+ description: 'Notion properties payload for create/update',
2210
+ },
2211
+ children: {
2212
+ type: 'array',
2213
+ description: 'Block children payload for append_blocks',
2214
+ items: { type: 'object' },
2215
+ },
2216
+ filter: {
2217
+ type: 'object',
2218
+ description: 'Filter object for search/query',
2219
+ },
2220
+ sort: {
2221
+ type: 'object',
2222
+ description: 'Sort object for search',
2223
+ },
2224
+ sorts: {
2225
+ type: 'array',
2226
+ description: 'Sorts array for search/query',
2227
+ items: { type: 'object' },
2228
+ },
2229
+ start_cursor: {
2230
+ type: 'string',
2231
+ description: 'Pagination cursor',
2232
+ },
2233
+ page_size: {
2234
+ type: 'number',
2235
+ description: 'Pagination page size',
2236
+ },
2237
+ archived: {
2238
+ type: 'boolean',
2239
+ description: 'Archive/unarchive page (for update_page)',
2240
+ },
2241
+ icon: {
2242
+ type: 'object',
2243
+ description: 'Icon payload (for create/update)',
2244
+ },
2245
+ cover: {
2246
+ type: 'object',
2247
+ description: 'Cover payload (for create/update)',
2248
+ },
2249
+ title: {
2250
+ type: 'string',
2251
+ description: 'Title for create_data_source/update_data_source',
2252
+ },
2253
+ is_inline: {
2254
+ type: 'boolean',
2255
+ description: 'Create inline data source (for create_data_source)',
2256
+ },
2257
+ payload: {
2258
+ type: 'object',
2259
+ description: 'Raw request body to send directly (advanced use)',
2260
+ },
2261
+ },
2262
+ required: ['action'],
2263
+ },
2264
+ },
2265
+ ];
2266
+ }
2267
+
2268
+ /**
2269
+ * Define Box tools
2270
+ */
2271
+ private getBoxToolDefinitions(): LLMTool[] {
2272
+ return [
2273
+ {
2274
+ name: 'box_action',
2275
+ description:
2276
+ 'Use the connected Box account to search, read, and manage files/folders. ' +
2277
+ 'Write actions (create/upload/delete) require user approval.',
2278
+ input_schema: {
2279
+ type: 'object',
2280
+ properties: {
2281
+ action: {
2282
+ type: 'string',
2283
+ enum: [
2284
+ 'get_current_user',
2285
+ 'search',
2286
+ 'get_file',
2287
+ 'get_folder',
2288
+ 'list_folder_items',
2289
+ 'create_folder',
2290
+ 'delete_file',
2291
+ 'delete_folder',
2292
+ 'upload_file',
2293
+ ],
2294
+ description: 'Action to perform',
2295
+ },
2296
+ query: {
2297
+ type: 'string',
2298
+ description: 'Search query (for search)',
2299
+ },
2300
+ limit: {
2301
+ type: 'number',
2302
+ description: 'Max results (for search/list_folder_items)',
2303
+ },
2304
+ offset: {
2305
+ type: 'number',
2306
+ description: 'Offset for pagination (for search/list_folder_items)',
2307
+ },
2308
+ fields: {
2309
+ type: 'string',
2310
+ description: 'Comma-separated fields to return',
2311
+ },
2312
+ type: {
2313
+ type: 'string',
2314
+ enum: ['file', 'folder', 'web_link'],
2315
+ description: 'Filter search results by type',
2316
+ },
2317
+ ancestor_folder_ids: {
2318
+ type: 'string',
2319
+ description: 'Comma-separated ancestor folder IDs for search',
2320
+ },
2321
+ file_extensions: {
2322
+ type: 'string',
2323
+ description: 'Comma-separated file extensions for search',
2324
+ },
2325
+ content_types: {
2326
+ type: 'string',
2327
+ description: 'Comma-separated content types for search',
2328
+ },
2329
+ scope: {
2330
+ type: 'string',
2331
+ description: 'Search scope (e.g., user_content)',
2332
+ },
2333
+ folder_id: {
2334
+ type: 'string',
2335
+ description: 'Folder ID (for get_folder/list_folder_items/delete_folder)',
2336
+ },
2337
+ file_id: {
2338
+ type: 'string',
2339
+ description: 'File ID (for get_file/delete_file)',
2340
+ },
2341
+ parent_id: {
2342
+ type: 'string',
2343
+ description: 'Parent folder ID (for create_folder/upload_file). Defaults to root.',
2344
+ },
2345
+ name: {
2346
+ type: 'string',
2347
+ description: 'Name for create_folder/upload_file',
2348
+ },
2349
+ file_path: {
2350
+ type: 'string',
2351
+ description: 'Workspace-relative path to upload (for upload_file)',
2352
+ },
2353
+ },
2354
+ required: ['action'],
2355
+ },
2356
+ },
2357
+ ];
2358
+ }
2359
+
2360
+ /**
2361
+ * Define OneDrive tools
2362
+ */
2363
+ private getOneDriveToolDefinitions(): LLMTool[] {
2364
+ return [
2365
+ {
2366
+ name: 'onedrive_action',
2367
+ description:
2368
+ 'Use the connected OneDrive account to search, read, and manage files/folders. ' +
2369
+ 'Write actions (create/upload/delete) require user approval.',
2370
+ input_schema: {
2371
+ type: 'object',
2372
+ properties: {
2373
+ action: {
2374
+ type: 'string',
2375
+ enum: [
2376
+ 'get_drive',
2377
+ 'search',
2378
+ 'list_children',
2379
+ 'get_item',
2380
+ 'create_folder',
2381
+ 'upload_file',
2382
+ 'delete_item',
2383
+ ],
2384
+ description: 'Action to perform',
2385
+ },
2386
+ drive_id: {
2387
+ type: 'string',
2388
+ description: 'Drive ID override (optional)',
2389
+ },
2390
+ item_id: {
2391
+ type: 'string',
2392
+ description: 'Item ID (for get_item/list_children/delete_item)',
2393
+ },
2394
+ query: {
2395
+ type: 'string',
2396
+ description: 'Search query (for search)',
2397
+ },
2398
+ parent_id: {
2399
+ type: 'string',
2400
+ description: 'Parent folder ID (for create_folder/upload_file)',
2401
+ },
2402
+ name: {
2403
+ type: 'string',
2404
+ description: 'Name for create_folder or uploaded file',
2405
+ },
2406
+ conflict_behavior: {
2407
+ type: 'string',
2408
+ enum: ['rename', 'fail', 'replace'],
2409
+ description: 'Conflict behavior for create_folder',
2410
+ },
2411
+ file_path: {
2412
+ type: 'string',
2413
+ description: 'Workspace-relative path to upload (for upload_file)',
2414
+ },
2415
+ remote_path: {
2416
+ type: 'string',
2417
+ description: 'Remote path (for upload_file, relative to root)',
2418
+ },
2419
+ },
2420
+ required: ['action'],
2421
+ },
2422
+ },
2423
+ ];
2424
+ }
2425
+
2426
+ /**
2427
+ * Define Google Drive tools
2428
+ */
2429
+ private getGoogleDriveToolDefinitions(): LLMTool[] {
2430
+ return [
2431
+ {
2432
+ name: 'google_drive_action',
2433
+ description:
2434
+ 'Use the connected Google Drive account to search, read, and manage files/folders. ' +
2435
+ 'Write actions (create/upload/delete) require user approval.',
2436
+ input_schema: {
2437
+ type: 'object',
2438
+ properties: {
2439
+ action: {
2440
+ type: 'string',
2441
+ enum: [
2442
+ 'get_current_user',
2443
+ 'list_files',
2444
+ 'get_file',
2445
+ 'create_folder',
2446
+ 'upload_file',
2447
+ 'delete_file',
2448
+ ],
2449
+ description: 'Action to perform',
2450
+ },
2451
+ query: {
2452
+ type: 'string',
2453
+ description: 'Search query (Drive query syntax) for list_files',
2454
+ },
2455
+ page_size: {
2456
+ type: 'number',
2457
+ description: 'Max results (for list_files)',
2458
+ },
2459
+ page_token: {
2460
+ type: 'string',
2461
+ description: 'Pagination token (for list_files)',
2462
+ },
2463
+ fields: {
2464
+ type: 'string',
2465
+ description: 'Fields selector (for list_files/get_file)',
2466
+ },
2467
+ file_id: {
2468
+ type: 'string',
2469
+ description: 'File ID (for get_file/delete_file)',
2470
+ },
2471
+ parent_id: {
2472
+ type: 'string',
2473
+ description: 'Parent folder ID (for create_folder/upload_file)',
2474
+ },
2475
+ name: {
2476
+ type: 'string',
2477
+ description: 'Name for create_folder/upload_file',
2478
+ },
2479
+ file_path: {
2480
+ type: 'string',
2481
+ description: 'Workspace-relative path to upload (for upload_file)',
2482
+ },
2483
+ },
2484
+ required: ['action'],
2485
+ },
2486
+ },
2487
+ ];
2488
+ }
2489
+
2490
+ /**
2491
+ * Define Gmail tools
2492
+ */
2493
+ private getGmailToolDefinitions(): LLMTool[] {
2494
+ return [
2495
+ {
2496
+ name: 'gmail_action',
2497
+ description:
2498
+ 'Use the connected Gmail account to search, read, and send messages. ' +
2499
+ 'Write actions (send/trash) require user approval.',
2500
+ input_schema: {
2501
+ type: 'object',
2502
+ properties: {
2503
+ action: {
2504
+ type: 'string',
2505
+ enum: [
2506
+ 'get_profile',
2507
+ 'list_messages',
2508
+ 'get_message',
2509
+ 'get_thread',
2510
+ 'list_labels',
2511
+ 'send_message',
2512
+ 'trash_message',
2513
+ ],
2514
+ description: 'Action to perform',
2515
+ },
2516
+ query: {
2517
+ type: 'string',
2518
+ description: 'Gmail search query (for list_messages)',
2519
+ },
2520
+ page_size: {
2521
+ type: 'number',
2522
+ description: 'Max results (for list_messages)',
2523
+ },
2524
+ page_token: {
2525
+ type: 'string',
2526
+ description: 'Pagination token (for list_messages)',
2527
+ },
2528
+ label_ids: {
2529
+ type: 'array',
2530
+ items: { type: 'string' },
2531
+ description: 'Label IDs filter (for list_messages)',
2532
+ },
2533
+ include_spam_trash: {
2534
+ type: 'boolean',
2535
+ description: 'Include spam/trash (for list_messages)',
2536
+ },
2537
+ message_id: {
2538
+ type: 'string',
2539
+ description: 'Message ID (for get_message/trash_message)',
2540
+ },
2541
+ thread_id: {
2542
+ type: 'string',
2543
+ description: 'Thread ID (for get_thread/send_message)',
2544
+ },
2545
+ format: {
2546
+ type: 'string',
2547
+ enum: ['full', 'metadata', 'minimal', 'raw'],
2548
+ description: 'Message format (for get_message/get_thread)',
2549
+ },
2550
+ metadata_headers: {
2551
+ type: 'array',
2552
+ items: { type: 'string' },
2553
+ description: 'Metadata headers to include (for metadata format)',
2554
+ },
2555
+ to: {
2556
+ type: 'string',
2557
+ description: 'Recipient email (for send_message)',
2558
+ },
2559
+ cc: {
2560
+ type: 'string',
2561
+ description: 'CC recipients (for send_message)',
2562
+ },
2563
+ bcc: {
2564
+ type: 'string',
2565
+ description: 'BCC recipients (for send_message)',
2566
+ },
2567
+ subject: {
2568
+ type: 'string',
2569
+ description: 'Email subject (for send_message)',
2570
+ },
2571
+ body: {
2572
+ type: 'string',
2573
+ description: 'Email body (for send_message)',
2574
+ },
2575
+ raw: {
2576
+ type: 'string',
2577
+ description: 'Base64url encoded RFC 2822 message (for send_message)',
2578
+ },
2579
+ },
2580
+ required: ['action'],
2581
+ },
2582
+ },
2583
+ ];
2584
+ }
2585
+
2586
+ /**
2587
+ * Define Google Calendar tools
2588
+ */
2589
+ private getGoogleCalendarToolDefinitions(): LLMTool[] {
2590
+ return [
2591
+ {
2592
+ name: 'calendar_action',
2593
+ description:
2594
+ 'Use the connected Google Calendar account to list and manage events. ' +
2595
+ 'Write actions (create/update/delete) require user approval.',
2596
+ input_schema: {
2597
+ type: 'object',
2598
+ properties: {
2599
+ action: {
2600
+ type: 'string',
2601
+ enum: [
2602
+ 'list_calendars',
2603
+ 'list_events',
2604
+ 'get_event',
2605
+ 'create_event',
2606
+ 'update_event',
2607
+ 'delete_event',
2608
+ ],
2609
+ description: 'Action to perform',
2610
+ },
2611
+ calendar_id: {
2612
+ type: 'string',
2613
+ description: 'Calendar ID (defaults to primary)',
2614
+ },
2615
+ event_id: {
2616
+ type: 'string',
2617
+ description: 'Event ID (for get/update/delete)',
2618
+ },
2619
+ query: {
2620
+ type: 'string',
2621
+ description: 'Search query (for list_events)',
2622
+ },
2623
+ time_min: {
2624
+ type: 'string',
2625
+ description: 'ISO start time (for list_events)',
2626
+ },
2627
+ time_max: {
2628
+ type: 'string',
2629
+ description: 'ISO end time (for list_events)',
2630
+ },
2631
+ max_results: {
2632
+ type: 'number',
2633
+ description: 'Max results (for list_events)',
2634
+ },
2635
+ page_token: {
2636
+ type: 'string',
2637
+ description: 'Pagination token (for list_events)',
2638
+ },
2639
+ single_events: {
2640
+ type: 'boolean',
2641
+ description: 'Expand recurring events (for list_events)',
2642
+ },
2643
+ order_by: {
2644
+ type: 'string',
2645
+ enum: ['startTime', 'updated'],
2646
+ description: 'Order results (for list_events)',
2647
+ },
2648
+ summary: {
2649
+ type: 'string',
2650
+ description: 'Event summary (for create/update)',
2651
+ },
2652
+ description: {
2653
+ type: 'string',
2654
+ description: 'Event description (for create/update)',
2655
+ },
2656
+ location: {
2657
+ type: 'string',
2658
+ description: 'Event location (for create/update)',
2659
+ },
2660
+ start: {
2661
+ type: 'string',
2662
+ description: 'Event start ISO time (for create/update)',
2663
+ },
2664
+ end: {
2665
+ type: 'string',
2666
+ description: 'Event end ISO time (for create/update)',
2667
+ },
2668
+ attendees: {
2669
+ type: 'array',
2670
+ items: { type: 'string' },
2671
+ description: 'Attendee emails (for create/update)',
2672
+ },
2673
+ time_zone: {
2674
+ type: 'string',
2675
+ description: 'IANA time zone (for create/update)',
2676
+ },
2677
+ payload: {
2678
+ type: 'object',
2679
+ description: 'Raw event payload override (for create/update)',
2680
+ },
2681
+ },
2682
+ required: ['action'],
2683
+ },
2684
+ },
2685
+ ];
2686
+ }
2687
+
2688
+ /**
2689
+ * Define Dropbox tools
2690
+ */
2691
+ private getDropboxToolDefinitions(): LLMTool[] {
2692
+ return [
2693
+ {
2694
+ name: 'dropbox_action',
2695
+ description:
2696
+ 'Use the connected Dropbox account to search, read, and manage files/folders. ' +
2697
+ 'Write actions (create/upload/delete) require user approval.',
2698
+ input_schema: {
2699
+ type: 'object',
2700
+ properties: {
2701
+ action: {
2702
+ type: 'string',
2703
+ enum: [
2704
+ 'get_current_user',
2705
+ 'list_folder',
2706
+ 'list_folder_continue',
2707
+ 'search',
2708
+ 'get_metadata',
2709
+ 'create_folder',
2710
+ 'delete_item',
2711
+ 'upload_file',
2712
+ ],
2713
+ description: 'Action to perform',
2714
+ },
2715
+ path: {
2716
+ type: 'string',
2717
+ description: 'Dropbox path (for list_folder/get_metadata/create_folder/delete_item/upload_file)',
2718
+ },
2719
+ query: {
2720
+ type: 'string',
2721
+ description: 'Search query (for search)',
2722
+ },
2723
+ limit: {
2724
+ type: 'number',
2725
+ description: 'Max results (for list/search)',
2726
+ },
2727
+ cursor: {
2728
+ type: 'string',
2729
+ description: 'Pagination cursor (for list_folder_continue)',
2730
+ },
2731
+ name: {
2732
+ type: 'string',
2733
+ description: 'Name for upload_file',
2734
+ },
2735
+ parent_path: {
2736
+ type: 'string',
2737
+ description: 'Parent folder path (for upload_file when path not provided)',
2738
+ },
2739
+ file_path: {
2740
+ type: 'string',
2741
+ description: 'Workspace-relative path to upload (for upload_file)',
2742
+ },
2743
+ },
2744
+ required: ['action'],
2745
+ },
2746
+ },
2747
+ ];
2748
+ }
2749
+
2750
+ /**
2751
+ * Define SharePoint tools
2752
+ */
2753
+ private getSharePointToolDefinitions(): LLMTool[] {
2754
+ return [
2755
+ {
2756
+ name: 'sharepoint_action',
2757
+ description:
2758
+ 'Use the connected SharePoint account to search sites and manage drive items. ' +
2759
+ 'Write actions (create/upload/delete) require user approval.',
2760
+ input_schema: {
2761
+ type: 'object',
2762
+ properties: {
2763
+ action: {
2764
+ type: 'string',
2765
+ enum: [
2766
+ 'get_current_user',
2767
+ 'search_sites',
2768
+ 'get_site',
2769
+ 'list_site_drives',
2770
+ 'list_drive_items',
2771
+ 'get_item',
2772
+ 'create_folder',
2773
+ 'upload_file',
2774
+ 'delete_item',
2775
+ ],
2776
+ description: 'Action to perform',
2777
+ },
2778
+ site_id: {
2779
+ type: 'string',
2780
+ description: 'Site ID (for get_site/list_site_drives)',
2781
+ },
2782
+ drive_id: {
2783
+ type: 'string',
2784
+ description: 'Drive ID (for list/get/create/upload/delete)',
2785
+ },
2786
+ item_id: {
2787
+ type: 'string',
2788
+ description: 'Item ID (for list_drive_items/get_item/delete_item)',
2789
+ },
2790
+ query: {
2791
+ type: 'string',
2792
+ description: 'Search query (for search_sites)',
2793
+ },
2794
+ parent_id: {
2795
+ type: 'string',
2796
+ description: 'Parent folder ID (for create_folder/upload_file)',
2797
+ },
2798
+ name: {
2799
+ type: 'string',
2800
+ description: 'Name for create_folder/upload_file',
2801
+ },
2802
+ conflict_behavior: {
2803
+ type: 'string',
2804
+ enum: ['rename', 'fail', 'replace'],
2805
+ description: 'Conflict behavior for create_folder',
2806
+ },
2807
+ file_path: {
2808
+ type: 'string',
2809
+ description: 'Workspace-relative path to upload (for upload_file)',
2810
+ },
2811
+ remote_path: {
2812
+ type: 'string',
2813
+ description: 'Remote path (for upload_file, relative to root)',
2814
+ },
2815
+ },
2816
+ required: ['action'],
2817
+ },
2818
+ },
2819
+ ];
2820
+ }
2821
+
2038
2822
  /**
2039
2823
  * Define shell tools
2040
2824
  */