cowork-os 0.3.21

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 (526) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1638 -0
  3. package/bin/cowork.js +42 -0
  4. package/build/entitlements.mac.plist +16 -0
  5. package/build/icon.icns +0 -0
  6. package/build/icon.png +0 -0
  7. package/dist/electron/electron/activity/ActivityRepository.js +190 -0
  8. package/dist/electron/electron/agent/browser/browser-service.js +639 -0
  9. package/dist/electron/electron/agent/context-manager.js +225 -0
  10. package/dist/electron/electron/agent/custom-skill-loader.js +566 -0
  11. package/dist/electron/electron/agent/daemon.js +975 -0
  12. package/dist/electron/electron/agent/executor.js +3561 -0
  13. package/dist/electron/electron/agent/llm/anthropic-provider.js +155 -0
  14. package/dist/electron/electron/agent/llm/bedrock-provider.js +202 -0
  15. package/dist/electron/electron/agent/llm/gemini-provider.js +375 -0
  16. package/dist/electron/electron/agent/llm/index.js +34 -0
  17. package/dist/electron/electron/agent/llm/ollama-provider.js +263 -0
  18. package/dist/electron/electron/agent/llm/openai-oauth.js +101 -0
  19. package/dist/electron/electron/agent/llm/openai-provider.js +657 -0
  20. package/dist/electron/electron/agent/llm/openrouter-provider.js +232 -0
  21. package/dist/electron/electron/agent/llm/pricing.js +160 -0
  22. package/dist/electron/electron/agent/llm/provider-factory.js +880 -0
  23. package/dist/electron/electron/agent/llm/types.js +178 -0
  24. package/dist/electron/electron/agent/queue-manager.js +378 -0
  25. package/dist/electron/electron/agent/sandbox/docker-sandbox.js +402 -0
  26. package/dist/electron/electron/agent/sandbox/macos-sandbox.js +407 -0
  27. package/dist/electron/electron/agent/sandbox/runner.js +410 -0
  28. package/dist/electron/electron/agent/sandbox/sandbox-factory.js +228 -0
  29. package/dist/electron/electron/agent/sandbox/security-utils.js +258 -0
  30. package/dist/electron/electron/agent/search/brave-provider.js +119 -0
  31. package/dist/electron/electron/agent/search/google-provider.js +100 -0
  32. package/dist/electron/electron/agent/search/index.js +28 -0
  33. package/dist/electron/electron/agent/search/provider-factory.js +395 -0
  34. package/dist/electron/electron/agent/search/serpapi-provider.js +112 -0
  35. package/dist/electron/electron/agent/search/tavily-provider.js +90 -0
  36. package/dist/electron/electron/agent/search/types.js +40 -0
  37. package/dist/electron/electron/agent/security/index.js +12 -0
  38. package/dist/electron/electron/agent/security/input-sanitizer.js +303 -0
  39. package/dist/electron/electron/agent/security/output-filter.js +217 -0
  40. package/dist/electron/electron/agent/skill-eligibility.js +281 -0
  41. package/dist/electron/electron/agent/skill-registry.js +396 -0
  42. package/dist/electron/electron/agent/skills/document.js +878 -0
  43. package/dist/electron/electron/agent/skills/image-generator.js +225 -0
  44. package/dist/electron/electron/agent/skills/organizer.js +141 -0
  45. package/dist/electron/electron/agent/skills/presentation.js +367 -0
  46. package/dist/electron/electron/agent/skills/spreadsheet.js +165 -0
  47. package/dist/electron/electron/agent/tools/browser-tools.js +523 -0
  48. package/dist/electron/electron/agent/tools/builtin-settings.js +384 -0
  49. package/dist/electron/electron/agent/tools/canvas-tools.js +530 -0
  50. package/dist/electron/electron/agent/tools/cron-tools.js +577 -0
  51. package/dist/electron/electron/agent/tools/edit-tools.js +194 -0
  52. package/dist/electron/electron/agent/tools/file-tools.js +719 -0
  53. package/dist/electron/electron/agent/tools/glob-tools.js +283 -0
  54. package/dist/electron/electron/agent/tools/grep-tools.js +387 -0
  55. package/dist/electron/electron/agent/tools/image-tools.js +111 -0
  56. package/dist/electron/electron/agent/tools/mention-tools.js +282 -0
  57. package/dist/electron/electron/agent/tools/node-tools.js +476 -0
  58. package/dist/electron/electron/agent/tools/registry.js +2719 -0
  59. package/dist/electron/electron/agent/tools/search-tools.js +91 -0
  60. package/dist/electron/electron/agent/tools/shell-tools.js +574 -0
  61. package/dist/electron/electron/agent/tools/skill-tools.js +274 -0
  62. package/dist/electron/electron/agent/tools/system-tools.js +578 -0
  63. package/dist/electron/electron/agent/tools/web-fetch-tools.js +444 -0
  64. package/dist/electron/electron/agent/tools/x-tools.js +264 -0
  65. package/dist/electron/electron/agents/AgentRoleRepository.js +420 -0
  66. package/dist/electron/electron/agents/HeartbeatService.js +356 -0
  67. package/dist/electron/electron/agents/MentionRepository.js +197 -0
  68. package/dist/electron/electron/agents/TaskSubscriptionRepository.js +168 -0
  69. package/dist/electron/electron/agents/WorkingStateRepository.js +229 -0
  70. package/dist/electron/electron/canvas/canvas-manager.js +714 -0
  71. package/dist/electron/electron/canvas/canvas-preload.js +53 -0
  72. package/dist/electron/electron/canvas/canvas-protocol.js +195 -0
  73. package/dist/electron/electron/canvas/canvas-store.js +174 -0
  74. package/dist/electron/electron/canvas/index.js +13 -0
  75. package/dist/electron/electron/control-plane/client.js +364 -0
  76. package/dist/electron/electron/control-plane/handlers.js +572 -0
  77. package/dist/electron/electron/control-plane/index.js +41 -0
  78. package/dist/electron/electron/control-plane/node-manager.js +264 -0
  79. package/dist/electron/electron/control-plane/protocol.js +194 -0
  80. package/dist/electron/electron/control-plane/remote-client.js +437 -0
  81. package/dist/electron/electron/control-plane/server.js +640 -0
  82. package/dist/electron/electron/control-plane/settings.js +369 -0
  83. package/dist/electron/electron/control-plane/ssh-tunnel.js +549 -0
  84. package/dist/electron/electron/cron/index.js +30 -0
  85. package/dist/electron/electron/cron/schedule.js +190 -0
  86. package/dist/electron/electron/cron/service.js +614 -0
  87. package/dist/electron/electron/cron/store.js +155 -0
  88. package/dist/electron/electron/cron/types.js +82 -0
  89. package/dist/electron/electron/cron/webhook.js +258 -0
  90. package/dist/electron/electron/database/SecureSettingsRepository.js +444 -0
  91. package/dist/electron/electron/database/TaskLabelRepository.js +120 -0
  92. package/dist/electron/electron/database/repositories.js +1781 -0
  93. package/dist/electron/electron/database/schema.js +978 -0
  94. package/dist/electron/electron/extensions/index.js +33 -0
  95. package/dist/electron/electron/extensions/loader.js +313 -0
  96. package/dist/electron/electron/extensions/registry.js +485 -0
  97. package/dist/electron/electron/extensions/types.js +11 -0
  98. package/dist/electron/electron/gateway/channel-registry.js +1102 -0
  99. package/dist/electron/electron/gateway/channels/bluebubbles-client.js +479 -0
  100. package/dist/electron/electron/gateway/channels/bluebubbles.js +432 -0
  101. package/dist/electron/electron/gateway/channels/discord.js +975 -0
  102. package/dist/electron/electron/gateway/channels/email-client.js +593 -0
  103. package/dist/electron/electron/gateway/channels/email.js +443 -0
  104. package/dist/electron/electron/gateway/channels/google-chat.js +631 -0
  105. package/dist/electron/electron/gateway/channels/imessage-client.js +363 -0
  106. package/dist/electron/electron/gateway/channels/imessage.js +465 -0
  107. package/dist/electron/electron/gateway/channels/index.js +36 -0
  108. package/dist/electron/electron/gateway/channels/line-client.js +470 -0
  109. package/dist/electron/electron/gateway/channels/line.js +479 -0
  110. package/dist/electron/electron/gateway/channels/matrix-client.js +432 -0
  111. package/dist/electron/electron/gateway/channels/matrix.js +592 -0
  112. package/dist/electron/electron/gateway/channels/mattermost-client.js +394 -0
  113. package/dist/electron/electron/gateway/channels/mattermost.js +496 -0
  114. package/dist/electron/electron/gateway/channels/signal-client.js +500 -0
  115. package/dist/electron/electron/gateway/channels/signal.js +582 -0
  116. package/dist/electron/electron/gateway/channels/slack.js +415 -0
  117. package/dist/electron/electron/gateway/channels/teams.js +596 -0
  118. package/dist/electron/electron/gateway/channels/telegram.js +1390 -0
  119. package/dist/electron/electron/gateway/channels/twitch-client.js +502 -0
  120. package/dist/electron/electron/gateway/channels/twitch.js +396 -0
  121. package/dist/electron/electron/gateway/channels/types.js +8 -0
  122. package/dist/electron/electron/gateway/channels/whatsapp.js +953 -0
  123. package/dist/electron/electron/gateway/context-policy.js +268 -0
  124. package/dist/electron/electron/gateway/index.js +1063 -0
  125. package/dist/electron/electron/gateway/infrastructure.js +496 -0
  126. package/dist/electron/electron/gateway/router.js +2700 -0
  127. package/dist/electron/electron/gateway/security.js +375 -0
  128. package/dist/electron/electron/gateway/session.js +115 -0
  129. package/dist/electron/electron/gateway/tunnel.js +503 -0
  130. package/dist/electron/electron/guardrails/guardrail-manager.js +348 -0
  131. package/dist/electron/electron/hooks/gmail-watcher.js +300 -0
  132. package/dist/electron/electron/hooks/index.js +46 -0
  133. package/dist/electron/electron/hooks/mappings.js +381 -0
  134. package/dist/electron/electron/hooks/server.js +480 -0
  135. package/dist/electron/electron/hooks/settings.js +447 -0
  136. package/dist/electron/electron/hooks/types.js +41 -0
  137. package/dist/electron/electron/ipc/canvas-handlers.js +158 -0
  138. package/dist/electron/electron/ipc/handlers.js +3138 -0
  139. package/dist/electron/electron/ipc/mission-control-handlers.js +141 -0
  140. package/dist/electron/electron/main.js +448 -0
  141. package/dist/electron/electron/mcp/client/MCPClientManager.js +330 -0
  142. package/dist/electron/electron/mcp/client/MCPServerConnection.js +437 -0
  143. package/dist/electron/electron/mcp/client/transports/SSETransport.js +304 -0
  144. package/dist/electron/electron/mcp/client/transports/StdioTransport.js +307 -0
  145. package/dist/electron/electron/mcp/client/transports/WebSocketTransport.js +329 -0
  146. package/dist/electron/electron/mcp/host/MCPHostServer.js +354 -0
  147. package/dist/electron/electron/mcp/host/ToolAdapter.js +100 -0
  148. package/dist/electron/electron/mcp/registry/MCPRegistryManager.js +497 -0
  149. package/dist/electron/electron/mcp/settings.js +446 -0
  150. package/dist/electron/electron/mcp/types.js +59 -0
  151. package/dist/electron/electron/memory/MemoryService.js +435 -0
  152. package/dist/electron/electron/notifications/index.js +17 -0
  153. package/dist/electron/electron/notifications/service.js +118 -0
  154. package/dist/electron/electron/notifications/store.js +144 -0
  155. package/dist/electron/electron/preload.js +842 -0
  156. package/dist/electron/electron/reports/StandupReportService.js +272 -0
  157. package/dist/electron/electron/security/concurrency.js +293 -0
  158. package/dist/electron/electron/security/index.js +15 -0
  159. package/dist/electron/electron/security/policy-manager.js +435 -0
  160. package/dist/electron/electron/settings/appearance-manager.js +193 -0
  161. package/dist/electron/electron/settings/personality-manager.js +724 -0
  162. package/dist/electron/electron/settings/x-manager.js +58 -0
  163. package/dist/electron/electron/tailscale/exposure.js +188 -0
  164. package/dist/electron/electron/tailscale/index.js +28 -0
  165. package/dist/electron/electron/tailscale/settings.js +205 -0
  166. package/dist/electron/electron/tailscale/tailscale.js +355 -0
  167. package/dist/electron/electron/tray/QuickInputWindow.js +568 -0
  168. package/dist/electron/electron/tray/TrayManager.js +895 -0
  169. package/dist/electron/electron/tray/index.js +9 -0
  170. package/dist/electron/electron/updater/index.js +6 -0
  171. package/dist/electron/electron/updater/update-manager.js +418 -0
  172. package/dist/electron/electron/utils/env-migration.js +209 -0
  173. package/dist/electron/electron/utils/process.js +102 -0
  174. package/dist/electron/electron/utils/rate-limiter.js +104 -0
  175. package/dist/electron/electron/utils/validation.js +419 -0
  176. package/dist/electron/electron/utils/x-cli.js +177 -0
  177. package/dist/electron/electron/voice/VoiceService.js +507 -0
  178. package/dist/electron/electron/voice/index.js +14 -0
  179. package/dist/electron/electron/voice/voice-settings-manager.js +359 -0
  180. package/dist/electron/shared/channelMessages.js +170 -0
  181. package/dist/electron/shared/types.js +1185 -0
  182. package/package.json +159 -0
  183. package/resources/skills/1password.json +10 -0
  184. package/resources/skills/add-documentation.json +31 -0
  185. package/resources/skills/analyze-csv.json +17 -0
  186. package/resources/skills/apple-notes.json +10 -0
  187. package/resources/skills/apple-reminders.json +10 -0
  188. package/resources/skills/auto-commenter.json +10 -0
  189. package/resources/skills/bear-notes.json +10 -0
  190. package/resources/skills/bird.json +35 -0
  191. package/resources/skills/blogwatcher.json +10 -0
  192. package/resources/skills/blucli.json +10 -0
  193. package/resources/skills/bluebubbles.json +10 -0
  194. package/resources/skills/camsnap.json +10 -0
  195. package/resources/skills/clean-imports.json +18 -0
  196. package/resources/skills/code-review.json +18 -0
  197. package/resources/skills/coding-agent.json +10 -0
  198. package/resources/skills/compare-files.json +23 -0
  199. package/resources/skills/convert-code.json +34 -0
  200. package/resources/skills/create-changelog.json +24 -0
  201. package/resources/skills/debug-error.json +17 -0
  202. package/resources/skills/dependency-check.json +10 -0
  203. package/resources/skills/discord.json +10 -0
  204. package/resources/skills/eightctl.json +10 -0
  205. package/resources/skills/explain-code.json +29 -0
  206. package/resources/skills/extract-todos.json +18 -0
  207. package/resources/skills/food-order.json +10 -0
  208. package/resources/skills/gemini.json +10 -0
  209. package/resources/skills/generate-readme.json +10 -0
  210. package/resources/skills/gifgrep.json +10 -0
  211. package/resources/skills/git-commit.json +10 -0
  212. package/resources/skills/github.json +10 -0
  213. package/resources/skills/gog.json +10 -0
  214. package/resources/skills/goplaces.json +10 -0
  215. package/resources/skills/himalaya.json +10 -0
  216. package/resources/skills/imsg.json +10 -0
  217. package/resources/skills/karpathy-guidelines.json +12 -0
  218. package/resources/skills/last30days.json +26 -0
  219. package/resources/skills/local-places.json +10 -0
  220. package/resources/skills/mcporter.json +10 -0
  221. package/resources/skills/model-usage.json +10 -0
  222. package/resources/skills/nano-banana-pro.json +10 -0
  223. package/resources/skills/nano-pdf.json +10 -0
  224. package/resources/skills/notion.json +10 -0
  225. package/resources/skills/obsidian.json +10 -0
  226. package/resources/skills/openai-image-gen.json +10 -0
  227. package/resources/skills/openai-whisper-api.json +10 -0
  228. package/resources/skills/openai-whisper.json +10 -0
  229. package/resources/skills/openhue.json +10 -0
  230. package/resources/skills/oracle.json +10 -0
  231. package/resources/skills/ordercli.json +10 -0
  232. package/resources/skills/peekaboo.json +10 -0
  233. package/resources/skills/project-structure.json +10 -0
  234. package/resources/skills/proofread.json +17 -0
  235. package/resources/skills/refactor-code.json +31 -0
  236. package/resources/skills/rename-symbol.json +23 -0
  237. package/resources/skills/sag.json +10 -0
  238. package/resources/skills/security-audit.json +18 -0
  239. package/resources/skills/session-logs.json +10 -0
  240. package/resources/skills/sherpa-onnx-tts.json +10 -0
  241. package/resources/skills/skill-creator.json +15 -0
  242. package/resources/skills/skill-hub.json +29 -0
  243. package/resources/skills/slack.json +10 -0
  244. package/resources/skills/songsee.json +10 -0
  245. package/resources/skills/sonoscli.json +10 -0
  246. package/resources/skills/spotify-player.json +10 -0
  247. package/resources/skills/startup-cfo.json +55 -0
  248. package/resources/skills/summarize-folder.json +18 -0
  249. package/resources/skills/summarize.json +10 -0
  250. package/resources/skills/things-mac.json +10 -0
  251. package/resources/skills/tmux.json +10 -0
  252. package/resources/skills/translate.json +36 -0
  253. package/resources/skills/trello.json +10 -0
  254. package/resources/skills/video-frames.json +10 -0
  255. package/resources/skills/voice-call.json +10 -0
  256. package/resources/skills/wacli.json +10 -0
  257. package/resources/skills/weather.json +10 -0
  258. package/resources/skills/write-tests.json +31 -0
  259. package/src/electron/activity/ActivityRepository.ts +238 -0
  260. package/src/electron/agent/browser/browser-service.ts +721 -0
  261. package/src/electron/agent/context-manager.ts +257 -0
  262. package/src/electron/agent/custom-skill-loader.ts +634 -0
  263. package/src/electron/agent/daemon.ts +1097 -0
  264. package/src/electron/agent/executor.ts +4017 -0
  265. package/src/electron/agent/llm/anthropic-provider.ts +175 -0
  266. package/src/electron/agent/llm/bedrock-provider.ts +236 -0
  267. package/src/electron/agent/llm/gemini-provider.ts +422 -0
  268. package/src/electron/agent/llm/index.ts +9 -0
  269. package/src/electron/agent/llm/ollama-provider.ts +347 -0
  270. package/src/electron/agent/llm/openai-oauth.ts +127 -0
  271. package/src/electron/agent/llm/openai-provider.ts +686 -0
  272. package/src/electron/agent/llm/openrouter-provider.ts +273 -0
  273. package/src/electron/agent/llm/pricing.ts +180 -0
  274. package/src/electron/agent/llm/provider-factory.ts +971 -0
  275. package/src/electron/agent/llm/types.ts +291 -0
  276. package/src/electron/agent/queue-manager.ts +408 -0
  277. package/src/electron/agent/sandbox/docker-sandbox.ts +453 -0
  278. package/src/electron/agent/sandbox/macos-sandbox.ts +426 -0
  279. package/src/electron/agent/sandbox/runner.ts +453 -0
  280. package/src/electron/agent/sandbox/sandbox-factory.ts +337 -0
  281. package/src/electron/agent/sandbox/security-utils.ts +251 -0
  282. package/src/electron/agent/search/brave-provider.ts +141 -0
  283. package/src/electron/agent/search/google-provider.ts +131 -0
  284. package/src/electron/agent/search/index.ts +6 -0
  285. package/src/electron/agent/search/provider-factory.ts +450 -0
  286. package/src/electron/agent/search/serpapi-provider.ts +138 -0
  287. package/src/electron/agent/search/tavily-provider.ts +108 -0
  288. package/src/electron/agent/search/types.ts +118 -0
  289. package/src/electron/agent/security/index.ts +20 -0
  290. package/src/electron/agent/security/input-sanitizer.ts +380 -0
  291. package/src/electron/agent/security/output-filter.ts +259 -0
  292. package/src/electron/agent/skill-eligibility.ts +334 -0
  293. package/src/electron/agent/skill-registry.ts +457 -0
  294. package/src/electron/agent/skills/document.ts +1070 -0
  295. package/src/electron/agent/skills/image-generator.ts +272 -0
  296. package/src/electron/agent/skills/organizer.ts +131 -0
  297. package/src/electron/agent/skills/presentation.ts +418 -0
  298. package/src/electron/agent/skills/spreadsheet.ts +166 -0
  299. package/src/electron/agent/tools/browser-tools.ts +546 -0
  300. package/src/electron/agent/tools/builtin-settings.ts +422 -0
  301. package/src/electron/agent/tools/canvas-tools.ts +572 -0
  302. package/src/electron/agent/tools/cron-tools.ts +723 -0
  303. package/src/electron/agent/tools/edit-tools.ts +196 -0
  304. package/src/electron/agent/tools/file-tools.ts +811 -0
  305. package/src/electron/agent/tools/glob-tools.ts +303 -0
  306. package/src/electron/agent/tools/grep-tools.ts +432 -0
  307. package/src/electron/agent/tools/image-tools.ts +126 -0
  308. package/src/electron/agent/tools/mention-tools.ts +371 -0
  309. package/src/electron/agent/tools/node-tools.ts +550 -0
  310. package/src/electron/agent/tools/registry.ts +3052 -0
  311. package/src/electron/agent/tools/search-tools.ts +111 -0
  312. package/src/electron/agent/tools/shell-tools.ts +651 -0
  313. package/src/electron/agent/tools/skill-tools.ts +340 -0
  314. package/src/electron/agent/tools/system-tools.ts +665 -0
  315. package/src/electron/agent/tools/web-fetch-tools.ts +528 -0
  316. package/src/electron/agent/tools/x-tools.ts +267 -0
  317. package/src/electron/agents/AgentRoleRepository.ts +557 -0
  318. package/src/electron/agents/HeartbeatService.ts +469 -0
  319. package/src/electron/agents/MentionRepository.ts +242 -0
  320. package/src/electron/agents/TaskSubscriptionRepository.ts +231 -0
  321. package/src/electron/agents/WorkingStateRepository.ts +278 -0
  322. package/src/electron/canvas/canvas-manager.ts +818 -0
  323. package/src/electron/canvas/canvas-preload.ts +102 -0
  324. package/src/electron/canvas/canvas-protocol.ts +174 -0
  325. package/src/electron/canvas/canvas-store.ts +200 -0
  326. package/src/electron/canvas/index.ts +8 -0
  327. package/src/electron/control-plane/client.ts +527 -0
  328. package/src/electron/control-plane/handlers.ts +723 -0
  329. package/src/electron/control-plane/index.ts +51 -0
  330. package/src/electron/control-plane/node-manager.ts +322 -0
  331. package/src/electron/control-plane/protocol.ts +269 -0
  332. package/src/electron/control-plane/remote-client.ts +517 -0
  333. package/src/electron/control-plane/server.ts +853 -0
  334. package/src/electron/control-plane/settings.ts +401 -0
  335. package/src/electron/control-plane/ssh-tunnel.ts +624 -0
  336. package/src/electron/cron/index.ts +9 -0
  337. package/src/electron/cron/schedule.ts +217 -0
  338. package/src/electron/cron/service.ts +743 -0
  339. package/src/electron/cron/store.ts +165 -0
  340. package/src/electron/cron/types.ts +291 -0
  341. package/src/electron/cron/webhook.ts +303 -0
  342. package/src/electron/database/SecureSettingsRepository.ts +514 -0
  343. package/src/electron/database/TaskLabelRepository.ts +148 -0
  344. package/src/electron/database/repositories.ts +2397 -0
  345. package/src/electron/database/schema.ts +1017 -0
  346. package/src/electron/extensions/index.ts +18 -0
  347. package/src/electron/extensions/loader.ts +336 -0
  348. package/src/electron/extensions/registry.ts +546 -0
  349. package/src/electron/extensions/types.ts +372 -0
  350. package/src/electron/gateway/channel-registry.ts +1267 -0
  351. package/src/electron/gateway/channels/bluebubbles-client.ts +641 -0
  352. package/src/electron/gateway/channels/bluebubbles.ts +509 -0
  353. package/src/electron/gateway/channels/discord.ts +1150 -0
  354. package/src/electron/gateway/channels/email-client.ts +708 -0
  355. package/src/electron/gateway/channels/email.ts +516 -0
  356. package/src/electron/gateway/channels/google-chat.ts +760 -0
  357. package/src/electron/gateway/channels/imessage-client.ts +473 -0
  358. package/src/electron/gateway/channels/imessage.ts +520 -0
  359. package/src/electron/gateway/channels/index.ts +21 -0
  360. package/src/electron/gateway/channels/line-client.ts +598 -0
  361. package/src/electron/gateway/channels/line.ts +559 -0
  362. package/src/electron/gateway/channels/matrix-client.ts +632 -0
  363. package/src/electron/gateway/channels/matrix.ts +655 -0
  364. package/src/electron/gateway/channels/mattermost-client.ts +526 -0
  365. package/src/electron/gateway/channels/mattermost.ts +550 -0
  366. package/src/electron/gateway/channels/signal-client.ts +722 -0
  367. package/src/electron/gateway/channels/signal.ts +666 -0
  368. package/src/electron/gateway/channels/slack.ts +458 -0
  369. package/src/electron/gateway/channels/teams.ts +681 -0
  370. package/src/electron/gateway/channels/telegram.ts +1727 -0
  371. package/src/electron/gateway/channels/twitch-client.ts +665 -0
  372. package/src/electron/gateway/channels/twitch.ts +468 -0
  373. package/src/electron/gateway/channels/types.ts +1002 -0
  374. package/src/electron/gateway/channels/whatsapp.ts +1101 -0
  375. package/src/electron/gateway/context-policy.ts +382 -0
  376. package/src/electron/gateway/index.ts +1274 -0
  377. package/src/electron/gateway/infrastructure.ts +645 -0
  378. package/src/electron/gateway/router.ts +3206 -0
  379. package/src/electron/gateway/security.ts +422 -0
  380. package/src/electron/gateway/session.ts +144 -0
  381. package/src/electron/gateway/tunnel.ts +626 -0
  382. package/src/electron/guardrails/guardrail-manager.ts +380 -0
  383. package/src/electron/hooks/gmail-watcher.ts +355 -0
  384. package/src/electron/hooks/index.ts +30 -0
  385. package/src/electron/hooks/mappings.ts +404 -0
  386. package/src/electron/hooks/server.ts +574 -0
  387. package/src/electron/hooks/settings.ts +466 -0
  388. package/src/electron/hooks/types.ts +245 -0
  389. package/src/electron/ipc/canvas-handlers.ts +223 -0
  390. package/src/electron/ipc/handlers.ts +3661 -0
  391. package/src/electron/ipc/mission-control-handlers.ts +182 -0
  392. package/src/electron/main.ts +496 -0
  393. package/src/electron/mcp/client/MCPClientManager.ts +406 -0
  394. package/src/electron/mcp/client/MCPServerConnection.ts +514 -0
  395. package/src/electron/mcp/client/transports/SSETransport.ts +360 -0
  396. package/src/electron/mcp/client/transports/StdioTransport.ts +355 -0
  397. package/src/electron/mcp/client/transports/WebSocketTransport.ts +384 -0
  398. package/src/electron/mcp/host/MCPHostServer.ts +388 -0
  399. package/src/electron/mcp/host/ToolAdapter.ts +140 -0
  400. package/src/electron/mcp/registry/MCPRegistryManager.ts +565 -0
  401. package/src/electron/mcp/settings.ts +468 -0
  402. package/src/electron/mcp/types.ts +371 -0
  403. package/src/electron/memory/MemoryService.ts +523 -0
  404. package/src/electron/notifications/index.ts +16 -0
  405. package/src/electron/notifications/service.ts +161 -0
  406. package/src/electron/notifications/store.ts +163 -0
  407. package/src/electron/preload.ts +2845 -0
  408. package/src/electron/reports/StandupReportService.ts +356 -0
  409. package/src/electron/security/concurrency.ts +333 -0
  410. package/src/electron/security/index.ts +17 -0
  411. package/src/electron/security/policy-manager.ts +539 -0
  412. package/src/electron/settings/appearance-manager.ts +182 -0
  413. package/src/electron/settings/personality-manager.ts +800 -0
  414. package/src/electron/settings/x-manager.ts +62 -0
  415. package/src/electron/tailscale/exposure.ts +262 -0
  416. package/src/electron/tailscale/index.ts +34 -0
  417. package/src/electron/tailscale/settings.ts +218 -0
  418. package/src/electron/tailscale/tailscale.ts +379 -0
  419. package/src/electron/tray/QuickInputWindow.ts +609 -0
  420. package/src/electron/tray/TrayManager.ts +1005 -0
  421. package/src/electron/tray/index.ts +6 -0
  422. package/src/electron/updater/index.ts +1 -0
  423. package/src/electron/updater/update-manager.ts +447 -0
  424. package/src/electron/utils/env-migration.ts +203 -0
  425. package/src/electron/utils/process.ts +124 -0
  426. package/src/electron/utils/rate-limiter.ts +130 -0
  427. package/src/electron/utils/validation.ts +493 -0
  428. package/src/electron/utils/x-cli.ts +198 -0
  429. package/src/electron/voice/VoiceService.ts +583 -0
  430. package/src/electron/voice/index.ts +9 -0
  431. package/src/electron/voice/voice-settings-manager.ts +403 -0
  432. package/src/renderer/App.tsx +775 -0
  433. package/src/renderer/components/ActivityFeed.tsx +407 -0
  434. package/src/renderer/components/ActivityFeedItem.tsx +285 -0
  435. package/src/renderer/components/AgentRoleCard.tsx +343 -0
  436. package/src/renderer/components/AgentRoleEditor.tsx +805 -0
  437. package/src/renderer/components/AgentSquadSettings.tsx +295 -0
  438. package/src/renderer/components/AgentWorkingStatePanel.tsx +411 -0
  439. package/src/renderer/components/AppearanceSettings.tsx +122 -0
  440. package/src/renderer/components/ApprovalDialog.tsx +100 -0
  441. package/src/renderer/components/BlueBubblesSettings.tsx +505 -0
  442. package/src/renderer/components/BuiltinToolsSettings.tsx +307 -0
  443. package/src/renderer/components/CanvasPreview.tsx +1189 -0
  444. package/src/renderer/components/CommandOutput.tsx +202 -0
  445. package/src/renderer/components/ContextPolicySettings.tsx +523 -0
  446. package/src/renderer/components/ControlPlaneSettings.tsx +1134 -0
  447. package/src/renderer/components/DisclaimerModal.tsx +124 -0
  448. package/src/renderer/components/DiscordSettings.tsx +436 -0
  449. package/src/renderer/components/EmailSettings.tsx +606 -0
  450. package/src/renderer/components/ExtensionsSettings.tsx +542 -0
  451. package/src/renderer/components/FileViewer.tsx +224 -0
  452. package/src/renderer/components/GoogleChatSettings.tsx +535 -0
  453. package/src/renderer/components/GuardrailSettings.tsx +487 -0
  454. package/src/renderer/components/HooksSettings.tsx +581 -0
  455. package/src/renderer/components/ImessageSettings.tsx +484 -0
  456. package/src/renderer/components/LineSettings.tsx +483 -0
  457. package/src/renderer/components/MCPRegistryBrowser.tsx +386 -0
  458. package/src/renderer/components/MCPSettings.tsx +943 -0
  459. package/src/renderer/components/MainContent.tsx +2433 -0
  460. package/src/renderer/components/MatrixSettings.tsx +510 -0
  461. package/src/renderer/components/MattermostSettings.tsx +473 -0
  462. package/src/renderer/components/MemorySettings.tsx +247 -0
  463. package/src/renderer/components/MentionBadge.tsx +87 -0
  464. package/src/renderer/components/MentionInput.tsx +409 -0
  465. package/src/renderer/components/MentionList.tsx +476 -0
  466. package/src/renderer/components/MissionControlPanel.tsx +1995 -0
  467. package/src/renderer/components/NodesSettings.tsx +316 -0
  468. package/src/renderer/components/NotificationPanel.tsx +481 -0
  469. package/src/renderer/components/Onboarding/AwakeningOrb.tsx +44 -0
  470. package/src/renderer/components/Onboarding/Onboarding.tsx +443 -0
  471. package/src/renderer/components/Onboarding/TypewriterText.tsx +102 -0
  472. package/src/renderer/components/Onboarding/index.ts +3 -0
  473. package/src/renderer/components/OnboardingModal.tsx +698 -0
  474. package/src/renderer/components/PairingCodeDisplay.tsx +324 -0
  475. package/src/renderer/components/PersonalitySettings.tsx +597 -0
  476. package/src/renderer/components/QueueSettings.tsx +119 -0
  477. package/src/renderer/components/QuickTaskFAB.tsx +71 -0
  478. package/src/renderer/components/RightPanel.tsx +413 -0
  479. package/src/renderer/components/ScheduledTasksSettings.tsx +1328 -0
  480. package/src/renderer/components/SearchSettings.tsx +328 -0
  481. package/src/renderer/components/Settings.tsx +1504 -0
  482. package/src/renderer/components/Sidebar.tsx +344 -0
  483. package/src/renderer/components/SignalSettings.tsx +673 -0
  484. package/src/renderer/components/SkillHubBrowser.tsx +458 -0
  485. package/src/renderer/components/SkillParameterModal.tsx +185 -0
  486. package/src/renderer/components/SkillsSettings.tsx +451 -0
  487. package/src/renderer/components/SlackSettings.tsx +442 -0
  488. package/src/renderer/components/StandupReportViewer.tsx +614 -0
  489. package/src/renderer/components/TaskBoard.tsx +498 -0
  490. package/src/renderer/components/TaskBoardCard.tsx +357 -0
  491. package/src/renderer/components/TaskBoardColumn.tsx +211 -0
  492. package/src/renderer/components/TaskLabelManager.tsx +472 -0
  493. package/src/renderer/components/TaskQueuePanel.tsx +144 -0
  494. package/src/renderer/components/TaskQuickActions.tsx +492 -0
  495. package/src/renderer/components/TaskTimeline.tsx +216 -0
  496. package/src/renderer/components/TaskView.tsx +162 -0
  497. package/src/renderer/components/TeamsSettings.tsx +518 -0
  498. package/src/renderer/components/TelegramSettings.tsx +421 -0
  499. package/src/renderer/components/Toast.tsx +76 -0
  500. package/src/renderer/components/TraySettings.tsx +189 -0
  501. package/src/renderer/components/TwitchSettings.tsx +511 -0
  502. package/src/renderer/components/UpdateSettings.tsx +295 -0
  503. package/src/renderer/components/VoiceIndicator.tsx +270 -0
  504. package/src/renderer/components/VoiceSettings.tsx +867 -0
  505. package/src/renderer/components/WhatsAppSettings.tsx +721 -0
  506. package/src/renderer/components/WorkingStateEditor.tsx +309 -0
  507. package/src/renderer/components/WorkingStateHistory.tsx +481 -0
  508. package/src/renderer/components/WorkspaceSelector.tsx +150 -0
  509. package/src/renderer/components/XSettings.tsx +311 -0
  510. package/src/renderer/global.d.ts +9 -0
  511. package/src/renderer/hooks/useAgentContext.ts +153 -0
  512. package/src/renderer/hooks/useOnboardingFlow.ts +548 -0
  513. package/src/renderer/hooks/useVoiceInput.ts +268 -0
  514. package/src/renderer/index.html +12 -0
  515. package/src/renderer/main.tsx +10 -0
  516. package/src/renderer/public/cowork-os-logo.png +0 -0
  517. package/src/renderer/quick-input.html +164 -0
  518. package/src/renderer/styles/index.css +14504 -0
  519. package/src/renderer/utils/agentMessages.ts +749 -0
  520. package/src/renderer/utils/voice-directives.ts +169 -0
  521. package/src/shared/channelMessages.ts +213 -0
  522. package/src/shared/types.ts +3608 -0
  523. package/tsconfig.electron.json +26 -0
  524. package/tsconfig.json +26 -0
  525. package/tsconfig.node.json +10 -0
  526. package/vite.config.ts +23 -0
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ /**
3
+ * ToolAdapter - Adapts CoWork's ToolRegistry to the MCP protocol
4
+ *
5
+ * Converts tool definitions from LLMTool format to MCPTool format
6
+ * and handles tool execution through the ToolRegistry.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ToolAdapter = void 0;
10
+ /**
11
+ * Adapts a ToolRegistry to the ToolProvider interface expected by MCPHostServer
12
+ */
13
+ class ToolAdapter {
14
+ constructor(registry, options = {}) {
15
+ this.registry = registry;
16
+ this.exposedTools = options.exposedTools ? new Set(options.exposedTools) : new Set();
17
+ this.excludedTools = new Set(options.excludedTools || [
18
+ // Default exclusions - dangerous or internal tools
19
+ 'computer_tool', // Computer control
20
+ 'bash', // Direct shell access
21
+ 'text_editor', // Direct file editing
22
+ ]);
23
+ }
24
+ /**
25
+ * Get tools in MCP format
26
+ */
27
+ getTools() {
28
+ const llmTools = this.registry.getTools();
29
+ // Filter and convert tools
30
+ return llmTools
31
+ .filter((tool) => this.shouldExposePlugin(tool.name))
32
+ .map((tool) => this.convertTool(tool));
33
+ }
34
+ /**
35
+ * Execute a tool and return MCP-formatted result
36
+ */
37
+ async executeTool(name, args) {
38
+ // Verify tool is exposed
39
+ if (!this.shouldExposePlugin(name)) {
40
+ throw new Error(`Tool ${name} is not available`);
41
+ }
42
+ // Execute through registry
43
+ const result = await this.registry.executeTool(name, args);
44
+ return result;
45
+ }
46
+ /**
47
+ * Check if a tool should be exposed via MCP
48
+ */
49
+ shouldExposePlugin(name) {
50
+ // If exposedTools is set, only expose those
51
+ if (this.exposedTools.size > 0) {
52
+ return this.exposedTools.has(name);
53
+ }
54
+ // Otherwise, expose all except excluded
55
+ return !this.excludedTools.has(name);
56
+ }
57
+ /**
58
+ * Convert an LLMTool to MCPTool format
59
+ */
60
+ convertTool(tool) {
61
+ return {
62
+ name: tool.name,
63
+ description: tool.description,
64
+ inputSchema: {
65
+ type: 'object',
66
+ properties: tool.input_schema.properties,
67
+ required: tool.input_schema.required,
68
+ },
69
+ };
70
+ }
71
+ /**
72
+ * Add a tool to the exposed list
73
+ */
74
+ exposeTool(name) {
75
+ this.exposedTools.add(name);
76
+ this.excludedTools.delete(name);
77
+ }
78
+ /**
79
+ * Remove a tool from exposure
80
+ */
81
+ hideTool(name) {
82
+ this.exposedTools.delete(name);
83
+ this.excludedTools.add(name);
84
+ }
85
+ /**
86
+ * Get list of available tool names
87
+ */
88
+ getAvailableToolNames() {
89
+ return this.registry.getTools()
90
+ .filter((tool) => this.shouldExposePlugin(tool.name))
91
+ .map((tool) => tool.name);
92
+ }
93
+ /**
94
+ * Get list of all tool names (including hidden)
95
+ */
96
+ getAllToolNames() {
97
+ return this.registry.getTools().map((tool) => tool.name);
98
+ }
99
+ }
100
+ exports.ToolAdapter = ToolAdapter;
@@ -0,0 +1,497 @@
1
+ "use strict";
2
+ /**
3
+ * MCPRegistryManager - Manages discovery and installation of MCP servers from a registry
4
+ *
5
+ * Provides functionality to:
6
+ * - Fetch the MCP server registry
7
+ * - Search for servers by name, tags, or category
8
+ * - Install servers from the registry
9
+ * - Check for updates to installed servers
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.MCPRegistryManager = void 0;
13
+ const uuid_1 = require("uuid");
14
+ const child_process_1 = require("child_process");
15
+ const util_1 = require("util");
16
+ const settings_1 = require("../settings");
17
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
18
+ // Cache duration in milliseconds (15 minutes)
19
+ const REGISTRY_CACHE_DURATION = 15 * 60 * 1000;
20
+ // Built-in registry of common MCP servers
21
+ // This is used as a fallback when the remote registry is unavailable
22
+ // Package versions verified against npm registry as of 2026-01
23
+ const BUILTIN_REGISTRY = {
24
+ version: '1.1.0',
25
+ lastUpdated: new Date().toISOString(),
26
+ servers: [
27
+ {
28
+ id: 'filesystem',
29
+ name: 'Filesystem',
30
+ description: 'Provides secure file system access with configurable root directories',
31
+ version: '2026.1.14',
32
+ author: 'Anthropic',
33
+ homepage: 'https://modelcontextprotocol.io',
34
+ repository: 'https://github.com/modelcontextprotocol/servers',
35
+ license: 'MIT',
36
+ installMethod: 'npm',
37
+ installCommand: 'npx',
38
+ packageName: '@modelcontextprotocol/server-filesystem',
39
+ transport: 'stdio',
40
+ defaultCommand: 'npx',
41
+ defaultArgs: ['-y', '@modelcontextprotocol/server-filesystem'],
42
+ tools: [
43
+ { name: 'read_file', description: 'Read complete file contents' },
44
+ { name: 'read_multiple_files', description: 'Read multiple files at once' },
45
+ { name: 'write_file', description: 'Write content to file' },
46
+ { name: 'edit_file', description: 'Edit file with line-based operations' },
47
+ { name: 'create_directory', description: 'Create a new directory' },
48
+ { name: 'list_directory', description: 'List directory contents' },
49
+ { name: 'directory_tree', description: 'Get recursive directory tree' },
50
+ { name: 'move_file', description: 'Move or rename files and directories' },
51
+ { name: 'search_files', description: 'Search for files matching pattern' },
52
+ { name: 'get_file_info', description: 'Get file metadata' },
53
+ ],
54
+ tags: ['filesystem', 'files', 'official'],
55
+ category: 'filesystem',
56
+ verified: true,
57
+ featured: true,
58
+ },
59
+ {
60
+ id: 'github',
61
+ name: 'GitHub',
62
+ description: 'Provides GitHub API integration for repository management. Requires GITHUB_PERSONAL_ACCESS_TOKEN.',
63
+ version: '2025.4.8',
64
+ author: 'Anthropic',
65
+ homepage: 'https://modelcontextprotocol.io',
66
+ repository: 'https://github.com/modelcontextprotocol/servers',
67
+ license: 'MIT',
68
+ installMethod: 'npm',
69
+ installCommand: 'npx',
70
+ packageName: '@modelcontextprotocol/server-github',
71
+ transport: 'stdio',
72
+ defaultCommand: 'npx',
73
+ defaultArgs: ['-y', '@modelcontextprotocol/server-github'],
74
+ defaultEnv: {
75
+ GITHUB_PERSONAL_ACCESS_TOKEN: '',
76
+ },
77
+ tools: [
78
+ { name: 'create_or_update_file', description: 'Create or update a file in a repository' },
79
+ { name: 'search_repositories', description: 'Search GitHub repositories' },
80
+ { name: 'create_repository', description: 'Create a new repository' },
81
+ { name: 'get_file_contents', description: 'Get contents of a file in a repository' },
82
+ { name: 'push_files', description: 'Push multiple files to a repository' },
83
+ { name: 'create_issue', description: 'Create a new issue' },
84
+ { name: 'create_pull_request', description: 'Create a pull request' },
85
+ { name: 'fork_repository', description: 'Fork a repository' },
86
+ { name: 'create_branch', description: 'Create a new branch' },
87
+ ],
88
+ tags: ['github', 'git', 'version-control', 'official'],
89
+ category: 'development',
90
+ verified: true,
91
+ featured: true,
92
+ },
93
+ {
94
+ id: 'puppeteer',
95
+ name: 'Puppeteer',
96
+ description: 'Browser automation and web scraping using Puppeteer',
97
+ version: '2025.5.12',
98
+ author: 'Anthropic',
99
+ homepage: 'https://modelcontextprotocol.io',
100
+ repository: 'https://github.com/modelcontextprotocol/servers',
101
+ license: 'MIT',
102
+ installMethod: 'npm',
103
+ installCommand: 'npx',
104
+ packageName: '@modelcontextprotocol/server-puppeteer',
105
+ transport: 'stdio',
106
+ defaultCommand: 'npx',
107
+ defaultArgs: ['-y', '@modelcontextprotocol/server-puppeteer'],
108
+ tools: [
109
+ { name: 'puppeteer_navigate', description: 'Navigate to a URL' },
110
+ { name: 'puppeteer_screenshot', description: 'Take a screenshot of the page' },
111
+ { name: 'puppeteer_click', description: 'Click an element on the page' },
112
+ { name: 'puppeteer_fill', description: 'Fill out an input field' },
113
+ { name: 'puppeteer_select', description: 'Select an option from a dropdown' },
114
+ { name: 'puppeteer_hover', description: 'Hover over an element' },
115
+ { name: 'puppeteer_evaluate', description: 'Execute JavaScript in the page' },
116
+ ],
117
+ tags: ['browser', 'automation', 'web', 'official'],
118
+ category: 'automation',
119
+ verified: true,
120
+ },
121
+ {
122
+ id: 'memory',
123
+ name: 'Memory',
124
+ description: 'Knowledge graph-based persistent memory system',
125
+ version: '2026.1.26',
126
+ author: 'Anthropic',
127
+ homepage: 'https://modelcontextprotocol.io',
128
+ repository: 'https://github.com/modelcontextprotocol/servers',
129
+ license: 'MIT',
130
+ installMethod: 'npm',
131
+ installCommand: 'npx',
132
+ packageName: '@modelcontextprotocol/server-memory',
133
+ transport: 'stdio',
134
+ defaultCommand: 'npx',
135
+ defaultArgs: ['-y', '@modelcontextprotocol/server-memory'],
136
+ tools: [
137
+ { name: 'create_entities', description: 'Create new entities in the knowledge graph' },
138
+ { name: 'create_relations', description: 'Create relations between entities' },
139
+ { name: 'add_observations', description: 'Add observations to entities' },
140
+ { name: 'delete_entities', description: 'Delete entities from the graph' },
141
+ { name: 'delete_observations', description: 'Delete observations from entities' },
142
+ { name: 'delete_relations', description: 'Delete relations between entities' },
143
+ { name: 'read_graph', description: 'Read the entire knowledge graph' },
144
+ { name: 'search_nodes', description: 'Search for nodes in the graph' },
145
+ { name: 'open_nodes', description: 'Open specific nodes by name' },
146
+ ],
147
+ tags: ['memory', 'knowledge-graph', 'persistence', 'official'],
148
+ category: 'memory',
149
+ verified: true,
150
+ },
151
+ {
152
+ id: 'postgres',
153
+ name: 'PostgreSQL',
154
+ description: 'PostgreSQL database read-only queries. Requires POSTGRES_CONNECTION_STRING.',
155
+ version: '0.6.2',
156
+ author: 'Anthropic',
157
+ homepage: 'https://modelcontextprotocol.io',
158
+ repository: 'https://github.com/modelcontextprotocol/servers',
159
+ license: 'MIT',
160
+ installMethod: 'npm',
161
+ installCommand: 'npx',
162
+ packageName: '@modelcontextprotocol/server-postgres',
163
+ transport: 'stdio',
164
+ defaultCommand: 'npx',
165
+ defaultArgs: ['-y', '@modelcontextprotocol/server-postgres'],
166
+ defaultEnv: {
167
+ POSTGRES_CONNECTION_STRING: '',
168
+ },
169
+ tools: [
170
+ { name: 'query', description: 'Execute a read-only SQL query' },
171
+ ],
172
+ tags: ['database', 'postgres', 'sql', 'official'],
173
+ category: 'database',
174
+ verified: true,
175
+ },
176
+ {
177
+ id: 'sequential-thinking',
178
+ name: 'Sequential Thinking',
179
+ description: 'MCP server for sequential thinking and problem solving',
180
+ version: '2025.12.18',
181
+ author: 'Anthropic',
182
+ homepage: 'https://modelcontextprotocol.io',
183
+ repository: 'https://github.com/modelcontextprotocol/servers',
184
+ license: 'MIT',
185
+ installMethod: 'npm',
186
+ installCommand: 'npx',
187
+ packageName: '@modelcontextprotocol/server-sequential-thinking',
188
+ transport: 'stdio',
189
+ defaultCommand: 'npx',
190
+ defaultArgs: ['-y', '@modelcontextprotocol/server-sequential-thinking'],
191
+ tools: [
192
+ { name: 'sequentialthinking', description: 'Sequential thinking and problem solving' },
193
+ ],
194
+ tags: ['thinking', 'reasoning', 'official'],
195
+ category: 'reasoning',
196
+ verified: true,
197
+ },
198
+ {
199
+ id: 'everything',
200
+ name: 'Everything (Demo)',
201
+ description: 'MCP server that exercises all features of the MCP protocol. Useful for testing.',
202
+ version: '2026.1.26',
203
+ author: 'Anthropic',
204
+ homepage: 'https://modelcontextprotocol.io',
205
+ repository: 'https://github.com/modelcontextprotocol/servers',
206
+ license: 'MIT',
207
+ installMethod: 'npm',
208
+ installCommand: 'npx',
209
+ packageName: '@modelcontextprotocol/server-everything',
210
+ transport: 'stdio',
211
+ defaultCommand: 'npx',
212
+ defaultArgs: ['-y', '@modelcontextprotocol/server-everything'],
213
+ tools: [
214
+ { name: 'echo', description: 'Echo back the input' },
215
+ { name: 'add', description: 'Add two numbers' },
216
+ { name: 'longRunningOperation', description: 'Test long-running operations' },
217
+ { name: 'sampleLLM', description: 'Sample from an LLM' },
218
+ { name: 'getTinyImage', description: 'Get a tiny test image' },
219
+ ],
220
+ tags: ['demo', 'testing', 'official'],
221
+ category: 'testing',
222
+ verified: true,
223
+ },
224
+ ],
225
+ };
226
+ class MCPRegistryManager {
227
+ /**
228
+ * Fetch the MCP server registry
229
+ */
230
+ static async fetchRegistry(forceRefresh = false) {
231
+ // Check cache
232
+ if (!forceRefresh && this.registryCache && Date.now() - this.cacheTimestamp < REGISTRY_CACHE_DURATION) {
233
+ return this.registryCache;
234
+ }
235
+ const settings = settings_1.MCPSettingsManager.loadSettings();
236
+ if (!settings.registryEnabled) {
237
+ console.log('[MCPRegistryManager] Registry disabled, using built-in registry');
238
+ return BUILTIN_REGISTRY;
239
+ }
240
+ try {
241
+ console.log(`[MCPRegistryManager] Fetching registry from ${settings.registryUrl}`);
242
+ const response = await fetch(settings.registryUrl, {
243
+ headers: {
244
+ Accept: 'application/json',
245
+ },
246
+ signal: AbortSignal.timeout(10000), // 10 second timeout
247
+ });
248
+ if (!response.ok) {
249
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
250
+ }
251
+ const registry = await response.json();
252
+ // Validate registry structure
253
+ if (!registry.version || !Array.isArray(registry.servers)) {
254
+ throw new Error('Invalid registry format');
255
+ }
256
+ // Update cache
257
+ this.registryCache = registry;
258
+ this.cacheTimestamp = Date.now();
259
+ console.log(`[MCPRegistryManager] Fetched ${registry.servers.length} servers from registry`);
260
+ return registry;
261
+ }
262
+ catch (error) {
263
+ // Only log on first failure or after cache expires
264
+ if (!this.registryCache) {
265
+ console.warn('[MCPRegistryManager] Failed to fetch registry, using built-in:', error.message);
266
+ }
267
+ // Cache the built-in registry to prevent repeated fetch attempts
268
+ this.registryCache = BUILTIN_REGISTRY;
269
+ this.cacheTimestamp = Date.now();
270
+ return BUILTIN_REGISTRY;
271
+ }
272
+ }
273
+ /**
274
+ * Search for servers in the registry
275
+ */
276
+ static async searchServers(options = {}) {
277
+ const registry = await this.fetchRegistry();
278
+ let results = [...registry.servers];
279
+ // Filter by query (search name and description)
280
+ if (options.query) {
281
+ const query = options.query.toLowerCase();
282
+ results = results.filter((server) => server.name.toLowerCase().includes(query) ||
283
+ server.description.toLowerCase().includes(query) ||
284
+ server.tags.some((tag) => tag.toLowerCase().includes(query)));
285
+ }
286
+ // Filter by tags
287
+ if (options.tags && options.tags.length > 0) {
288
+ const tags = options.tags.map((t) => t.toLowerCase());
289
+ results = results.filter((server) => tags.some((tag) => server.tags.some((t) => t.toLowerCase() === tag)));
290
+ }
291
+ // Filter by category
292
+ if (options.category) {
293
+ const category = options.category.toLowerCase();
294
+ results = results.filter((server) => server.category?.toLowerCase() === category);
295
+ }
296
+ // Filter by verified status
297
+ if (options.verified !== undefined) {
298
+ results = results.filter((server) => server.verified === options.verified);
299
+ }
300
+ // Apply pagination
301
+ const offset = options.offset ?? 0;
302
+ const limit = options.limit ?? 50;
303
+ results = results.slice(offset, offset + limit);
304
+ return results;
305
+ }
306
+ /**
307
+ * Get a specific server from the registry by ID
308
+ */
309
+ static async getServer(serverId) {
310
+ const registry = await this.fetchRegistry();
311
+ return registry.servers.find((s) => s.id === serverId) || null;
312
+ }
313
+ /**
314
+ * Verify that an npm package exists on the registry
315
+ */
316
+ static async verifyNpmPackage(packageName) {
317
+ try {
318
+ console.log(`[MCPRegistryManager] Verifying npm package: ${packageName}`);
319
+ const { stdout } = await execAsync(`npm view ${packageName} version`, {
320
+ timeout: 15000, // 15 second timeout
321
+ });
322
+ const version = stdout.trim();
323
+ console.log(`[MCPRegistryManager] Package ${packageName} exists, version: ${version}`);
324
+ return { exists: true, version };
325
+ }
326
+ catch (error) {
327
+ // Check if it's a 404 (package not found)
328
+ if (error.message?.includes('404') || error.message?.includes('not found') || error.stderr?.includes('404')) {
329
+ console.warn(`[MCPRegistryManager] Package ${packageName} not found on npm`);
330
+ return { exists: false, error: `Package "${packageName}" not found on npm registry` };
331
+ }
332
+ // Other errors (network, timeout, etc.)
333
+ console.warn(`[MCPRegistryManager] Error verifying package ${packageName}:`, error.message);
334
+ return { exists: false, error: `Failed to verify package: ${error.message}` };
335
+ }
336
+ }
337
+ /**
338
+ * Install a server from the registry
339
+ */
340
+ static async installServer(entryId, extraArgs) {
341
+ const entry = await this.getServer(entryId);
342
+ if (!entry) {
343
+ throw new Error(`Server ${entryId} not found in registry`);
344
+ }
345
+ console.log(`[MCPRegistryManager] Installing server: ${entry.name}`);
346
+ // Check if already installed
347
+ const settings = settings_1.MCPSettingsManager.loadSettings();
348
+ const existingIndex = settings.servers.findIndex((s) => s.name === entry.name || (entry.packageName && s.command?.includes(entry.packageName)));
349
+ if (existingIndex !== -1) {
350
+ throw new Error(`Server ${entry.name} is already installed`);
351
+ }
352
+ // Verify the npm package exists before installing
353
+ if (entry.packageName && entry.installMethod === 'npm') {
354
+ const verification = await this.verifyNpmPackage(entry.packageName);
355
+ if (!verification.exists) {
356
+ throw new Error(verification.error || `Package "${entry.packageName}" is not available`);
357
+ }
358
+ // Update version to the actual npm version if available
359
+ if (verification.version) {
360
+ entry.version = verification.version;
361
+ }
362
+ }
363
+ // Create server config from registry entry
364
+ const config = {
365
+ id: (0, uuid_1.v4)(),
366
+ name: entry.name,
367
+ description: entry.description,
368
+ enabled: true,
369
+ transport: entry.transport,
370
+ command: entry.defaultCommand || entry.installCommand,
371
+ args: [...(entry.defaultArgs || []), ...(extraArgs || [])],
372
+ env: entry.defaultEnv,
373
+ version: entry.version,
374
+ author: entry.author,
375
+ homepage: entry.homepage,
376
+ repository: entry.repository,
377
+ license: entry.license,
378
+ installedAt: Date.now(),
379
+ };
380
+ // Add to settings
381
+ settings_1.MCPSettingsManager.addServer(config);
382
+ console.log(`[MCPRegistryManager] Installed server: ${entry.name}`);
383
+ return config;
384
+ }
385
+ /**
386
+ * Uninstall a server (remove from settings)
387
+ */
388
+ static async uninstallServer(serverId) {
389
+ console.log(`[MCPRegistryManager] Uninstalling server: ${serverId}`);
390
+ settings_1.MCPSettingsManager.removeServer(serverId);
391
+ console.log(`[MCPRegistryManager] Uninstalled server: ${serverId}`);
392
+ }
393
+ /**
394
+ * Check for updates to installed servers
395
+ */
396
+ static async checkForUpdates() {
397
+ const registry = await this.fetchRegistry(true);
398
+ const settings = settings_1.MCPSettingsManager.loadSettings();
399
+ const updates = [];
400
+ for (const installed of settings.servers) {
401
+ // Try to match installed server with registry entry
402
+ const entry = registry.servers.find((e) => e.name === installed.name ||
403
+ (e.packageName && installed.command?.includes(e.packageName)));
404
+ if (entry && installed.version && entry.version !== installed.version) {
405
+ // Compare versions
406
+ if (this.isNewerVersion(entry.version, installed.version)) {
407
+ updates.push({
408
+ serverId: installed.id,
409
+ currentVersion: installed.version,
410
+ latestVersion: entry.version,
411
+ registryEntry: entry,
412
+ });
413
+ }
414
+ }
415
+ }
416
+ return updates;
417
+ }
418
+ /**
419
+ * Update an installed server to the latest version
420
+ */
421
+ static async updateServer(serverId) {
422
+ const settings = settings_1.MCPSettingsManager.loadSettings();
423
+ const installed = settings.servers.find((s) => s.id === serverId);
424
+ if (!installed) {
425
+ throw new Error(`Server ${serverId} not found`);
426
+ }
427
+ const registry = await this.fetchRegistry(true);
428
+ const entry = registry.servers.find((e) => e.name === installed.name ||
429
+ (e.packageName && installed.command?.includes(e.packageName)));
430
+ if (!entry) {
431
+ throw new Error(`Server ${installed.name} not found in registry`);
432
+ }
433
+ // Update the server config
434
+ const updatedConfig = {
435
+ version: entry.version,
436
+ command: entry.defaultCommand || entry.installCommand,
437
+ args: entry.defaultArgs,
438
+ };
439
+ const result = settings_1.MCPSettingsManager.updateServer(serverId, updatedConfig);
440
+ if (!result) {
441
+ throw new Error(`Failed to update server ${serverId}`);
442
+ }
443
+ return result;
444
+ }
445
+ /**
446
+ * Get available categories from the registry
447
+ */
448
+ static async getCategories() {
449
+ const registry = await this.fetchRegistry();
450
+ const categories = new Set();
451
+ for (const server of registry.servers) {
452
+ if (server.category) {
453
+ categories.add(server.category);
454
+ }
455
+ }
456
+ return Array.from(categories).sort();
457
+ }
458
+ /**
459
+ * Get all unique tags from the registry
460
+ */
461
+ static async getTags() {
462
+ const registry = await this.fetchRegistry();
463
+ const tags = new Set();
464
+ for (const server of registry.servers) {
465
+ for (const tag of server.tags) {
466
+ tags.add(tag);
467
+ }
468
+ }
469
+ return Array.from(tags).sort();
470
+ }
471
+ /**
472
+ * Clear the registry cache
473
+ */
474
+ static clearCache() {
475
+ this.registryCache = null;
476
+ this.cacheTimestamp = 0;
477
+ }
478
+ /**
479
+ * Check if version A is newer than version B
480
+ */
481
+ static isNewerVersion(versionA, versionB) {
482
+ const partsA = versionA.replace(/^v/, '').split('.').map(Number);
483
+ const partsB = versionB.replace(/^v/, '').split('.').map(Number);
484
+ for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
485
+ const a = partsA[i] || 0;
486
+ const b = partsB[i] || 0;
487
+ if (a > b)
488
+ return true;
489
+ if (a < b)
490
+ return false;
491
+ }
492
+ return false;
493
+ }
494
+ }
495
+ exports.MCPRegistryManager = MCPRegistryManager;
496
+ MCPRegistryManager.registryCache = null;
497
+ MCPRegistryManager.cacheTimestamp = 0;