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,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve Conflicts MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Allows users to resolve git merge conflicts in worktrees using various strategies.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { ConflictHandler } from "../../../worktrees/conflict-handler.js";
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Constants
|
|
10
|
+
// ============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Tool description for resolve_conflicts
|
|
13
|
+
*/
|
|
14
|
+
const TOOL_DESCRIPTION = "Resolve git merge conflicts in a worktree using various strategies. " +
|
|
15
|
+
"Strategies: 'ours' (keep current branch), 'theirs' (accept incoming), " +
|
|
16
|
+
"'auto' (attempt automatic resolution), 'manual' (provide explicit resolutions).";
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Input Schema
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Zod schema shape for resolve_conflicts input validation.
|
|
22
|
+
*/
|
|
23
|
+
const resolveConflictsInputSchemaShape = {
|
|
24
|
+
taskId: z.string().min(1).describe("The task ID with conflicts to resolve"),
|
|
25
|
+
strategy: z
|
|
26
|
+
.enum(["ours", "theirs", "auto", "manual"])
|
|
27
|
+
.describe("Resolution strategy: 'ours' (keep current), 'theirs' (accept incoming), " +
|
|
28
|
+
"'auto' (attempt automatic), 'manual' (provide resolutions)"),
|
|
29
|
+
manualResolutions: z
|
|
30
|
+
.array(z.object({
|
|
31
|
+
file: z.string().describe("File path relative to worktree"),
|
|
32
|
+
resolvedContent: z.string().describe("The resolved content for this file"),
|
|
33
|
+
}))
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("Required when strategy is 'manual'"),
|
|
36
|
+
completeMerge: z
|
|
37
|
+
.boolean()
|
|
38
|
+
.default(true)
|
|
39
|
+
.describe("Whether to complete the merge after resolving conflicts (default: true)"),
|
|
40
|
+
};
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// Response Formatters
|
|
43
|
+
// ============================================================================
|
|
44
|
+
/**
|
|
45
|
+
* Format conflict details for display.
|
|
46
|
+
*/
|
|
47
|
+
function formatConflictDetails(state) {
|
|
48
|
+
const lines = [];
|
|
49
|
+
lines.push(`## Conflict Details`);
|
|
50
|
+
lines.push(`- **Task ID:** ${state.taskId}`);
|
|
51
|
+
lines.push(`- **Total Conflicts:** ${String(state.totalConflicts)}`);
|
|
52
|
+
lines.push(`- **Files Affected:** ${String(state.files.length)}`);
|
|
53
|
+
lines.push("");
|
|
54
|
+
for (const file of state.files) {
|
|
55
|
+
lines.push(`### ${file.file}`);
|
|
56
|
+
lines.push(`- Conflicts: ${String(file.totalConflicts)}`);
|
|
57
|
+
for (let i = 0; i < file.conflicts.length; i++) {
|
|
58
|
+
const conflict = file.conflicts[i];
|
|
59
|
+
lines.push(`- Conflict ${String(i + 1)}: Lines ${String(conflict.startLine)}-${String(conflict.endLine)}`);
|
|
60
|
+
lines.push(` - Ours (${conflict.oursLabel}): ${String(conflict.oursContent.split("\n").length)} lines`);
|
|
61
|
+
lines.push(` - Theirs (${conflict.theirsLabel}): ${String(conflict.theirsContent.split("\n").length)} lines`);
|
|
62
|
+
}
|
|
63
|
+
lines.push("");
|
|
64
|
+
}
|
|
65
|
+
return lines.join("\n");
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Format resolution result for display.
|
|
69
|
+
*/
|
|
70
|
+
function formatResolutionResult(input, result) {
|
|
71
|
+
const lines = [];
|
|
72
|
+
if (result.success) {
|
|
73
|
+
lines.push(`## Conflicts Resolved Successfully`);
|
|
74
|
+
lines.push("");
|
|
75
|
+
lines.push(`- **Strategy:** ${input.strategy}`);
|
|
76
|
+
lines.push(`- **Files Resolved:** ${String(result.resolvedFiles.length)}`);
|
|
77
|
+
if (result.resolvedFiles.length > 0) {
|
|
78
|
+
lines.push("");
|
|
79
|
+
lines.push("### Resolved Files");
|
|
80
|
+
for (const file of result.resolvedFiles) {
|
|
81
|
+
lines.push(`- ${file}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (result.mergeCompleted && result.mergeCommit) {
|
|
85
|
+
lines.push("");
|
|
86
|
+
lines.push(`### Merge Completed`);
|
|
87
|
+
lines.push(`- **Commit:** \`${result.mergeCommit}\``);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
lines.push(`## Conflict Resolution ${result.remainingConflicts > 0 ? "Partial" : "Failed"}`);
|
|
92
|
+
lines.push("");
|
|
93
|
+
if (result.error) {
|
|
94
|
+
lines.push(`**Error:** ${result.error}`);
|
|
95
|
+
lines.push("");
|
|
96
|
+
}
|
|
97
|
+
if (result.resolvedFiles.length > 0) {
|
|
98
|
+
lines.push(`### Resolved (${String(result.resolvedFiles.length)})`);
|
|
99
|
+
for (const file of result.resolvedFiles) {
|
|
100
|
+
lines.push(`- ${file}`);
|
|
101
|
+
}
|
|
102
|
+
lines.push("");
|
|
103
|
+
}
|
|
104
|
+
if (result.remainingConflicts > 0) {
|
|
105
|
+
lines.push(`### Remaining Conflicts: ${String(result.remainingConflicts)}`);
|
|
106
|
+
lines.push("");
|
|
107
|
+
lines.push("**Next Steps:**");
|
|
108
|
+
lines.push('1. Use `resolve_conflicts` with `strategy: "manual"` and provide `manualResolutions`');
|
|
109
|
+
lines.push('2. Or use `strategy: "ours"` or `strategy: "theirs"` to accept one side');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return lines.join("\n");
|
|
113
|
+
}
|
|
114
|
+
// ============================================================================
|
|
115
|
+
// Tool Registration
|
|
116
|
+
// ============================================================================
|
|
117
|
+
/**
|
|
118
|
+
* Register the resolve_conflicts MCP tool.
|
|
119
|
+
*
|
|
120
|
+
* @param server - MCP server instance
|
|
121
|
+
* @param logger - Logger instance for structured logging
|
|
122
|
+
* @param worktreeManager - Optional WorktreeManager for git worktree operations
|
|
123
|
+
* @param stateCoordinator - Optional StateCoordinator for conflict state tracking
|
|
124
|
+
*/
|
|
125
|
+
export function registerResolveConflictsTool(server, logger, worktreeManager, stateCoordinator) {
|
|
126
|
+
// Use type assertion to work around Zod version compatibility issues
|
|
127
|
+
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
|
|
128
|
+
const inputSchema = resolveConflictsInputSchemaShape;
|
|
129
|
+
server.registerTool("resolve_conflicts", {
|
|
130
|
+
title: "Resolve Conflicts",
|
|
131
|
+
description: TOOL_DESCRIPTION,
|
|
132
|
+
inputSchema,
|
|
133
|
+
},
|
|
134
|
+
/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
|
|
135
|
+
async (args) => {
|
|
136
|
+
const input = args;
|
|
137
|
+
const { taskId, strategy, manualResolutions, completeMerge } = input;
|
|
138
|
+
logger.info("resolve_conflicts called", { taskId, strategy });
|
|
139
|
+
// Validate dependencies
|
|
140
|
+
if (!worktreeManager) {
|
|
141
|
+
return {
|
|
142
|
+
content: [
|
|
143
|
+
{
|
|
144
|
+
type: "text",
|
|
145
|
+
text: "## Error\n\nWorktree support is not enabled. Cannot resolve conflicts.",
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// Get worktree for task
|
|
151
|
+
const worktree = worktreeManager.getByTaskId(taskId);
|
|
152
|
+
if (!worktree) {
|
|
153
|
+
return {
|
|
154
|
+
content: [
|
|
155
|
+
{
|
|
156
|
+
type: "text",
|
|
157
|
+
text: `## Error\n\nNo worktree found for task: ${taskId}`,
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// Create conflict handler
|
|
163
|
+
const conflictHandler = new ConflictHandler(worktree.path);
|
|
164
|
+
// Check if there are actually conflicts
|
|
165
|
+
const hasConflicts = await conflictHandler.hasConflicts();
|
|
166
|
+
if (!hasConflicts) {
|
|
167
|
+
return {
|
|
168
|
+
content: [
|
|
169
|
+
{
|
|
170
|
+
type: "text",
|
|
171
|
+
text: `## No Conflicts\n\nTask ${taskId} has no merge conflicts to resolve.`,
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// Detect and display current conflicts
|
|
177
|
+
const conflictState = await conflictHandler.getConflictState(taskId, worktree.id);
|
|
178
|
+
// Track conflict state if coordinator is available
|
|
179
|
+
if (stateCoordinator) {
|
|
180
|
+
stateCoordinator.setConflictState(taskId, conflictState);
|
|
181
|
+
}
|
|
182
|
+
// Prepare manual resolutions if provided
|
|
183
|
+
const manualResolutionList = manualResolutions?.map((r) => ({
|
|
184
|
+
file: r.file,
|
|
185
|
+
resolvedContent: r.resolvedContent,
|
|
186
|
+
}));
|
|
187
|
+
// Resolve conflicts
|
|
188
|
+
const resolutionResult = await conflictHandler.resolveConflicts(strategy, manualResolutionList);
|
|
189
|
+
let mergeCompleted = false;
|
|
190
|
+
let mergeCommit;
|
|
191
|
+
// Complete merge if requested and all conflicts resolved
|
|
192
|
+
if (completeMerge && resolutionResult.success) {
|
|
193
|
+
const mergeResult = await conflictHandler.completeMerge(`Resolved conflicts using '${strategy}' strategy`);
|
|
194
|
+
mergeCompleted = mergeResult.success;
|
|
195
|
+
mergeCommit = mergeResult.commitHash;
|
|
196
|
+
if (mergeCompleted && stateCoordinator) {
|
|
197
|
+
stateCoordinator.markConflictResolved(taskId, strategy);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const remainingConflicts = resolutionResult.remainingConflicts.reduce((sum, f) => sum + f.totalConflicts, 0);
|
|
201
|
+
const output = formatResolutionResult(input, {
|
|
202
|
+
success: resolutionResult.success,
|
|
203
|
+
resolvedFiles: resolutionResult.resolvedFiles,
|
|
204
|
+
remainingConflicts,
|
|
205
|
+
mergeCompleted,
|
|
206
|
+
mergeCommit,
|
|
207
|
+
error: resolutionResult.error,
|
|
208
|
+
});
|
|
209
|
+
logger.info("resolve_conflicts completed", {
|
|
210
|
+
taskId,
|
|
211
|
+
strategy,
|
|
212
|
+
success: resolutionResult.success,
|
|
213
|
+
resolvedFiles: resolutionResult.resolvedFiles.length,
|
|
214
|
+
remainingConflicts,
|
|
215
|
+
mergeCompleted,
|
|
216
|
+
});
|
|
217
|
+
return {
|
|
218
|
+
content: [
|
|
219
|
+
{
|
|
220
|
+
type: "text",
|
|
221
|
+
text: output,
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
};
|
|
225
|
+
});
|
|
226
|
+
logger.debug("Registered resolve_conflicts tool");
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=resolve-conflicts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-conflicts.js","sourceRoot":"","sources":["../../../../src/mcp/tools/worktree/resolve-conflicts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAGzE,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E;;GAEG;AACH,MAAM,gBAAgB,GACpB,sEAAsE;IACtE,wEAAwE;IACxE,iFAAiF,CAAC;AAEpF,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E;;GAEG;AACH,MAAM,gCAAgC,GAAG;IACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC3E,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;SAC1C,QAAQ,CACP,0EAA0E;QACxE,4DAA4D,CAC/D;IACH,iBAAiB,EAAE,CAAC;SACjB,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC3D,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KAC3E,CAAC,CACH;SACA,QAAQ,EAAE;SACV,QAAQ,CAAC,oCAAoC,CAAC;IACjD,aAAa,EAAE,CAAC;SACb,OAAO,EAAE;SACT,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,yEAAyE,CAAC;CACvF,CAAC;AAeF,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,qBAAqB,CAAC,KAAoB;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACrE,KAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CACR,cAAc,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAC/F,CAAC;YACF,KAAK,CAAC,IAAI,CACR,aAAa,QAAQ,CAAC,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAC7F,CAAC;YACF,KAAK,CAAC,IAAI,CACR,eAAe,QAAQ,CAAC,WAAW,MAAM,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CACnG,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,KAA4B,EAC5B,MAOC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE3E,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,0BAA0B,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CACjF,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC1B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC5E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CACR,sFAAsF,CACvF,CAAC;YACF,KAAK,CAAC,IAAI,CACR,yEAAyE,CAC1E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;;;GAOG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAAiB,EACjB,MAAc,EACd,eAAiC,EACjC,gBAAmC;IAEnC,qEAAqE;IACrE,gGAAgG;IAChG,MAAM,WAAW,GAAQ,gCAAgC,CAAC;IAE1D,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,gBAAgB;QAC7B,WAAW;KACZ;IACD,+FAA+F;IAC/F,KAAK,EAAE,IAAa,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,IAA6B,CAAC;QAC5C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;QAErE,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE9D,wBAAwB;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,wEAAwE;qBAC/E;iBACF;aACF,CAAC;QACJ,CAAC;QAED,wBAAwB;QACxB,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,2CAA2C,MAAM,EAAE;qBAC1D;iBACF;aACF,CAAC;QACJ,CAAC;QAED,0BAA0B;QAC1B,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE3D,wCAAwC;QACxC,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,CAAC;QAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,2BAA2B,MAAM,qCAAqC;qBAC7E;iBACF;aACF,CAAC;QACJ,CAAC;QAED,uCAAuC;QACvC,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAElF,mDAAmD;QACnD,IAAI,gBAAgB,EAAE,CAAC;YACrB,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC3D,CAAC;QAED,yCAAyC;QACzC,MAAM,oBAAoB,GAAmC,iBAAiB,EAAE,GAAG,CACjF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACN,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,eAAe,EAAE,CAAC,CAAC,eAAe;SACnC,CAAC,CACH,CAAC;QAEF,oBAAoB;QACpB,MAAM,gBAAgB,GAAG,MAAM,eAAe,CAAC,gBAAgB,CAC7D,QAAsC,EACtC,oBAAoB,CACrB,CAAC;QAEF,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,WAA+B,CAAC;QAEpC,yDAAyD;QACzD,IAAI,aAAa,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC9C,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,aAAa,CACrD,6BAA6B,QAAQ,YAAY,CAClD,CAAC;YACF,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC;YACrC,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC;YAErC,IAAI,cAAc,IAAI,gBAAgB,EAAE,CAAC;gBACvC,gBAAgB,CAAC,oBAAoB,CACnC,MAAM,EACN,QAAsC,CACvC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,CACnE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,cAAc,EAClC,CAAC,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,EAAE;YAC3C,OAAO,EAAE,gBAAgB,CAAC,OAAO;YACjC,aAAa,EAAE,gBAAgB,CAAC,aAAa;YAC7C,kBAAkB;YAClB,cAAc;YACd,WAAW;YACX,KAAK,EAAE,gBAAgB,CAAC,KAAK;SAC9B,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;YACzC,MAAM;YACN,QAAQ;YACR,OAAO,EAAE,gBAAgB,CAAC,OAAO;YACjC,aAAa,EAAE,gBAAgB,CAAC,aAAa,CAAC,MAAM;YACpD,kBAAkB;YAClB,cAAc;SACf,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,MAAM;iBACb;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* stdio Transport for MCP Server
|
|
3
|
+
* Provides stdin/stdout based communication for Claude Code integration
|
|
4
|
+
*/
|
|
5
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
|
+
/**
|
|
7
|
+
* Creates a stdio transport for the MCP server
|
|
8
|
+
* This transport uses stdin/stdout for communication with Claude Code
|
|
9
|
+
*
|
|
10
|
+
* @returns StdioServerTransport instance configured for use
|
|
11
|
+
*/
|
|
12
|
+
export declare function createStdioTransport(): StdioServerTransport;
|
|
13
|
+
//# sourceMappingURL=stdio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/mcp/transport/stdio.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,oBAAoB,CAE3D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* stdio Transport for MCP Server
|
|
3
|
+
* Provides stdin/stdout based communication for Claude Code integration
|
|
4
|
+
*/
|
|
5
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
|
+
/**
|
|
7
|
+
* Creates a stdio transport for the MCP server
|
|
8
|
+
* This transport uses stdin/stdout for communication with Claude Code
|
|
9
|
+
*
|
|
10
|
+
* @returns StdioServerTransport instance configured for use
|
|
11
|
+
*/
|
|
12
|
+
export function createStdioTransport() {
|
|
13
|
+
return new StdioServerTransport();
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=stdio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/mcp/transport/stdio.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,oBAAoB,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Module
|
|
3
|
+
*
|
|
4
|
+
* Pino-based structured logging for AgentRouter.
|
|
5
|
+
* Provides a Logger class with support for:
|
|
6
|
+
* - Log levels (trace, debug, info, warn, error, fatal)
|
|
7
|
+
* - Structured logging with context
|
|
8
|
+
* - Child loggers with bound context
|
|
9
|
+
* - Pretty printing in development mode
|
|
10
|
+
* - Correlation IDs and timestamps
|
|
11
|
+
*/
|
|
12
|
+
import { type Logger as PinoLogger } from 'pino';
|
|
13
|
+
/**
|
|
14
|
+
* Log context that can be bound to a logger or passed per-call.
|
|
15
|
+
*/
|
|
16
|
+
export interface LogContext {
|
|
17
|
+
/** Trace ID for request correlation */
|
|
18
|
+
traceId?: string;
|
|
19
|
+
/** Agent role being invoked */
|
|
20
|
+
role?: string;
|
|
21
|
+
/** Provider handling the request */
|
|
22
|
+
provider?: string;
|
|
23
|
+
/** Model being used */
|
|
24
|
+
model?: string;
|
|
25
|
+
/** Duration in milliseconds */
|
|
26
|
+
durationMs?: number;
|
|
27
|
+
/** Additional arbitrary context */
|
|
28
|
+
[key: string]: unknown;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Options for creating a Logger instance.
|
|
32
|
+
*/
|
|
33
|
+
export interface LoggerOptions {
|
|
34
|
+
/** Logger name (appears in logs) */
|
|
35
|
+
name?: string;
|
|
36
|
+
/** Log level (default: info, or debug in development) */
|
|
37
|
+
level?: LogLevel;
|
|
38
|
+
/** Context to bind to all log entries */
|
|
39
|
+
context?: LogContext;
|
|
40
|
+
/** Whether to enable pretty printing (default: auto-detect from NODE_ENV) */
|
|
41
|
+
pretty?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Supported log levels.
|
|
45
|
+
*/
|
|
46
|
+
export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';
|
|
47
|
+
/**
|
|
48
|
+
* Logger class wrapping pino with structured logging support.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const logger = new Logger({ name: 'agent-router' });
|
|
53
|
+
* logger.info('Request received', { traceId, role: 'coder' });
|
|
54
|
+
*
|
|
55
|
+
* const childLogger = logger.child({ traceId: '123' });
|
|
56
|
+
* childLogger.debug('Processing', { step: 1 });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare class Logger {
|
|
60
|
+
private readonly pino;
|
|
61
|
+
private readonly boundContext;
|
|
62
|
+
constructor(options?: LoggerOptions);
|
|
63
|
+
/**
|
|
64
|
+
* Create a child logger with additional bound context.
|
|
65
|
+
* The child logger inherits all parent context plus new bindings.
|
|
66
|
+
*/
|
|
67
|
+
child(context: LogContext): Logger;
|
|
68
|
+
/**
|
|
69
|
+
* Log at trace level (most verbose).
|
|
70
|
+
*/
|
|
71
|
+
trace(message: string, context?: LogContext): void;
|
|
72
|
+
/**
|
|
73
|
+
* Log at debug level.
|
|
74
|
+
*/
|
|
75
|
+
debug(message: string, context?: LogContext): void;
|
|
76
|
+
/**
|
|
77
|
+
* Log at info level.
|
|
78
|
+
*/
|
|
79
|
+
info(message: string, context?: LogContext): void;
|
|
80
|
+
/**
|
|
81
|
+
* Log at warn level.
|
|
82
|
+
*/
|
|
83
|
+
warn(message: string, context?: LogContext): void;
|
|
84
|
+
/**
|
|
85
|
+
* Log at error level.
|
|
86
|
+
*/
|
|
87
|
+
error(message: string, context?: LogContext & {
|
|
88
|
+
error?: Error;
|
|
89
|
+
}): void;
|
|
90
|
+
/**
|
|
91
|
+
* Log at fatal level (most severe).
|
|
92
|
+
*/
|
|
93
|
+
fatal(message: string, context?: LogContext & {
|
|
94
|
+
error?: Error;
|
|
95
|
+
}): void;
|
|
96
|
+
/**
|
|
97
|
+
* Get the current log level.
|
|
98
|
+
*/
|
|
99
|
+
get level(): LogLevel;
|
|
100
|
+
/**
|
|
101
|
+
* Set the log level dynamically.
|
|
102
|
+
*/
|
|
103
|
+
set level(level: LogLevel);
|
|
104
|
+
/**
|
|
105
|
+
* Check if a log level is enabled.
|
|
106
|
+
*/
|
|
107
|
+
isLevelEnabled(level: LogLevel): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Get the underlying pino instance (for advanced use cases).
|
|
110
|
+
*/
|
|
111
|
+
get pinoInstance(): PinoLogger;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Generate a unique trace ID for request correlation.
|
|
115
|
+
* Uses UUID v4 format.
|
|
116
|
+
*/
|
|
117
|
+
export declare function generateTraceId(): string;
|
|
118
|
+
/**
|
|
119
|
+
* Create a log context with a trace ID.
|
|
120
|
+
* Useful for starting a new traced operation.
|
|
121
|
+
*/
|
|
122
|
+
export declare function createTracedContext(additionalContext?: LogContext): LogContext;
|
|
123
|
+
/**
|
|
124
|
+
* Default logger instance for the agent-router package.
|
|
125
|
+
* Pre-configured with the package name.
|
|
126
|
+
*/
|
|
127
|
+
export declare const logger: Logger;
|
|
128
|
+
/**
|
|
129
|
+
* Factory function to create a Logger instance.
|
|
130
|
+
* Convenience wrapper around new Logger().
|
|
131
|
+
*/
|
|
132
|
+
export declare function createLogger(options?: LoggerOptions): Logger;
|
|
133
|
+
/**
|
|
134
|
+
* Re-export for convenience.
|
|
135
|
+
*/
|
|
136
|
+
export default logger;
|
|
137
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/observability/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAa,EAAE,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAMvD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,yCAAyC;IACzC,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAM/E;;;;;;;;;;;GAWG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;gBAE9B,OAAO,GAAE,aAAkB;IAsDvC;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAWlC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAQlD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAQlD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAQjD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAQjD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI;IActE;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI;IAatE;;OAEG;IACH,IAAI,KAAK,IAAI,QAAQ,CAEpB;IAED;;OAEG;IACH,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,EAExB;IAED;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAIxC;;OAEG;IACH,IAAI,YAAY,IAAI,UAAU,CAE7B;CACF;AAMD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,UAAU,GAAG,UAAU,CAK9E;AAMD;;;GAGG;AACH,eAAO,MAAM,MAAM,QAAuC,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Module
|
|
3
|
+
*
|
|
4
|
+
* Pino-based structured logging for AgentRouter.
|
|
5
|
+
* Provides a Logger class with support for:
|
|
6
|
+
* - Log levels (trace, debug, info, warn, error, fatal)
|
|
7
|
+
* - Structured logging with context
|
|
8
|
+
* - Child loggers with bound context
|
|
9
|
+
* - Pretty printing in development mode
|
|
10
|
+
* - Correlation IDs and timestamps
|
|
11
|
+
*/
|
|
12
|
+
import { randomUUID } from 'crypto';
|
|
13
|
+
import pino from 'pino';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Logger Class
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Logger class wrapping pino with structured logging support.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const logger = new Logger({ name: 'agent-router' });
|
|
23
|
+
* logger.info('Request received', { traceId, role: 'coder' });
|
|
24
|
+
*
|
|
25
|
+
* const childLogger = logger.child({ traceId: '123' });
|
|
26
|
+
* childLogger.debug('Processing', { step: 1 });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export class Logger {
|
|
30
|
+
pino;
|
|
31
|
+
boundContext;
|
|
32
|
+
constructor(options = {}) {
|
|
33
|
+
const isDevelopment = process.env['NODE_ENV'] === 'development';
|
|
34
|
+
const usePretty = options.pretty ?? isDevelopment;
|
|
35
|
+
const defaultLevel = isDevelopment ? 'debug' : 'info';
|
|
36
|
+
// Build pino options without using exactOptionalPropertyTypes conflicts
|
|
37
|
+
const pinoOptions = {
|
|
38
|
+
level: options.level ?? process.env['LOG_LEVEL'] ?? defaultLevel,
|
|
39
|
+
timestamp: pino.stdTimeFunctions.isoTime,
|
|
40
|
+
formatters: {
|
|
41
|
+
level: (label) => ({ level: label }),
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
// Set base context if provided
|
|
45
|
+
if (options.context) {
|
|
46
|
+
pinoOptions.base = { ...options.context };
|
|
47
|
+
}
|
|
48
|
+
// Add name if provided
|
|
49
|
+
if (options.name) {
|
|
50
|
+
pinoOptions.name = options.name;
|
|
51
|
+
}
|
|
52
|
+
// Use pino-pretty transport in development if available
|
|
53
|
+
if (usePretty) {
|
|
54
|
+
pinoOptions.transport = {
|
|
55
|
+
target: 'pino-pretty',
|
|
56
|
+
options: {
|
|
57
|
+
colorize: true,
|
|
58
|
+
translateTime: 'SYS:standard',
|
|
59
|
+
ignore: 'pid,hostname',
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
this.pino = pino(pinoOptions);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// pino-pretty not installed, fall back to standard JSON logging
|
|
68
|
+
delete pinoOptions.transport;
|
|
69
|
+
this.pino = pino(pinoOptions);
|
|
70
|
+
if (usePretty) {
|
|
71
|
+
// Log a one-time warning about pretty printing
|
|
72
|
+
this.pino.warn('pino-pretty not installed, falling back to JSON logging. ' +
|
|
73
|
+
'Install with: npm install -D pino-pretty');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
this.boundContext = options.context ?? {};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create a child logger with additional bound context.
|
|
80
|
+
* The child logger inherits all parent context plus new bindings.
|
|
81
|
+
*/
|
|
82
|
+
child(context) {
|
|
83
|
+
const childLogger = new Logger({
|
|
84
|
+
level: this.pino.level,
|
|
85
|
+
});
|
|
86
|
+
// Create a pino child with merged context
|
|
87
|
+
const mergedContext = { ...this.boundContext, ...context };
|
|
88
|
+
childLogger.pino = this.pino.child(mergedContext);
|
|
89
|
+
childLogger.boundContext = mergedContext;
|
|
90
|
+
return childLogger;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Log at trace level (most verbose).
|
|
94
|
+
*/
|
|
95
|
+
trace(message, context) {
|
|
96
|
+
if (context) {
|
|
97
|
+
this.pino.trace(context, message);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
this.pino.trace(message);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Log at debug level.
|
|
105
|
+
*/
|
|
106
|
+
debug(message, context) {
|
|
107
|
+
if (context) {
|
|
108
|
+
this.pino.debug(context, message);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
this.pino.debug(message);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Log at info level.
|
|
116
|
+
*/
|
|
117
|
+
info(message, context) {
|
|
118
|
+
if (context) {
|
|
119
|
+
this.pino.info(context, message);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
this.pino.info(message);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Log at warn level.
|
|
127
|
+
*/
|
|
128
|
+
warn(message, context) {
|
|
129
|
+
if (context) {
|
|
130
|
+
this.pino.warn(context, message);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
this.pino.warn(message);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Log at error level.
|
|
138
|
+
*/
|
|
139
|
+
error(message, context) {
|
|
140
|
+
if (context) {
|
|
141
|
+
// Extract error if present for proper serialization
|
|
142
|
+
const { error, ...rest } = context;
|
|
143
|
+
if (error) {
|
|
144
|
+
this.pino.error({ ...rest, err: error }, message);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this.pino.error(rest, message);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
this.pino.error(message);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Log at fatal level (most severe).
|
|
156
|
+
*/
|
|
157
|
+
fatal(message, context) {
|
|
158
|
+
if (context) {
|
|
159
|
+
const { error, ...rest } = context;
|
|
160
|
+
if (error) {
|
|
161
|
+
this.pino.fatal({ ...rest, err: error }, message);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
this.pino.fatal(rest, message);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
this.pino.fatal(message);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get the current log level.
|
|
173
|
+
*/
|
|
174
|
+
get level() {
|
|
175
|
+
return this.pino.level;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Set the log level dynamically.
|
|
179
|
+
*/
|
|
180
|
+
set level(level) {
|
|
181
|
+
this.pino.level = level;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Check if a log level is enabled.
|
|
185
|
+
*/
|
|
186
|
+
isLevelEnabled(level) {
|
|
187
|
+
return this.pino.isLevelEnabled(level);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get the underlying pino instance (for advanced use cases).
|
|
191
|
+
*/
|
|
192
|
+
get pinoInstance() {
|
|
193
|
+
return this.pino;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// ============================================================================
|
|
197
|
+
// Utility Functions
|
|
198
|
+
// ============================================================================
|
|
199
|
+
/**
|
|
200
|
+
* Generate a unique trace ID for request correlation.
|
|
201
|
+
* Uses UUID v4 format.
|
|
202
|
+
*/
|
|
203
|
+
export function generateTraceId() {
|
|
204
|
+
return randomUUID();
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Create a log context with a trace ID.
|
|
208
|
+
* Useful for starting a new traced operation.
|
|
209
|
+
*/
|
|
210
|
+
export function createTracedContext(additionalContext) {
|
|
211
|
+
return {
|
|
212
|
+
traceId: generateTraceId(),
|
|
213
|
+
...additionalContext,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
// ============================================================================
|
|
217
|
+
// Default Logger Instance
|
|
218
|
+
// ============================================================================
|
|
219
|
+
/**
|
|
220
|
+
* Default logger instance for the agent-router package.
|
|
221
|
+
* Pre-configured with the package name.
|
|
222
|
+
*/
|
|
223
|
+
export const logger = new Logger({ name: 'agent-router' });
|
|
224
|
+
/**
|
|
225
|
+
* Factory function to create a Logger instance.
|
|
226
|
+
* Convenience wrapper around new Logger().
|
|
227
|
+
*/
|
|
228
|
+
export function createLogger(options = {}) {
|
|
229
|
+
return new Logger(options);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Re-export for convenience.
|
|
233
|
+
*/
|
|
234
|
+
export default logger;
|
|
235
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/observability/logger.ts"],"names":[],"mappings":"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"}
|