mcp-agent-foundry 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +477 -0
  3. package/dist/cli/install-skills.d.ts +11 -0
  4. package/dist/cli/install-skills.d.ts.map +1 -0
  5. package/dist/cli/install-skills.js +143 -0
  6. package/dist/cli/install-skills.js.map +1 -0
  7. package/dist/cli/recovery-commands.d.ts +41 -0
  8. package/dist/cli/recovery-commands.d.ts.map +1 -0
  9. package/dist/cli/recovery-commands.js +241 -0
  10. package/dist/cli/recovery-commands.js.map +1 -0
  11. package/dist/cli/setup-wizard.d.ts +25 -0
  12. package/dist/cli/setup-wizard.d.ts.map +1 -0
  13. package/dist/cli/setup-wizard.js +1417 -0
  14. package/dist/cli/setup-wizard.js.map +1 -0
  15. package/dist/cli/test-connection.d.ts +45 -0
  16. package/dist/cli/test-connection.d.ts.map +1 -0
  17. package/dist/cli/test-connection.js +317 -0
  18. package/dist/cli/test-connection.js.map +1 -0
  19. package/dist/cli.d.ts +75 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +704 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config/defaults.d.ts +57 -0
  24. package/dist/config/defaults.d.ts.map +1 -0
  25. package/dist/config/defaults.js +99 -0
  26. package/dist/config/defaults.js.map +1 -0
  27. package/dist/config/index.d.ts +14 -0
  28. package/dist/config/index.d.ts.map +1 -0
  29. package/dist/config/index.js +22 -0
  30. package/dist/config/index.js.map +1 -0
  31. package/dist/config/manager.d.ts +184 -0
  32. package/dist/config/manager.d.ts.map +1 -0
  33. package/dist/config/manager.js +347 -0
  34. package/dist/config/manager.js.map +1 -0
  35. package/dist/config/merger.d.ts +76 -0
  36. package/dist/config/merger.d.ts.map +1 -0
  37. package/dist/config/merger.js +189 -0
  38. package/dist/config/merger.js.map +1 -0
  39. package/dist/config/schema.d.ts +20 -0
  40. package/dist/config/schema.d.ts.map +1 -0
  41. package/dist/config/schema.js +20 -0
  42. package/dist/config/schema.js.map +1 -0
  43. package/dist/config/validator.d.ts +254 -0
  44. package/dist/config/validator.d.ts.map +1 -0
  45. package/dist/config/validator.js +363 -0
  46. package/dist/config/validator.js.map +1 -0
  47. package/dist/config/worktree-defaults.d.ts +23 -0
  48. package/dist/config/worktree-defaults.d.ts.map +1 -0
  49. package/dist/config/worktree-defaults.js +78 -0
  50. package/dist/config/worktree-defaults.js.map +1 -0
  51. package/dist/index.d.ts +8 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +44 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/mcp/tools/compare-agents.d.ts +25 -0
  56. package/dist/mcp/tools/compare-agents.d.ts.map +1 -0
  57. package/dist/mcp/tools/compare-agents.js +177 -0
  58. package/dist/mcp/tools/compare-agents.js.map +1 -0
  59. package/dist/mcp/tools/critique-plan.d.ts +26 -0
  60. package/dist/mcp/tools/critique-plan.d.ts.map +1 -0
  61. package/dist/mcp/tools/critique-plan.js +162 -0
  62. package/dist/mcp/tools/critique-plan.js.map +1 -0
  63. package/dist/mcp/tools/design-feedback.d.ts +26 -0
  64. package/dist/mcp/tools/design-feedback.d.ts.map +1 -0
  65. package/dist/mcp/tools/design-feedback.js +216 -0
  66. package/dist/mcp/tools/design-feedback.js.map +1 -0
  67. package/dist/mcp/tools/index.d.ts +50 -0
  68. package/dist/mcp/tools/index.d.ts.map +1 -0
  69. package/dist/mcp/tools/index.js +191 -0
  70. package/dist/mcp/tools/index.js.map +1 -0
  71. package/dist/mcp/tools/invoke-agent.d.ts +25 -0
  72. package/dist/mcp/tools/invoke-agent.d.ts.map +1 -0
  73. package/dist/mcp/tools/invoke-agent.js +141 -0
  74. package/dist/mcp/tools/invoke-agent.js.map +1 -0
  75. package/dist/mcp/tools/review-code.d.ts +25 -0
  76. package/dist/mcp/tools/review-code.d.ts.map +1 -0
  77. package/dist/mcp/tools/review-code.js +170 -0
  78. package/dist/mcp/tools/review-code.js.map +1 -0
  79. package/dist/mcp/tools/tasks/claim-next-task.d.ts +22 -0
  80. package/dist/mcp/tools/tasks/claim-next-task.d.ts.map +1 -0
  81. package/dist/mcp/tools/tasks/claim-next-task.js +203 -0
  82. package/dist/mcp/tools/tasks/claim-next-task.js.map +1 -0
  83. package/dist/mcp/tools/tasks/create-routed-task.d.ts +17 -0
  84. package/dist/mcp/tools/tasks/create-routed-task.d.ts.map +1 -0
  85. package/dist/mcp/tools/tasks/create-routed-task.js +178 -0
  86. package/dist/mcp/tools/tasks/create-routed-task.js.map +1 -0
  87. package/dist/mcp/tools/tasks/execute-pipeline.d.ts +22 -0
  88. package/dist/mcp/tools/tasks/execute-pipeline.d.ts.map +1 -0
  89. package/dist/mcp/tools/tasks/execute-pipeline.js +401 -0
  90. package/dist/mcp/tools/tasks/execute-pipeline.js.map +1 -0
  91. package/dist/mcp/tools/tasks/execute-task.d.ts +32 -0
  92. package/dist/mcp/tools/tasks/execute-task.d.ts.map +1 -0
  93. package/dist/mcp/tools/tasks/execute-task.js +284 -0
  94. package/dist/mcp/tools/tasks/execute-task.js.map +1 -0
  95. package/dist/mcp/tools/tasks/get-pipeline-status.d.ts +26 -0
  96. package/dist/mcp/tools/tasks/get-pipeline-status.d.ts.map +1 -0
  97. package/dist/mcp/tools/tasks/get-pipeline-status.js +460 -0
  98. package/dist/mcp/tools/tasks/get-pipeline-status.js.map +1 -0
  99. package/dist/mcp/tools/tasks/index.d.ts +36 -0
  100. package/dist/mcp/tools/tasks/index.d.ts.map +1 -0
  101. package/dist/mcp/tools/tasks/index.js +66 -0
  102. package/dist/mcp/tools/tasks/index.js.map +1 -0
  103. package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts +17 -0
  104. package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts.map +1 -0
  105. package/dist/mcp/tools/worktree/cleanup-worktrees.js +147 -0
  106. package/dist/mcp/tools/worktree/cleanup-worktrees.js.map +1 -0
  107. package/dist/mcp/tools/worktree/get-worktree-status.d.ts +17 -0
  108. package/dist/mcp/tools/worktree/get-worktree-status.d.ts.map +1 -0
  109. package/dist/mcp/tools/worktree/get-worktree-status.js +123 -0
  110. package/dist/mcp/tools/worktree/get-worktree-status.js.map +1 -0
  111. package/dist/mcp/tools/worktree/index.d.ts +41 -0
  112. package/dist/mcp/tools/worktree/index.d.ts.map +1 -0
  113. package/dist/mcp/tools/worktree/index.js +69 -0
  114. package/dist/mcp/tools/worktree/index.js.map +1 -0
  115. package/dist/mcp/tools/worktree/list-worktrees.d.ts +17 -0
  116. package/dist/mcp/tools/worktree/list-worktrees.d.ts.map +1 -0
  117. package/dist/mcp/tools/worktree/list-worktrees.js +136 -0
  118. package/dist/mcp/tools/worktree/list-worktrees.js.map +1 -0
  119. package/dist/mcp/tools/worktree/resolve-conflicts.d.ts +19 -0
  120. package/dist/mcp/tools/worktree/resolve-conflicts.d.ts.map +1 -0
  121. package/dist/mcp/tools/worktree/resolve-conflicts.js +228 -0
  122. package/dist/mcp/tools/worktree/resolve-conflicts.js.map +1 -0
  123. package/dist/mcp/transport/stdio.d.ts +13 -0
  124. package/dist/mcp/transport/stdio.d.ts.map +1 -0
  125. package/dist/mcp/transport/stdio.js +15 -0
  126. package/dist/mcp/transport/stdio.js.map +1 -0
  127. package/dist/observability/logger.d.ts +137 -0
  128. package/dist/observability/logger.d.ts.map +1 -0
  129. package/dist/observability/logger.js +235 -0
  130. package/dist/observability/logger.js.map +1 -0
  131. package/dist/observability/metrics.d.ts +250 -0
  132. package/dist/observability/metrics.d.ts.map +1 -0
  133. package/dist/observability/metrics.js +364 -0
  134. package/dist/observability/metrics.js.map +1 -0
  135. package/dist/persistence/index.d.ts +9 -0
  136. package/dist/persistence/index.d.ts.map +1 -0
  137. package/dist/persistence/index.js +9 -0
  138. package/dist/persistence/index.js.map +1 -0
  139. package/dist/persistence/state-schema.d.ts +116 -0
  140. package/dist/persistence/state-schema.d.ts.map +1 -0
  141. package/dist/persistence/state-schema.js +28 -0
  142. package/dist/persistence/state-schema.js.map +1 -0
  143. package/dist/persistence/state-store.d.ts +111 -0
  144. package/dist/persistence/state-store.d.ts.map +1 -0
  145. package/dist/persistence/state-store.js +291 -0
  146. package/dist/persistence/state-store.js.map +1 -0
  147. package/dist/providers/anthropic.d.ts +164 -0
  148. package/dist/providers/anthropic.d.ts.map +1 -0
  149. package/dist/providers/anthropic.js +500 -0
  150. package/dist/providers/anthropic.js.map +1 -0
  151. package/dist/providers/base.d.ts +151 -0
  152. package/dist/providers/base.d.ts.map +1 -0
  153. package/dist/providers/base.js +227 -0
  154. package/dist/providers/base.js.map +1 -0
  155. package/dist/providers/gemini.d.ts +85 -0
  156. package/dist/providers/gemini.d.ts.map +1 -0
  157. package/dist/providers/gemini.js +414 -0
  158. package/dist/providers/gemini.js.map +1 -0
  159. package/dist/providers/kimi.d.ts +19 -0
  160. package/dist/providers/kimi.d.ts.map +1 -0
  161. package/dist/providers/kimi.js +20 -0
  162. package/dist/providers/kimi.js.map +1 -0
  163. package/dist/providers/manager.d.ts +160 -0
  164. package/dist/providers/manager.d.ts.map +1 -0
  165. package/dist/providers/manager.js +264 -0
  166. package/dist/providers/manager.js.map +1 -0
  167. package/dist/providers/ollama.d.ts +83 -0
  168. package/dist/providers/ollama.d.ts.map +1 -0
  169. package/dist/providers/ollama.js +453 -0
  170. package/dist/providers/ollama.js.map +1 -0
  171. package/dist/providers/openai.d.ts +96 -0
  172. package/dist/providers/openai.d.ts.map +1 -0
  173. package/dist/providers/openai.js +457 -0
  174. package/dist/providers/openai.js.map +1 -0
  175. package/dist/providers/zai.d.ts +19 -0
  176. package/dist/providers/zai.d.ts.map +1 -0
  177. package/dist/providers/zai.js +20 -0
  178. package/dist/providers/zai.js.map +1 -0
  179. package/dist/router/context-manager.d.ts +2 -0
  180. package/dist/router/context-manager.d.ts.map +1 -0
  181. package/dist/router/context-manager.js +3 -0
  182. package/dist/router/context-manager.js.map +1 -0
  183. package/dist/router/engine.d.ts +169 -0
  184. package/dist/router/engine.d.ts.map +1 -0
  185. package/dist/router/engine.js +435 -0
  186. package/dist/router/engine.js.map +1 -0
  187. package/dist/router/pattern-executor.d.ts +317 -0
  188. package/dist/router/pattern-executor.d.ts.map +1 -0
  189. package/dist/router/pattern-executor.js +571 -0
  190. package/dist/router/pattern-executor.js.map +1 -0
  191. package/dist/router/role-resolver.d.ts +59 -0
  192. package/dist/router/role-resolver.d.ts.map +1 -0
  193. package/dist/router/role-resolver.js +95 -0
  194. package/dist/router/role-resolver.js.map +1 -0
  195. package/dist/server.d.ts +32 -0
  196. package/dist/server.d.ts.map +1 -0
  197. package/dist/server.js +223 -0
  198. package/dist/server.js.map +1 -0
  199. package/dist/startup.d.ts +78 -0
  200. package/dist/startup.d.ts.map +1 -0
  201. package/dist/startup.js +107 -0
  202. package/dist/startup.js.map +1 -0
  203. package/dist/tasks/coordinator.d.ts +141 -0
  204. package/dist/tasks/coordinator.d.ts.map +1 -0
  205. package/dist/tasks/coordinator.js +331 -0
  206. package/dist/tasks/coordinator.js.map +1 -0
  207. package/dist/tasks/index.d.ts +13 -0
  208. package/dist/tasks/index.d.ts.map +1 -0
  209. package/dist/tasks/index.js +13 -0
  210. package/dist/tasks/index.js.map +1 -0
  211. package/dist/tasks/persistent-state-coordinator.d.ts +89 -0
  212. package/dist/tasks/persistent-state-coordinator.d.ts.map +1 -0
  213. package/dist/tasks/persistent-state-coordinator.js +371 -0
  214. package/dist/tasks/persistent-state-coordinator.js.map +1 -0
  215. package/dist/tasks/pipeline-manager.d.ts +103 -0
  216. package/dist/tasks/pipeline-manager.d.ts.map +1 -0
  217. package/dist/tasks/pipeline-manager.js +358 -0
  218. package/dist/tasks/pipeline-manager.js.map +1 -0
  219. package/dist/tasks/state-coordinator.d.ts +79 -0
  220. package/dist/tasks/state-coordinator.d.ts.map +1 -0
  221. package/dist/tasks/state-coordinator.js +200 -0
  222. package/dist/tasks/state-coordinator.js.map +1 -0
  223. package/dist/tasks/worker-mode.d.ts +65 -0
  224. package/dist/tasks/worker-mode.d.ts.map +1 -0
  225. package/dist/tasks/worker-mode.js +208 -0
  226. package/dist/tasks/worker-mode.js.map +1 -0
  227. package/dist/translation/errors.d.ts +203 -0
  228. package/dist/translation/errors.d.ts.map +1 -0
  229. package/dist/translation/errors.js +477 -0
  230. package/dist/translation/errors.js.map +1 -0
  231. package/dist/translation/index.d.ts +12 -0
  232. package/dist/translation/index.d.ts.map +1 -0
  233. package/dist/translation/index.js +32 -0
  234. package/dist/translation/index.js.map +1 -0
  235. package/dist/translation/messages.d.ts +295 -0
  236. package/dist/translation/messages.d.ts.map +1 -0
  237. package/dist/translation/messages.js +557 -0
  238. package/dist/translation/messages.js.map +1 -0
  239. package/dist/translation/streaming.d.ts +226 -0
  240. package/dist/translation/streaming.d.ts.map +1 -0
  241. package/dist/translation/streaming.js +520 -0
  242. package/dist/translation/streaming.js.map +1 -0
  243. package/dist/translation/tools.d.ts +209 -0
  244. package/dist/translation/tools.d.ts.map +1 -0
  245. package/dist/translation/tools.js +331 -0
  246. package/dist/translation/tools.js.map +1 -0
  247. package/dist/types.d.ts +747 -0
  248. package/dist/types.d.ts.map +1 -0
  249. package/dist/types.js +86 -0
  250. package/dist/types.js.map +1 -0
  251. package/dist/utils/circuit-breaker.d.ts +175 -0
  252. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  253. package/dist/utils/circuit-breaker.js +315 -0
  254. package/dist/utils/circuit-breaker.js.map +1 -0
  255. package/dist/utils/env.d.ts +2 -0
  256. package/dist/utils/env.d.ts.map +1 -0
  257. package/dist/utils/env.js +3 -0
  258. package/dist/utils/env.js.map +1 -0
  259. package/dist/utils/git.d.ts +58 -0
  260. package/dist/utils/git.d.ts.map +1 -0
  261. package/dist/utils/git.js +197 -0
  262. package/dist/utils/git.js.map +1 -0
  263. package/dist/utils/index.d.ts +9 -0
  264. package/dist/utils/index.d.ts.map +1 -0
  265. package/dist/utils/index.js +9 -0
  266. package/dist/utils/index.js.map +1 -0
  267. package/dist/utils/merge-ordering.d.ts +45 -0
  268. package/dist/utils/merge-ordering.d.ts.map +1 -0
  269. package/dist/utils/merge-ordering.js +128 -0
  270. package/dist/utils/merge-ordering.js.map +1 -0
  271. package/dist/utils/retry.d.ts +106 -0
  272. package/dist/utils/retry.d.ts.map +1 -0
  273. package/dist/utils/retry.js +188 -0
  274. package/dist/utils/retry.js.map +1 -0
  275. package/dist/worktrees/branch-manager.d.ts +55 -0
  276. package/dist/worktrees/branch-manager.d.ts.map +1 -0
  277. package/dist/worktrees/branch-manager.js +129 -0
  278. package/dist/worktrees/branch-manager.js.map +1 -0
  279. package/dist/worktrees/conflict-handler.d.ts +72 -0
  280. package/dist/worktrees/conflict-handler.d.ts.map +1 -0
  281. package/dist/worktrees/conflict-handler.js +287 -0
  282. package/dist/worktrees/conflict-handler.js.map +1 -0
  283. package/dist/worktrees/conflict-parser.d.ts +28 -0
  284. package/dist/worktrees/conflict-parser.d.ts.map +1 -0
  285. package/dist/worktrees/conflict-parser.js +140 -0
  286. package/dist/worktrees/conflict-parser.js.map +1 -0
  287. package/dist/worktrees/index.d.ts +20 -0
  288. package/dist/worktrees/index.d.ts.map +1 -0
  289. package/dist/worktrees/index.js +20 -0
  290. package/dist/worktrees/index.js.map +1 -0
  291. package/dist/worktrees/instructions.d.ts +20 -0
  292. package/dist/worktrees/instructions.d.ts.map +1 -0
  293. package/dist/worktrees/instructions.js +84 -0
  294. package/dist/worktrees/instructions.js.map +1 -0
  295. package/dist/worktrees/manager.d.ts +76 -0
  296. package/dist/worktrees/manager.d.ts.map +1 -0
  297. package/dist/worktrees/manager.js +277 -0
  298. package/dist/worktrees/manager.js.map +1 -0
  299. package/dist/worktrees/pipeline-merge-orchestrator.d.ts +55 -0
  300. package/dist/worktrees/pipeline-merge-orchestrator.d.ts.map +1 -0
  301. package/dist/worktrees/pipeline-merge-orchestrator.js +221 -0
  302. package/dist/worktrees/pipeline-merge-orchestrator.js.map +1 -0
  303. package/dist/worktrees/pool.d.ts +95 -0
  304. package/dist/worktrees/pool.d.ts.map +1 -0
  305. package/dist/worktrees/pool.js +271 -0
  306. package/dist/worktrees/pool.js.map +1 -0
  307. package/dist/worktrees/recovery.d.ts +94 -0
  308. package/dist/worktrees/recovery.d.ts.map +1 -0
  309. package/dist/worktrees/recovery.js +371 -0
  310. package/dist/worktrees/recovery.js.map +1 -0
  311. package/dist/worktrees/resource-manager.d.ts +74 -0
  312. package/dist/worktrees/resource-manager.d.ts.map +1 -0
  313. package/dist/worktrees/resource-manager.js +228 -0
  314. package/dist/worktrees/resource-manager.js.map +1 -0
  315. package/package.json +88 -0
@@ -0,0 +1,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":"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"}
@@ -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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"}