@useconductor/conductor 1.0.0

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 (504) hide show
  1. package/.claude-plugin/marketplace.json +33 -0
  2. package/.claude-plugin/plugin.json +23 -0
  3. package/.eslintrc.json +23 -0
  4. package/.gitattributes +6 -0
  5. package/.github/FUNDING.yml +15 -0
  6. package/.github/ISSUE_TEMPLATE/bug_report.yml +91 -0
  7. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  8. package/.github/ISSUE_TEMPLATE/feature_request.yml +63 -0
  9. package/.github/ISSUE_TEMPLATE/plugin_request.yml +71 -0
  10. package/.github/README.md +13 -0
  11. package/.github/workflows/README.md +22 -0
  12. package/.github/workflows/auto-release.yml +112 -0
  13. package/.github/workflows/ci.yml +49 -0
  14. package/.github/workflows/claude-code-review.yml +44 -0
  15. package/.github/workflows/claude.yml +36 -0
  16. package/.github/workflows/sync-install.yml +47 -0
  17. package/.mcp.json +9 -0
  18. package/.prettierrc.json +7 -0
  19. package/C.png +0 -0
  20. package/CHANGELOG.md +74 -0
  21. package/CLAUDE.md +118 -0
  22. package/CONTRIBUTING.md +231 -0
  23. package/LICENSE +201 -0
  24. package/README.md +179 -0
  25. package/SECURITY.md +47 -0
  26. package/commands/conductor-setup.md +11 -0
  27. package/commands/conductor-status.md +7 -0
  28. package/dist/ai/base.d.ts +44 -0
  29. package/dist/ai/base.d.ts.map +1 -0
  30. package/dist/ai/base.js +47 -0
  31. package/dist/ai/base.js.map +1 -0
  32. package/dist/ai/claude.d.ts +11 -0
  33. package/dist/ai/claude.d.ts.map +1 -0
  34. package/dist/ai/claude.js +149 -0
  35. package/dist/ai/claude.js.map +1 -0
  36. package/dist/ai/gemini.d.ts +15 -0
  37. package/dist/ai/gemini.d.ts.map +1 -0
  38. package/dist/ai/gemini.js +156 -0
  39. package/dist/ai/gemini.js.map +1 -0
  40. package/dist/ai/maestro.d.ts +22 -0
  41. package/dist/ai/maestro.d.ts.map +1 -0
  42. package/dist/ai/maestro.js +142 -0
  43. package/dist/ai/maestro.js.map +1 -0
  44. package/dist/ai/manager.d.ts +47 -0
  45. package/dist/ai/manager.d.ts.map +1 -0
  46. package/dist/ai/manager.js +450 -0
  47. package/dist/ai/manager.js.map +1 -0
  48. package/dist/ai/ollama.d.ts +16 -0
  49. package/dist/ai/ollama.d.ts.map +1 -0
  50. package/dist/ai/ollama.js +151 -0
  51. package/dist/ai/ollama.js.map +1 -0
  52. package/dist/ai/openai.d.ts +11 -0
  53. package/dist/ai/openai.d.ts.map +1 -0
  54. package/dist/ai/openai.js +132 -0
  55. package/dist/ai/openai.js.map +1 -0
  56. package/dist/ai/openrouter.d.ts +11 -0
  57. package/dist/ai/openrouter.d.ts.map +1 -0
  58. package/dist/ai/openrouter.js +139 -0
  59. package/dist/ai/openrouter.js.map +1 -0
  60. package/dist/bot/slack.d.ts +17 -0
  61. package/dist/bot/slack.d.ts.map +1 -0
  62. package/dist/bot/slack.js +144 -0
  63. package/dist/bot/slack.js.map +1 -0
  64. package/dist/bot/telegram.d.ts +19 -0
  65. package/dist/bot/telegram.d.ts.map +1 -0
  66. package/dist/bot/telegram.js +157 -0
  67. package/dist/bot/telegram.js.map +1 -0
  68. package/dist/cli/commands/ai.d.ts +4 -0
  69. package/dist/cli/commands/ai.d.ts.map +1 -0
  70. package/dist/cli/commands/ai.js +161 -0
  71. package/dist/cli/commands/ai.js.map +1 -0
  72. package/dist/cli/commands/doctor.d.ts +18 -0
  73. package/dist/cli/commands/doctor.d.ts.map +1 -0
  74. package/dist/cli/commands/doctor.js +213 -0
  75. package/dist/cli/commands/doctor.js.map +1 -0
  76. package/dist/cli/commands/init.d.ts +15 -0
  77. package/dist/cli/commands/init.d.ts.map +1 -0
  78. package/dist/cli/commands/init.js +281 -0
  79. package/dist/cli/commands/init.js.map +1 -0
  80. package/dist/cli/commands/install.d.ts +16 -0
  81. package/dist/cli/commands/install.d.ts.map +1 -0
  82. package/dist/cli/commands/install.js +750 -0
  83. package/dist/cli/commands/install.js.map +1 -0
  84. package/dist/cli/commands/lifecycle.d.ts +4 -0
  85. package/dist/cli/commands/lifecycle.d.ts.map +1 -0
  86. package/dist/cli/commands/lifecycle.js +84 -0
  87. package/dist/cli/commands/lifecycle.js.map +1 -0
  88. package/dist/cli/commands/marketplace.d.ts +13 -0
  89. package/dist/cli/commands/marketplace.d.ts.map +1 -0
  90. package/dist/cli/commands/marketplace.js +197 -0
  91. package/dist/cli/commands/marketplace.js.map +1 -0
  92. package/dist/cli/commands/mcp.d.ts +6 -0
  93. package/dist/cli/commands/mcp.d.ts.map +1 -0
  94. package/dist/cli/commands/mcp.js +83 -0
  95. package/dist/cli/commands/mcp.js.map +1 -0
  96. package/dist/cli/commands/onboard.d.ts +10 -0
  97. package/dist/cli/commands/onboard.d.ts.map +1 -0
  98. package/dist/cli/commands/onboard.js +207 -0
  99. package/dist/cli/commands/onboard.js.map +1 -0
  100. package/dist/cli/commands/plugin-create.d.ts +13 -0
  101. package/dist/cli/commands/plugin-create.d.ts.map +1 -0
  102. package/dist/cli/commands/plugin-create.js +122 -0
  103. package/dist/cli/commands/plugin-create.js.map +1 -0
  104. package/dist/cli/commands/plugins.d.ts +5 -0
  105. package/dist/cli/commands/plugins.d.ts.map +1 -0
  106. package/dist/cli/commands/plugins.js +30 -0
  107. package/dist/cli/commands/plugins.js.map +1 -0
  108. package/dist/cli/commands/release.d.ts +13 -0
  109. package/dist/cli/commands/release.d.ts.map +1 -0
  110. package/dist/cli/commands/release.js +243 -0
  111. package/dist/cli/commands/release.js.map +1 -0
  112. package/dist/cli/commands/telegram.d.ts +3 -0
  113. package/dist/cli/commands/telegram.d.ts.map +1 -0
  114. package/dist/cli/commands/telegram.js +20 -0
  115. package/dist/cli/commands/telegram.js.map +1 -0
  116. package/dist/cli/index.d.ts +3 -0
  117. package/dist/cli/index.d.ts.map +1 -0
  118. package/dist/cli/index.js +402 -0
  119. package/dist/cli/index.js.map +1 -0
  120. package/dist/config/oauth.d.ts +8 -0
  121. package/dist/config/oauth.d.ts.map +1 -0
  122. package/dist/config/oauth.js +13 -0
  123. package/dist/config/oauth.js.map +1 -0
  124. package/dist/core/audit.d.ts +91 -0
  125. package/dist/core/audit.d.ts.map +1 -0
  126. package/dist/core/audit.js +233 -0
  127. package/dist/core/audit.js.map +1 -0
  128. package/dist/core/circuit-breaker.d.ts +56 -0
  129. package/dist/core/circuit-breaker.d.ts.map +1 -0
  130. package/dist/core/circuit-breaker.js +107 -0
  131. package/dist/core/circuit-breaker.js.map +1 -0
  132. package/dist/core/conductor.d.ts +44 -0
  133. package/dist/core/conductor.d.ts.map +1 -0
  134. package/dist/core/conductor.js +200 -0
  135. package/dist/core/conductor.js.map +1 -0
  136. package/dist/core/config.d.ts +66 -0
  137. package/dist/core/config.d.ts.map +1 -0
  138. package/dist/core/config.js +86 -0
  139. package/dist/core/config.js.map +1 -0
  140. package/dist/core/database.d.ts +59 -0
  141. package/dist/core/database.d.ts.map +1 -0
  142. package/dist/core/database.js +342 -0
  143. package/dist/core/database.js.map +1 -0
  144. package/dist/core/errors.d.ts +231 -0
  145. package/dist/core/errors.d.ts.map +1 -0
  146. package/dist/core/errors.js +254 -0
  147. package/dist/core/errors.js.map +1 -0
  148. package/dist/core/health.d.ts +72 -0
  149. package/dist/core/health.d.ts.map +1 -0
  150. package/dist/core/health.js +116 -0
  151. package/dist/core/health.js.map +1 -0
  152. package/dist/core/interfaces.d.ts +62 -0
  153. package/dist/core/interfaces.d.ts.map +1 -0
  154. package/dist/core/interfaces.js +8 -0
  155. package/dist/core/interfaces.js.map +1 -0
  156. package/dist/core/logger.d.ts +15 -0
  157. package/dist/core/logger.d.ts.map +1 -0
  158. package/dist/core/logger.js +30 -0
  159. package/dist/core/logger.js.map +1 -0
  160. package/dist/core/rbac.d.ts +132 -0
  161. package/dist/core/rbac.d.ts.map +1 -0
  162. package/dist/core/rbac.js +230 -0
  163. package/dist/core/rbac.js.map +1 -0
  164. package/dist/core/retry.d.ts +22 -0
  165. package/dist/core/retry.d.ts.map +1 -0
  166. package/dist/core/retry.js +41 -0
  167. package/dist/core/retry.js.map +1 -0
  168. package/dist/core/webhooks.d.ts +92 -0
  169. package/dist/core/webhooks.d.ts.map +1 -0
  170. package/dist/core/webhooks.js +176 -0
  171. package/dist/core/webhooks.js.map +1 -0
  172. package/dist/core/zero-config.d.ts +22 -0
  173. package/dist/core/zero-config.d.ts.map +1 -0
  174. package/dist/core/zero-config.js +59 -0
  175. package/dist/core/zero-config.js.map +1 -0
  176. package/dist/dashboard/cli.d.ts +6 -0
  177. package/dist/dashboard/cli.d.ts.map +1 -0
  178. package/dist/dashboard/cli.js +42 -0
  179. package/dist/dashboard/cli.js.map +1 -0
  180. package/dist/dashboard/index.html +3426 -0
  181. package/dist/dashboard/server.d.ts +7 -0
  182. package/dist/dashboard/server.d.ts.map +1 -0
  183. package/dist/dashboard/server.js +1427 -0
  184. package/dist/dashboard/server.js.map +1 -0
  185. package/dist/mcp/server.d.ts +27 -0
  186. package/dist/mcp/server.d.ts.map +1 -0
  187. package/dist/mcp/server.js +380 -0
  188. package/dist/mcp/server.js.map +1 -0
  189. package/dist/mcp/tools/misc.d.ts +15 -0
  190. package/dist/mcp/tools/misc.d.ts.map +1 -0
  191. package/dist/mcp/tools/misc.js +49 -0
  192. package/dist/mcp/tools/misc.js.map +1 -0
  193. package/dist/plugins/builtin/calculator.d.ts +11 -0
  194. package/dist/plugins/builtin/calculator.d.ts.map +1 -0
  195. package/dist/plugins/builtin/calculator.js +166 -0
  196. package/dist/plugins/builtin/calculator.js.map +1 -0
  197. package/dist/plugins/builtin/colors.d.ts +15 -0
  198. package/dist/plugins/builtin/colors.d.ts.map +1 -0
  199. package/dist/plugins/builtin/colors.js +193 -0
  200. package/dist/plugins/builtin/colors.js.map +1 -0
  201. package/dist/plugins/builtin/cron.d.ts +40 -0
  202. package/dist/plugins/builtin/cron.d.ts.map +1 -0
  203. package/dist/plugins/builtin/cron.js +578 -0
  204. package/dist/plugins/builtin/cron.js.map +1 -0
  205. package/dist/plugins/builtin/crypto.d.ts +11 -0
  206. package/dist/plugins/builtin/crypto.d.ts.map +1 -0
  207. package/dist/plugins/builtin/crypto.js +83 -0
  208. package/dist/plugins/builtin/crypto.js.map +1 -0
  209. package/dist/plugins/builtin/database.d.ts +29 -0
  210. package/dist/plugins/builtin/database.d.ts.map +1 -0
  211. package/dist/plugins/builtin/database.js +230 -0
  212. package/dist/plugins/builtin/database.js.map +1 -0
  213. package/dist/plugins/builtin/docker.d.ts +12 -0
  214. package/dist/plugins/builtin/docker.d.ts.map +1 -0
  215. package/dist/plugins/builtin/docker.js +436 -0
  216. package/dist/plugins/builtin/docker.js.map +1 -0
  217. package/dist/plugins/builtin/fun.d.ts +11 -0
  218. package/dist/plugins/builtin/fun.d.ts.map +1 -0
  219. package/dist/plugins/builtin/fun.js +114 -0
  220. package/dist/plugins/builtin/fun.js.map +1 -0
  221. package/dist/plugins/builtin/gcal.d.ts +38 -0
  222. package/dist/plugins/builtin/gcal.d.ts.map +1 -0
  223. package/dist/plugins/builtin/gcal.js +280 -0
  224. package/dist/plugins/builtin/gcal.js.map +1 -0
  225. package/dist/plugins/builtin/gdrive.d.ts +26 -0
  226. package/dist/plugins/builtin/gdrive.d.ts.map +1 -0
  227. package/dist/plugins/builtin/gdrive.js +295 -0
  228. package/dist/plugins/builtin/gdrive.js.map +1 -0
  229. package/dist/plugins/builtin/github-actions.d.ts +38 -0
  230. package/dist/plugins/builtin/github-actions.d.ts.map +1 -0
  231. package/dist/plugins/builtin/github-actions.js +629 -0
  232. package/dist/plugins/builtin/github-actions.js.map +1 -0
  233. package/dist/plugins/builtin/github.d.ts +26 -0
  234. package/dist/plugins/builtin/github.d.ts.map +1 -0
  235. package/dist/plugins/builtin/github.js +800 -0
  236. package/dist/plugins/builtin/github.js.map +1 -0
  237. package/dist/plugins/builtin/gmail.d.ts +50 -0
  238. package/dist/plugins/builtin/gmail.d.ts.map +1 -0
  239. package/dist/plugins/builtin/gmail.js +445 -0
  240. package/dist/plugins/builtin/gmail.js.map +1 -0
  241. package/dist/plugins/builtin/hash.d.ts +11 -0
  242. package/dist/plugins/builtin/hash.d.ts.map +1 -0
  243. package/dist/plugins/builtin/hash.js +95 -0
  244. package/dist/plugins/builtin/hash.js.map +1 -0
  245. package/dist/plugins/builtin/homekit.d.ts +53 -0
  246. package/dist/plugins/builtin/homekit.d.ts.map +1 -0
  247. package/dist/plugins/builtin/homekit.js +341 -0
  248. package/dist/plugins/builtin/homekit.js.map +1 -0
  249. package/dist/plugins/builtin/index.d.ts +4 -0
  250. package/dist/plugins/builtin/index.d.ts.map +1 -0
  251. package/dist/plugins/builtin/index.js +96 -0
  252. package/dist/plugins/builtin/index.js.map +1 -0
  253. package/dist/plugins/builtin/jira.d.ts +50 -0
  254. package/dist/plugins/builtin/jira.d.ts.map +1 -0
  255. package/dist/plugins/builtin/jira.js +353 -0
  256. package/dist/plugins/builtin/jira.js.map +1 -0
  257. package/dist/plugins/builtin/linear.d.ts +35 -0
  258. package/dist/plugins/builtin/linear.d.ts.map +1 -0
  259. package/dist/plugins/builtin/linear.js +397 -0
  260. package/dist/plugins/builtin/linear.js.map +1 -0
  261. package/dist/plugins/builtin/lumen.d.ts +21 -0
  262. package/dist/plugins/builtin/lumen.d.ts.map +1 -0
  263. package/dist/plugins/builtin/lumen.js +404 -0
  264. package/dist/plugins/builtin/lumen.js.map +1 -0
  265. package/dist/plugins/builtin/memory.d.ts +22 -0
  266. package/dist/plugins/builtin/memory.d.ts.map +1 -0
  267. package/dist/plugins/builtin/memory.js +184 -0
  268. package/dist/plugins/builtin/memory.js.map +1 -0
  269. package/dist/plugins/builtin/n8n.d.ts +60 -0
  270. package/dist/plugins/builtin/n8n.d.ts.map +1 -0
  271. package/dist/plugins/builtin/n8n.js +519 -0
  272. package/dist/plugins/builtin/n8n.js.map +1 -0
  273. package/dist/plugins/builtin/network.d.ts +11 -0
  274. package/dist/plugins/builtin/network.d.ts.map +1 -0
  275. package/dist/plugins/builtin/network.js +88 -0
  276. package/dist/plugins/builtin/network.js.map +1 -0
  277. package/dist/plugins/builtin/notes.d.ts +47 -0
  278. package/dist/plugins/builtin/notes.d.ts.map +1 -0
  279. package/dist/plugins/builtin/notes.js +641 -0
  280. package/dist/plugins/builtin/notes.js.map +1 -0
  281. package/dist/plugins/builtin/notion.d.ts +47 -0
  282. package/dist/plugins/builtin/notion.d.ts.map +1 -0
  283. package/dist/plugins/builtin/notion.js +317 -0
  284. package/dist/plugins/builtin/notion.js.map +1 -0
  285. package/dist/plugins/builtin/shell.d.ts +12 -0
  286. package/dist/plugins/builtin/shell.d.ts.map +1 -0
  287. package/dist/plugins/builtin/shell.js +310 -0
  288. package/dist/plugins/builtin/shell.js.map +1 -0
  289. package/dist/plugins/builtin/slack.d.ts +31 -0
  290. package/dist/plugins/builtin/slack.d.ts.map +1 -0
  291. package/dist/plugins/builtin/slack.js +295 -0
  292. package/dist/plugins/builtin/slack.js.map +1 -0
  293. package/dist/plugins/builtin/spotify.d.ts +55 -0
  294. package/dist/plugins/builtin/spotify.d.ts.map +1 -0
  295. package/dist/plugins/builtin/spotify.js +623 -0
  296. package/dist/plugins/builtin/spotify.js.map +1 -0
  297. package/dist/plugins/builtin/stripe.d.ts +35 -0
  298. package/dist/plugins/builtin/stripe.d.ts.map +1 -0
  299. package/dist/plugins/builtin/stripe.js +376 -0
  300. package/dist/plugins/builtin/stripe.js.map +1 -0
  301. package/dist/plugins/builtin/system.d.ts +11 -0
  302. package/dist/plugins/builtin/system.d.ts.map +1 -0
  303. package/dist/plugins/builtin/system.js +91 -0
  304. package/dist/plugins/builtin/system.js.map +1 -0
  305. package/dist/plugins/builtin/text-tools.d.ts +11 -0
  306. package/dist/plugins/builtin/text-tools.d.ts.map +1 -0
  307. package/dist/plugins/builtin/text-tools.js +146 -0
  308. package/dist/plugins/builtin/text-tools.js.map +1 -0
  309. package/dist/plugins/builtin/timezone.d.ts +13 -0
  310. package/dist/plugins/builtin/timezone.d.ts.map +1 -0
  311. package/dist/plugins/builtin/timezone.js +164 -0
  312. package/dist/plugins/builtin/timezone.js.map +1 -0
  313. package/dist/plugins/builtin/todoist.d.ts +49 -0
  314. package/dist/plugins/builtin/todoist.d.ts.map +1 -0
  315. package/dist/plugins/builtin/todoist.js +540 -0
  316. package/dist/plugins/builtin/todoist.js.map +1 -0
  317. package/dist/plugins/builtin/translate.d.ts +11 -0
  318. package/dist/plugins/builtin/translate.d.ts.map +1 -0
  319. package/dist/plugins/builtin/translate.js +42 -0
  320. package/dist/plugins/builtin/translate.js.map +1 -0
  321. package/dist/plugins/builtin/url-tools.d.ts +11 -0
  322. package/dist/plugins/builtin/url-tools.d.ts.map +1 -0
  323. package/dist/plugins/builtin/url-tools.js +70 -0
  324. package/dist/plugins/builtin/url-tools.js.map +1 -0
  325. package/dist/plugins/builtin/vercel.d.ts +55 -0
  326. package/dist/plugins/builtin/vercel.d.ts.map +1 -0
  327. package/dist/plugins/builtin/vercel.js +514 -0
  328. package/dist/plugins/builtin/vercel.js.map +1 -0
  329. package/dist/plugins/builtin/weather.d.ts +13 -0
  330. package/dist/plugins/builtin/weather.d.ts.map +1 -0
  331. package/dist/plugins/builtin/weather.js +103 -0
  332. package/dist/plugins/builtin/weather.js.map +1 -0
  333. package/dist/plugins/builtin/x.d.ts +54 -0
  334. package/dist/plugins/builtin/x.d.ts.map +1 -0
  335. package/dist/plugins/builtin/x.js +402 -0
  336. package/dist/plugins/builtin/x.js.map +1 -0
  337. package/dist/plugins/manager.d.ts +77 -0
  338. package/dist/plugins/manager.d.ts.map +1 -0
  339. package/dist/plugins/manager.js +141 -0
  340. package/dist/plugins/manager.js.map +1 -0
  341. package/dist/plugins/validation.d.ts +18 -0
  342. package/dist/plugins/validation.d.ts.map +1 -0
  343. package/dist/plugins/validation.js +81 -0
  344. package/dist/plugins/validation.js.map +1 -0
  345. package/dist/security/auth.d.ts +23 -0
  346. package/dist/security/auth.d.ts.map +1 -0
  347. package/dist/security/auth.js +56 -0
  348. package/dist/security/auth.js.map +1 -0
  349. package/dist/security/keychain.d.ts +60 -0
  350. package/dist/security/keychain.d.ts.map +1 -0
  351. package/dist/security/keychain.js +213 -0
  352. package/dist/security/keychain.js.map +1 -0
  353. package/dist/utils/google-auth.d.ts +21 -0
  354. package/dist/utils/google-auth.d.ts.map +1 -0
  355. package/dist/utils/google-auth.js +135 -0
  356. package/dist/utils/google-auth.js.map +1 -0
  357. package/dist/utils/retry.d.ts +5 -0
  358. package/dist/utils/retry.d.ts.map +1 -0
  359. package/dist/utils/retry.js +34 -0
  360. package/dist/utils/retry.js.map +1 -0
  361. package/docs/README.md +13 -0
  362. package/docs/api.md +210 -0
  363. package/docs/getting-started.md +100 -0
  364. package/docs/plugins.md +306 -0
  365. package/docs-site/.vitepress/config.ts +59 -0
  366. package/docs-site/README.md +12 -0
  367. package/docs-site/index.md +30 -0
  368. package/eslint.config.js +29 -0
  369. package/install.ps1 +334 -0
  370. package/install.sh +1119 -0
  371. package/local-install.sh +304 -0
  372. package/package.json +90 -0
  373. package/packages/README.md +11 -0
  374. package/packages/plugin-sdk/README.md +12 -0
  375. package/packages/plugin-sdk/package.json +22 -0
  376. package/packages/plugin-sdk/src/README.md +11 -0
  377. package/packages/plugin-sdk/src/index.ts +191 -0
  378. package/sdks/README.md +26 -0
  379. package/sdks/csharp/ConductorClient.cs +65 -0
  380. package/sdks/csharp/README.md +11 -0
  381. package/sdks/go/README.md +11 -0
  382. package/sdks/go/conductor.go +257 -0
  383. package/sdks/java/ConductorClient.java +27 -0
  384. package/sdks/java/README.md +11 -0
  385. package/sdks/php/README.md +11 -0
  386. package/sdks/php/src/Client.php +72 -0
  387. package/sdks/python/README.md +12 -0
  388. package/sdks/python/conductor/__init__.py +227 -0
  389. package/sdks/python/pyproject.toml +30 -0
  390. package/sdks/ruby/README.md +11 -0
  391. package/sdks/ruby/lib/conductor.rb +46 -0
  392. package/sdks/rust/Cargo.toml +14 -0
  393. package/sdks/rust/README.md +11 -0
  394. package/sdks/swift/README.md +11 -0
  395. package/sdks/swift/Sources/Conductor/ConductorClient.swift +65 -0
  396. package/skills/conductor-mcp/SKILL.md +38 -0
  397. package/src/README.md +20 -0
  398. package/src/ai/README.md +18 -0
  399. package/src/ai/base.ts +93 -0
  400. package/src/ai/claude.ts +162 -0
  401. package/src/ai/gemini.ts +188 -0
  402. package/src/ai/maestro.ts +168 -0
  403. package/src/ai/manager.ts +537 -0
  404. package/src/ai/ollama.ts +186 -0
  405. package/src/ai/openai.ts +147 -0
  406. package/src/ai/openrouter.ts +152 -0
  407. package/src/bot/README.md +12 -0
  408. package/src/bot/slack.ts +164 -0
  409. package/src/bot/telegram.ts +185 -0
  410. package/src/cli/README.md +24 -0
  411. package/src/cli/commands/README.md +20 -0
  412. package/src/cli/commands/ai.ts +170 -0
  413. package/src/cli/commands/doctor.ts +221 -0
  414. package/src/cli/commands/init.ts +348 -0
  415. package/src/cli/commands/install.ts +792 -0
  416. package/src/cli/commands/lifecycle.ts +95 -0
  417. package/src/cli/commands/marketplace.ts +253 -0
  418. package/src/cli/commands/mcp.ts +92 -0
  419. package/src/cli/commands/onboard.ts +248 -0
  420. package/src/cli/commands/plugin-create.ts +130 -0
  421. package/src/cli/commands/plugins.ts +36 -0
  422. package/src/cli/commands/release.ts +251 -0
  423. package/src/cli/commands/telegram.ts +25 -0
  424. package/src/cli/index.ts +450 -0
  425. package/src/config/README.md +11 -0
  426. package/src/config/oauth.ts +26 -0
  427. package/src/core/README.md +22 -0
  428. package/src/core/audit.ts +291 -0
  429. package/src/core/circuit-breaker.ts +129 -0
  430. package/src/core/conductor.ts +240 -0
  431. package/src/core/config.ts +149 -0
  432. package/src/core/database.ts +411 -0
  433. package/src/core/errors.ts +275 -0
  434. package/src/core/health.ts +159 -0
  435. package/src/core/interfaces.ts +75 -0
  436. package/src/core/logger.ts +33 -0
  437. package/src/core/rbac.ts +321 -0
  438. package/src/core/retry.ts +61 -0
  439. package/src/core/webhooks.ts +234 -0
  440. package/src/core/zero-config.ts +72 -0
  441. package/src/dashboard/README.md +15 -0
  442. package/src/dashboard/cli.ts +48 -0
  443. package/src/dashboard/index.html +3426 -0
  444. package/src/dashboard/server.ts +1544 -0
  445. package/src/mcp/README.md +20 -0
  446. package/src/mcp/server.ts +475 -0
  447. package/src/mcp/tools/README.md +11 -0
  448. package/src/mcp/tools/misc.ts +61 -0
  449. package/src/plugins/README.md +28 -0
  450. package/src/plugins/builtin/README.md +23 -0
  451. package/src/plugins/builtin/calculator.ts +178 -0
  452. package/src/plugins/builtin/colors.ts +201 -0
  453. package/src/plugins/builtin/cron.ts +649 -0
  454. package/src/plugins/builtin/crypto.ts +85 -0
  455. package/src/plugins/builtin/database.ts +235 -0
  456. package/src/plugins/builtin/docker.ts +426 -0
  457. package/src/plugins/builtin/fun.ts +118 -0
  458. package/src/plugins/builtin/gcal.ts +305 -0
  459. package/src/plugins/builtin/gdrive.ts +326 -0
  460. package/src/plugins/builtin/github-actions.ts +666 -0
  461. package/src/plugins/builtin/github.ts +912 -0
  462. package/src/plugins/builtin/gmail.ts +492 -0
  463. package/src/plugins/builtin/hash.ts +98 -0
  464. package/src/plugins/builtin/homekit.ts +389 -0
  465. package/src/plugins/builtin/index.ts +116 -0
  466. package/src/plugins/builtin/jira.ts +380 -0
  467. package/src/plugins/builtin/linear.ts +448 -0
  468. package/src/plugins/builtin/lumen.ts +497 -0
  469. package/src/plugins/builtin/memory.ts +200 -0
  470. package/src/plugins/builtin/n8n.ts +565 -0
  471. package/src/plugins/builtin/network.ts +92 -0
  472. package/src/plugins/builtin/notes.ts +689 -0
  473. package/src/plugins/builtin/notion.ts +348 -0
  474. package/src/plugins/builtin/shell.ts +334 -0
  475. package/src/plugins/builtin/slack.ts +327 -0
  476. package/src/plugins/builtin/spotify.ts +665 -0
  477. package/src/plugins/builtin/stripe.ts +388 -0
  478. package/src/plugins/builtin/system.ts +93 -0
  479. package/src/plugins/builtin/text-tools.ts +150 -0
  480. package/src/plugins/builtin/timezone.ts +173 -0
  481. package/src/plugins/builtin/todoist.ts +625 -0
  482. package/src/plugins/builtin/translate.ts +47 -0
  483. package/src/plugins/builtin/url-tools.ts +73 -0
  484. package/src/plugins/builtin/vercel.ts +546 -0
  485. package/src/plugins/builtin/weather.ts +112 -0
  486. package/src/plugins/builtin/x.ts +440 -0
  487. package/src/plugins/manager.ts +213 -0
  488. package/src/plugins/validation.ts +94 -0
  489. package/src/security/README.md +12 -0
  490. package/src/security/auth.ts +72 -0
  491. package/src/security/keychain.ts +226 -0
  492. package/src/utils/README.md +12 -0
  493. package/src/utils/google-auth.ts +159 -0
  494. package/src/utils/retry.ts +41 -0
  495. package/test-all.mjs +1256 -0
  496. package/test.mjs +633 -0
  497. package/tests/README.md +19 -0
  498. package/tests/calculator.test.ts +54 -0
  499. package/tests/docker.test.ts +42 -0
  500. package/tests/load.test.ts +129 -0
  501. package/tests/mcp.test.ts +14 -0
  502. package/tests/shell.test.ts +42 -0
  503. package/tsconfig.json +21 -0
  504. package/vitest.config.ts +14 -0
