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
@@ -52,6 +52,12 @@ const cron_tools_1 = require("./cron-tools");
52
52
  const canvas_tools_1 = require("./canvas-tools");
53
53
  const mention_tools_1 = require("./mention-tools");
54
54
  const x_tools_1 = require("./x-tools");
55
+ const notion_tools_1 = require("./notion-tools");
56
+ const box_tools_1 = require("./box-tools");
57
+ const onedrive_tools_1 = require("./onedrive-tools");
58
+ const google_drive_tools_1 = require("./google-drive-tools");
59
+ const dropbox_tools_1 = require("./dropbox-tools");
60
+ const sharepoint_tools_1 = require("./sharepoint-tools");
55
61
  const search_1 = require("../search");
56
62
  const MCPClientManager_1 = require("../../mcp/client/MCPClientManager");
57
63
  const settings_1 = require("../../mcp/settings");
@@ -85,6 +91,12 @@ class ToolRegistry {
85
91
  this.canvasTools = new canvas_tools_1.CanvasTools(workspace, daemon, taskId);
86
92
  this.mentionTools = new mention_tools_1.MentionTools(workspace.id, taskId, daemon);
87
93
  this.xTools = new x_tools_1.XTools(workspace, daemon, taskId);
94
+ this.notionTools = new notion_tools_1.NotionTools(workspace, daemon, taskId);
95
+ this.boxTools = new box_tools_1.BoxTools(workspace, daemon, taskId);
96
+ this.oneDriveTools = new onedrive_tools_1.OneDriveTools(workspace, daemon, taskId);
97
+ this.googleDriveTools = new google_drive_tools_1.GoogleDriveTools(workspace, daemon, taskId);
98
+ this.dropboxTools = new dropbox_tools_1.DropboxTools(workspace, daemon, taskId);
99
+ this.sharePointTools = new sharepoint_tools_1.SharePointTools(workspace, daemon, taskId);
88
100
  this.gatewayContext = gatewayContext;
89
101
  }
