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,78 @@
1
+ /**
2
+ * Default Worktree Configuration
3
+ *
4
+ * Defines which roles need worktrees and default worktree settings.
5
+ */
6
+ /**
7
+ * Roles that need isolated worktrees by default
8
+ */
9
+ export const ROLES_NEEDING_WORKTREE = new Set([
10
+ 'coder',
11
+ 'implementer',
12
+ 'developer',
13
+ 'engineer',
14
+ ]);
15
+ /**
16
+ * Check if a role needs a worktree
17
+ */
18
+ export function roleNeedsWorktree(role, configOverride) {
19
+ // Config override takes precedence
20
+ if (configOverride !== undefined) {
21
+ return configOverride;
22
+ }
23
+ // Check default roles
24
+ return ROLES_NEEDING_WORKTREE.has(role.toLowerCase());
25
+ }
26
+ /**
27
+ * Default worktree configuration
28
+ */
29
+ export const DEFAULT_WORKTREE_CONFIG = {
30
+ enabled: true,
31
+ baseDir: '.agent-foundry/worktrees',
32
+ limits: {
33
+ maxWorktrees: 10,
34
+ maxDiskBytes: 10 * 1024 * 1024 * 1024, // 10 GB
35
+ },
36
+ pool: {
37
+ enabled: false,
38
+ size: 3,
39
+ },
40
+ git: {
41
+ defaultBaseBranch: 'main',
42
+ branchPattern: 'task/{taskId}',
43
+ autoMerge: true,
44
+ conflictStrategy: 'merge',
45
+ },
46
+ cleanup: {
47
+ staleThresholdMs: 24 * 60 * 60 * 1000, // 24 hours
48
+ autoCleanup: true,
49
+ },
50
+ };
51
+ /**
52
+ * Merge user config with defaults
53
+ */
54
+ export function mergeWorktreeConfig(userConfig) {
55
+ if (!userConfig)
56
+ return DEFAULT_WORKTREE_CONFIG;
57
+ return {
58
+ enabled: userConfig.enabled ?? DEFAULT_WORKTREE_CONFIG.enabled,
59
+ baseDir: userConfig.baseDir ?? DEFAULT_WORKTREE_CONFIG.baseDir,
60
+ limits: {
61
+ ...DEFAULT_WORKTREE_CONFIG.limits,
62
+ ...userConfig.limits,
63
+ },
64
+ pool: {
65
+ ...DEFAULT_WORKTREE_CONFIG.pool,
66
+ ...userConfig.pool,
67
+ },
68
+ git: {
69
+ ...DEFAULT_WORKTREE_CONFIG.git,
70
+ ...userConfig.git,
71
+ },
72
+ cleanup: {
73
+ ...DEFAULT_WORKTREE_CONFIG.cleanup,
74
+ ...userConfig.cleanup,
75
+ },
76
+ };
77
+ }
78
+ //# sourceMappingURL=worktree-defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-defaults.js","sourceRoot":"","sources":["../../src/config/worktree-defaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAgB,IAAI,GAAG,CAAC;IACzD,OAAO;IACP,aAAa;IACb,WAAW;IACX,UAAU;CACX,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,cAAwB;IACtE,mCAAmC;IACnC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,sBAAsB;IACtB,OAAO,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACrD,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,0BAA0B;IACnC,MAAM,EAAE;QACN,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,QAAQ;KAChD;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC;KACR;IACD,GAAG,EAAE;QACH,iBAAiB,EAAE,MAAM;QACzB,aAAa,EAAE,eAAe;QAC9B,SAAS,EAAE,IAAI;QACf,gBAAgB,EAAE,OAAO;KAC1B;IACD,OAAO,EAAE;QACP,gBAAgB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW;QAClD,WAAW,EAAE,IAAI;KAClB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAoC;IACtE,IAAI,CAAC,UAAU;QAAE,OAAO,uBAAuB,CAAC;IAEhD,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,uBAAuB,CAAC,OAAO;QAC9D,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,uBAAuB,CAAC,OAAO;QAC9D,MAAM,EAAE;YACN,GAAG,uBAAuB,CAAC,MAAM;YACjC,GAAG,UAAU,CAAC,MAAM;SACrB;QACD,IAAI,EAAE;YACJ,GAAG,uBAAuB,CAAC,IAAI;YAC/B,GAAG,UAAU,CAAC,IAAI;SACnB;QACD,GAAG,EAAE;YACH,GAAG,uBAAuB,CAAC,GAAG;YAC9B,GAAG,UAAU,CAAC,GAAG;SAClB;QACD,OAAO,EAAE;YACP,GAAG,uBAAuB,CAAC,OAAO;YAClC,GAAG,UAAU,CAAC,OAAO;SACtB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * AgentRouter - MCP server for multi-agent orchestration
3
+ * Entry point
4
+ */
5
+ export declare const VERSION = "3.0.2";
6
+ export { initializeWithRecovery, shutdown } from "./startup.js";
7
+ export type { StartupConfig, StartupResult } from "./startup.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,44 @@
1
+ /**
2
+ * AgentRouter - MCP server for multi-agent orchestration
3
+ * Entry point
4
+ */
5
+ import { createServer, startServer, shutdownServer } from "./server.js";
6
+ export const VERSION = "3.0.2";
7
+ // Re-export startup utilities for programmatic use
8
+ export { initializeWithRecovery, shutdown } from "./startup.js";
9
+ /**
10
+ * Main entry point - creates and starts the MCP server
11
+ */
12
+ async function main() {
13
+ const server = await createServer();
14
+ await startServer(server);
15
+ }
16
+ // Graceful shutdown handling
17
+ function setupShutdownHandlers() {
18
+ const handleShutdown = async (signal) => {
19
+ console.error(`\nReceived ${signal}, shutting down gracefully...`);
20
+ try {
21
+ await shutdownServer();
22
+ }
23
+ catch (error) {
24
+ const message = error instanceof Error ? error.message : String(error);
25
+ console.error("Error during shutdown:", message);
26
+ }
27
+ process.exit(0);
28
+ };
29
+ process.on("SIGINT", () => {
30
+ void handleShutdown("SIGINT");
31
+ });
32
+ process.on("SIGTERM", () => {
33
+ void handleShutdown("SIGTERM");
34
+ });
35
+ }
36
+ // Setup handlers before starting
37
+ setupShutdownHandlers();
38
+ // Start the server
39
+ main().catch((error) => {
40
+ const message = error instanceof Error ? error.message : String(error);
41
+ console.error("Failed to start AgentRouter:", message);
42
+ process.exit(1);
43
+ });
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,mDAAmD;AACnD,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGhE;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IACpC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,6BAA6B;AAC7B,SAAS,qBAAqB;IAC5B,MAAM,cAAc,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;QAC7D,OAAO,CAAC,KAAK,CAAC,cAAc,MAAM,+BAA+B,CAAC,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,cAAc,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,KAAK,cAAc,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,KAAK,cAAc,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iCAAiC;AACjC,qBAAqB,EAAE,CAAC;AAExB,mBAAmB;AACnB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * compare_agents MCP Tool
3
+ *
4
+ * Runs the same task through multiple agents and compares their responses.
5
+ * Useful for getting different perspectives or finding the best approach.
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 compare_agents 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
+ * registerCompareAgentsTool(server, router, logger);
22
+ * ```
23
+ */
24
+ export declare function registerCompareAgentsTool(server: McpServer, router: RouterEngine, logger: Logger): void;
25
+ //# sourceMappingURL=compare-agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-agents.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/compare-agents.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;AAsG3D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GACb,IAAI,CAkGN"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * compare_agents MCP Tool
3
+ *
4
+ * Runs the same task through multiple agents and compares their responses.
5
+ * Useful for getting different perspectives or finding the best approach.
6
+ */
7
+ import { z } from "zod";
8
+ // ============================================================================
9
+ // Constants
10
+ // ============================================================================
11
+ /**
12
+ * Tool description for compare_agents
13
+ */
14
+ const TOOL_DESCRIPTION = "Run the same task through multiple agents and compare their responses. Useful for getting different perspectives from specialized agents (coder, critic, designer, researcher, reviewer).";
15
+ // ============================================================================
16
+ // Input Schema
17
+ // ============================================================================
18
+ /**
19
+ * Zod schema shape for compare_agents input validation.
20
+ * Uses raw shape format as expected by MCP SDK's registerTool.
21
+ */
22
+ const compareAgentsInputSchemaShape = {
23
+ roles: z
24
+ .array(z.string())
25
+ .min(2)
26
+ .describe("List of agent roles to compare (minimum 2 required)"),
27
+ task: z.string().min(1).describe("The task to send to all agents"),
28
+ };
29
+ // ============================================================================
30
+ // Response Formatter
31
+ // ============================================================================
32
+ /**
33
+ * Formats a single agent response for the comparison output
34
+ *
35
+ * @param response - The response from the agent invocation
36
+ * @returns Formatted string with header, metadata, and content
37
+ */
38
+ function formatSingleAgentResponse(response) {
39
+ const header = `### ${response.role.toUpperCase()} Agent\n`;
40
+ const meta = `*Provider: ${response.provider} | Model: ${response.model} | Duration: ${String(response.metadata.durationMs)}ms*\n\n`;
41
+ const content = response.content
42
+ .filter((block) => block.type === "text")
43
+ .map((block) => block.text ?? "")
44
+ .join("\n");
45
+ return header + meta + content;
46
+ }
47
+ /**
48
+ * Formats the comparison results for MCP text output
49
+ *
50
+ * @param results - Map of role names to their responses
51
+ * @param failedRoles - Array of roles that failed to respond
52
+ * @param totalDurationMs - Total time taken for the comparison
53
+ * @returns Formatted string with all agent responses side by side
54
+ */
55
+ function formatComparisonResponse(results, failedRoles, totalDurationMs) {
56
+ const sections = [];
57
+ // Header
58
+ sections.push("## Agent Comparison Results\n");
59
+ sections.push(`*Compared ${String(results.size)} agents | Total duration: ${String(totalDurationMs)}ms*\n`);
60
+ // Separator
61
+ sections.push("---\n");
62
+ // Individual agent responses
63
+ for (const [_role, response] of results) {
64
+ sections.push(formatSingleAgentResponse(response));
65
+ sections.push("\n---\n");
66
+ }
67
+ // Failed roles (if any)
68
+ if (failedRoles.length > 0) {
69
+ sections.push("### Failed Agents\n");
70
+ sections.push(`The following agents failed to respond: ${failedRoles.join(", ")}\n`);
71
+ }
72
+ return sections.join("\n");
73
+ }
74
+ // ============================================================================
75
+ // Tool Registration
76
+ // ============================================================================
77
+ /**
78
+ * Registers the compare_agents tool with the MCP server
79
+ *
80
+ * @param server - MCP server instance
81
+ * @param router - RouterEngine for agent invocation
82
+ * @param logger - Logger instance for structured logging
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * const server = new McpServer({ name: 'agent-router', version: '0.1.0' });
87
+ * const router = new RouterEngine(config, providers, logger);
88
+ * registerCompareAgentsTool(server, router, logger);
89
+ * ```
90
+ */
91
+ export function registerCompareAgentsTool(server, router, logger) {
92
+ // Use type assertion to work around Zod version compatibility issues
93
+ // between zod 3.25+ and the MCP SDK's ZodRawShapeCompat type
94
+ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
95
+ const inputSchema = compareAgentsInputSchemaShape;
96
+ server.registerTool("compare_agents", {
97
+ title: "Compare Agents",
98
+ description: TOOL_DESCRIPTION,
99
+ inputSchema,
100
+ },
101
+ /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
102
+ async (args) => {
103
+ // Type-safe access with explicit casting after validation
104
+ const { roles, task } = args;
105
+ logger.info("compare_agents called", {
106
+ roles,
107
+ roleCount: roles.length,
108
+ taskLength: task.length,
109
+ });
110
+ // Validate that all roles exist
111
+ const invalidRoles = roles.filter((role) => !router.hasRole(role));
112
+ if (invalidRoles.length > 0) {
113
+ const errorMessage = `Unknown roles: ${invalidRoles.join(", ")}. Available roles: ${router.listRoles().join(", ")}`;
114
+ logger.warn("compare_agents called with invalid roles", {
115
+ invalidRoles,
116
+ availableRoles: router.listRoles(),
117
+ });
118
+ return {
119
+ content: [
120
+ {
121
+ type: "text",
122
+ text: `## Error Comparing Agents\n\n${errorMessage}`,
123
+ },
124
+ ],
125
+ };
126
+ }
127
+ try {
128
+ const startTime = Date.now();
129
+ const results = await router.compareAgents(roles, task);
130
+ const durationMs = Date.now() - startTime;
131
+ // Determine which roles failed
132
+ const failedRoles = roles.filter((role) => !results.has(role));
133
+ logger.info("compare_agents completed", {
134
+ roles,
135
+ successfulRoles: Array.from(results.keys()),
136
+ failedRoles,
137
+ durationMs,
138
+ });
139
+ return {
140
+ content: [
141
+ {
142
+ type: "text",
143
+ text: formatComparisonResponse(results, failedRoles, durationMs),
144
+ },
145
+ ],
146
+ };
147
+ }
148
+ catch (error) {
149
+ const errorMessage = error instanceof Error ? error.message : String(error);
150
+ // Only pass error to logger if it's an Error instance
151
+ if (error instanceof Error) {
152
+ logger.error("compare_agents failed", {
153
+ roles,
154
+ error,
155
+ errorMessage,
156
+ });
157
+ }
158
+ else {
159
+ logger.error("compare_agents failed", {
160
+ roles,
161
+ errorMessage,
162
+ });
163
+ }
164
+ // Return error as text content for MCP compatibility
165
+ return {
166
+ content: [
167
+ {
168
+ type: "text",
169
+ text: `## Error Comparing Agents\n\n${errorMessage}`,
170
+ },
171
+ ],
172
+ };
173
+ }
174
+ });
175
+ logger.debug("Registered compare_agents tool");
176
+ }
177
+ //# sourceMappingURL=compare-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-agents.js","sourceRoot":"","sources":["../../../src/mcp/tools/compare-agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * critique_plan MCP Tool
3
+ *
4
+ * Convenience tool for getting critical review of a plan, PRD, or technical
5
+ * design from a skeptical architect. This is a shorthand for invoking the
6
+ * critic agent with a structured task.
7
+ */
8
+ import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import type { Logger } from "../../observability/logger.js";
10
+ import type { RouterEngine } from "../../router/engine.js";
11
+ /**
12
+ * Registers the critique_plan tool with the MCP server
13
+ *
14
+ * @param server - MCP server instance
15
+ * @param router - RouterEngine for agent invocation
16
+ * @param logger - Logger instance for structured logging
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const server = new McpServer({ name: 'agent-router', version: '0.1.0' });
21
+ * const router = new RouterEngine(config, providers, logger);
22
+ * registerCritiquePlanTool(server, router, logger);
23
+ * ```
24
+ */
25
+ export declare function registerCritiquePlanTool(server: McpServer, router: RouterEngine, logger: Logger): void;
26
+ //# sourceMappingURL=critique-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"critique-plan.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/critique-plan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;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;AA+F3D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GACb,IAAI,CAkFN"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * critique_plan MCP Tool
3
+ *
4
+ * Convenience tool for getting critical review of a plan, PRD, or technical
5
+ * design from a skeptical architect. This is a shorthand for invoking the
6
+ * critic agent with a structured task.
7
+ */
8
+ import { z } from "zod";
9
+ // ============================================================================
10
+ // Constants
11
+ // ============================================================================
12
+ /**
13
+ * Tool description for critique_plan
14
+ */
15
+ const TOOL_DESCRIPTION = "Get critical review of a plan, PRD, or technical design from a skeptical architect. " +
16
+ "The critic will challenge assumptions, identify risks, and suggest improvements.";
17
+ // ============================================================================
18
+ // Input Schema
19
+ // ============================================================================
20
+ /**
21
+ * Zod schema shape for critique_plan input validation.
22
+ * Uses raw shape format as expected by MCP SDK's registerTool.
23
+ */
24
+ const critiquePlanInputSchemaShape = {
25
+ plan: z
26
+ .string()
27
+ .min(1)
28
+ .describe("The plan, PRD, or technical design document to critique"),
29
+ focus: z
30
+ .string()
31
+ .optional()
32
+ .describe("Optional focus areas for the critique (e.g., 'security', 'scalability', 'cost', 'maintainability')"),
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 critique content
42
+ */
43
+ function formatCritiqueResponse(response) {
44
+ const header = `## Plan Critique (CRITIC Agent)\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
+ * Builds the task string for the critic agent
54
+ *
55
+ * @param plan - The plan document to critique
56
+ * @param focus - Optional focus areas
57
+ * @returns Formatted task string
58
+ */
59
+ function buildCritiqueTask(plan, focus) {
60
+ let task = `Please provide a critical review of the following plan or technical design.\n\n`;
61
+ if (focus !== undefined && focus !== "") {
62
+ task += `Focus particularly on: ${focus}\n\n`;
63
+ }
64
+ task += `Analyze for:\n`;
65
+ task += `- Hidden assumptions and unstated dependencies\n`;
66
+ task += `- Potential risks and failure modes\n`;
67
+ task += `- Scalability and performance concerns\n`;
68
+ task += `- Security vulnerabilities\n`;
69
+ task += `- Missing requirements or edge cases\n`;
70
+ task += `- Alternative approaches worth considering\n\n`;
71
+ task += `<plan>\n${plan}\n</plan>`;
72
+ return task;
73
+ }
74
+ // ============================================================================
75
+ // Tool Registration
76
+ // ============================================================================
77
+ /**
78
+ * Registers the critique_plan tool with the MCP server
79
+ *
80
+ * @param server - MCP server instance
81
+ * @param router - RouterEngine for agent invocation
82
+ * @param logger - Logger instance for structured logging
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * const server = new McpServer({ name: 'agent-router', version: '0.1.0' });
87
+ * const router = new RouterEngine(config, providers, logger);
88
+ * registerCritiquePlanTool(server, router, logger);
89
+ * ```
90
+ */
91
+ export function registerCritiquePlanTool(server, router, logger) {
92
+ // Use type assertion to work around Zod version compatibility issues
93
+ // between zod 3.25+ and the MCP SDK's ZodRawShapeCompat type
94
+ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
95
+ const inputSchema = critiquePlanInputSchemaShape;
96
+ server.registerTool("critique_plan", {
97
+ title: "Critique Plan",
98
+ description: TOOL_DESCRIPTION,
99
+ inputSchema,
100
+ },
101
+ /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
102
+ async (args) => {
103
+ // Type-safe access with explicit casting after validation
104
+ const { plan, focus } = args;
105
+ logger.info("critique_plan called", {
106
+ planLength: plan.length,
107
+ hasFocus: focus !== undefined,
108
+ focus: focus,
109
+ });
110
+ try {
111
+ const startTime = Date.now();
112
+ // Build the task string with optional focus areas
113
+ const task = buildCritiqueTask(plan, focus);
114
+ // Invoke the critic agent
115
+ const response = await router.invokeAgent({
116
+ role: "critic",
117
+ task,
118
+ });
119
+ const durationMs = Date.now() - startTime;
120
+ logger.info("critique_plan completed", {
121
+ provider: response.provider,
122
+ model: response.model,
123
+ durationMs,
124
+ traceId: response.metadata.traceId,
125
+ });
126
+ return {
127
+ content: [
128
+ {
129
+ type: "text",
130
+ text: formatCritiqueResponse(response),
131
+ },
132
+ ],
133
+ };
134
+ }
135
+ catch (error) {
136
+ const errorMessage = error instanceof Error ? error.message : String(error);
137
+ // Only pass error to logger if it's an Error instance
138
+ if (error instanceof Error) {
139
+ logger.error("critique_plan failed", {
140
+ error,
141
+ errorMessage,
142
+ });
143
+ }
144
+ else {
145
+ logger.error("critique_plan failed", {
146
+ errorMessage,
147
+ });
148
+ }
149
+ // Return error as text content for MCP compatibility
150
+ return {
151
+ content: [
152
+ {
153
+ type: "text",
154
+ text: `## Error Critiquing Plan\n\n${errorMessage}`,
155
+ },
156
+ ],
157
+ };
158
+ }
159
+ });
160
+ logger.debug("Registered critique_plan tool");
161
+ }
162
+ //# sourceMappingURL=critique-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"critique-plan.js","sourceRoot":"","sources":["../../../src/mcp/tools/critique-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * design_feedback MCP Tool
3
+ *
4
+ * Convenience tool for getting UI/UX design feedback on components,
5
+ * layouts, or user flows. This is a shorthand for invoking the
6
+ * designer role with a structured design review task.
7
+ */
8
+ import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import type { Logger } from "../../observability/logger.js";
10
+ import type { RouterEngine } from "../../router/engine.js";
11
+ /**
12
+ * Registers the design_feedback tool with the MCP server
13
+ *
14
+ * @param server - MCP server instance
15
+ * @param router - RouterEngine for agent invocation
16
+ * @param logger - Logger instance for structured logging
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const server = new McpServer({ name: 'agent-router', version: '0.1.0' });
21
+ * const router = new RouterEngine(config, providers, logger);
22
+ * registerDesignFeedbackTool(server, router, logger);
23
+ * ```
24
+ */
25
+ export declare function registerDesignFeedbackTool(server: McpServer, router: RouterEngine, logger: Logger): void;
26
+ //# sourceMappingURL=design-feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-feedback.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/design-feedback.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;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;AA6I3D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GACb,IAAI,CA+FN"}