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.
- package/LICENSE +21 -0
- package/README.md +477 -0
- package/dist/cli/install-skills.d.ts +11 -0
- package/dist/cli/install-skills.d.ts.map +1 -0
- package/dist/cli/install-skills.js +143 -0
- package/dist/cli/install-skills.js.map +1 -0
- package/dist/cli/recovery-commands.d.ts +41 -0
- package/dist/cli/recovery-commands.d.ts.map +1 -0
- package/dist/cli/recovery-commands.js +241 -0
- package/dist/cli/recovery-commands.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +25 -0
- package/dist/cli/setup-wizard.d.ts.map +1 -0
- package/dist/cli/setup-wizard.js +1417 -0
- package/dist/cli/setup-wizard.js.map +1 -0
- package/dist/cli/test-connection.d.ts +45 -0
- package/dist/cli/test-connection.d.ts.map +1 -0
- package/dist/cli/test-connection.js +317 -0
- package/dist/cli/test-connection.js.map +1 -0
- package/dist/cli.d.ts +75 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +704 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +57 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +99 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +14 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +22 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/manager.d.ts +184 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +347 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/merger.d.ts +76 -0
- package/dist/config/merger.d.ts.map +1 -0
- package/dist/config/merger.js +189 -0
- package/dist/config/merger.js.map +1 -0
- package/dist/config/schema.d.ts +20 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +20 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/validator.d.ts +254 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +363 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/config/worktree-defaults.d.ts +23 -0
- package/dist/config/worktree-defaults.d.ts.map +1 -0
- package/dist/config/worktree-defaults.js +78 -0
- package/dist/config/worktree-defaults.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/tools/compare-agents.d.ts +25 -0
- package/dist/mcp/tools/compare-agents.d.ts.map +1 -0
- package/dist/mcp/tools/compare-agents.js +177 -0
- package/dist/mcp/tools/compare-agents.js.map +1 -0
- package/dist/mcp/tools/critique-plan.d.ts +26 -0
- package/dist/mcp/tools/critique-plan.d.ts.map +1 -0
- package/dist/mcp/tools/critique-plan.js +162 -0
- package/dist/mcp/tools/critique-plan.js.map +1 -0
- package/dist/mcp/tools/design-feedback.d.ts +26 -0
- package/dist/mcp/tools/design-feedback.d.ts.map +1 -0
- package/dist/mcp/tools/design-feedback.js +216 -0
- package/dist/mcp/tools/design-feedback.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +50 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +191 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/invoke-agent.d.ts +25 -0
- package/dist/mcp/tools/invoke-agent.d.ts.map +1 -0
- package/dist/mcp/tools/invoke-agent.js +141 -0
- package/dist/mcp/tools/invoke-agent.js.map +1 -0
- package/dist/mcp/tools/review-code.d.ts +25 -0
- package/dist/mcp/tools/review-code.d.ts.map +1 -0
- package/dist/mcp/tools/review-code.js +170 -0
- package/dist/mcp/tools/review-code.js.map +1 -0
- package/dist/mcp/tools/tasks/claim-next-task.d.ts +22 -0
- package/dist/mcp/tools/tasks/claim-next-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/claim-next-task.js +203 -0
- package/dist/mcp/tools/tasks/claim-next-task.js.map +1 -0
- package/dist/mcp/tools/tasks/create-routed-task.d.ts +17 -0
- package/dist/mcp/tools/tasks/create-routed-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/create-routed-task.js +178 -0
- package/dist/mcp/tools/tasks/create-routed-task.js.map +1 -0
- package/dist/mcp/tools/tasks/execute-pipeline.d.ts +22 -0
- package/dist/mcp/tools/tasks/execute-pipeline.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/execute-pipeline.js +401 -0
- package/dist/mcp/tools/tasks/execute-pipeline.js.map +1 -0
- package/dist/mcp/tools/tasks/execute-task.d.ts +32 -0
- package/dist/mcp/tools/tasks/execute-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/execute-task.js +284 -0
- package/dist/mcp/tools/tasks/execute-task.js.map +1 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.d.ts +26 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.js +460 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.js.map +1 -0
- package/dist/mcp/tools/tasks/index.d.ts +36 -0
- package/dist/mcp/tools/tasks/index.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/index.js +66 -0
- package/dist/mcp/tools/tasks/index.js.map +1 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts +17 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.js +147 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.js.map +1 -0
- package/dist/mcp/tools/worktree/get-worktree-status.d.ts +17 -0
- package/dist/mcp/tools/worktree/get-worktree-status.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/get-worktree-status.js +123 -0
- package/dist/mcp/tools/worktree/get-worktree-status.js.map +1 -0
- package/dist/mcp/tools/worktree/index.d.ts +41 -0
- package/dist/mcp/tools/worktree/index.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/index.js +69 -0
- package/dist/mcp/tools/worktree/index.js.map +1 -0
- package/dist/mcp/tools/worktree/list-worktrees.d.ts +17 -0
- package/dist/mcp/tools/worktree/list-worktrees.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/list-worktrees.js +136 -0
- package/dist/mcp/tools/worktree/list-worktrees.js.map +1 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.d.ts +19 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.js +228 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.js.map +1 -0
- package/dist/mcp/transport/stdio.d.ts +13 -0
- package/dist/mcp/transport/stdio.d.ts.map +1 -0
- package/dist/mcp/transport/stdio.js +15 -0
- package/dist/mcp/transport/stdio.js.map +1 -0
- package/dist/observability/logger.d.ts +137 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +235 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +250 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +364 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/persistence/index.d.ts +9 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +9 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/state-schema.d.ts +116 -0
- package/dist/persistence/state-schema.d.ts.map +1 -0
- package/dist/persistence/state-schema.js +28 -0
- package/dist/persistence/state-schema.js.map +1 -0
- package/dist/persistence/state-store.d.ts +111 -0
- package/dist/persistence/state-store.d.ts.map +1 -0
- package/dist/persistence/state-store.js +291 -0
- package/dist/persistence/state-store.js.map +1 -0
- package/dist/providers/anthropic.d.ts +164 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +500 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +151 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +227 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/gemini.d.ts +85 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +414 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/kimi.d.ts +19 -0
- package/dist/providers/kimi.d.ts.map +1 -0
- package/dist/providers/kimi.js +20 -0
- package/dist/providers/kimi.js.map +1 -0
- package/dist/providers/manager.d.ts +160 -0
- package/dist/providers/manager.d.ts.map +1 -0
- package/dist/providers/manager.js +264 -0
- package/dist/providers/manager.js.map +1 -0
- package/dist/providers/ollama.d.ts +83 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +453 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +96 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +457 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/zai.d.ts +19 -0
- package/dist/providers/zai.d.ts.map +1 -0
- package/dist/providers/zai.js +20 -0
- package/dist/providers/zai.js.map +1 -0
- package/dist/router/context-manager.d.ts +2 -0
- package/dist/router/context-manager.d.ts.map +1 -0
- package/dist/router/context-manager.js +3 -0
- package/dist/router/context-manager.js.map +1 -0
- package/dist/router/engine.d.ts +169 -0
- package/dist/router/engine.d.ts.map +1 -0
- package/dist/router/engine.js +435 -0
- package/dist/router/engine.js.map +1 -0
- package/dist/router/pattern-executor.d.ts +317 -0
- package/dist/router/pattern-executor.d.ts.map +1 -0
- package/dist/router/pattern-executor.js +571 -0
- package/dist/router/pattern-executor.js.map +1 -0
- package/dist/router/role-resolver.d.ts +59 -0
- package/dist/router/role-resolver.d.ts.map +1 -0
- package/dist/router/role-resolver.js +95 -0
- package/dist/router/role-resolver.js.map +1 -0
- package/dist/server.d.ts +32 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +223 -0
- package/dist/server.js.map +1 -0
- package/dist/startup.d.ts +78 -0
- package/dist/startup.d.ts.map +1 -0
- package/dist/startup.js +107 -0
- package/dist/startup.js.map +1 -0
- package/dist/tasks/coordinator.d.ts +141 -0
- package/dist/tasks/coordinator.d.ts.map +1 -0
- package/dist/tasks/coordinator.js +331 -0
- package/dist/tasks/coordinator.js.map +1 -0
- package/dist/tasks/index.d.ts +13 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +13 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/persistent-state-coordinator.d.ts +89 -0
- package/dist/tasks/persistent-state-coordinator.d.ts.map +1 -0
- package/dist/tasks/persistent-state-coordinator.js +371 -0
- package/dist/tasks/persistent-state-coordinator.js.map +1 -0
- package/dist/tasks/pipeline-manager.d.ts +103 -0
- package/dist/tasks/pipeline-manager.d.ts.map +1 -0
- package/dist/tasks/pipeline-manager.js +358 -0
- package/dist/tasks/pipeline-manager.js.map +1 -0
- package/dist/tasks/state-coordinator.d.ts +79 -0
- package/dist/tasks/state-coordinator.d.ts.map +1 -0
- package/dist/tasks/state-coordinator.js +200 -0
- package/dist/tasks/state-coordinator.js.map +1 -0
- package/dist/tasks/worker-mode.d.ts +65 -0
- package/dist/tasks/worker-mode.d.ts.map +1 -0
- package/dist/tasks/worker-mode.js +208 -0
- package/dist/tasks/worker-mode.js.map +1 -0
- package/dist/translation/errors.d.ts +203 -0
- package/dist/translation/errors.d.ts.map +1 -0
- package/dist/translation/errors.js +477 -0
- package/dist/translation/errors.js.map +1 -0
- package/dist/translation/index.d.ts +12 -0
- package/dist/translation/index.d.ts.map +1 -0
- package/dist/translation/index.js +32 -0
- package/dist/translation/index.js.map +1 -0
- package/dist/translation/messages.d.ts +295 -0
- package/dist/translation/messages.d.ts.map +1 -0
- package/dist/translation/messages.js +557 -0
- package/dist/translation/messages.js.map +1 -0
- package/dist/translation/streaming.d.ts +226 -0
- package/dist/translation/streaming.d.ts.map +1 -0
- package/dist/translation/streaming.js +520 -0
- package/dist/translation/streaming.js.map +1 -0
- package/dist/translation/tools.d.ts +209 -0
- package/dist/translation/tools.d.ts.map +1 -0
- package/dist/translation/tools.js +331 -0
- package/dist/translation/tools.js.map +1 -0
- package/dist/types.d.ts +747 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +86 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +175 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +315 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/env.d.ts +2 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +3 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/git.d.ts +58 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +197 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/merge-ordering.d.ts +45 -0
- package/dist/utils/merge-ordering.d.ts.map +1 -0
- package/dist/utils/merge-ordering.js +128 -0
- package/dist/utils/merge-ordering.js.map +1 -0
- package/dist/utils/retry.d.ts +106 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +188 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/worktrees/branch-manager.d.ts +55 -0
- package/dist/worktrees/branch-manager.d.ts.map +1 -0
- package/dist/worktrees/branch-manager.js +129 -0
- package/dist/worktrees/branch-manager.js.map +1 -0
- package/dist/worktrees/conflict-handler.d.ts +72 -0
- package/dist/worktrees/conflict-handler.d.ts.map +1 -0
- package/dist/worktrees/conflict-handler.js +287 -0
- package/dist/worktrees/conflict-handler.js.map +1 -0
- package/dist/worktrees/conflict-parser.d.ts +28 -0
- package/dist/worktrees/conflict-parser.d.ts.map +1 -0
- package/dist/worktrees/conflict-parser.js +140 -0
- package/dist/worktrees/conflict-parser.js.map +1 -0
- package/dist/worktrees/index.d.ts +20 -0
- package/dist/worktrees/index.d.ts.map +1 -0
- package/dist/worktrees/index.js +20 -0
- package/dist/worktrees/index.js.map +1 -0
- package/dist/worktrees/instructions.d.ts +20 -0
- package/dist/worktrees/instructions.d.ts.map +1 -0
- package/dist/worktrees/instructions.js +84 -0
- package/dist/worktrees/instructions.js.map +1 -0
- package/dist/worktrees/manager.d.ts +76 -0
- package/dist/worktrees/manager.d.ts.map +1 -0
- package/dist/worktrees/manager.js +277 -0
- package/dist/worktrees/manager.js.map +1 -0
- package/dist/worktrees/pipeline-merge-orchestrator.d.ts +55 -0
- package/dist/worktrees/pipeline-merge-orchestrator.d.ts.map +1 -0
- package/dist/worktrees/pipeline-merge-orchestrator.js +221 -0
- package/dist/worktrees/pipeline-merge-orchestrator.js.map +1 -0
- package/dist/worktrees/pool.d.ts +95 -0
- package/dist/worktrees/pool.d.ts.map +1 -0
- package/dist/worktrees/pool.js +271 -0
- package/dist/worktrees/pool.js.map +1 -0
- package/dist/worktrees/recovery.d.ts +94 -0
- package/dist/worktrees/recovery.d.ts.map +1 -0
- package/dist/worktrees/recovery.js +371 -0
- package/dist/worktrees/recovery.js.map +1 -0
- package/dist/worktrees/resource-manager.d.ts +74 -0
- package/dist/worktrees/resource-manager.d.ts.map +1 -0
- package/dist/worktrees/resource-manager.js +228 -0
- package/dist/worktrees/resource-manager.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,216 @@
|
|
|
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 { z } from "zod";
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Constants
|
|
11
|
+
// ============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* Design review types supported by this tool
|
|
14
|
+
*/
|
|
15
|
+
const DESIGN_REVIEW_TYPES = ["component", "layout", "flow", "accessibility"];
|
|
16
|
+
/**
|
|
17
|
+
* Tool description for design_feedback
|
|
18
|
+
*/
|
|
19
|
+
const TOOL_DESCRIPTION = "Get UI/UX design feedback on components, layouts, or user flows. Use this to get expert design critique and improvement suggestions from the designer agent.";
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Input Schema
|
|
22
|
+
// ============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* Zod schema shape for design_feedback input validation.
|
|
25
|
+
* Uses raw shape format as expected by MCP SDK's registerTool.
|
|
26
|
+
*/
|
|
27
|
+
const designFeedbackInputSchemaShape = {
|
|
28
|
+
design: z
|
|
29
|
+
.string()
|
|
30
|
+
.min(1)
|
|
31
|
+
.describe("Description of the design, component, or user flow to review"),
|
|
32
|
+
type: z
|
|
33
|
+
.enum(DESIGN_REVIEW_TYPES)
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("Type of design review: 'component' for UI components, 'layout' for page layouts, 'flow' for user flows, 'accessibility' for a11y review"),
|
|
36
|
+
context: z
|
|
37
|
+
.string()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("Additional context such as target users, platform, or design constraints"),
|
|
40
|
+
};
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// Task Builder
|
|
43
|
+
// ============================================================================
|
|
44
|
+
/**
|
|
45
|
+
* Builds a structured task string for the designer agent
|
|
46
|
+
*
|
|
47
|
+
* @param input - Validated design feedback input
|
|
48
|
+
* @returns Formatted task string for the designer role
|
|
49
|
+
*/
|
|
50
|
+
function buildDesignTask(input) {
|
|
51
|
+
const typeLabel = input.type ?? "general";
|
|
52
|
+
const typeDescriptions = {
|
|
53
|
+
component: "UI component",
|
|
54
|
+
layout: "page layout",
|
|
55
|
+
flow: "user flow",
|
|
56
|
+
accessibility: "accessibility (a11y)",
|
|
57
|
+
general: "design",
|
|
58
|
+
};
|
|
59
|
+
const reviewType = typeDescriptions[typeLabel] ?? "design";
|
|
60
|
+
let task = `Please provide a detailed ${reviewType} review for the following:\n\n${input.design}`;
|
|
61
|
+
if (input.type === "accessibility") {
|
|
62
|
+
task += `\n\nFocus your review on:
|
|
63
|
+
- WCAG compliance (AA or AAA)
|
|
64
|
+
- Screen reader compatibility
|
|
65
|
+
- Keyboard navigation
|
|
66
|
+
- Color contrast and visual accessibility
|
|
67
|
+
- Focus states and indicators
|
|
68
|
+
- Accessible naming and labels`;
|
|
69
|
+
}
|
|
70
|
+
else if (input.type === "component") {
|
|
71
|
+
task += `\n\nFocus your review on:
|
|
72
|
+
- Visual hierarchy and composition
|
|
73
|
+
- Interaction patterns and states
|
|
74
|
+
- Consistency with design system principles
|
|
75
|
+
- Responsive behavior
|
|
76
|
+
- Edge cases and error states`;
|
|
77
|
+
}
|
|
78
|
+
else if (input.type === "layout") {
|
|
79
|
+
task += `\n\nFocus your review on:
|
|
80
|
+
- Visual hierarchy and information architecture
|
|
81
|
+
- Spacing, alignment, and grid usage
|
|
82
|
+
- Responsive design considerations
|
|
83
|
+
- Content prioritization
|
|
84
|
+
- Navigation patterns`;
|
|
85
|
+
}
|
|
86
|
+
else if (input.type === "flow") {
|
|
87
|
+
task += `\n\nFocus your review on:
|
|
88
|
+
- User journey clarity
|
|
89
|
+
- Number of steps and cognitive load
|
|
90
|
+
- Error handling and recovery paths
|
|
91
|
+
- Progressive disclosure
|
|
92
|
+
- Call-to-action effectiveness`;
|
|
93
|
+
}
|
|
94
|
+
return task;
|
|
95
|
+
}
|
|
96
|
+
// ============================================================================
|
|
97
|
+
// Response Formatter
|
|
98
|
+
// ============================================================================
|
|
99
|
+
/**
|
|
100
|
+
* Formats an AgentResponse for MCP text output
|
|
101
|
+
*
|
|
102
|
+
* @param response - The response from the agent invocation
|
|
103
|
+
* @param reviewType - The type of design review performed
|
|
104
|
+
* @returns Formatted string with header, metadata, and content
|
|
105
|
+
*/
|
|
106
|
+
function formatDesignFeedbackResponse(response, reviewType) {
|
|
107
|
+
const typeLabel = reviewType !== undefined && reviewType !== "" ? ` (${reviewType})` : "";
|
|
108
|
+
const header = `## Design Feedback${typeLabel}\n`;
|
|
109
|
+
const meta = `*Provider: ${response.provider} | Model: ${response.model} | Duration: ${String(response.metadata.durationMs)}ms*\n\n`;
|
|
110
|
+
const content = response.content
|
|
111
|
+
.filter((block) => block.type === "text")
|
|
112
|
+
.map((block) => block.text ?? "")
|
|
113
|
+
.join("\n");
|
|
114
|
+
return header + meta + content;
|
|
115
|
+
}
|
|
116
|
+
// ============================================================================
|
|
117
|
+
// Tool Registration
|
|
118
|
+
// ============================================================================
|
|
119
|
+
/**
|
|
120
|
+
* Registers the design_feedback tool with the MCP server
|
|
121
|
+
*
|
|
122
|
+
* @param server - MCP server instance
|
|
123
|
+
* @param router - RouterEngine for agent invocation
|
|
124
|
+
* @param logger - Logger instance for structured logging
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* const server = new McpServer({ name: 'agent-router', version: '0.1.0' });
|
|
129
|
+
* const router = new RouterEngine(config, providers, logger);
|
|
130
|
+
* registerDesignFeedbackTool(server, router, logger);
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
export function registerDesignFeedbackTool(server, router, logger) {
|
|
134
|
+
// Use type assertion to work around Zod version compatibility issues
|
|
135
|
+
// between zod 3.25+ and the MCP SDK's ZodRawShapeCompat type
|
|
136
|
+
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
|
|
137
|
+
const inputSchema = designFeedbackInputSchemaShape;
|
|
138
|
+
server.registerTool("design_feedback", {
|
|
139
|
+
title: "Design Feedback",
|
|
140
|
+
description: TOOL_DESCRIPTION,
|
|
141
|
+
inputSchema,
|
|
142
|
+
},
|
|
143
|
+
/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
|
|
144
|
+
async (args) => {
|
|
145
|
+
// Type-safe access with explicit casting after validation
|
|
146
|
+
const { design, type, context } = args;
|
|
147
|
+
logger.info("design_feedback called", {
|
|
148
|
+
reviewType: type ?? "general",
|
|
149
|
+
designLength: design.length,
|
|
150
|
+
hasContext: context !== undefined,
|
|
151
|
+
});
|
|
152
|
+
try {
|
|
153
|
+
const startTime = Date.now();
|
|
154
|
+
// Build input object, only including optional properties if defined
|
|
155
|
+
// (required by exactOptionalPropertyTypes)
|
|
156
|
+
const buildInput = { design };
|
|
157
|
+
if (type !== undefined) {
|
|
158
|
+
buildInput.type = type;
|
|
159
|
+
}
|
|
160
|
+
if (context !== undefined) {
|
|
161
|
+
buildInput.context = context;
|
|
162
|
+
}
|
|
163
|
+
// Build the task string for the designer agent
|
|
164
|
+
const task = buildDesignTask(buildInput);
|
|
165
|
+
// Invoke the designer role with optional context
|
|
166
|
+
const invokeInput = context !== undefined
|
|
167
|
+
? { role: "designer", task, context }
|
|
168
|
+
: { role: "designer", task };
|
|
169
|
+
const response = await router.invokeAgent(invokeInput);
|
|
170
|
+
const durationMs = Date.now() - startTime;
|
|
171
|
+
logger.info("design_feedback completed", {
|
|
172
|
+
reviewType: type ?? "general",
|
|
173
|
+
provider: response.provider,
|
|
174
|
+
model: response.model,
|
|
175
|
+
durationMs,
|
|
176
|
+
traceId: response.metadata.traceId,
|
|
177
|
+
});
|
|
178
|
+
return {
|
|
179
|
+
content: [
|
|
180
|
+
{
|
|
181
|
+
type: "text",
|
|
182
|
+
text: formatDesignFeedbackResponse(response, type),
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
189
|
+
// Only pass error to logger if it's an Error instance
|
|
190
|
+
if (error instanceof Error) {
|
|
191
|
+
logger.error("design_feedback failed", {
|
|
192
|
+
reviewType: type ?? "general",
|
|
193
|
+
error,
|
|
194
|
+
errorMessage,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
logger.error("design_feedback failed", {
|
|
199
|
+
reviewType: type ?? "general",
|
|
200
|
+
errorMessage,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
// Return error as text content for MCP compatibility
|
|
204
|
+
return {
|
|
205
|
+
content: [
|
|
206
|
+
{
|
|
207
|
+
type: "text",
|
|
208
|
+
text: `## Error Getting Design Feedback\n\n${errorMessage}`,
|
|
209
|
+
},
|
|
210
|
+
],
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
logger.debug("Registered design_feedback tool", { reviewTypes: DESIGN_REVIEW_TYPES });
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=design-feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-feedback.js","sourceRoot":"","sources":["../../../src/mcp/tools/design-feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Registry
|
|
3
|
+
*
|
|
4
|
+
* Registers all AgentRouter tools with the MCP server.
|
|
5
|
+
* Each tool provides access to specialized agent capabilities.
|
|
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
|
+
import type { TaskCoordinator, PipelineManager, StateCoordinator } from "../../tasks/index.js";
|
|
11
|
+
import type { WorktreeManager } from "../../worktrees/manager.js";
|
|
12
|
+
import type { ResourceManager } from "../../worktrees/resource-manager.js";
|
|
13
|
+
/**
|
|
14
|
+
* Registers all AgentRouter tools with the MCP server.
|
|
15
|
+
*
|
|
16
|
+
* Tools registered:
|
|
17
|
+
* - invoke_agent: Invoke a specialized agent by role
|
|
18
|
+
* - list_agents: List all available agent roles
|
|
19
|
+
* - compare_agents: Run same task through multiple agents
|
|
20
|
+
* - review_code: Get code review feedback
|
|
21
|
+
* - design_feedback: Get UI/UX design feedback
|
|
22
|
+
* - critique_plan: Get critical feedback on plans (shorthand for critic role)
|
|
23
|
+
*
|
|
24
|
+
* When task integration is enabled:
|
|
25
|
+
* - execute_task: Execute a task with automatic worktree allocation for coder roles
|
|
26
|
+
* - create_routed_task: Generate TaskCreate instructions
|
|
27
|
+
* - execute_pipeline: Create multi-provider task pipelines
|
|
28
|
+
* - claim_next_task: Claim available tasks for workers
|
|
29
|
+
* - get_pipeline_status: Query pipeline execution status
|
|
30
|
+
*
|
|
31
|
+
* When worktree support is enabled:
|
|
32
|
+
* - resolve_conflicts: Resolve git merge conflicts using various strategies
|
|
33
|
+
*
|
|
34
|
+
* @param server - The MCP server instance
|
|
35
|
+
* @param router - The router engine for agent invocation
|
|
36
|
+
* @param logger - Logger for tool operations
|
|
37
|
+
* @param taskCoordinator - Optional TaskCoordinator for task lifecycle management
|
|
38
|
+
* @param pipelineManager - Optional PipelineManager for pipeline execution
|
|
39
|
+
* @param worktreeManager - Optional WorktreeManager for isolated git worktrees
|
|
40
|
+
* @param stateCoordinator - Optional StateCoordinator for unified state management
|
|
41
|
+
* @param resourceManager - Optional ResourceManager for worktree resource management
|
|
42
|
+
*/
|
|
43
|
+
export declare function registerTools(server: McpServer, router: RouterEngine, logger: Logger, taskCoordinator?: TaskCoordinator, pipelineManager?: PipelineManager, worktreeManager?: WorktreeManager, stateCoordinator?: StateCoordinator, resourceManager?: ResourceManager): void;
|
|
44
|
+
export { registerInvokeAgentTool } from "./invoke-agent.js";
|
|
45
|
+
export { registerCompareAgentsTool } from "./compare-agents.js";
|
|
46
|
+
export { registerCritiquePlanTool } from "./critique-plan.js";
|
|
47
|
+
export { registerDesignFeedbackTool } from "./design-feedback.js";
|
|
48
|
+
export { registerReviewCodeTool } from "./review-code.js";
|
|
49
|
+
export { registerWorktreeTools, registerWorktreeManagementTools, registerResolveConflictsTool, registerListWorktreesTool, registerCleanupWorktreesTool, registerGetWorktreeStatusTool, } from "./worktree/index.js";
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAM3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,eAAe,EACjC,eAAe,CAAC,EAAE,eAAe,EACjC,eAAe,CAAC,EAAE,eAAe,EACjC,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,eAAe,CAAC,EAAE,eAAe,GAChC,IAAI,CAuEN;AAqHD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Registry
|
|
3
|
+
*
|
|
4
|
+
* Registers all AgentRouter tools with the MCP server.
|
|
5
|
+
* Each tool provides access to specialized agent capabilities.
|
|
6
|
+
*/
|
|
7
|
+
import { registerCompareAgentsTool } from "./compare-agents.js";
|
|
8
|
+
import { registerCritiquePlanTool } from "./critique-plan.js";
|
|
9
|
+
import { registerDesignFeedbackTool } from "./design-feedback.js";
|
|
10
|
+
import { registerInvokeAgentTool } from "./invoke-agent.js";
|
|
11
|
+
import { registerReviewCodeTool } from "./review-code.js";
|
|
12
|
+
import { registerTaskTools } from "./tasks/index.js";
|
|
13
|
+
import { registerWorktreeTools, registerWorktreeManagementTools } from "./worktree/index.js";
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Tool Registration
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Registers all AgentRouter tools with the MCP server.
|
|
19
|
+
*
|
|
20
|
+
* Tools registered:
|
|
21
|
+
* - invoke_agent: Invoke a specialized agent by role
|
|
22
|
+
* - list_agents: List all available agent roles
|
|
23
|
+
* - compare_agents: Run same task through multiple agents
|
|
24
|
+
* - review_code: Get code review feedback
|
|
25
|
+
* - design_feedback: Get UI/UX design feedback
|
|
26
|
+
* - critique_plan: Get critical feedback on plans (shorthand for critic role)
|
|
27
|
+
*
|
|
28
|
+
* When task integration is enabled:
|
|
29
|
+
* - execute_task: Execute a task with automatic worktree allocation for coder roles
|
|
30
|
+
* - create_routed_task: Generate TaskCreate instructions
|
|
31
|
+
* - execute_pipeline: Create multi-provider task pipelines
|
|
32
|
+
* - claim_next_task: Claim available tasks for workers
|
|
33
|
+
* - get_pipeline_status: Query pipeline execution status
|
|
34
|
+
*
|
|
35
|
+
* When worktree support is enabled:
|
|
36
|
+
* - resolve_conflicts: Resolve git merge conflicts using various strategies
|
|
37
|
+
*
|
|
38
|
+
* @param server - The MCP server instance
|
|
39
|
+
* @param router - The router engine for agent invocation
|
|
40
|
+
* @param logger - Logger for tool operations
|
|
41
|
+
* @param taskCoordinator - Optional TaskCoordinator for task lifecycle management
|
|
42
|
+
* @param pipelineManager - Optional PipelineManager for pipeline execution
|
|
43
|
+
* @param worktreeManager - Optional WorktreeManager for isolated git worktrees
|
|
44
|
+
* @param stateCoordinator - Optional StateCoordinator for unified state management
|
|
45
|
+
* @param resourceManager - Optional ResourceManager for worktree resource management
|
|
46
|
+
*/
|
|
47
|
+
export function registerTools(server, router, logger, taskCoordinator, pipelineManager, worktreeManager, stateCoordinator, resourceManager) {
|
|
48
|
+
logger.info("Registering AgentRouter tools");
|
|
49
|
+
// Register invoke_agent tool
|
|
50
|
+
registerInvokeAgentTool(server, router, logger);
|
|
51
|
+
// Register list_agents tool
|
|
52
|
+
registerListAgentsTool(server, router, logger);
|
|
53
|
+
// Register compare_agents tool
|
|
54
|
+
registerCompareAgentsTool(server, router, logger);
|
|
55
|
+
// Register review_code tool
|
|
56
|
+
registerReviewCodeTool(server, router, logger);
|
|
57
|
+
// Register design_feedback tool
|
|
58
|
+
registerDesignFeedbackTool(server, router, logger);
|
|
59
|
+
// Register critique_plan tool
|
|
60
|
+
registerCritiquePlanTool(server, router, logger);
|
|
61
|
+
// Register task-aware tools if task integration is enabled
|
|
62
|
+
if (taskCoordinator && pipelineManager) {
|
|
63
|
+
registerTaskTools(server, router, taskCoordinator, pipelineManager, logger, worktreeManager);
|
|
64
|
+
logger.info("Task-aware tools registered", {
|
|
65
|
+
worktreeSupport: !!worktreeManager,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// Register worktree tools if worktree support is enabled
|
|
69
|
+
if (worktreeManager) {
|
|
70
|
+
registerWorktreeTools(server, logger, worktreeManager, stateCoordinator);
|
|
71
|
+
logger.info("Worktree tools registered", {
|
|
72
|
+
stateCoordinatorAvailable: !!stateCoordinator,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// Register worktree management tools if resource manager is available
|
|
76
|
+
if (resourceManager) {
|
|
77
|
+
registerWorktreeManagementTools(server, logger, resourceManager);
|
|
78
|
+
logger.info("Worktree management tools registered");
|
|
79
|
+
}
|
|
80
|
+
const tools = [
|
|
81
|
+
"invoke_agent",
|
|
82
|
+
"list_agents",
|
|
83
|
+
"compare_agents",
|
|
84
|
+
"review_code",
|
|
85
|
+
"design_feedback",
|
|
86
|
+
"critique_plan",
|
|
87
|
+
];
|
|
88
|
+
if (taskCoordinator && pipelineManager) {
|
|
89
|
+
tools.push("create_routed_task", "claim_next_task", "execute_task", "get_pipeline_status", "execute_pipeline");
|
|
90
|
+
}
|
|
91
|
+
if (worktreeManager) {
|
|
92
|
+
tools.push("resolve_conflicts");
|
|
93
|
+
}
|
|
94
|
+
if (resourceManager) {
|
|
95
|
+
tools.push("list_worktrees", "cleanup_worktrees", "get_worktree_status");
|
|
96
|
+
}
|
|
97
|
+
logger.info("AgentRouter tools registered successfully", { tools });
|
|
98
|
+
}
|
|
99
|
+
// ============================================================================
|
|
100
|
+
// list_agents Tool Implementation
|
|
101
|
+
// ============================================================================
|
|
102
|
+
/**
|
|
103
|
+
* Registers the list_agents tool.
|
|
104
|
+
*
|
|
105
|
+
* This tool returns a list of all available agent roles with their
|
|
106
|
+
* configurations, including provider, model, and fallback status.
|
|
107
|
+
*
|
|
108
|
+
* @param server - MCP server instance
|
|
109
|
+
* @param router - RouterEngine for role information
|
|
110
|
+
* @param logger - Logger instance for structured logging
|
|
111
|
+
*/
|
|
112
|
+
function registerListAgentsTool(server, router, logger) {
|
|
113
|
+
server.registerTool("list_agents", {
|
|
114
|
+
title: "List Agents",
|
|
115
|
+
description: "List all available agent roles and their configurations. " +
|
|
116
|
+
"Returns role names, providers, models, and whether fallbacks are configured.",
|
|
117
|
+
inputSchema: {},
|
|
118
|
+
}, async () => {
|
|
119
|
+
logger.debug("Executing list_agents tool");
|
|
120
|
+
try {
|
|
121
|
+
// Get role information from the router
|
|
122
|
+
const roles = router.listRoles();
|
|
123
|
+
const roleConfigs = roles.map((roleName) => {
|
|
124
|
+
const config = router.resolveRole(roleName);
|
|
125
|
+
return {
|
|
126
|
+
name: roleName,
|
|
127
|
+
provider: config.provider,
|
|
128
|
+
model: config.model,
|
|
129
|
+
hasFallback: !!config.fallback,
|
|
130
|
+
description: getRoleDescription(roleName),
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
logger.debug("list_agents completed", { roleCount: roles.length });
|
|
134
|
+
// Format the response as readable text
|
|
135
|
+
const formattedList = roleConfigs
|
|
136
|
+
.map((role) => `- **${role.name}**: ${role.description}\n` +
|
|
137
|
+
` Provider: ${role.provider} | Model: ${role.model}` +
|
|
138
|
+
(role.hasFallback ? " | Fallback: configured" : ""))
|
|
139
|
+
.join("\n\n");
|
|
140
|
+
return {
|
|
141
|
+
content: [
|
|
142
|
+
{
|
|
143
|
+
type: "text",
|
|
144
|
+
text: `# Available Agent Roles\n\n${formattedList}\n\n` +
|
|
145
|
+
`---\n*Total: ${roles.length} agents configured*`,
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
152
|
+
logger.error("list_agents failed", { errorMessage });
|
|
153
|
+
return {
|
|
154
|
+
content: [
|
|
155
|
+
{
|
|
156
|
+
type: "text",
|
|
157
|
+
text: `## Error Listing Agents\n\n${errorMessage}`,
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
logger.debug("Registered list_agents tool");
|
|
164
|
+
}
|
|
165
|
+
// ============================================================================
|
|
166
|
+
// Helper Functions
|
|
167
|
+
// ============================================================================
|
|
168
|
+
/**
|
|
169
|
+
* Get a human-readable description for a role.
|
|
170
|
+
* These are predefined descriptions for the standard roles.
|
|
171
|
+
*/
|
|
172
|
+
function getRoleDescription(role) {
|
|
173
|
+
const descriptions = {
|
|
174
|
+
coder: "Expert software engineer for code generation and implementation tasks",
|
|
175
|
+
critic: "Skeptical senior architect for reviewing plans and challenging assumptions",
|
|
176
|
+
designer: "UI/UX specialist for design feedback and user experience evaluation",
|
|
177
|
+
researcher: "Research specialist for fact-finding and information gathering",
|
|
178
|
+
reviewer: "Code review expert for quality, security, and best practices",
|
|
179
|
+
};
|
|
180
|
+
return descriptions[role] ?? "Custom agent role";
|
|
181
|
+
}
|
|
182
|
+
// ============================================================================
|
|
183
|
+
// Exports
|
|
184
|
+
// ============================================================================
|
|
185
|
+
export { registerInvokeAgentTool } from "./invoke-agent.js";
|
|
186
|
+
export { registerCompareAgentsTool } from "./compare-agents.js";
|
|
187
|
+
export { registerCritiquePlanTool } from "./critique-plan.js";
|
|
188
|
+
export { registerDesignFeedbackTool } from "./design-feedback.js";
|
|
189
|
+
export { registerReviewCodeTool } from "./review-code.js";
|
|
190
|
+
export { registerWorktreeTools, registerWorktreeManagementTools, registerResolveConflictsTool, registerListWorktreesTool, registerCleanupWorktreesTool, registerGetWorktreeStatusTool, } from "./worktree/index.js";
|
|
191
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* invoke_agent MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Invokes a specialized AI agent for a specific task.
|
|
5
|
+
* Available roles: coder, critic, designer, researcher, reviewer
|
|
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 invoke_agent 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
|
+
* registerInvokeAgentTool(server, router, logger);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function registerInvokeAgentTool(server: McpServer, router: RouterEngine, logger: Logger): void;
|
|
25
|
+
//# sourceMappingURL=invoke-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoke-agent.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/invoke-agent.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;AA0E3D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GACb,IAAI,CA8EN"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* invoke_agent MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Invokes a specialized AI agent for a specific task.
|
|
5
|
+
* Available roles: coder, critic, designer, researcher, reviewer
|
|
6
|
+
*/
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Constants
|
|
10
|
+
// ============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Available agent roles
|
|
13
|
+
*/
|
|
14
|
+
const AGENT_ROLES = ["coder", "critic", "designer", "orchestrator", "researcher", "reviewer"];
|
|
15
|
+
/**
|
|
16
|
+
* Tool description for invoke_agent
|
|
17
|
+
*/
|
|
18
|
+
const TOOL_DESCRIPTION = "Invoke a specialized AI agent for a specific task. Available roles: coder (code generation), critic (plan review, assumption challenging), designer (UI/UX feedback), orchestrator (task synthesis, document improvement), researcher (fact-finding), reviewer (code review).";
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// Input Schema
|
|
21
|
+
// ============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Zod schema shape for invoke_agent input validation.
|
|
24
|
+
* Uses raw shape format as expected by MCP SDK's registerTool.
|
|
25
|
+
*/
|
|
26
|
+
const invokeAgentInputSchemaShape = {
|
|
27
|
+
role: z
|
|
28
|
+
.enum(AGENT_ROLES)
|
|
29
|
+
.describe("The agent role to invoke. Use 'critic' for plan/PRD review, 'designer' for UI/UX feedback, 'reviewer' for code review."),
|
|
30
|
+
task: z.string().min(1).describe("The task description or question for the agent"),
|
|
31
|
+
context: z
|
|
32
|
+
.string()
|
|
33
|
+
.optional()
|
|
34
|
+
.describe("Optional additional context from the current conversation"),
|
|
35
|
+
};
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Response Formatter
|
|
38
|
+
// ============================================================================
|
|
39
|
+
/**
|
|
40
|
+
* Formats an AgentResponse for MCP text output
|
|
41
|
+
*
|
|
42
|
+
* @param response - The response from the agent invocation
|
|
43
|
+
* @returns Formatted string with header, metadata, and content
|
|
44
|
+
*/
|
|
45
|
+
function formatAgentResponse(response) {
|
|
46
|
+
const header = `## ${response.role.toUpperCase()} Agent Response\n`;
|
|
47
|
+
const meta = `*Provider: ${response.provider} | Model: ${response.model} | Duration: ${String(response.metadata.durationMs)}ms*\n\n`;
|
|
48
|
+
const content = response.content
|
|
49
|
+
.filter((block) => block.type === "text")
|
|
50
|
+
.map((block) => block.text ?? "")
|
|
51
|
+
.join("\n");
|
|
52
|
+
return header + meta + content;
|
|
53
|
+
}
|
|
54
|
+
// ============================================================================
|
|
55
|
+
// Tool Registration
|
|
56
|
+
// ============================================================================
|
|
57
|
+
/**
|
|
58
|
+
* Registers the invoke_agent tool with the MCP server
|
|
59
|
+
*
|
|
60
|
+
* @param server - MCP server instance
|
|
61
|
+
* @param router - RouterEngine for agent invocation
|
|
62
|
+
* @param logger - Logger instance for structured logging
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const server = new McpServer({ name: 'agent-router', version: '0.1.0' });
|
|
67
|
+
* const router = new RouterEngine(config, providers, logger);
|
|
68
|
+
* registerInvokeAgentTool(server, router, logger);
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export function registerInvokeAgentTool(server, router, logger) {
|
|
72
|
+
// Use type assertion to work around Zod version compatibility issues
|
|
73
|
+
// between zod 3.25+ and the MCP SDK's ZodRawShapeCompat type
|
|
74
|
+
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
|
|
75
|
+
const inputSchema = invokeAgentInputSchemaShape;
|
|
76
|
+
server.registerTool("invoke_agent", {
|
|
77
|
+
title: "Invoke Agent",
|
|
78
|
+
description: TOOL_DESCRIPTION,
|
|
79
|
+
inputSchema,
|
|
80
|
+
},
|
|
81
|
+
/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
|
|
82
|
+
async (args) => {
|
|
83
|
+
// Type-safe access with explicit casting after validation
|
|
84
|
+
const { role, task, context } = args;
|
|
85
|
+
logger.info("invoke_agent called", {
|
|
86
|
+
role,
|
|
87
|
+
taskLength: task.length,
|
|
88
|
+
hasContext: context !== undefined,
|
|
89
|
+
});
|
|
90
|
+
try {
|
|
91
|
+
const startTime = Date.now();
|
|
92
|
+
// Build input with optional context only if provided
|
|
93
|
+
const invokeInput = context !== undefined ? { role, task, context } : { role, task };
|
|
94
|
+
const response = await router.invokeAgent(invokeInput);
|
|
95
|
+
const durationMs = Date.now() - startTime;
|
|
96
|
+
logger.info("invoke_agent completed", {
|
|
97
|
+
role,
|
|
98
|
+
provider: response.provider,
|
|
99
|
+
model: response.model,
|
|
100
|
+
durationMs,
|
|
101
|
+
traceId: response.metadata.traceId,
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
content: [
|
|
105
|
+
{
|
|
106
|
+
type: "text",
|
|
107
|
+
text: formatAgentResponse(response),
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
114
|
+
// Only pass error to logger if it's an Error instance
|
|
115
|
+
if (error instanceof Error) {
|
|
116
|
+
logger.error("invoke_agent failed", {
|
|
117
|
+
role,
|
|
118
|
+
error,
|
|
119
|
+
errorMessage,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
logger.error("invoke_agent failed", {
|
|
124
|
+
role,
|
|
125
|
+
errorMessage,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
// Return error as text content for MCP compatibility
|
|
129
|
+
return {
|
|
130
|
+
content: [
|
|
131
|
+
{
|
|
132
|
+
type: "text",
|
|
133
|
+
text: `## Error Invoking ${role.toUpperCase()} Agent\n\n${errorMessage}`,
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
logger.debug("Registered invoke_agent tool", { roles: AGENT_ROLES });
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=invoke-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoke-agent.js","sourceRoot":"","sources":["../../../src/mcp/tools/invoke-agent.ts"],"names":[],"mappings":"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"}
|