90
102
  /**
@@ -113,6 +125,12 @@ class ToolRegistry {
113
125
  this.cronTools.setWorkspace(workspace);
114
126
  this.canvasTools.setWorkspace(workspace);
115
127
  this.xTools.setWorkspace(workspace);
128
+ this.notionTools.setWorkspace(workspace);
129
+ this.boxTools.setWorkspace(workspace);
130
+ this.oneDriveTools.setWorkspace(workspace);
131
+ this.googleDriveTools.setWorkspace(workspace);
132
+ this.dropboxTools.setWorkspace(workspace);
133
+ this.sharePointTools.setWorkspace(workspace);
116
134
  }
117
135
  /**
118
136
  * Enforce new canvas sessions for follow-up messages by setting a cutoff timestamp.
@@ -176,14 +194,36 @@ class ToolRegistry {
176
194
  if (x_tools_1.XTools.isEnabled()) {
177
195
  allTools.push(...this.getXToolDefinitions());
178
196
  }
197
+ // Only add Notion tool if integration is enabled
198
+ if (notion_tools_1.NotionTools.isEnabled()) {
199
+ allTools.push(...this.getNotionToolDefinitions());
200
+ }
201
+ // Only add Box tool if integration is enabled
202
+ if (box_tools_1.BoxTools.isEnabled()) {
203
+ allTools.push(...this.getBoxToolDefinitions());
204
+ }
205
+ // Only add OneDrive tool if integration is enabled
206
+ if (onedrive_tools_1.OneDriveTools.isEnabled()) {
207
+ allTools.push(...this.getOneDriveToolDefinitions());
208
+ }
209
+ // Only add Google Drive tool if integration is enabled
210
+ if (google_drive_tools_1.GoogleDriveTools.isEnabled()) {
211
+ allTools.push(...this.getGoogleDriveToolDefinitions());
212
+ }
213
+ // Only add Dropbox tool if integration is enabled
214
+ if (dropbox_tools_1.DropboxTools.isEnabled()) {
215
+ allTools.push(...this.getDropboxToolDefinitions());
216
+ }
217
+ // Only add SharePoint tool if integration is enabled
218
+ if (sharepoint_tools_1.SharePointTools.isEnabled()) {
219
+ allTools.push(...this.getSharePointToolDefinitions());
220
+ }
179
221
  // Only add shell tool if workspace has shell permission
180
222
  if (this.workspace.permissions.shell) {
181
223
  allTools.push(...this.getShellToolDefinitions());
182
224
  }
183
- // Only add image tools if Gemini API is configured
184
- if (image_tools_1.ImageTools.isAvailable()) {
185
- allTools.push(...image_tools_1.ImageTools.getToolDefinitions());
186
- }
225
+ // Always add image tools; they will surface setup guidance if API keys are missing
226
+ allTools.push(...image_tools_1.ImageTools.getToolDefinitions());
187
227
  // Always add system tools (they enable broader system interaction)
188
228
  allTools.push(...system_tools_1.SystemTools.getToolDefinitions());
189
229
  // Always add cron/scheduling tools (enables task scheduling)
@@ -456,15 +496,13 @@ Web Search (for finding URLs, not reading them):
456
496
  Shell Commands:
457
497
  - run_command: Execute shell commands (requires user approval)`;
458
498
  }
459
- // Add image generation if Gemini is configured
460
- if (image_tools_1.ImageTools.isAvailable()) {
461
- descriptions += `
499
+ descriptions += `
462
500
 
463
501
  Image Generation (Nano Banana):
464
502
  - generate_image: Generate images from text descriptions using AI
465
503
  - nano-banana: Fast generation for quick iterations
466
- - nano-banana-pro: High-quality generation for production use`;
467
- }
504
+ - nano-banana-pro: High-quality generation for production use
505
+ - Requires Gemini API key; the tool will prompt setup guidance if missing.`;
468
506
  // System tools are always available
469
507
  descriptions += `
470
508
 
@@ -594,6 +632,24 @@ ${skillDescriptions}`;
594
632
  // X/Twitter tools
595
633
  if (name === 'x_action')
596
634
  return await this.xTools.executeAction(input);
635
+ // Notion tools
636
+ if (name === 'notion_action')
637
+ return await this.notionTools.executeAction(input);
638
+ // Box tools
639
+ if (name === 'box_action')
640
+ return await this.boxTools.executeAction(input);
641
+ // OneDrive tools
642
+ if (name === 'onedrive_action')
643
+ return await this.oneDriveTools.executeAction(input);
644
+ // Google Drive tools
645
+ if (name === 'google_drive_action')
646
+ return await this.googleDriveTools.executeAction(input);
647
+ // Dropbox tools
648
+ if (name === 'dropbox_action')
649
+ return await this.dropboxTools.executeAction(input);
650
+ // SharePoint tools
651
+ if (name === 'sharepoint_action')
652
+ return await this.sharePointTools.executeAction(input);
597
653
  // Shell tools
598
654
  if (name === 'run_command')
599
655
  return await this.shellTools.runCommand(input.command, input);
@@ -995,13 +1051,14 @@ ${skillDescriptions}`;
995
1051
  };
996
1052
  }
997
1053
  // Return full skill definition (useful for duplication/modification)
1054
+ const promptWithBaseDir = skillLoader.expandBaseDir(skill.prompt, skill);
998
1055
  return {
999
1056
  success: true,
1000
1057
  skill: {
1001
1058
  id: skill.id,
1002
1059
  name: skill.name,
1003
1060
  description: skill.description,
1004
- prompt: skill.prompt,
1061
+ prompt: promptWithBaseDir,
1005
1062
  icon: skill.icon,
1006
1063
  category: skill.category,
1007
1064
  priority: skill.priority,
@@ -1895,6 +1952,487 @@ ${skillDescriptions}`;
1895
1952
  },
1896
1953
  ];
1897
1954
  }
1955
+ /**
1956
+ * Define Notion tools
1957
+ */
1958
+ getNotionToolDefinitions() {
1959
+ return [
1960
+ {
1961
+ name: 'notion_action',
1962
+ description: 'Use the connected Notion account to search, read, and update pages/data sources. ' +
1963
+ 'Write actions (create/update/append) require user approval.',
1964
+ input_schema: {
1965
+ type: 'object',
1966
+ properties: {
1967
+ action: {
1968
+ type: 'string',
1969
+ enum: [
1970
+ 'search',
1971
+ 'list_users',
1972
+ 'get_user',
1973
+ 'get_page',
1974
+ 'get_page_property',
1975
+ 'get_database',
1976
+ 'get_block',
1977
+ 'get_block_children',
1978
+ 'update_block',
1979
+ 'delete_block',
1980
+ 'create_page',
1981
+ 'update_page',
1982
+ 'append_blocks',
1983
+ 'query_data_source',
1984
+ 'get_data_source',
1985
+ 'create_data_source',
1986
+ 'update_data_source',
1987
+ ],
1988
+ description: 'Action to perform',
1989
+ },
1990
+ query: {
1991
+ type: 'string',
1992
+ description: 'Search query (for search)',
1993
+ },
1994
+ user_id: {
1995
+ type: 'string',
1996
+ description: 'User ID (for get_user)',
1997
+ },
1998
+ page_id: {
1999
+ type: 'string',
2000
+ description: 'Page ID (for get_page/update_page)',
2001
+ },
2002
+ property_id: {
2003
+ type: 'string',
2004
+ description: 'Property ID (for get_page_property)',
2005
+ },
2006
+ block_id: {
2007
+ type: 'string',
2008
+ description: 'Block ID (for get_block/get_block_children/append_blocks/update_block/delete_block)',
2009
+ },
2010
+ block_type: {
2011
+ type: 'string',
2012
+ description: 'Block type key for update_block (e.g., "paragraph")',
2013
+ },
2014
+ block: {
2015
+ type: 'object',
2016
+ description: 'Block payload for update_block (e.g., { rich_text: [...] })',
2017
+ },
2018
+ data_source_id: {
2019
+ type: 'string',
2020
+ description: 'Data source ID (for query_data_source/get_data_source)',
2021
+ },
2022
+ database_id: {
2023
+ type: 'string',
2024
+ description: 'Database ID (for create_page/get_database)',
2025
+ },
2026
+ parent_page_id: {
2027
+ type: 'string',
2028
+ description: 'Parent page ID (for create_page or create_data_source)',
2029
+ },
2030
+ properties: {
2031
+ type: 'object',
2032
+ description: 'Notion properties payload for create/update',
2033
+ },
2034
+ children: {
2035
+ type: 'array',
2036
+ description: 'Block children payload for append_blocks',
2037
+ items: { type: 'object' },
2038
+ },
2039
+ filter: {
2040
+ type: 'object',
2041
+ description: 'Filter object for search/query',
2042
+ },
2043
+ sort: {
2044
+ type: 'object',
2045
+ description: 'Sort object for search',
2046
+ },
2047
+ sorts: {
2048
+ type: 'array',
2049
+ description: 'Sorts array for search/query',
2050
+ items: { type: 'object' },
2051
+ },
2052
+ start_cursor: {
2053
+ type: 'string',
2054
+ description: 'Pagination cursor',
2055
+ },
2056
+ page_size: {
2057
+ type: 'number',
2058
+ description: 'Pagination page size',
2059
+ },
2060
+ archived: {
2061
+ type: 'boolean',
2062
+ description: 'Archive/unarchive page (for update_page)',
2063
+ },
2064
+ icon: {
2065
+ type: 'object',
2066
+ description: 'Icon payload (for create/update)',
2067
+ },
2068
+ cover: {
2069
+ type: 'object',
2070
+ description: 'Cover payload (for create/update)',
2071
+ },
2072
+ title: {
2073
+ type: 'string',
2074
+ description: 'Title for create_data_source/update_data_source',
2075
+ },
2076
+ is_inline: {
2077
+ type: 'boolean',
2078
+ description: 'Create inline data source (for create_data_source)',
2079
+ },
2080
+ payload: {
2081
+ type: 'object',
2082
+ description: 'Raw request body to send directly (advanced use)',
2083
+ },
2084
+ },
2085
+ required: ['action'],
2086
+ },
2087
+ },
2088
+ ];
2089
+ }
2090
+ /**
2091
+ * Define Box tools
2092
+ */
2093
+ getBoxToolDefinitions() {
2094
+ return [
2095
+ {
2096
+ name: 'box_action',
2097
+ description: 'Use the connected Box account to search, read, and manage files/folders. ' +
2098
+ 'Write actions (create/upload/delete) require user approval.',
2099
+ input_schema: {
2100
+ type: 'object',
2101
+ properties: {
2102
+ action: {
2103
+ type: 'string',
2104
+ enum: [
2105
+ 'get_current_user',
2106
+ 'search',
2107
+ 'get_file',
2108
+ 'get_folder',
2109
+ 'list_folder_items',
2110
+ 'create_folder',
2111
+ 'delete_file',
2112
+ 'delete_folder',
2113
+ 'upload_file',
2114
+ ],
2115
+ description: 'Action to perform',
2116
+ },
2117
+ query: {
2118
+ type: 'string',
2119
+ description: 'Search query (for search)',
2120
+ },
2121
+ limit: {
2122
+ type: 'number',
2123
+ description: 'Max results (for search/list_folder_items)',
2124
+ },
2125
+ offset: {
2126
+ type: 'number',
2127
+ description: 'Offset for pagination (for search/list_folder_items)',
2128
+ },
2129
+ fields: {
2130
+ type: 'string',
2131
+ description: 'Comma-separated fields to return',
2132
+ },
2133
+ type: {
2134
+ type: 'string',
2135
+ enum: ['file', 'folder', 'web_link'],
2136
+ description: 'Filter search results by type',
2137
+ },
2138
+ ancestor_folder_ids: {
2139
+ type: 'string',
2140
+ description: 'Comma-separated ancestor folder IDs for search',
2141
+ },
2142
+ file_extensions: {
2143
+ type: 'string',
2144
+ description: 'Comma-separated file extensions for search',
2145
+ },
2146
+ content_types: {
2147
+ type: 'string',
2148
+ description: 'Comma-separated content types for search',
2149
+ },
2150
+ scope: {
2151
+ type: 'string',
2152
+ description: 'Search scope (e.g., user_content)',
2153
+ },
2154
+ folder_id: {
2155
+ type: 'string',
2156
+ description: 'Folder ID (for get_folder/list_folder_items/delete_folder)',
2157
+ },
2158
+ file_id: {
2159
+ type: 'string',
2160
+ description: 'File ID (for get_file/delete_file)',
2161
+ },
2162
+ parent_id: {
2163
+ type: 'string',
2164
+ description: 'Parent folder ID (for create_folder/upload_file). Defaults to root.',
2165
+ },
2166
+ name: {
2167
+ type: 'string',
2168
+ description: 'Name for create_folder/upload_file',
2169
+ },
2170
+ file_path: {
2171
+ type: 'string',
2172
+ description: 'Workspace-relative path to upload (for upload_file)',
2173
+ },
2174
+ },
2175
+ required: ['action'],
2176
+ },
2177
+ },
2178
+ ];
2179
+ }
2180
+ /**
2181
+ * Define OneDrive tools
2182
+ */
2183
+ getOneDriveToolDefinitions() {
2184
+ return [
2185
+ {
2186
+ name: 'onedrive_action',
2187
+ description: 'Use the connected OneDrive account to search, read, and manage files/folders. ' +
2188
+ 'Write actions (create/upload/delete) require user approval.',
2189
+ input_schema: {
2190
+ type: 'object',
2191
+ properties: {
2192
+ action: {
2193
+ type: 'string',
2194
+ enum: [
2195
+ 'get_drive',
2196
+ 'search',
2197
+ 'list_children',
2198
+ 'get_item',
2199
+ 'create_folder',
2200
+ 'upload_file',
2201
+ 'delete_item',
2202
+ ],
2203
+ description: 'Action to perform',
2204
+ },
2205
+ drive_id: {
2206
+ type: 'string',
2207
+ description: 'Drive ID override (optional)',
2208
+ },
2209
+ item_id: {
2210
+ type: 'string',
2211
+ description: 'Item ID (for get_item/list_children/delete_item)',
2212
+ },
2213
+ query: {
2214
+ type: 'string',
2215
+ description: 'Search query (for search)',
2216
+ },
2217
+ parent_id: {
2218
+ type: 'string',
2219
+ description: 'Parent folder ID (for create_folder/upload_file)',
2220
+ },
2221
+ name: {
2222
+ type: 'string',
2223
+ description: 'Name for create_folder or uploaded file',
2224
+ },
2225
+ conflict_behavior: {
2226
+ type: 'string',
2227
+ enum: ['rename', 'fail', 'replace'],
2228
+ description: 'Conflict behavior for create_folder',
2229
+ },
2230
+ file_path: {
2231
+ type: 'string',
2232
+ description: 'Workspace-relative path to upload (for upload_file)',
2233
+ },
2234
+ remote_path: {
2235
+ type: 'string',
2236
+ description: 'Remote path (for upload_file, relative to root)',
2237
+ },
2238
+ },
2239
+ required: ['action'],
2240
+ },
2241
+ },
2242
+ ];
2243
+ }
2244
+ /**
2245
+ * Define Google Drive tools
2246
+ */
2247
+ getGoogleDriveToolDefinitions() {
2248
+ return [
2249
+ {
2250
+ name: 'google_drive_action',
2251
+ description: 'Use the connected Google Drive account to search, read, and manage files/folders. ' +
2252
+ 'Write actions (create/upload/delete) require user approval.',
2253
+ input_schema: {
2254
+ type: 'object',
2255
+ properties: {
2256
+ action: {
2257
+ type: 'string',
2258
+ enum: [
2259
+ 'get_current_user',
2260
+ 'list_files',
2261
+ 'get_file',
2262
+ 'create_folder',
2263
+ 'upload_file',
2264
+ 'delete_file',
2265
+ ],
2266
+ description: 'Action to perform',
2267
+ },
2268
+ query: {
2269
+ type: 'string',
2270
+ description: 'Search query (Drive query syntax) for list_files',
2271
+ },
2272
+ page_size: {
2273
+ type: 'number',
2274
+ description: 'Max results (for list_files)',
2275
+ },
2276
+ page_token: {
2277
+ type: 'string',
2278
+ description: 'Pagination token (for list_files)',
2279
+ },
2280
+ fields: {
2281
+ type: 'string',
2282
+ description: 'Fields selector (for list_files/get_file)',
2283
+ },
2284
+ file_id: {
2285
+ type: 'string',
2286
+ description: 'File ID (for get_file/delete_file)',
2287
+ },
2288
+ parent_id: {
2289
+ type: 'string',
2290
+ description: 'Parent folder ID (for create_folder/upload_file)',
2291
+ },
2292
+ name: {
2293
+ type: 'string',
2294
+ description: 'Name for create_folder/upload_file',
2295
+ },
2296
+ file_path: {
2297
+ type: 'string',
2298
+ description: 'Workspace-relative path to upload (for upload_file)',
2299
+ },
2300
+ },
2301
+ required: ['action'],
2302
+ },
2303
+ },
2304
+ ];
2305
+ }
2306
+ /**
2307
+ * Define Dropbox tools
2308
+ */
2309
+ getDropboxToolDefinitions() {
2310
+ return [
2311
+ {
2312
+ name: 'dropbox_action',
2313
+ description: 'Use the connected Dropbox account to search, read, and manage files/folders. ' +
2314
+ 'Write actions (create/upload/delete) require user approval.',
2315
+ input_schema: {
2316
+ type: 'object',
2317
+ properties: {
2318
+ action: {
2319
+ type: 'string',
2320
+ enum: [
2321
+ 'get_current_user',
2322
+ 'list_folder',
2323
+ 'list_folder_continue',
2324
+ 'search',
2325
+ 'get_metadata',
2326
+ 'create_folder',
2327
+ 'delete_item',
2328
+ 'upload_file',
2329
+ ],
2330
+ description: 'Action to perform',
2331
+ },
2332
+ path: {
2333
+ type: 'string',
2334
+ description: 'Dropbox path (for list_folder/get_metadata/create_folder/delete_item/upload_file)',
2335
+ },
2336
+ query: {
2337
+ type: 'string',
2338
+ description: 'Search query (for search)',
2339
+ },
2340
+ limit: {
2341
+ type: 'number',
2342
+ description: 'Max results (for list/search)',
2343
+ },
2344
+ cursor: {
2345
+ type: 'string',
2346
+ description: 'Pagination cursor (for list_folder_continue)',
2347
+ },
2348
+ name: {
2349
+ type: 'string',
2350
+ description: 'Name for upload_file',
2351
+ },
2352
+ parent_path: {
2353
+ type: 'string',
2354
+ description: 'Parent folder path (for upload_file when path not provided)',
2355
+ },
2356
+ file_path: {
2357
+ type: 'string',
2358
+ description: 'Workspace-relative path to upload (for upload_file)',
2359
+ },
2360
+ },
2361
+ required: ['action'],
2362
+ },
2363
+ },
2364
+ ];
2365
+ }
2366
+ /**
2367
+ * Define SharePoint tools
2368
+ */
2369
+ getSharePointToolDefinitions() {
2370
+ return [
2371
+ {
2372
+ name: 'sharepoint_action',
2373
+ description: 'Use the connected SharePoint account to search sites and manage drive items. ' +
2374
+ 'Write actions (create/upload/delete) require user approval.',
2375
+ input_schema: {
2376
+ type: 'object',
2377
+ properties: {
2378
+ action: {
2379
+ type: 'string',
2380
+ enum: [
2381
+ 'get_current_user',
2382
+ 'search_sites',
2383
+ 'get_site',
2384
+ 'list_site_drives',
2385
+ 'list_drive_items',
2386
+ 'get_item',
2387
+ 'create_folder',
2388
+ 'upload_file',
2389
+ 'delete_item',
2390
+ ],
2391
+ description: 'Action to perform',
2392
+ },
2393
+ site_id: {
2394
+ type: 'string',
2395
+ description: 'Site ID (for get_site/list_site_drives)',
2396
+ },
2397
+ drive_id: {
2398
+ type: 'string',
2399
+ description: 'Drive ID (for list/get/create/upload/delete)',
2400
+ },
2401
+ item_id: {
2402
+ type: 'string',
2403
+ description: 'Item ID (for list_drive_items/get_item/delete_item)',
2404
+ },
2405
+ query: {
2406
+ type: 'string',
2407
+ description: 'Search query (for search_sites)',
2408
+ },
2409
+ parent_id: {
2410
+ type: 'string',
2411
+ description: 'Parent folder ID (for create_folder/upload_file)',
2412
+ },
2413
+ name: {
2414
+ type: 'string',
2415
+ description: 'Name for create_folder/upload_file',
2416
+ },
2417
+ conflict_behavior: {
2418
+ type: 'string',
2419
+ enum: ['rename', 'fail', 'replace'],
2420
+ description: 'Conflict behavior for create_folder',
2421
+ },
2422
+ file_path: {
2423
+ type: 'string',
2424
+ description: 'Workspace-relative path to upload (for upload_file)',
2425
+ },
2426
+ remote_path: {
2427
+ type: 'string',
2428
+ description: 'Remote path (for upload_file, relative to root)',
2429
+ },
2430
+ },
2431
+ required: ['action'],
2432
+ },
2433
+ },
2434
+ ];
2435
+ }
1898
2436
  /**
1899
2437
  * Define shell tools
1900
2438
  */
