mcp-agent-foundry 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 (315) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +477 -0
  3. package/dist/cli/install-skills.d.ts +11 -0
  4. package/dist/cli/install-skills.d.ts.map +1 -0
  5. package/dist/cli/install-skills.js +143 -0
  6. package/dist/cli/install-skills.js.map +1 -0
  7. package/dist/cli/recovery-commands.d.ts +41 -0
  8. package/dist/cli/recovery-commands.d.ts.map +1 -0
  9. package/dist/cli/recovery-commands.js +241 -0
  10. package/dist/cli/recovery-commands.js.map +1 -0
  11. package/dist/cli/setup-wizard.d.ts +25 -0
  12. package/dist/cli/setup-wizard.d.ts.map +1 -0
  13. package/dist/cli/setup-wizard.js +1417 -0
  14. package/dist/cli/setup-wizard.js.map +1 -0
  15. package/dist/cli/test-connection.d.ts +45 -0
  16. package/dist/cli/test-connection.d.ts.map +1 -0
  17. package/dist/cli/test-connection.js +317 -0
  18. package/dist/cli/test-connection.js.map +1 -0
  19. package/dist/cli.d.ts +75 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +704 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config/defaults.d.ts +57 -0
  24. package/dist/config/defaults.d.ts.map +1 -0
  25. package/dist/config/defaults.js +99 -0
  26. package/dist/config/defaults.js.map +1 -0
  27. package/dist/config/index.d.ts +14 -0
  28. package/dist/config/index.d.ts.map +1 -0
  29. package/dist/config/index.js +22 -0
  30. package/dist/config/index.js.map +1 -0
  31. package/dist/config/manager.d.ts +184 -0
  32. package/dist/config/manager.d.ts.map +1 -0
  33. package/dist/config/manager.js +347 -0
  34. package/dist/config/manager.js.map +1 -0
  35. package/dist/config/merger.d.ts +76 -0
  36. package/dist/config/merger.d.ts.map +1 -0
  37. package/dist/config/merger.js +189 -0
  38. package/dist/config/merger.js.map +1 -0
  39. package/dist/config/schema.d.ts +20 -0
  40. package/dist/config/schema.d.ts.map +1 -0
  41. package/dist/config/schema.js +20 -0
  42. package/dist/config/schema.js.map +1 -0
  43. package/dist/config/validator.d.ts +254 -0
  44. package/dist/config/validator.d.ts.map +1 -0
  45. package/dist/config/validator.js +363 -0
  46. package/dist/config/validator.js.map +1 -0
  47. package/dist/config/worktree-defaults.d.ts +23 -0
  48. package/dist/config/worktree-defaults.d.ts.map +1 -0
  49. package/dist/config/worktree-defaults.js +78 -0
  50. package/dist/config/worktree-defaults.js.map +1 -0
  51. package/dist/index.d.ts +8 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +44 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/mcp/tools/compare-agents.d.ts +25 -0
  56. package/dist/mcp/tools/compare-agents.d.ts.map +1 -0
  57. package/dist/mcp/tools/compare-agents.js +177 -0
  58. package/dist/mcp/tools/compare-agents.js.map +1 -0
  59. package/dist/mcp/tools/critique-plan.d.ts +26 -0
  60. package/dist/mcp/tools/critique-plan.d.ts.map +1 -0
  61. package/dist/mcp/tools/critique-plan.js +162 -0
  62. package/dist/mcp/tools/critique-plan.js.map +1 -0
  63. package/dist/mcp/tools/design-feedback.d.ts +26 -0
  64. package/dist/mcp/tools/design-feedback.d.ts.map +1 -0
  65. package/dist/mcp/tools/design-feedback.js +216 -0
  66. package/dist/mcp/tools/design-feedback.js.map +1 -0
  67. package/dist/mcp/tools/index.d.ts +50 -0
  68. package/dist/mcp/tools/index.d.ts.map +1 -0
  69. package/dist/mcp/tools/index.js +191 -0
  70. package/dist/mcp/tools/index.js.map +1 -0
  71. package/dist/mcp/tools/invoke-agent.d.ts +25 -0
  72. package/dist/mcp/tools/invoke-agent.d.ts.map +1 -0
  73. package/dist/mcp/tools/invoke-agent.js +141 -0
  74. package/dist/mcp/tools/invoke-agent.js.map +1 -0
  75. package/dist/mcp/tools/review-code.d.ts +25 -0
  76. package/dist/mcp/tools/review-code.d.ts.map +1 -0
  77. package/dist/mcp/tools/review-code.js +170 -0
  78. package/dist/mcp/tools/review-code.js.map +1 -0
  79. package/dist/mcp/tools/tasks/claim-next-task.d.ts +22 -0
  80. package/dist/mcp/tools/tasks/claim-next-task.d.ts.map +1 -0
  81. package/dist/mcp/tools/tasks/claim-next-task.js +203 -0
  82. package/dist/mcp/tools/tasks/claim-next-task.js.map +1 -0
  83. package/dist/mcp/tools/tasks/create-routed-task.d.ts +17 -0
  84. package/dist/mcp/tools/tasks/create-routed-task.d.ts.map +1 -0
  85. package/dist/mcp/tools/tasks/create-routed-task.js +178 -0
  86. package/dist/mcp/tools/tasks/create-routed-task.js.map +1 -0
  87. package/dist/mcp/tools/tasks/execute-pipeline.d.ts +22 -0
  88. package/dist/mcp/tools/tasks/execute-pipeline.d.ts.map +1 -0
  89. package/dist/mcp/tools/tasks/execute-pipeline.js +401 -0
  90. package/dist/mcp/tools/tasks/execute-pipeline.js.map +1 -0
  91. package/dist/mcp/tools/tasks/execute-task.d.ts +32 -0
  92. package/dist/mcp/tools/tasks/execute-task.d.ts.map +1 -0
  93. package/dist/mcp/tools/tasks/execute-task.js +284 -0
  94. package/dist/mcp/tools/tasks/execute-task.js.map +1 -0
  95. package/dist/mcp/tools/tasks/get-pipeline-status.d.ts +26 -0
  96. package/dist/mcp/tools/tasks/get-pipeline-status.d.ts.map +1 -0
  97. package/dist/mcp/tools/tasks/get-pipeline-status.js +460 -0
  98. package/dist/mcp/tools/tasks/get-pipeline-status.js.map +1 -0
  99. package/dist/mcp/tools/tasks/index.d.ts +36 -0
  100. package/dist/mcp/tools/tasks/index.d.ts.map +1 -0
  101. package/dist/mcp/tools/tasks/index.js +66 -0
  102. package/dist/mcp/tools/tasks/index.js.map +1 -0
  103. package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts +17 -0
  104. package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts.map +1 -0
  105. package/dist/mcp/tools/worktree/cleanup-worktrees.js +147 -0
  106. package/dist/mcp/tools/worktree/cleanup-worktrees.js.map +1 -0
  107. package/dist/mcp/tools/worktree/get-worktree-status.d.ts +17 -0
  108. package/dist/mcp/tools/worktree/get-worktree-status.d.ts.map +1 -0
  109. package/dist/mcp/tools/worktree/get-worktree-status.js +123 -0
  110. package/dist/mcp/tools/worktree/get-worktree-status.js.map +1 -0
  111. package/dist/mcp/tools/worktree/index.d.ts +41 -0
  112. package/dist/mcp/tools/worktree/index.d.ts.map +1 -0
  113. package/dist/mcp/tools/worktree/index.js +69 -0
  114. package/dist/mcp/tools/worktree/index.js.map +1 -0
  115. package/dist/mcp/tools/worktree/list-worktrees.d.ts +17 -0
  116. package/dist/mcp/tools/worktree/list-worktrees.d.ts.map +1 -0
  117. package/dist/mcp/tools/worktree/list-worktrees.js +136 -0
  118. package/dist/mcp/tools/worktree/list-worktrees.js.map +1 -0
  119. package/dist/mcp/tools/worktree/resolve-conflicts.d.ts +19 -0
  120. package/dist/mcp/tools/worktree/resolve-conflicts.d.ts.map +1 -0
  121. package/dist/mcp/tools/worktree/resolve-conflicts.js +228 -0
  122. package/dist/mcp/tools/worktree/resolve-conflicts.js.map +1 -0
  123. package/dist/mcp/transport/stdio.d.ts +13 -0
  124. package/dist/mcp/transport/stdio.d.ts.map +1 -0
  125. package/dist/mcp/transport/stdio.js +15 -0
  126. package/dist/mcp/transport/stdio.js.map +1 -0
  127. package/dist/observability/logger.d.ts +137 -0
  128. package/dist/observability/logger.d.ts.map +1 -0
  129. package/dist/observability/logger.js +235 -0
  130. package/dist/observability/logger.js.map +1 -0
  131. package/dist/observability/metrics.d.ts +250 -0
  132. package/dist/observability/metrics.d.ts.map +1 -0
  133. package/dist/observability/metrics.js +364 -0
  134. package/dist/observability/metrics.js.map +1 -0
  135. package/dist/persistence/index.d.ts +9 -0
  136. package/dist/persistence/index.d.ts.map +1 -0
  137. package/dist/persistence/index.js +9 -0
  138. package/dist/persistence/index.js.map +1 -0
  139. package/dist/persistence/state-schema.d.ts +116 -0
  140. package/dist/persistence/state-schema.d.ts.map +1 -0
  141. package/dist/persistence/state-schema.js +28 -0
  142. package/dist/persistence/state-schema.js.map +1 -0
  143. package/dist/persistence/state-store.d.ts +111 -0
  144. package/dist/persistence/state-store.d.ts.map +1 -0
  145. package/dist/persistence/state-store.js +291 -0
  146. package/dist/persistence/state-store.js.map +1 -0
  147. package/dist/providers/anthropic.d.ts +164 -0
  148. package/dist/providers/anthropic.d.ts.map +1 -0
  149. package/dist/providers/anthropic.js +500 -0
  150. package/dist/providers/anthropic.js.map +1 -0
  151. package/dist/providers/base.d.ts +151 -0
  152. package/dist/providers/base.d.ts.map +1 -0
  153. package/dist/providers/base.js +227 -0
  154. package/dist/providers/base.js.map +1 -0
  155. package/dist/providers/gemini.d.ts +85 -0
  156. package/dist/providers/gemini.d.ts.map +1 -0
  157. package/dist/providers/gemini.js +414 -0
  158. package/dist/providers/gemini.js.map +1 -0
  159. package/dist/providers/kimi.d.ts +19 -0
  160. package/dist/providers/kimi.d.ts.map +1 -0
  161. package/dist/providers/kimi.js +20 -0
  162. package/dist/providers/kimi.js.map +1 -0
  163. package/dist/providers/manager.d.ts +160 -0
  164. package/dist/providers/manager.d.ts.map +1 -0
  165. package/dist/providers/manager.js +264 -0
  166. package/dist/providers/manager.js.map +1 -0
  167. package/dist/providers/ollama.d.ts +83 -0
  168. package/dist/providers/ollama.d.ts.map +1 -0
  169. package/dist/providers/ollama.js +453 -0
  170. package/dist/providers/ollama.js.map +1 -0
  171. package/dist/providers/openai.d.ts +96 -0
  172. package/dist/providers/openai.d.ts.map +1 -0
  173. package/dist/providers/openai.js +457 -0
  174. package/dist/providers/openai.js.map +1 -0
  175. package/dist/providers/zai.d.ts +19 -0
  176. package/dist/providers/zai.d.ts.map +1 -0
  177. package/dist/providers/zai.js +20 -0
  178. package/dist/providers/zai.js.map +1 -0
  179. package/dist/router/context-manager.d.ts +2 -0
  180. package/dist/router/context-manager.d.ts.map +1 -0
  181. package/dist/router/context-manager.js +3 -0
  182. package/dist/router/context-manager.js.map +1 -0
  183. package/dist/router/engine.d.ts +169 -0
  184. package/dist/router/engine.d.ts.map +1 -0
  185. package/dist/router/engine.js +435 -0
  186. package/dist/router/engine.js.map +1 -0
  187. package/dist/router/pattern-executor.d.ts +317 -0
  188. package/dist/router/pattern-executor.d.ts.map +1 -0
  189. package/dist/router/pattern-executor.js +571 -0
  190. package/dist/router/pattern-executor.js.map +1 -0
  191. package/dist/router/role-resolver.d.ts +59 -0
  192. package/dist/router/role-resolver.d.ts.map +1 -0
  193. package/dist/router/role-resolver.js +95 -0
  194. package/dist/router/role-resolver.js.map +1 -0
  195. package/dist/server.d.ts +32 -0
  196. package/dist/server.d.ts.map +1 -0
  197. package/dist/server.js +223 -0
  198. package/dist/server.js.map +1 -0
  199. package/dist/startup.d.ts +78 -0
  200. package/dist/startup.d.ts.map +1 -0
  201. package/dist/startup.js +107 -0
  202. package/dist/startup.js.map +1 -0
  203. package/dist/tasks/coordinator.d.ts +141 -0
  204. package/dist/tasks/coordinator.d.ts.map +1 -0
  205. package/dist/tasks/coordinator.js +331 -0
  206. package/dist/tasks/coordinator.js.map +1 -0
  207. package/dist/tasks/index.d.ts +13 -0
  208. package/dist/tasks/index.d.ts.map +1 -0
  209. package/dist/tasks/index.js +13 -0
  210. package/dist/tasks/index.js.map +1 -0
  211. package/dist/tasks/persistent-state-coordinator.d.ts +89 -0
  212. package/dist/tasks/persistent-state-coordinator.d.ts.map +1 -0
  213. package/dist/tasks/persistent-state-coordinator.js +371 -0
  214. package/dist/tasks/persistent-state-coordinator.js.map +1 -0
  215. package/dist/tasks/pipeline-manager.d.ts +103 -0
  216. package/dist/tasks/pipeline-manager.d.ts.map +1 -0
  217. package/dist/tasks/pipeline-manager.js +358 -0
  218. package/dist/tasks/pipeline-manager.js.map +1 -0
  219. package/dist/tasks/state-coordinator.d.ts +79 -0
  220. package/dist/tasks/state-coordinator.d.ts.map +1 -0
  221. package/dist/tasks/state-coordinator.js +200 -0
  222. package/dist/tasks/state-coordinator.js.map +1 -0
  223. package/dist/tasks/worker-mode.d.ts +65 -0
  224. package/dist/tasks/worker-mode.d.ts.map +1 -0
  225. package/dist/tasks/worker-mode.js +208 -0
  226. package/dist/tasks/worker-mode.js.map +1 -0
  227. package/dist/translation/errors.d.ts +203 -0
  228. package/dist/translation/errors.d.ts.map +1 -0
  229. package/dist/translation/errors.js +477 -0
  230. package/dist/translation/errors.js.map +1 -0
  231. package/dist/translation/index.d.ts +12 -0
  232. package/dist/translation/index.d.ts.map +1 -0
  233. package/dist/translation/index.js +32 -0
  234. package/dist/translation/index.js.map +1 -0
  235. package/dist/translation/messages.d.ts +295 -0
  236. package/dist/translation/messages.d.ts.map +1 -0
  237. package/dist/translation/messages.js +557 -0
  238. package/dist/translation/messages.js.map +1 -0
  239. package/dist/translation/streaming.d.ts +226 -0
  240. package/dist/translation/streaming.d.ts.map +1 -0
  241. package/dist/translation/streaming.js +520 -0
  242. package/dist/translation/streaming.js.map +1 -0
  243. package/dist/translation/tools.d.ts +209 -0
  244. package/dist/translation/tools.d.ts.map +1 -0
  245. package/dist/translation/tools.js +331 -0
  246. package/dist/translation/tools.js.map +1 -0
  247. package/dist/types.d.ts +747 -0
  248. package/dist/types.d.ts.map +1 -0
  249. package/dist/types.js +86 -0
  250. package/dist/types.js.map +1 -0
  251. package/dist/utils/circuit-breaker.d.ts +175 -0
  252. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  253. package/dist/utils/circuit-breaker.js +315 -0
  254. package/dist/utils/circuit-breaker.js.map +1 -0
  255. package/dist/utils/env.d.ts +2 -0
  256. package/dist/utils/env.d.ts.map +1 -0
  257. package/dist/utils/env.js +3 -0
  258. package/dist/utils/env.js.map +1 -0
  259. package/dist/utils/git.d.ts +58 -0
  260. package/dist/utils/git.d.ts.map +1 -0
  261. package/dist/utils/git.js +197 -0
  262. package/dist/utils/git.js.map +1 -0
  263. package/dist/utils/index.d.ts +9 -0
  264. package/dist/utils/index.d.ts.map +1 -0
  265. package/dist/utils/index.js +9 -0
  266. package/dist/utils/index.js.map +1 -0
  267. package/dist/utils/merge-ordering.d.ts +45 -0
  268. package/dist/utils/merge-ordering.d.ts.map +1 -0
  269. package/dist/utils/merge-ordering.js +128 -0
  270. package/dist/utils/merge-ordering.js.map +1 -0
  271. package/dist/utils/retry.d.ts +106 -0
  272. package/dist/utils/retry.d.ts.map +1 -0
  273. package/dist/utils/retry.js +188 -0
  274. package/dist/utils/retry.js.map +1 -0
  275. package/dist/worktrees/branch-manager.d.ts +55 -0
  276. package/dist/worktrees/branch-manager.d.ts.map +1 -0
  277. package/dist/worktrees/branch-manager.js +129 -0
  278. package/dist/worktrees/branch-manager.js.map +1 -0
  279. package/dist/worktrees/conflict-handler.d.ts +72 -0
  280. package/dist/worktrees/conflict-handler.d.ts.map +1 -0
  281. package/dist/worktrees/conflict-handler.js +287 -0
  282. package/dist/worktrees/conflict-handler.js.map +1 -0
  283. package/dist/worktrees/conflict-parser.d.ts +28 -0
  284. package/dist/worktrees/conflict-parser.d.ts.map +1 -0
  285. package/dist/worktrees/conflict-parser.js +140 -0
  286. package/dist/worktrees/conflict-parser.js.map +1 -0
  287. package/dist/worktrees/index.d.ts +20 -0
  288. package/dist/worktrees/index.d.ts.map +1 -0
  289. package/dist/worktrees/index.js +20 -0
  290. package/dist/worktrees/index.js.map +1 -0
  291. package/dist/worktrees/instructions.d.ts +20 -0
  292. package/dist/worktrees/instructions.d.ts.map +1 -0
  293. package/dist/worktrees/instructions.js +84 -0
  294. package/dist/worktrees/instructions.js.map +1 -0
  295. package/dist/worktrees/manager.d.ts +76 -0
  296. package/dist/worktrees/manager.d.ts.map +1 -0
  297. package/dist/worktrees/manager.js +277 -0
  298. package/dist/worktrees/manager.js.map +1 -0
  299. package/dist/worktrees/pipeline-merge-orchestrator.d.ts +55 -0
  300. package/dist/worktrees/pipeline-merge-orchestrator.d.ts.map +1 -0
  301. package/dist/worktrees/pipeline-merge-orchestrator.js +221 -0
  302. package/dist/worktrees/pipeline-merge-orchestrator.js.map +1 -0
  303. package/dist/worktrees/pool.d.ts +95 -0
  304. package/dist/worktrees/pool.d.ts.map +1 -0
  305. package/dist/worktrees/pool.js +271 -0
  306. package/dist/worktrees/pool.js.map +1 -0
  307. package/dist/worktrees/recovery.d.ts +94 -0
  308. package/dist/worktrees/recovery.d.ts.map +1 -0
  309. package/dist/worktrees/recovery.js +371 -0
  310. package/dist/worktrees/recovery.js.map +1 -0
  311. package/dist/worktrees/resource-manager.d.ts +74 -0
  312. package/dist/worktrees/resource-manager.d.ts.map +1 -0
  313. package/dist/worktrees/resource-manager.js +228 -0
  314. package/dist/worktrees/resource-manager.js.map +1 -0
  315. package/package.json +88 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * review_code MCP Tool