@@ -0,0 +1,304 @@
1
+ #!/usr/bin/env bash
2
+ # ============================================================
3
+ # Conductor Local Install Script — by TheAlxLabs
4
+ # ============================================================
5
+ # Use this if you have modified the code and want to install
6
+ # your local version globally.
7
+ #
8
+ # bash local-install.sh
9
+ # ============================================================
10
+ set -euo pipefail
11
+ IFS=$'\n\t'
12
+
13
+ # ── Terminal colours ──────────────────────────────────────────
14
+ if [[ -t 1 ]] && command -v tput &>/dev/null; then
15
+ RED=$(tput setaf 1) GREEN=$(tput setaf 2) YELLOW=$(tput setaf 3)
16
+ BLUE=$(tput setaf 4) CYAN=$(tput setaf 6) BOLD=$(tput bold)
17
+ DIM=$(tput dim 2>/dev/null || printf '') ITALIC=''
18
+ RESET=$(tput sgr0)
19
+ else
20
+ RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m'
21
+ BLUE='\033[0;34m' CYAN='\033[0;36m' BOLD='\033[1m'
22
+ DIM='\033[2m' ITALIC='\033[3m' RESET='\033[0m'
23
+ fi
24
+
25
+ info() { echo -e " ${BLUE}▶${RESET} $*"; }
26
+ success() { echo -e " ${GREEN}✓${RESET} $*"; }
27
+ warn() { echo -e " ${YELLOW}⚠${RESET} $*" >&2; }
28
+ fail() { echo -e "\n ${RED}✗ FATAL:${RESET} $*\n" >&2; exit 1; }
29
+ hint() { echo -e " ${DIM}${ITALIC}$*${RESET}"; }
30
+
31
+ step() {
32
+ echo ""
33
+ echo -e " ${BOLD}${CYAN}┌──────────────────────────────────────────────${RESET}"
34
+ echo -e " ${BOLD}${CYAN}│ $*${RESET}"
35
+ echo -e " ${BOLD}${CYAN}└──────────────────────────────────────────────${RESET}"
36
+ }
37
+
38
+ # ── Cleanup ───────────────────────────────────────────────────
39
+ _TMPFILES=()
40
+ cleanup() {
41
+ for f in "${_TMPFILES[@]:-}"; do
42
+ if [[ -f "$f" ]]; then
43
+ dd if=/dev/zero of="$f" bs=1 count="$(wc -c < "$f")" 2>/dev/null || true
44
+ rm -f "$f" 2>/dev/null || true
45
+ fi
46
+ done
47
+ }
48
+ trap cleanup EXIT
49
+
50
+ # ── Prompt helpers ────────────────────────────────────────────
51
+ prompt_yn() {
52
+ local prompt="$1" varname="$2" default="${3:-y}"
53
+ local hint_str="Y/n"; [[ "$default" == "n" ]] && hint_str="y/N"
54
+ printf " ${CYAN}?${RESET} ${BOLD}%s${RESET} ${DIM}[%s]${RESET}: " "$prompt" "$hint_str" >/dev/tty
55
+ local _val; IFS= read -r _val </dev/tty || _val=""
56
+ _val="${_val:-$default}"
57
+ if [[ "$_val" =~ ^[Yy] ]]; then printf -v "$varname" '%s' "true"
58
+ else printf -v "$varname" '%s' "false"; fi
59
+ }
60
+
61
+ prompt_input() {
62
+ local prompt="$1" varname="$2" default="${3:-}"
63
+ if [[ -n "$default" ]]; then
64
+ printf " ${CYAN}?${RESET} ${BOLD}%s${RESET} ${DIM}[%s]${RESET}: " "$prompt" "$default" >/dev/tty
65
+ else
66
+ printf " ${CYAN}?${RESET} ${BOLD}%s${RESET}: " "$prompt" >/dev/tty
67
+ fi
68
+ local _val; IFS= read -r _val </dev/tty || _val=""
69
+ printf -v "$varname" '%s' "${_val:-$default}"
70
+ }
71
+
72
+ prompt_secret() {
73
+ local prompt="$1" varname="$2"
74
+ printf " ${CYAN}?${RESET} ${BOLD}%s${RESET}: " "$prompt" >/dev/tty
75
+ local _sec; IFS= read -rs _sec </dev/tty || _sec=""
76
+ echo "" >/dev/tty
77
+ printf -v "$varname" '%s' "$_sec"
78
+ }
79
+
80
+ # ── Config helpers ────────────────────────────────────────────
81
+ CONFIG_DIR="$HOME/.conductor"
82
+ CONFIG_FILE="$CONFIG_DIR/config.json"
83
+
84
+ ensure_dirs() {
85
+ mkdir -p "$CONFIG_DIR"/{keychain,plugins,logs}
86
+ chmod 700 "$CONFIG_DIR/keychain"
87
+ chmod 700 "$CONFIG_DIR"
88
+ }
89
+
90
+ update_config() {
91
+ local json_str="$1"
92
+ local tmp_file; tmp_file=$(mktemp "${CONFIG_FILE}.XXXXXX")
93
+ _TMPFILES+=("$tmp_file")
94
+ python3 -c "
95
+ import json, sys, os
96
+ config_path, tmp_path, new_json = sys.argv[1], sys.argv[2], sys.argv[3]
97
+ existing = {}
98
+ if os.path.exists(config_path):
99
+ try:
100
+ with open(config_path) as f: existing = json.load(f)
101
+ except Exception: pass
102
+ def merge(a, b):
103
+ for k, v in b.items():
104
+ if k in a and isinstance(a[k], dict) and isinstance(v, dict): merge(a[k], v)
105
+ else: a[k] = v
106
+ return a
107
+ with open(tmp_path, 'w') as f:
108
+ json.dump(merge(existing, json.loads(new_json)), f, indent=2)
109
+ f.flush(); os.fsync(f.fileno())
110
+ os.replace(tmp_path, config_path)
111
+ " "$CONFIG_FILE" "$tmp_file" "$json_str"
112
+ }
113
+
114
+ # Pipes value via stdin — never exposed in process list (ps aux fix)
115
+ save_cred_val() {
116
+ local service="$1" key="$2" value="$3"
117
+ printf '%s' "$value" | node - "$CONFIG_DIR" "$service" "$key" << 'JSEOF'
118
+ const crypto=require('crypto'),fs=require('fs'),path=require('path'),os=require('os'),{execSync}=require('child_process');
119
+ const [,,configDir,service,key]=process.argv;
120
+ let val='';
121
+ try{val=fs.readFileSync('/dev/stdin','utf8').trim();}catch{process.exit(1);}
122
+ const kd=path.join(configDir,'keychain'); fs.mkdirSync(kd,{recursive:true,mode:0o700});
123
+ function ms(){
124
+ for(const s of['/etc/machine-id','/var/lib/dbus/machine-id'])try{const d=fs.readFileSync(s,'utf8').trim();if(d)return d}catch{}
125
+ if(process.platform==='darwin')try{const o=execSync("ioreg -rd1 -c IOPlatformExpertDevice|awk '/IOPlatformUUID/{print $NF}'",{encoding:'utf8',stdio:['pipe','pipe','pipe']}).trim().replace(/"/g,'');if(o)return o}catch{}
126
+ const f=path.join(kd,'machine_secret');
127
+ try{const d=fs.readFileSync(f,'utf8').trim();if(d)return d}catch{}
128
+ try{const s=crypto.randomUUID();fs.writeFileSync(f,s,{mode:0o600});return s}catch{}
129
+ throw new Error('Cannot derive machine ID for keychain encryption');
130
+ }
131
+ const salt=crypto.createHash('sha256').update('conductor:keychain:v1').digest();
132
+ const mk=crypto.scryptSync(ms(),salt,32,{N:16384,r:8,p:1});
133
+ const iv=crypto.randomBytes(12),c=crypto.createCipheriv('aes-256-gcm',mk,iv);
134
+ let e=c.update(val,'utf8','hex'); e+=c.final('hex');
135
+ const t=c.getAuthTag().toString('hex');
136
+ const out=['v2',iv.toString('hex'),t,e].join(':');
137
+ const fp=path.join(kd,`${service}.${key}.enc`); const tmp=fp+'.tmp';
138
+ fs.writeFileSync(tmp,out,{mode:0o600}); fs.renameSync(tmp,fp);
139
+ JSEOF
140
+ }
141
+
142
+ add_plugin() {
143
+ python3 -c "
144
+ import json, sys, os
145
+ p, pl = sys.argv[1], sys.argv[2]
146
+ c = {}
147
+ if os.path.exists(p):
148
+ try:
149
+ with open(p) as f: c = json.load(f)
150
+ except Exception: pass
151
+ for k in ['installed','enabled']:
152
+ lst = c.get('plugins',{}).get(k,[])
153
+ if pl not in lst: lst.append(pl)
154
+ c.setdefault('plugins',{})[k] = lst
155
+ with open(p,'w') as f: json.dump(c, f, indent=2)
156
+ " "$CONFIG_FILE" "$1"
157
+ }
158
+
159
+ # ── Header ────────────────────────────────────────────────────
160
+ clear 2>/dev/null || true
161
+ echo -e " ${BOLD}${CYAN}Conductor Local Installer${RESET}"
162
+ echo -e " ${DIM}Installing from: $(pwd)${RESET}"
163
+ echo ""
164
+
165
+ # ── Step 1: Preflight ─────────────────────────────────────────
166
+ step "01 / Preflight Check"
167
+
168
+ [[ -f "package.json" ]] || fail "No package.json found. Run this script in the conductor source directory."
169
+
170
+ command -v node &>/dev/null || fail "Node.js not found. Install v18+ from https://nodejs.org"
171
+ NODE_RAW=$(node --version 2>/dev/null || echo "v0")
172
+ NODE_VER="${NODE_RAW#v}"; NODE_MAJOR="${NODE_VER%%.*}"
173
+ [[ -z "$NODE_MAJOR" ]] && fail "Could not determine Node.js version from: $NODE_RAW"
174
+ [[ "$NODE_MAJOR" =~ ^[0-9]+$ ]] && (( NODE_MAJOR >= 18 )) || \
175
+ fail "Node.js v18+ required (found $NODE_RAW). Upgrade at https://nodejs.org"
176
+ success "Node.js $NODE_RAW"
177
+
178
+ command -v npm &>/dev/null || fail "npm not found. Reinstall Node.js from https://nodejs.org"
179
+ success "npm $(npm --version)"
180
+
181
+ ensure_dirs
182
+ success "Config dirs ready ($CONFIG_DIR)"
183
+
184
+ # ── Step 2: Build ─────────────────────────────────────────────
185
+ step "02 / Build from Source"
186
+
187
+ info "Installing dependencies..."
188
+ npm install || fail "npm install failed"
189
+
190
+ info "Building project..."
191
+ npm run build || fail "Build failed"
192
+
193
+ chmod +x "dist/cli/index.js" 2>/dev/null || true
194
+ success "Build complete"
195
+
196
+ # ── Step 3: Link ──────────────────────────────────────────────
197
+ step "03 / Global Install"
198
+
199
+ info "Linking globally..."
200
+ if npm link --silent 2>/dev/null || sudo npm link --silent 2>/dev/null; then
201
+ success "Linked globally via 'npm link'"
202
+ else
203
+ warn "npm link failed. Attempting global install..."
204
+ if npm install -g . 2>/dev/null || sudo npm install -g . 2>/dev/null; then
205
+ success "Installed globally via 'npm install -g .'"
206
+ else
207
+ LOCAL_BIN="$HOME/.local/bin"
208
+ mkdir -p "$LOCAL_BIN"
209
+ printf '#!/usr/bin/env bash\nexec node "%s/dist/cli/index.js" "$@"\n' "$(pwd)" > "$LOCAL_BIN/conductor"
210
+ chmod +x "$LOCAL_BIN/conductor"
211
+ export PATH="$LOCAL_BIN:$PATH"
212
+ success "Installed to ~/.local/bin/conductor"
213
+ hint "Add to PATH permanently: export PATH=\"\$HOME/.local/bin:\$PATH\""
214
+ fi
215
+ fi
216
+
217
+ # ── Step 4: Configuration ─────────────────────────────────────
218
+ step "04 / Configuration"
219
+
220
+ echo ""
221
+ echo -e " ${CYAN}1${RESET} ${BOLD}Claude${RESET} ${DIM}· console.anthropic.com/settings/keys${RESET}
222
+ ${CYAN}2${RESET} ${BOLD}OpenAI${RESET} ${DIM}· platform.openai.com/api-keys${RESET}
223
+ ${CYAN}3${RESET} ${BOLD}Gemini${RESET} ${DIM}· aistudio.google.com/apikey${RESET}
224
+ ${CYAN}4${RESET} ${BOLD}OpenRouter${RESET} ${DIM}· openrouter.ai/keys${RESET}
225
+ ${CYAN}5${RESET} ${BOLD}Ollama${RESET} ${DIM}· local, no key needed${RESET}
226
+ ${CYAN}6${RESET} ${BOLD}Skip${RESET}
227
+ "
228
+ prompt_input "Choose AI Provider" AI_CHOICE "6"
229
+
230
+ case "$AI_CHOICE" in
231
+ 1)
232
+ prompt_secret "Anthropic API key" API_KEY
233
+ if [[ -n "$API_KEY" ]]; then
234
+ save_cred_val "anthropic" "api_key" "$API_KEY"
235
+ update_config '{"ai":{"provider":"claude"}}'
236
+ success "Claude configured"
237
+ else warn "Skipped"; fi ;;
238
+ 2)
239
+ prompt_secret "OpenAI API key" API_KEY
240
+ if [[ -n "$API_KEY" ]]; then
241
+ save_cred_val "openai" "api_key" "$API_KEY"
242
+ update_config '{"ai":{"provider":"openai"}}'
243
+ success "OpenAI configured"
244
+ else warn "Skipped"; fi ;;
245
+ 3)
246
+ prompt_secret "Gemini API key" API_KEY
247
+ if [[ -n "$API_KEY" ]]; then
248
+ save_cred_val "gemini" "api_key" "$API_KEY"
249
+ update_config '{"ai":{"provider":"gemini"}}'
250
+ success "Gemini configured"
251
+ else warn "Skipped"; fi ;;
252
+ 4)
253
+ prompt_secret "OpenRouter API key" API_KEY
254
+ if [[ -n "$API_KEY" ]]; then
255
+ save_cred_val "openrouter" "api_key" "$API_KEY"
256
+ update_config '{"ai":{"provider":"openrouter"}}'
257
+ success "OpenRouter configured"
258
+ else warn "Skipped"; fi ;;
259
+ 5)
260
+ prompt_input "Ollama model" OLLAMA_MODEL "llama3.2"
261
+ OLLAMA_JSON=$(python3 -c "import json,sys; print(json.dumps(sys.argv[1]))" "$OLLAMA_MODEL")
262
+ update_config "{\"ai\":{\"provider\":\"ollama\",\"model\":${OLLAMA_JSON}}}"
263
+ success "Ollama configured ($OLLAMA_MODEL)"
264
+ hint "Make sure Ollama is running: ollama serve" ;;
265
+ *)
266
+ warn "Skipped — run later: conductor ai setup" ;;
267
+ esac
268
+
269
+ # ── Step 5: Bots ──────────────────────────────────────────────
270
+ step "05 / Bot Setup ${DIM}optional${RESET}"
271
+
272
+ prompt_yn "Set up Telegram bot?" SETUP_TG "n"
273
+ if [[ "$SETUP_TG" == "true" ]]; then
274
+ prompt_secret "Telegram Bot Token" TG_TOKEN
275
+ if [[ -n "$TG_TOKEN" ]]; then
276
+ save_cred_val "telegram" "bot_token" "$TG_TOKEN"
277
+ update_config '{"telegram":{"enabled":true}}'
278
+ success "Telegram configured"
279
+ hint "Start with: conductor telegram start"
280
+ fi
281
+ fi
282
+
283
+ prompt_yn "Set up Slack bot?" SETUP_SLACK "n"
284
+ if [[ "$SETUP_SLACK" == "true" ]]; then
285
+ prompt_secret "Slack Bot OAuth Token (xoxb-)" SLACK_BOT_TOKEN
286
+ prompt_secret "Slack App-Level Token (xapp-)" SLACK_APP_TOKEN
287
+ if [[ -n "$SLACK_BOT_TOKEN" && -n "$SLACK_APP_TOKEN" ]]; then
288
+ save_cred_val "slack" "bot_token" "$SLACK_BOT_TOKEN"
289
+ save_cred_val "slack" "app_token" "$SLACK_APP_TOKEN"
290
+ update_config '{"plugins":{"slack":{"enabled":true}}}'
291
+ success "Slack configured"
292
+ hint "Start with: conductor slack start"
293
+ fi
294
+ fi
295
+
296
+ # ── Done ──────────────────────────────────────────────────────
297
+ echo ""
298
+ echo -e " ${GREEN}${BOLD}✓ Local installation complete!${RESET}"
299
+ echo ""
300
+ echo -e " ${CYAN}conductor status${RESET} — check your setup"
301
+ echo -e " ${CYAN}conductor auth google${RESET} — connect Gmail/Calendar/Drive"
302
+ echo -e " ${CYAN}conductor dashboard${RESET} — open web dashboard"
303
+ echo -e " ${CYAN}conductor ai test${RESET} — test AI provider"
304
+ echo ""
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "@useconductor/conductor",
3
+ "version": "1.0.0",
4
+ "description": "The AI Tool Hub — One MCP server. 100+ tools. Every AI agent.",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "conductor": "./dist/cli/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "postbuild": "chmod +x dist/cli/index.js && cp src/dashboard/index.html dist/dashboard/index.html",
12
+ "dev": "tsx watch src/cli/index.ts",
13
+ "start": "node dist/cli/index.js",
14
+ "test": "vitest run",
15
+ "test:watch": "vitest",
16
+ "test:coverage": "vitest run --coverage",
17
+ "lint": "eslint src/ --ext .ts",
18
+ "lint:fix": "eslint src/ --ext .ts --fix",
19
+ "format": "prettier --write \"src/**/*.ts\"",
20
+ "format:check": "prettier --check \"src/**/*.ts\"",
21
+ "typecheck": "tsc --noEmit",
22
+ "prepublishOnly": "npm run build"
23
+ },
24
+ "publishConfig": {
25
+ "access": "public",
26
+ "registry": "https://registry.npmjs.org/"
27
+ },
28
+ "engines": {
29
+ "node": ">=18.0.0"
30
+ },
31
+ "keywords": [
32
+ "mcp",
33
+ "model-context-protocol",
34
+ "ai",
35
+ "ai-tools",
36
+ "tool-hub",
37
+ "claude",
38
+ "cursor",
39
+ "cline",
40
+ "automation",
41
+ "plugin-hub"
42
+ ],
43
+ "author": "Alexander Wondwossen",
44
+ "license": "Apache-2.0",
45
+ "type": "module",
46
+ "dependencies": {
47
+ "@anthropic-ai/sdk": "^0.74.0",
48
+ "@google/generative-ai": "^0.24.1",
49
+ "@modelcontextprotocol/sdk": "^1.26.0",
50
+ "@octokit/rest": "^22.0.1",
51
+ "@slack/bolt": "^4.6.0",
52
+ "chalk": "^5.6.2",
53
+ "commander": "^14.0.3",
54
+ "dotenv": "^17.3.1",
55
+ "express": "^5.2.1",
56
+ "express-rate-limit": "^8.3.2",
57
+ "glob": "^13.0.6",
58
+ "googleapis": "^171.4.0",
59
+ "inquirer": "^13.2.5",
60
+ "mathjs": "^15.1.1",
61
+ "open": "^11.0.0",
62
+ "openai": "^6.22.0",
63
+ "ora": "^9.3.0",
64
+ "pino": "^10.3.1",
65
+ "pino-pretty": "^13.1.3",
66
+ "redis": "^5.11.0",
67
+ "spotify-web-api-node": "^5.0.2",
68
+ "sql.js": "^1.14.0",
69
+ "systeminformation": "^5.31.0",
70
+ "telegraf": "^4.16.3",
71
+ "zod": "^4.3.6"
72
+ },
73
+ "devDependencies": {
74
+ "@types/express": "^5.0.6",
75
+ "@types/inquirer": "^9.0.9",
76
+ "@types/node": "^25.2.3",
77
+ "@types/spotify-web-api-node": "^5.0.11",
78
+ "@types/sql.js": "^1.4.9",
79
+ "@typescript-eslint/eslint-plugin": "^8.58.0",
80
+ "@typescript-eslint/parser": "^8.58.0",
81
+ "@vitest/coverage-v8": "^4.1.2",
82
+ "eslint": "^10.1.0",
83
+ "eslint-config-prettier": "^10.1.8",
84
+ "prettier": "^3.8.1",
85
+ "tsx": "^4.21.0",
86
+ "typescript": "^5.9.3",
87
+ "vitepress": "^1.6.4",
88
+ "vitest": "^4.1.2"
89
+ }
90
+ }
@@ -0,0 +1,11 @@
1
+ # packages
2
+
3
+ Published packages for the Conductor ecosystem.
4
+
5
+ ## Contents
6
+
7
+ - `plugin-sdk/` - TypeScript SDK for building Conductor plugins
8
+
9
+ ## Architecture
10
+
11
+ This directory contains npm-published packages that extend Conductor. The `plugin-sdk` is the primary package, enabling developers to build plugins with proper typing and tooling. Additional packages may be added here for language bindings, integrations, or shared libraries.
@@ -0,0 +1,12 @@
1
+ # packages/plugin-sdk
2
+
3
+ TypeScript SDK for building Conductor plugins. Provides types, utilities, and helpers for plugin development.
4
+
5
+ ## Contents
6
+
7
+ - `package.json` - Package manifest and dependencies
8
+ - `src/` - SDK source code
9
+
10
+ ## Architecture
11
+
12
+ The Plugin SDK is published to npm and consumed by plugin developers. It re-exports the core `Plugin` interface, tool types, config schema types, and validation utilities. Use this SDK when building external plugins to ensure type safety and API compatibility with the Conductor plugin system.
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@conductor/plugin-sdk",
3
+ "version": "1.0.0",
4
+ "description": "SDK for building Conductor plugins with TypeScript",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "test": "vitest run"
11
+ },
12
+ "dependencies": {
13
+ "zod": "^4.3.6"
14
+ },
15
+ "peerDependencies": {
16
+ "typescript": ">=5.0.0"
17
+ },
18
+ "devDependencies": {
19
+ "typescript": "^5.9.3",
20
+ "vitest": "^4.1.2"
21
+ }
22
+ }
@@ -0,0 +1,11 @@
1
+ # packages/plugin-sdk/src
2
+
3
+ Source code for the Conductor Plugin SDK.
4
+
5
+ ## Contents
6
+
7
+ - `index.ts` - SDK entry point, re-exports all public types and utilities
8
+
9
+ ## Architecture
10
+
11
+ This is the implementation of the Plugin SDK. The single entry point re-exports the `Plugin` interface, `PluginTool`, `PluginConfigSchema`, and validation helpers from the main codebase. This allows plugin developers to import everything from `@conductor/plugin-sdk` without depending on the full Conductor package.
@@ -0,0 +1,191 @@
1
+ /**
2
+ * @conductor/plugin-sdk
3
+ *
4
+ * The official SDK for building Conductor plugins.
5
+ * Provides type-safe plugin creation, input validation, testing utilities,
6
+ * and a development server with hot-reload.
7
+ *
8
+ * Usage:
9
+ * import { createPlugin, z } from '@conductor/plugin-sdk';
10
+ *
11
+ * export default createPlugin({
12
+ * name: 'my-plugin',
13
+ * description: 'My awesome plugin',
14
+ * tools: [
15
+ * {
16
+ * name: 'hello',
17
+ * description: 'Say hello',
18
+ * input: z.object({ name: z.string() }),
19
+ * handler: async ({ name }) => `Hello, ${name}!`,
20
+ * },
21
+ * ],
22
+ * });
23
+ */
24
+
25
+ import { z } from 'zod';
26
+
27
+ // ── Types ────────────────────────────────────────────────────────────────────
28
+
29
+ export interface PluginToolDefinition<TInput = Record<string, unknown>> {
30
+ name: string;
31
+ description: string;
32
+ /** Zod schema for input validation */
33
+ input: z.ZodType<TInput>;
34
+ /** Tool handler — receives validated input */
35
+ handler: (input: TInput) => Promise<unknown>;
36
+ /** Whether this tool requires user approval before execution */
37
+ requiresApproval?: boolean;
38
+ }
39
+
40
+ export interface PluginDefinition {
41
+ name: string;
42
+ description: string;
43
+ version?: string;
44
+ tools: PluginToolDefinition[];
45
+ /** Called when the plugin is loaded */
46
+ onInitialize?: () => Promise<void>;
47
+ /** Called when the plugin is unloaded */
48
+ onDestroy?: () => Promise<void>;
49
+ /** Whether the plugin is configured and ready */
50
+ isConfigured?: () => boolean;
51
+ /** Configuration schema for the plugin */
52
+ config?: Record<string, {
53
+ label: string;
54
+ type: 'string' | 'password' | 'number' | 'boolean';
55
+ required: boolean;
56
+ description?: string;
57
+ }>;
58
+ }
59
+
60
+ // ── Plugin Factory ───────────────────────────────────────────────────────────
61
+
62
+ /**
63
+ * Create a plugin with type-safe tool definitions.
64
+ */
65
+ export function createPlugin(definition: PluginDefinition): PluginDefinition {
66
+ return {
67
+ version: '1.0.0',
68
+ ...definition,
69
+ };
70
+ }
71
+
72
+ // ── Tool Helpers ─────────────────────────────────────────────────────────────
73
+
74
+ /**
75
+ * Create a tool definition with Zod-validated input.
76
+ */
77
+ export function createTool<TInput>(tool: PluginToolDefinition<TInput>): PluginToolDefinition<TInput> {
78
+ return tool;
79
+ }
80
+
81
+ // ── Testing Utilities ────────────────────────────────────────────────────────
82
+
83
+ export interface TestResult {
84
+ tool: string;
85
+ input: unknown;
86
+ output: unknown;
87
+ success: boolean;
88
+ error?: string;
89
+ latencyMs: number;
90
+ }
91
+
92
+ /**
93
+ * Test a plugin's tools with mocked inputs.
94
+ */
95
+ export async function testPlugin(
96
+ plugin: PluginDefinition,
97
+ tests: Array<{ tool: string; input: Record<string, unknown>; expectedError?: string }>,
98
+ ): Promise<TestResult[]> {
99
+ const results: TestResult[] = [];
100
+
101
+ for (const test of tests) {
102
+ const toolDef = plugin.tools.find((t) => t.name === test.tool);
103
+ if (!toolDef) {
104
+ results.push({
105
+ tool: test.tool,
106
+ input: test.input,
107
+ output: null,
108
+ success: false,
109
+ error: `Tool "${test.tool}" not found in plugin "${plugin.name}"`,
110
+ latencyMs: 0,
111
+ });
112
+ continue;
113
+ }
114
+
115
+ const start = Date.now();
116
+ try {
117
+ // Validate input
118
+ const validated = toolDef.input.parse(test.input);
119
+ const output = await toolDef.handler(validated);
120
+ results.push({
121
+ tool: test.tool,
122
+ input: test.input,
123
+ output,
124
+ success: true,
125
+ latencyMs: Date.now() - start,
126
+ });
127
+ } catch (err) {
128
+ const message = err instanceof Error ? err.message : String(err);
129
+ if (test.expectedError && message.includes(test.expectedError)) {
130
+ results.push({
131
+ tool: test.tool,
132
+ input: test.input,
133
+ output: null,
134
+ success: true, // Expected error = test passed
135
+ latencyMs: Date.now() - start,
136
+ });
137
+ } else {
138
+ results.push({
139
+ tool: test.tool,
140
+ input: test.input,
141
+ output: null,
142
+ success: false,
143
+ error: message,
144
+ latencyMs: Date.now() - start,
145
+ });
146
+ }
147
+ }
148
+ }
149
+
150
+ return results;
151
+ }
152
+
153
+ /**
154
+ * Generate an MCP-compatible inputSchema from a Zod schema.
155
+ */
156
+ export function zodToJsonSchema(schema: z.ZodType): Record<string, unknown> {
157
+ // Simplified Zod → JSON Schema conversion
158
+ if (schema instanceof z.ZodObject) {
159
+ const shape = (schema as z.ZodObject<Record<string, z.ZodType>>).shape;
160
+ const properties: Record<string, unknown> = {};
161
+ const required: string[] = [];
162
+
163
+ for (const [key, field] of Object.entries(shape)) {
164
+ if (!(field instanceof z.ZodOptional)) {
165
+ required.push(key);
166
+ }
167
+ properties[key] = zodFieldSchema(field);
168
+ }
169
+
170
+ return {
171
+ type: 'object',
172
+ properties,
173
+ required: required.length > 0 ? required : undefined,
174
+ };
175
+ }
176
+
177
+ return { type: 'object', properties: {} };
178
+ }
179
+
180
+ function zodFieldSchema(field: z.ZodType): Record<string, unknown> {
181
+ if (field instanceof z.ZodString) return { type: 'string' };
182
+ if (field instanceof z.ZodNumber) return { type: 'number' };
183
+ if (field instanceof z.ZodBoolean) return { type: 'boolean' };
184
+ if (field instanceof z.ZodArray) return { type: 'array', items: { type: 'string' } };
185
+ if (field instanceof z.ZodOptional) return zodFieldSchema(field.unwrap());
186
+ if (field instanceof z.ZodEnum) return { type: 'string', enum: field._def.values };
187
+ return { type: 'string' };
188
+ }
189
+
190
+ // Re-export Zod for convenience
191
+ export { z };
package/sdks/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # Conductor SDKs
2
+
3
+ Official SDKs for integrating with Conductor from any language.
4
+
5
+ | Language | Package | Status |
6
+ |----------|---------|--------|
7
+ | **TypeScript** | `@conductor/cli` | ✅ Production |
8
+ | **TypeScript Plugin SDK** | `@conductor/plugin-sdk` | ✅ Production |
9
+ | **Python** | `conductor-python` | 🚧 Starter |
10
+ | **Go** | `go-conductor` | 🚧 Starter |
11
+ | **Rust** | `conductor-rs` | 🚧 Starter |
12
+ | **Java** | `conductor-java` | 🚧 Starter |
13
+ | **Ruby** | `conductor-ruby` | 🚧 Starter |
14
+ | **PHP** | `conductor-php` | 🚧 Starter |
15
+ | **C#** | `Conductor.NET` | 🚧 Starter |
16
+ | **Swift** | `ConductorSwift` | 🚧 Starter |
17
+
18
+ ## Quick Start (Any Language)
19
+
20
+ All SDKs connect to the Conductor MCP server. The simplest integration:
21
+
22
+ ```
23
+ conductor mcp start
24
+ ```
25
+
26
+ Then use the SDK to call tools programmatically.