@@ -75,17 +75,35 @@ class SearchTools {
75
75
  message: `Searching ${searchQuery.searchType}: "${input.query}" via ${providerName}`,
76
76
  });
77
77
  // Use searchWithFallback for automatic fallback support
78
- const response = await search_1.SearchProviderFactory.searchWithFallback(searchQuery);
79
- this.daemon.logEvent(this.taskId, 'tool_result', {
80
- tool: 'web_search',
81
- result: {
78
+ try {
79
+ const response = await search_1.SearchProviderFactory.searchWithFallback(searchQuery);
80
+ this.daemon.logEvent(this.taskId, 'tool_result', {
81
+ tool: 'web_search',
82
+ result: {
83
+ query: input.query,
84
+ searchType: searchQuery.searchType,
85
+ resultCount: response.results.length,
86
+ provider: response.provider,
87
+ },
88
+ });
89
+ return response;
90
+ }
91
+ catch (error) {
92
+ const message = error?.message || 'Web search failed';
93
+ this.daemon.logEvent(this.taskId, 'tool_result', {
94
+ tool: 'web_search',
95
+ error: message,
96
+ });
97
+ return {
82
98
  query: input.query,
83
- searchType: searchQuery.searchType,
84
- resultCount: response.results.length,
85
- provider: response.provider,
86
- },
87
- });
88
- return response;
99
+ searchType: input.searchType || 'web',
100
+ results: [],
101
+ provider: (input.provider || settings.primaryProvider || 'none'),
102
+ metadata: {
103
+ error: message,
104
+ },
105
+ };
106
+ }
89
107
  }
90
108
  }
91
109
  exports.SearchTools = SearchTools;