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,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":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E;;GAEG;AACH,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAU,CAAC;AAEvF;;GAEG;AACH,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAEnE;;GAEG;AACH,MAAM,gBAAgB,GACpB,mFAAmF;IACnF,iFAAiF,CAAC;AAEpF,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,6BAA6B,GAAG;IACpC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,0CAA0C,CAAC;IACvD,KAAK,EAAE,CAAC;SACL,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1B,QAAQ,EAAE;SACV,QAAQ,CAAC,gFAAgF,CAAC;IAC7F,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,mBAAmB,CAAC;SACzB,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CACP,6HAA6H,CAC9H;IACH,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;CAChE,CAAC;AAYF,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;;;;GAKG;AACH,SAAS,yBAAyB,CAAC,KAAyB;IAC1D,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAE9D,MAAM,YAAY,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9D,MAAM,UAAU,GAAG,KAAK,EAAE,MAAM;QAC9B,CAAC,CAAC,qBAAqB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAC/D,CAAC,CAAC,UAAU,CAAC;IACf,MAAM,aAAa,GAAG,cAAc,EAAE,MAAM;QAC1C,CAAC,CAAC,mBAAmB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACjD,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;YAGG,UAAU;WACX,YAAY;cACT,QAAQ;;;;;;;;;;;OAWf,UAAU;EACf,aAAa;;;oEAGqD,UAAU;;;;;;;;;;;;cAYhE,QAAQ,YAAY,sBAAsB,CAAC,QAAQ,CAAC;;;CAGjE,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,QAA8C;IAC5E,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,uDAAuD,CAAC;QACjE,KAAK,QAAQ;YACX,OAAO,sDAAsD,CAAC;QAChE,KAAK,MAAM;YACT,OAAO,4DAA4D,CAAC;IACxE,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAiB,EACjB,MAAc;IAEd,qEAAqE;IACrE,6DAA6D;IAC7D,gGAAgG;IAChG,MAAM,WAAW,GAAQ,6BAA6B,CAAC;IAEvD,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,gBAAgB;QAC7B,WAAW;KACZ;IACD,+FAA+F;IAC/F,KAAK,EAAE,IAAa,EAAE,EAAE;QACtB,0DAA0D;QAC1D,MAAM,KAAK,GAAG,IAA0B,CAAC;QAEzC,6CAA6C;QAC7C,MAAM,eAAe,GAAuB;YAC1C,GAAG,KAAK;YACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,MAAM;SACnC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;YACpC,UAAU,EAAE,eAAe,CAAC,UAAU;YACtC,KAAK,EAAE,eAAe,CAAC,KAAK;YAC5B,QAAQ,EAAE,eAAe,CAAC,QAAQ;YAClC,YAAY,EAAE,eAAe,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC;SAC1D,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,yBAAyB,CAAC,eAAe,CAAC,CAAC;YAEhE,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE;gBACrD,UAAU,EAAE,eAAe,CAAC,UAAU;aACvC,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,YAAY;qBACnB;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE5E,sDAAsD;YACtD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;oBACrC,UAAU,EAAE,eAAe,CAAC,UAAU;oBACtC,KAAK;oBACL,YAAY;iBACb,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;oBACrC,UAAU,EAAE,eAAe,CAAC,UAAU;oBACtC,YAAY;iBACb,CAAC,CAAC;YACL,CAAC;YAED,qDAAqD;YACrD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,6CAA6C,YAAY,EAAE;qBAClE;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE;QAC9C,KAAK,EAAE,WAAW;QAClB,UAAU,EAAE,mBAAmB;KAChC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -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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"}
|