3
+ *
4
+ * Convenience tool for getting code review feedback.
5
+ * This is a shorthand for invoking the 'reviewer' role with code-specific formatting.
6
+ */
7
+ import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
+ import type { Logger } from "../../observability/logger.js";
9
+ import type { RouterEngine } from "../../router/engine.js";
10
+ /**
11
+ * Registers the review_code tool with the MCP server
12
+ *
13
+ * @param server - MCP server instance
14
+ * @param router - RouterEngine for agent invocation
15
+ * @param logger - Logger instance for structured logging
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const server = new McpServer({ name: 'agent-router', version: '0.1.0' });
20
+ * const router = new RouterEngine(config, providers, logger);
21
+ * registerReviewCodeTool(server, router, logger);
22
+ * ```
23
+ */
24
+ export declare function registerReviewCodeTool(server: McpServer, router: RouterEngine, logger: Logger): void;
25
+ //# sourceMappingURL=review-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-code.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/review-code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AA4G3D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GACb,IAAI,CAkFN"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * review_code MCP Tool
3
+ *
4
+ * Convenience tool for getting code review feedback.
5
+ * This is a shorthand for invoking the 'reviewer' role with code-specific formatting.
6
+ */
7
+ import { z } from "zod";
8
+ // ============================================================================
9
+ // Constants
10
+ // ============================================================================
11
+ /**
12
+ * Tool description for review_code
13
+ */
14
+ const TOOL_DESCRIPTION = "Get code review feedback on code snippets or files. " +
15
+ "Analyzes code for quality, security, performance, and best practices.";
16
+ // ============================================================================
17
+ // Input Schema
18
+ // ============================================================================
19
+ /**
20
+ * Zod schema shape for review_code input validation.
21
+ * Uses raw shape format as expected by MCP SDK's registerTool.
22
+ */
23
+ const reviewCodeInputSchemaShape = {
24
+ code: z.string().min(1).describe("The code to review"),
25
+ language: z
26
+ .string()
27
+ .optional()
28
+ .describe("Programming language (optional, will be auto-detected if not provided)"),
29
+ context: z
30
+ .string()
31
+ .optional()
32
+ .describe("Additional context about the code (optional) - e.g., purpose, constraints, or areas of concern"),
33
+ };
34
+ // ============================================================================
35
+ // Response Formatter
36
+ // ============================================================================
37
+ /**
38
+ * Formats an AgentResponse for MCP text output
39
+ *
40
+ * @param response - The response from the agent invocation
41
+ * @returns Formatted string with header, metadata, and content
42
+ */
43
+ function formatCodeReviewResponse(response) {
44
+ const header = `## Code Review Feedback\n`;
45
+ const meta = `*Provider: ${response.provider} | Model: ${response.model} | Duration: ${String(response.metadata.durationMs)}ms*\n\n`;
46
+ const content = response.content
47
+ .filter((block) => block.type === "text")
48
+ .map((block) => block.text ?? "")
49
+ .join("\n");
50
+ return header + meta + content;
51
+ }
52
+ // ============================================================================
53
+ // Task Builder
54
+ // ============================================================================
55
+ /**
56
+ * Builds the task string for the reviewer agent.
57
+ *
58
+ * @param input - The validated input parameters
59
+ * @returns Formatted task string with code block and context
60
+ */
61
+ function buildReviewTask(input) {
62
+ const parts = [];
63
+ // Add review instruction
64
+ parts.push("Please review the following code for quality, security, performance, and best practices.");
65
+ // Add context if provided
66
+ if (input.context !== undefined && input.context !== "") {
67
+ parts.push(`\n**Context:** ${input.context}`);
68
+ }
69
+ // Add language hint if provided
70
+ const languageHint = input.language ?? "";
71
+ // Add code block
72
+ parts.push(`\n\`\`\`${languageHint}\n${input.code}\n\`\`\``);
73
+ // Add review guidance
74
+ parts.push("\nProvide feedback on:");
75
+ parts.push("- Code quality and readability");
76
+ parts.push("- Potential bugs or edge cases");
77
+ parts.push("- Security concerns");
78
+ parts.push("- Performance considerations");
79
+ parts.push("- Best practices and improvements");
80
+ return parts.join("\n");
81
+ }
82
+ // ============================================================================
83
+ // Tool Registration
84
+ // ============================================================================
85
+ /**
86
+ * Registers the review_code tool with the MCP server
87
+ *
88
+ * @param server - MCP server instance
89
+ * @param router - RouterEngine for agent invocation
90
+ * @param logger - Logger instance for structured logging
91
+ *
92
+ * @example
93
+ * ```typescript
94
+ * const server = new McpServer({ name: 'agent-router', version: '0.1.0' });
95
+ * const router = new RouterEngine(config, providers, logger);
96
+ * registerReviewCodeTool(server, router, logger);
97
+ * ```
98
+ */
99
+ export function registerReviewCodeTool(server, router, logger) {
100
+ // Use type assertion to work around Zod version compatibility issues
101
+ // between zod 3.25+ and the MCP SDK's ZodRawShapeCompat type
102
+ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
103
+ const inputSchema = reviewCodeInputSchemaShape;
104
+ server.registerTool("review_code", {
105
+ title: "Review Code",
106
+ description: TOOL_DESCRIPTION,
107
+ inputSchema,
108
+ },
109
+ /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
110
+ async (args) => {
111
+ // Type-safe access with explicit casting after validation
112
+ const { code, language, context } = args;
113
+ logger.info("review_code called", {
114
+ codeLength: code.length,
115
+ language: language ?? "auto-detect",
116
+ hasContext: context !== undefined,
117
+ });
118
+ try {
119
+ const startTime = Date.now();
120
+ // Build the task string for the reviewer agent
121
+ const taskString = buildReviewTask({ code, language, context });
122
+ // Invoke the reviewer agent
123
+ const response = await router.invokeAgent({
124
+ role: "reviewer",
125
+ task: taskString,
126
+ });
127
+ const durationMs = Date.now() - startTime;
128
+ logger.info("review_code completed", {
129
+ provider: response.provider,
130
+ model: response.model,
131
+ durationMs,
132
+ traceId: response.metadata.traceId,
133
+ });
134
+ return {
135
+ content: [
136
+ {
137
+ type: "text",
138
+ text: formatCodeReviewResponse(response),
139
+ },
140
+ ],
141
+ };
142
+ }
143
+ catch (error) {
144
+ const errorMessage = error instanceof Error ? error.message : String(error);
145
+ // Only pass error to logger if it's an Error instance
146
+ if (error instanceof Error) {
147
+ logger.error("review_code failed", {
148
+ error,
149
+ errorMessage,
150
+ });
151
+ }
152
+ else {
153
+ logger.error("review_code failed", {
154
+ errorMessage,
155
+ });
156
+ }
157
+ // Return error as text content for MCP compatibility
158
+ return {
159
+ content: [
160
+ {
161
+ type: "text",
162
+ text: `## Error Getting Code Review\n\n${errorMessage}`,
163
+ },
164
+ ],
165
+ };
166
+ }
167
+ });
168
+ logger.debug("Registered review_code tool");
169
+ }
170
+ //# sourceMappingURL=review-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-code.js","sourceRoot":"","sources":["../../../src/mcp/tools/review-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * claim_next_task MCP Tool
3
+ *
4
+ * Generates instructions for workers to claim available tasks.
5
+ * Workers use these instructions to find, claim, and execute pending tasks.
6
+ */
7
+ import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
+ import type { Logger } from "../../../observability/logger.js";
9
+ /**
10
+ * Registers the claim_next_task tool with the MCP server.
11
+ *
12
+ * @param server - MCP server instance
13
+ * @param logger - Logger instance for structured logging
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const server = new McpServer({ name: 'agent-router', version: '3.0.0' });
18
+ * registerClaimNextTaskTool(server, logger);
19
+ * ```
20
+ */
21
+ export declare function registerClaimNextTaskTool(server: McpServer, logger: Logger): void;
22
+ //# sourceMappingURL=claim-next-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-next-task.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/tasks/claim-next-task.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AA2I/D;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,GACb,IAAI,CAgFN"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * claim_next_task MCP Tool
3
+ *
4
+ * Generates instructions for workers to claim available tasks.
5
+ * Workers use these instructions to find, claim, and execute pending tasks.
6
+ */
7
+ import { z } from "zod";
8
+ // ============================================================================
9
+ // Constants
10
+ // ============================================================================
11
+ /**
12
+ * Available agent roles (same as invoke-agent)
13
+ */
14
+ const AGENT_ROLES = ["coder", "critic", "designer", "researcher", "reviewer"];
15
+ /**
16
+ * Task selection priority strategies
17
+ */
18
+ const PRIORITY_STRATEGIES = ["highest", "lowest", "fifo"];
19
+ /**
20
+ * Tool description for claim_next_task
21
+ */
22
+ const TOOL_DESCRIPTION = "Generate instructions for a worker to claim and execute the next available task. " +
23
+ "Returns markdown instructions that guide the worker through the claim protocol.";
24
+ // ============================================================================
25
+ // Input Schema
26
+ // ============================================================================
27
+ /**
28
+ * Zod schema shape for claim_next_task input validation.
29
+ * Uses raw shape format as expected by MCP SDK's registerTool.
30
+ */
31
+ const claimNextTaskInputSchemaShape = {
32
+ workerName: z
33
+ .string()
34
+ .min(1)
35
+ .describe("Worker identifier for ownership tracking"),
36
+ roles: z
37
+ .array(z.enum(AGENT_ROLES))
38
+ .optional()
39
+ .describe("Only claim tasks for these roles. If not specified, claims tasks for any role."),
40
+ priority: z
41
+ .enum(PRIORITY_STRATEGIES)
42
+ .default("fifo")
43
+ .describe("Task selection strategy: 'highest' (highest priority first), 'lowest' (lowest priority first), 'fifo' (first in, first out)"),
44
+ excludeTaskIds: z
45
+ .array(z.string())
46
+ .optional()
47
+ .describe("Task IDs to skip (e.g., previously failed tasks)"),
48
+ };
49
+ // ============================================================================
50
+ // Instruction Generator
51
+ // ============================================================================
52
+ /**
53
+ * Generates markdown instructions for the worker claim protocol.
54
+ *
55
+ * @param input - The validated input parameters
56
+ * @returns Formatted markdown instructions
57
+ */
58
+ function generateClaimInstructions(input) {
59
+ const { workerName, roles, priority, excludeTaskIds } = input;
60
+ const rolesDisplay = roles?.length ? roles.join(", ") : "any";
61
+ const roleFilter = roles?.length
62
+ ? `metadata.role IN [${roles.map((r) => `"${r}"`).join(", ")}]`
63
+ : "any role";
64
+ const excludeClause = excludeTaskIds?.length
65
+ ? ` - id NOT IN [${excludeTaskIds.join(", ")}]`
66
+ : "";
67
+ return `## Claim Next Task
68
+
69
+ ### Search Criteria
70
+ - Worker: ${workerName}
71
+ - Roles: ${rolesDisplay}
72
+ - Priority: ${priority}
73
+
74
+ ### Instructions
75
+
76
+ 1. First, get current tasks:
77
+ \`TaskList()\`
78
+
79
+ 2. Find a task matching:
80
+ - status = "pending"
81
+ - owner = null (unclaimed)
82
+ - blockedBy is empty OR all blockers completed
83
+ - ${roleFilter}
84
+ ${excludeClause}
85
+
86
+ 3. If found, claim it:
87
+ \`TaskUpdate({ taskId: <found_id>, status: "in_progress", owner: "${workerName}" })\`
88
+
89
+ 4. Then execute:
90
+ \`execute_task({ taskId: <found_id> })\`
91
+
92
+ 5. On completion, loop back to step 1.
93
+
94
+ 6. If no tasks match, worker can exit:
95
+ \`Teammate({ operation: "requestShutdown" })\`
96
+
97
+ ### Notes
98
+ - If a claim fails (another worker claimed first), add the taskId to excludeTaskIds and retry
99
+ - Priority "${priority}" means: ${getPriorityDescription(priority)}
100
+ - The execute_task tool automatically marks tasks complete on success
101
+ - If execution fails, the task is released for retry
102
+ `;
103
+ }
104
+ /**
105
+ * Get human-readable description for a priority strategy.
106
+ */
107
+ function getPriorityDescription(priority) {
108
+ switch (priority) {
109
+ case "highest":
110
+ return "select the task with the highest priority value first";
111
+ case "lowest":
112
+ return "select the task with the lowest priority value first";
113
+ case "fifo":
114
+ return "select the oldest pending task first (first in, first out)";
115
+ }
116
+ }
117
+ // ============================================================================
118
+ // Tool Registration
119
+ // ============================================================================
120
+ /**
121
+ * Registers the claim_next_task tool with the MCP server.
122
+ *
123
+ * @param server - MCP server instance
124
+ * @param logger - Logger instance for structured logging
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * const server = new McpServer({ name: 'agent-router', version: '3.0.0' });
129
+ * registerClaimNextTaskTool(server, logger);
130
+ * ```
131
+ */
132
+ export function registerClaimNextTaskTool(server, logger) {
133
+ // Use type assertion to work around Zod version compatibility issues
134
+ // between zod 3.25+ and the MCP SDK's ZodRawShapeCompat type
135
+ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
136
+ const inputSchema = claimNextTaskInputSchemaShape;
137
+ server.registerTool("claim_next_task", {
138
+ title: "Claim Next Task",
139
+ description: TOOL_DESCRIPTION,
140
+ inputSchema,
141
+ },
142
+ /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
143
+ async (args) => {
144
+ // Type-safe access with explicit casting after validation
145
+ const input = args;
146
+ // Apply default for priority if not provided
147
+ const normalizedInput = {
148
+ ...input,
149
+ priority: input.priority ?? "fifo",
150
+ };
151
+ logger.info("claim_next_task called", {
152
+ workerName: normalizedInput.workerName,
153
+ roles: normalizedInput.roles,
154
+ priority: normalizedInput.priority,
155
+ excludeCount: normalizedInput.excludeTaskIds?.length ?? 0,
156
+ });
157
+ try {
158
+ const instructions = generateClaimInstructions(normalizedInput);
159
+ logger.debug("claim_next_task instructions generated", {
160
+ workerName: normalizedInput.workerName,
161
+ });
162
+ return {
163
+ content: [
164
+ {
165
+ type: "text",
166
+ text: instructions,
167
+ },
168
+ ],
169
+ };
170
+ }
171
+ catch (error) {
172
+ const errorMessage = error instanceof Error ? error.message : String(error);
173
+ // Only pass error to logger if it's an Error instance
174
+ if (error instanceof Error) {
175
+ logger.error("claim_next_task failed", {
176
+ workerName: normalizedInput.workerName,
177
+ error,
178
+ errorMessage,
179
+ });
180
+ }
181
+ else {
182
+ logger.error("claim_next_task failed", {
183
+ workerName: normalizedInput.workerName,
184
+ errorMessage,
185
+ });
186
+ }
187
+ // Return error as text content for MCP compatibility
188
+ return {
189
+ content: [
190
+ {
191
+ type: "text",
192
+ text: `## Error Generating Claim Instructions\n\n${errorMessage}`,
193
+ },
194
+ ],
195
+ };
196
+ }
197
+ });
198
+ logger.debug("Registered claim_next_task tool", {
199
+ roles: AGENT_ROLES,
200
+ priorities: PRIORITY_STRATEGIES,
201
+ });
202
+ }
203
+ //# sourceMappingURL=claim-next-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-next-task.js","sourceRoot":"","sources":["../../../../src/mcp/tools/tasks/claim-next-task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * create_routed_task MCP Tool
3
+ *
4
+ * Generates TaskCreate instruction strings for tasks pre-configured for AgentRouter.
5
+ * This tool outputs the TaskCreate syntax that can be executed to create tasks
6
+ * that will be routed to specific agent roles.
7
+ */
8
+ import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import type { Logger } from "../../../observability/logger.js";
10
+ /**
11
+ * Registers the create_routed_task tool with the MCP server
12
+ *
13
+ * @param server - MCP server instance
14
+ * @param logger - Logger instance for structured logging
15
+ */
16
+ export declare function registerCreateRoutedTaskTool(server: McpServer, logger: Logger): void;
17
+ //# sourceMappingURL=create-routed-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-routed-task.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/tasks/create-routed-task.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAsI/D;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAqEpF"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * create_routed_task MCP Tool
3
+ *
4
+ * Generates TaskCreate instruction strings for tasks pre-configured for AgentRouter.
5
+ * This tool outputs the TaskCreate syntax that can be executed to create tasks
6
+ * that will be routed to specific agent roles.
7
+ */
8
+ import { z } from "zod";
9
+ // ============================================================================
10
+ // Constants
11
+ // ============================================================================
12
+ /**
13
+ * Available agent roles for task routing
14
+ */
15
+ const AGENT_ROLES = ["coder", "critic", "designer", "researcher", "reviewer"];
16
+ /**
17
+ * Tool description for create_routed_task
18
+ */
19
+ const TOOL_DESCRIPTION = "Generate a TaskCreate instruction string for a task pre-configured for AgentRouter. " +
20
+ "The output contains the TaskCreate syntax to execute, which will create a task " +
21
+ "routed to a specific agent role (coder, critic, designer, researcher, reviewer).";
22
+ // ============================================================================
23
+ // Input Schema
24
+ // ============================================================================
25
+ /**
26
+ * Zod schema shape for create_routed_task input validation.
27
+ * Uses raw shape format as expected by MCP SDK's registerTool.
28
+ */
29
+ const createRoutedTaskInputSchemaShape = {
30
+ subject: z
31
+ .string()
32
+ .min(1)
33
+ .describe("Short task title in imperative form (e.g., 'Implement user authentication')"),
34
+ description: z
35
+ .string()
36
+ .optional()
37
+ .describe("Detailed description of the task requirements and context"),
38
+ role: z
39
+ .enum(AGENT_ROLES)
40
+ .describe("AgentRouter role for execution: coder (implementation), critic (plan review), " +
41
+ "designer (UI/UX), researcher (fact-finding), reviewer (code review)"),
42
+ blockedBy: z
43
+ .array(z.string())
44
+ .optional()
45
+ .describe("Array of task IDs that this task depends on (must complete first)"),
46
+ priority: z
47
+ .number()
48
+ .optional()
49
+ .describe("Priority level where 1 is highest priority"),
50
+ };
51
+ // ============================================================================
52
+ // Response Formatter
53
+ // ============================================================================
54
+ /**
55
+ * Formats the TaskCreate instruction response
56
+ *
57
+ * @param input - The validated input parameters
58
+ * @returns Formatted string with TaskCreate instruction
59
+ */
60
+ function formatTaskCreateResponse(input) {
61
+ const { subject, description, role, blockedBy, priority } = input;
62
+ // Build the metadata object
63
+ const metadataEntries = [
64
+ " agentRouter: true",
65
+ ` role: "${role}"`,
66
+ ];
67
+ if (priority !== undefined) {
68
+ metadataEntries.push(` priority: ${String(priority)}`);
69
+ }
70
+ // Build the TaskCreate parameters
71
+ const taskCreateLines = [
72
+ ` subject: "${escapeString(subject)}"`,
73
+ ];
74
+ if (description !== undefined) {
75
+ taskCreateLines.push(` description: "${escapeString(description)}"`);
76
+ }
77
+ taskCreateLines.push(` activeForm: "Awaiting ${role} agent..."`);
78
+ taskCreateLines.push(` metadata: {\n${metadataEntries.join(",\n")}\n }`);
79
+ if (blockedBy !== undefined && blockedBy.length > 0) {
80
+ const blockedByStr = blockedBy.map((id) => `"${escapeString(id)}"`).join(", ");
81
+ taskCreateLines.push(` blockedBy: [${blockedByStr}]`);
82
+ }
83
+ const taskCreateBody = taskCreateLines.join(",\n");
84
+ return `## Create Routed Task
85
+
86
+ Execute this to create the task:
87
+
88
+ \`\`\`
89
+ TaskCreate({
90
+ ${taskCreateBody}
91
+ })
92
+ \`\`\`
93
+
94
+ After creation, execute with:
95
+ \`execute_task({ taskId: <new_id>, role: "${role}" })\``;
96
+ }
97
+ /**
98
+ * Escapes special characters in strings for safe inclusion in generated code
99
+ */
100
+ function escapeString(str) {
101
+ return str
102
+ .replace(/\\/g, "\\\\")
103
+ .replace(/"/g, '\\"')
104
+ .replace(/\n/g, "\\n")
105
+ .replace(/\r/g, "\\r")
106
+ .replace(/\t/g, "\\t");
107
+ }
108
+ // ============================================================================
109
+ // Tool Registration
110
+ // ============================================================================
111
+ /**
112
+ * Registers the create_routed_task tool with the MCP server
113
+ *
114
+ * @param server - MCP server instance
115
+ * @param logger - Logger instance for structured logging
116
+ */
117
+ export function registerCreateRoutedTaskTool(server, logger) {
118
+ // Use type assertion to work around Zod version compatibility issues
119
+ // between zod 3.25+ and the MCP SDK's ZodRawShapeCompat type
120
+ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
121
+ const inputSchema = createRoutedTaskInputSchemaShape;
122
+ server.registerTool("create_routed_task", {
123
+ title: "Create Routed Task",
124
+ description: TOOL_DESCRIPTION,
125
+ inputSchema,
126
+ },
127
+ /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
128
+ async (args) => {
129
+ // Type-safe access with explicit casting after validation
130
+ const input = args;
131
+ logger.info("create_routed_task called", {
132
+ subject: input.subject,
133
+ role: input.role,
134
+ hasDescription: input.description !== undefined,
135
+ hasBlockedBy: input.blockedBy !== undefined && input.blockedBy.length > 0,
136
+ priority: input.priority,
137
+ });
138
+ try {
139
+ const responseText = formatTaskCreateResponse(input);
140
+ logger.info("create_routed_task completed", {
141
+ role: input.role,
142
+ subject: input.subject,
143
+ });
144
+ return {
145
+ content: [
146
+ {
147
+ type: "text",
148
+ text: responseText,
149
+ },
150
+ ],
151
+ };
152
+ }
153
+ catch (error) {
154
+ const errorMessage = error instanceof Error ? error.message : String(error);
155
+ if (error instanceof Error) {
156
+ logger.error("create_routed_task failed", {
157
+ error,
158
+ errorMessage,
159
+ });
160
+ }
161
+ else {
162
+ logger.error("create_routed_task failed", {
163
+ errorMessage,
164
+ });
165
+ }
166
+ return {
167
+ content: [
168
+ {
169
+ type: "text",
170
+ text: `## Error Creating Routed Task\n\n${errorMessage}`,
171
+ },
172
+ ],
173
+ };
174
+ }
175
+ });
176
+ logger.debug("Registered create_routed_task tool", { roles: AGENT_ROLES });
177
+ }
178
+ //# sourceMappingURL=create-routed-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-routed-task.js","sourceRoot":"","sources":["../../../../src/mcp/tools/tasks/create-routed-task.ts"],"names":[],"mappings":"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"}