@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,275 @@
1
+ /**
2
+ * Conductor Error Codes
3
+ *
4
+ * Every error in Conductor has a unique code, clear message, and actionable fix.
5
+ * Pattern: COND-{CATEGORY}-{NUMBER}
6
+ *
7
+ * Categories:
8
+ * AUTH - Authentication/authorization errors
9
+ * NET - Network/connectivity errors
10
+ * SEC - Security/validation errors
11
+ * CFG - Configuration errors
12
+ * MCP - MCP protocol errors
13
+ * PLG - Plugin errors
14
+ * DB - Database errors
15
+ * SYS - System/infrastructure errors
16
+ */
17
+
18
+ export interface ErrorDefinition {
19
+ code: string;
20
+ message: string;
21
+ fix?: string;
22
+ details?: Record<string, unknown>;
23
+ }
24
+
25
+ export class ConductorError extends Error {
26
+ code: string;
27
+ fix?: string;
28
+ details?: Record<string, unknown>;
29
+
30
+ constructor(error: { code: string; message: string; fix?: string; details?: Record<string, unknown> }) {
31
+ super(error.message);
32
+ this.name = 'ConductorError';
33
+ this.code = error.code;
34
+ this.fix = error.fix;
35
+ this.details = error.details;
36
+ }
37
+
38
+ toJSON(): { code: string; message: string; fix?: string; details?: Record<string, unknown> } {
39
+ return {
40
+ code: this.code,
41
+ message: this.message,
42
+ fix: this.fix,
43
+ details: this.details,
44
+ };
45
+ }
46
+ }
47
+
48
+ // ── Authentication Errors (AUTH-001 to AUTH-099) ─────────────────────────────
49
+
50
+ export const ERRORS = {
51
+ // Auth
52
+ AUTH_TOKEN_MISSING: {
53
+ code: 'COND-AUTH-001',
54
+ message: 'Authentication token not provided.',
55
+ fix: 'Include Authorization: Bearer <token> header or add ?token=<token> to query params.',
56
+ },
57
+ AUTH_TOKEN_INVALID: {
58
+ code: 'COND-AUTH-002',
59
+ message: 'Invalid authentication token.',
60
+ fix: 'Regenerate your token with: conductor auth generate',
61
+ },
62
+ AUTH_GITHUB_TOKEN_MISSING: {
63
+ code: 'COND-AUTH-003',
64
+ message: 'GitHub token not configured.',
65
+ fix: 'Create a PAT at https://github.com/settings/tokens then run: conductor plugins config github token YOUR_TOKEN',
66
+ },
67
+ AUTH_SLACK_TOKEN_MISSING: {
68
+ code: 'COND-AUTH-004',
69
+ message: 'Slack bot token not configured.',
70
+ fix: 'Create a Slack app at https://api.slack.com/apps then run: conductor plugins config slack bot_token xoxb-...',
71
+ },
72
+ AUTH_NOTION_TOKEN_MISSING: {
73
+ code: 'COND-AUTH-005',
74
+ message: 'Notion API key not configured.',
75
+ fix: 'Create an integration at https://www.notion.so/my-integrations then run: conductor plugins config notion api_key YOUR_KEY',
76
+ },
77
+ AUTH_GOOGLE_OAUTH_MISSING: {
78
+ code: 'COND-AUTH-006',
79
+ message: 'Google OAuth not configured.',
80
+ fix: 'Run: conductor auth google',
81
+ },
82
+ AUTH_SPOTIFY_TOKEN_MISSING: {
83
+ code: 'COND-AUTH-007',
84
+ message: 'Spotify credentials not configured.',
85
+ fix: 'Create an app at https://developer.spotify.com/dashboard then run: conductor plugins config spotify client_id YOUR_ID',
86
+ },
87
+ AUTH_VERCEL_TOKEN_MISSING: {
88
+ code: 'COND-AUTH-008',
89
+ message: 'Vercel API token not configured.',
90
+ fix: 'Create a token at https://vercel.com/account/tokens then run: conductor plugins config vercel token YOUR_TOKEN',
91
+ },
92
+ AUTH_N8N_CREDENTIALS_MISSING: {
93
+ code: 'COND-AUTH-009',
94
+ message: 'n8n credentials not configured.',
95
+ fix: 'Run: conductor plugins config n8n api_key YOUR_KEY && conductor plugins config n8n base_url https://your-n8n.com',
96
+ },
97
+ AUTH_X_TOKEN_MISSING: {
98
+ code: 'COND-AUTH-010',
99
+ message: 'X (Twitter) API credentials not configured.',
100
+ fix: 'Create an app at https://developer.x.com then run: conductor plugins config x api_key YOUR_KEY',
101
+ },
102
+ AUTH_HOMEKIT_CREDENTIALS_MISSING: {
103
+ code: 'COND-AUTH-011',
104
+ message: 'Homebridge credentials not configured.',
105
+ fix: 'Run: conductor plugins config homekit base_url http://homebridge.local:8581',
106
+ },
107
+ AUTH_TODOIST_TOKEN_MISSING: {
108
+ code: 'COND-AUTH-012',
109
+ message: 'Todoist API token not configured.',
110
+ fix: 'Get your token from https://app.todoist.com/app/settings/integrations/developer then run: conductor plugins config todoist api_token YOUR_TOKEN',
111
+ },
112
+ AUTH_DATABASE_URL_MISSING: {
113
+ code: 'COND-AUTH-013',
114
+ message: 'Database connection URL not configured.',
115
+ fix: 'Run: conductor plugins config database postgres_url postgresql://user:pass@host:5432/db',
116
+ },
117
+
118
+ // Network
119
+ NET_CONNECTION_REFUSED: {
120
+ code: 'COND-NET-001',
121
+ message: 'Connection refused. The target service may be down or unreachable.',
122
+ fix: 'Check that the service is running and accessible from this machine.',
123
+ },
124
+ NET_TIMEOUT: {
125
+ code: 'COND-NET-002',
126
+ message: 'Request timed out after {timeout}ms.',
127
+ fix: 'Check your network connection and try again. Increase timeout if needed.',
128
+ },
129
+ NET_DNS_FAILURE: {
130
+ code: 'COND-NET-003',
131
+ message: 'DNS resolution failed for {hostname}.',
132
+ fix: 'Check the hostname and your DNS settings.',
133
+ },
134
+ NET_RATE_LIMITED: {
135
+ code: 'COND-NET-004',
136
+ message: 'Rate limited by {service}. Too many requests.',
137
+ fix: 'Wait {retryAfter} seconds before trying again.',
138
+ },
139
+
140
+ // Security
141
+ SEC_COMMAND_BLOCKED: {
142
+ code: 'COND-SEC-001',
143
+ message: 'Command "{command}" is not in the safe command whitelist.',
144
+ fix: `Allowed commands: ls, cat, head, tail, wc, grep, find, stat, file, pwd, whoami, date, uptime, df, du, free, top, git, node, npm, pnpm, yarn, python, python3, pip, pip3, make, cmake, cargo, go, rustc, gcc, clang, curl, wget, ssh, scp, rsync, docker, docker-compose, kubectl, helm, terraform, ansible, vault, psql, mysql, mongosh, redis-cli, jq, yq, sed, awk, cut, sort, uniq, tr, xargs, zip, unzip, tar, gzip, chmod, chown, mkdir, rmdir, cp, mv, rm, touch, ln, diff, patch, md5sum, sha256sum, sha1sum`,
145
+ },
146
+ SEC_PATH_TRAVERSAL: {
147
+ code: 'COND-SEC-002',
148
+ message: 'Path traversal detected: {path}. Paths must be within the current working directory.',
149
+ fix: 'Use a path within the current directory or specify an absolute path that does not traverse outside the workspace.',
150
+ },
151
+ SEC_DANGEROUS_PATTERN: {
152
+ code: 'COND-SEC-003',
153
+ message: 'Command matches a dangerous pattern and has been blocked.',
154
+ fix: 'This command is not allowed for security reasons. Contact an administrator if you believe this is a false positive.',
155
+ },
156
+ SEC_INVALID_INPUT: {
157
+ code: 'COND-SEC-004',
158
+ message: 'Invalid input for tool "{tool}": {errors}',
159
+ fix: 'Check the tool documentation for the correct input schema.',
160
+ },
161
+
162
+ // Configuration
163
+ CFG_KEY_NOT_FOUND: {
164
+ code: 'COND-CFG-001',
165
+ message: 'Configuration key "{key}" not found.',
166
+ fix: 'Check available keys with: conductor config list',
167
+ },
168
+ CFG_INVALID_VALUE: {
169
+ code: 'COND-CFG-002',
170
+ message: 'Invalid value for configuration key "{key}".',
171
+ fix: 'Check the expected format with: conductor config describe {key}',
172
+ },
173
+ CFG_CORRUPTED: {
174
+ code: 'COND-CFG-003',
175
+ message: 'Configuration file is corrupted or invalid JSON.',
176
+ fix: 'Restore from backup or run: conductor init to create a new config.',
177
+ },
178
+
179
+ // MCP
180
+ MCP_TOOL_NOT_FOUND: {
181
+ code: 'COND-MCP-001',
182
+ message: 'Tool "{tool}" not found.',
183
+ fix: 'Run conductor_tools_list to see available tools. Enable the plugin with: conductor plugins enable {plugin}',
184
+ },
185
+ MCP_CIRCUIT_OPEN: {
186
+ code: 'COND-MCP-002',
187
+ message: 'Service unavailable: tool "{tool}" is temporarily disabled due to repeated failures.',
188
+ fix: 'Wait {retryAfter} seconds and try again. Check the health status with: conductor health',
189
+ },
190
+ MCP_SERVER_ERROR: {
191
+ code: 'COND-MCP-003',
192
+ message: 'MCP server error: {error}',
193
+ fix: 'Check the server logs and try again. Restart with: conductor mcp restart',
194
+ },
195
+
196
+ // Plugin
197
+ PLG_NOT_FOUND: {
198
+ code: 'COND-PLG-001',
199
+ message: 'Plugin "{plugin}" not found.',
200
+ fix: 'Run: conductor plugins list to see available plugins.',
201
+ },
202
+ PLG_NOT_CONFIGURED: {
203
+ code: 'COND-PLG-002',
204
+ message: 'Plugin "{plugin}" is not configured.',
205
+ fix: 'Run: conductor plugins configure {plugin}',
206
+ },
207
+ PLG_INITIALIZATION_FAILED: {
208
+ code: 'COND-PLG-003',
209
+ message: 'Failed to initialize plugin "{plugin}": {error}',
210
+ fix: 'Check the plugin documentation and ensure all required dependencies are installed.',
211
+ },
212
+ PLG_TOOL_FAILED: {
213
+ code: 'COND-PLG-004',
214
+ message: 'Tool "{tool}" in plugin "{plugin}" failed: {error}',
215
+ fix: 'Check the tool documentation and try again.',
216
+ },
217
+
218
+ // Database
219
+ DB_CONNECTION_FAILED: {
220
+ code: 'COND-DB-001',
221
+ message: 'Failed to connect to database: {error}',
222
+ fix: 'Check the connection URL and ensure the database is running.',
223
+ },
224
+ DB_QUERY_FAILED: {
225
+ code: 'COND-DB-002',
226
+ message: 'Database query failed: {error}',
227
+ fix: 'Check the query syntax and try again.',
228
+ },
229
+ DB_MIGRATION_FAILED: {
230
+ code: 'COND-DB-003',
231
+ message: 'Database migration failed: {error}',
232
+ fix: 'Check the migration files and try again.',
233
+ },
234
+
235
+ // System
236
+ SYS_DISK_FULL: {
237
+ code: 'COND-SYS-001',
238
+ message: 'Disk space is critically low ({percent}% used).',
239
+ fix: 'Free up disk space or expand the volume.',
240
+ },
241
+ SYS_MEMORY_LOW: {
242
+ code: 'COND-SYS-002',
243
+ message: 'Memory usage is critically high ({percent}% used).',
244
+ fix: 'Free up memory or add more RAM.',
245
+ },
246
+ SYS_SERVICE_DOWN: {
247
+ code: 'COND-SYS-003',
248
+ message: 'Service "{service}" is not running.',
249
+ fix: 'Start the service with: systemctl start {service} or docker start {service}',
250
+ },
251
+ };
252
+
253
+ // ── Error Factory ─────────────────────────────────────────────────────────────
254
+
255
+ /**
256
+ * Create a ConductorError with interpolated values.
257
+ */
258
+ export function createError(errorDef: ConductorError, variables?: Record<string, string | number>): ConductorError {
259
+ let message = errorDef.message;
260
+ let fix = errorDef.fix;
261
+
262
+ if (variables) {
263
+ for (const [key, value] of Object.entries(variables)) {
264
+ message = message.replace(new RegExp(`\\{${key}\\}`, 'g'), String(value));
265
+ if (fix) fix = fix.replace(new RegExp(`\\{${key}\\}`, 'g'), String(value));
266
+ }
267
+ }
268
+
269
+ return new ConductorError({
270
+ code: errorDef.code,
271
+ message,
272
+ fix,
273
+ details: errorDef.details,
274
+ });
275
+ }
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Health Check System — Stripe-grade service health monitoring.
3
+ *
4
+ * Reports the status of every plugin, dependency, and subsystem.
5
+ * Designed for load balancers, orchestrators, and monitoring dashboards.
6
+ *
7
+ * Endpoints:
8
+ * GET /health — quick check (status: ok/degraded/down)
9
+ * GET /health/detailed — full breakdown with per-plugin status
10
+ * GET /health/ready — readiness probe (can accept traffic?)
11
+ */
12
+
13
+ import type { CircuitBreaker } from './circuit-breaker.js';
14
+
15
+ export interface HealthComponent {
16
+ name: string;
17
+ status: 'ok' | 'degraded' | 'down';
18
+ message?: string;
19
+ latencyMs?: number;
20
+ }
21
+
22
+ export interface HealthReport {
23
+ status: 'ok' | 'degraded' | 'down';
24
+ version: string;
25
+ uptime: number;
26
+ timestamp: string;
27
+ components: HealthComponent[];
28
+ metrics?: {
29
+ totalToolCalls: number;
30
+ failedToolCalls: number;
31
+ avgLatencyMs: number;
32
+ activeWebhooks: number;
33
+ openCircuits: number;
34
+ };
35
+ }
36
+
37
+ const startTime = Date.now();
38
+
39
+ export class HealthChecker {
40
+ private components: Map<string, () => Promise<HealthComponent>> = new Map();
41
+ private circuitBreakers: Map<string, CircuitBreaker> = new Map();
42
+ private metrics: {
43
+ totalToolCalls: number;
44
+ failedToolCalls: number;
45
+ totalLatencyMs: number;
46
+ activeWebhooks: number;
47
+ } = { totalToolCalls: 0, failedToolCalls: 0, totalLatencyMs: 0, activeWebhooks: 0 };
48
+
49
+ /**
50
+ * Register a health check for a component.
51
+ */
52
+ register(name: string, check: () => Promise<HealthComponent>): void {
53
+ this.components.set(name, check);
54
+ }
55
+
56
+ /**
57
+ * Register a circuit breaker for monitoring.
58
+ */
59
+ registerCircuitBreaker(name: string, breaker: CircuitBreaker): void {
60
+ this.circuitBreakers.set(name, breaker);
61
+ }
62
+
63
+ /**
64
+ * Record a tool call for metrics.
65
+ */
66
+ recordToolCall(success: boolean, latencyMs: number): void {
67
+ this.metrics.totalToolCalls++;
68
+ if (!success) this.metrics.failedToolCalls++;
69
+ this.metrics.totalLatencyMs += latencyMs;
70
+ }
71
+
72
+ /**
73
+ * Update webhook count.
74
+ */
75
+ setWebhookCount(count: number): void {
76
+ this.metrics.activeWebhooks = count;
77
+ }
78
+
79
+ /**
80
+ * Get a quick health status.
81
+ */
82
+ async check(): Promise<{ status: 'ok' | 'degraded' | 'down'; version: string }> {
83
+ const report = await this.detailed();
84
+ return { status: report.status, version: report.version };
85
+ }
86
+
87
+ /**
88
+ * Get a detailed health report.
89
+ */
90
+ async detailed(version = '1.0.0'): Promise<HealthReport> {
91
+ const components: HealthComponent[] = [];
92
+
93
+ // Run all registered health checks in parallel
94
+ const checks = Array.from(this.components.entries()).map(async ([, check]) => {
95
+ try {
96
+ return await check();
97
+ } catch (err) {
98
+ const message = err instanceof Error ? err.message : String(err);
99
+ return { name: 'unknown', status: 'down' as const, message };
100
+ }
101
+ });
102
+
103
+ const results = await Promise.allSettled(checks);
104
+ for (const result of results) {
105
+ if (result.status === 'fulfilled') {
106
+ components.push(result.value);
107
+ }
108
+ }
109
+
110
+ // Check circuit breakers
111
+ let openCircuits = 0;
112
+ for (const [name, breaker] of this.circuitBreakers) {
113
+ const state = breaker.getState();
114
+ if (state === 'open') openCircuits++;
115
+ components.push({
116
+ name: `circuit:${name}`,
117
+ status: state === 'closed' ? 'ok' : state === 'half_open' ? 'degraded' : 'down',
118
+ message: state === 'open' ? 'Circuit breaker open — service unavailable' : undefined,
119
+ });
120
+ }
121
+
122
+ // Determine overall status
123
+ const hasDown = components.some((c) => c.status === 'down');
124
+ const hasDegraded = components.some((c) => c.status === 'degraded');
125
+ const status = hasDown ? 'down' : hasDegraded ? 'degraded' : 'ok';
126
+
127
+ const avgLatency =
128
+ this.metrics.totalToolCalls > 0 ? Math.round(this.metrics.totalLatencyMs / this.metrics.totalToolCalls) : 0;
129
+
130
+ return {
131
+ status,
132
+ version,
133
+ uptime: Math.round((Date.now() - startTime) / 1000),
134
+ timestamp: new Date().toISOString(),
135
+ components,
136
+ metrics: {
137
+ totalToolCalls: this.metrics.totalToolCalls,
138
+ failedToolCalls: this.metrics.failedToolCalls,
139
+ avgLatencyMs: avgLatency,
140
+ activeWebhooks: this.metrics.activeWebhooks,
141
+ openCircuits,
142
+ },
143
+ };
144
+ }
145
+
146
+ /**
147
+ * Readiness probe — can we accept traffic?
148
+ */
149
+ async ready(): Promise<{ ready: boolean; reason?: string }> {
150
+ const report = await this.detailed();
151
+
152
+ if (report.status === 'down') {
153
+ const downComponents = report.components.filter((c) => c.status === 'down');
154
+ return { ready: false, reason: `Critical components down: ${downComponents.map((c) => c.name).join(', ')}` };
155
+ }
156
+
157
+ return { ready: true };
158
+ }
159
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Conductor Core Interfaces
3
+ *
4
+ * Narrow interfaces that break the God-object dependency.
5
+ * Consumers should depend on these interfaces, not on concrete classes.
6
+ */
7
+
8
+ import { AIMessage } from '../ai/base.js';
9
+
10
+ // ── IConfig ───────────────────────────────────────────────────────────────────
11
+
12
+ export interface IConfig {
13
+ /** Read a value by dot-notation key, e.g. "ai.provider" */
14
+ get<T>(key: string): T | undefined;
15
+ /** Persist a value by dot-notation key */
16
+ set(key: string, value: unknown): Promise<void>;
17
+ /** Absolute path to the config directory (~/.conductor by default) */
18
+ getConfigDir(): string;
19
+ /** The full config object as a plain record */
20
+ getConfig(): Record<string, unknown>;
21
+ }
22
+
23
+ // ── IDatabase ─────────────────────────────────────────────────────────────────
24
+
25
+ export interface IDatabase {
26
+ /** Persist a full AIMessage for a user */
27
+ addMessage(userId: string, message: AIMessage): Promise<void>;
28
+ /** Retrieve conversation history for a user */
29
+ getHistory(userId: string, limit?: number): Promise<AIMessage[]>;
30
+ /** Full-text search across a user's messages */
31
+ searchMessages(userId: string, query: string, limit?: number): Promise<AIMessage[]>;
32
+ /** Record an activity log entry */
33
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
+ logActivity(userId: string, action: string, plugin?: string, details?: string, success?: boolean): Promise<void>;
35
+ /** Recent activity entries for the dashboard / proactive context */
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ getRecentActivity(limit?: number): Promise<any[]>;
38
+ }
39
+
40
+ // ── IPluginRegistry ───────────────────────────────────────────────────────────
41
+
42
+ import { Plugin } from '../plugins/manager.js';
43
+
44
+ export interface IPluginRegistry {
45
+ getPlugin(name: string): Promise<Plugin | undefined>;
46
+ listPlugins(): Array<{ name: string; enabled: boolean; description: string; version: string }>;
47
+ getEnabledTools(): Promise<import('../plugins/manager.js').PluginTool[]>;
48
+ isPluginEnabled(name: string): boolean;
49
+ enablePlugin(name: string): Promise<void>;
50
+ disablePlugin(name: string): Promise<void>;
51
+ }
52
+
53
+ // ── ToolContext ───────────────────────────────────────────────────────────────
54
+
55
+ export interface ToolContext {
56
+ /** User ID of the person running the conversation (Telegram ID, 'system', etc.) */
57
+ userId: string;
58
+ /** Channel the conversation is happening in: 'telegram', 'slack', 'cli', 'mcp' */
59
+ channel: string;
60
+ /** Config interface for tool handlers that need to read settings */
61
+ conductorConfig: IConfig;
62
+ }
63
+
64
+ // ── ConductorNotification ─────────────────────────────────────────────────────
65
+
66
+ /**
67
+ * Structured notification type for proactive cycle alerts.
68
+ * Replaces hard-coded Telegram Markdown strings so each runtime can format
69
+ * appropriately (Telegram Markdown, Slack Block Kit, plain text, etc.).
70
+ */
71
+ export interface ConductorNotification {
72
+ title: string;
73
+ body: string;
74
+ codeBlock?: string;
75
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Structured logging with Pino.
3
+ *
4
+ * All logs go to stderr (stdout is reserved for MCP protocol).
5
+ * In production, logs are JSON-structured for ingestion by log aggregators.
6
+ * In development, logs are pretty-printed for readability.
7
+ */
8
+
9
+ import pino from 'pino';
10
+
11
+ const isDev = process.env.NODE_ENV !== 'production';
12
+
13
+ export const logger = pino({
14
+ level: process.env.LOG_LEVEL ?? (isDev ? 'debug' : 'info'),
15
+ transport: isDev
16
+ ? {
17
+ target: 'pino-pretty',
18
+ options: {
19
+ colorize: true,
20
+ translateTime: 'SYS:standard',
21
+ ignore: 'pid,hostname',
22
+ },
23
+ }
24
+ : undefined,
25
+ });
26
+
27
+ /**
28
+ * Create a child logger with a specific context.
29
+ * Use this for module-specific logging.
30
+ */
31
+ export function childLogger(context: string) {
32
+ return logger.child({ context });
33
+ }