all-agents-mcp 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 (146) hide show
  1. package/README.md +262 -0
  2. package/dist/agents/base-agent.d.ts +18 -0
  3. package/dist/agents/base-agent.d.ts.map +1 -0
  4. package/dist/agents/base-agent.js +82 -0
  5. package/dist/agents/base-agent.js.map +1 -0
  6. package/dist/agents/claude-agent.d.ts +11 -0
  7. package/dist/agents/claude-agent.d.ts.map +1 -0
  8. package/dist/agents/claude-agent.js +34 -0
  9. package/dist/agents/claude-agent.js.map +1 -0
  10. package/dist/agents/codex-agent.d.ts +13 -0
  11. package/dist/agents/codex-agent.d.ts.map +1 -0
  12. package/dist/agents/codex-agent.js +89 -0
  13. package/dist/agents/codex-agent.js.map +1 -0
  14. package/dist/agents/copilot-agent.d.ts +12 -0
  15. package/dist/agents/copilot-agent.d.ts.map +1 -0
  16. package/dist/agents/copilot-agent.js +31 -0
  17. package/dist/agents/copilot-agent.js.map +1 -0
  18. package/dist/agents/gemini-agent.d.ts +11 -0
  19. package/dist/agents/gemini-agent.d.ts.map +1 -0
  20. package/dist/agents/gemini-agent.js +40 -0
  21. package/dist/agents/gemini-agent.js.map +1 -0
  22. package/dist/agents/registry.d.ts +7 -0
  23. package/dist/agents/registry.d.ts.map +1 -0
  24. package/dist/agents/registry.js +55 -0
  25. package/dist/agents/registry.js.map +1 -0
  26. package/dist/agents/types.d.ts +42 -0
  27. package/dist/agents/types.d.ts.map +1 -0
  28. package/dist/agents/types.js +2 -0
  29. package/dist/agents/types.js.map +1 -0
  30. package/dist/config/loader.d.ts +16 -0
  31. package/dist/config/loader.d.ts.map +1 -0
  32. package/dist/config/loader.js +97 -0
  33. package/dist/config/loader.js.map +1 -0
  34. package/dist/config/schema.d.ts +33 -0
  35. package/dist/config/schema.d.ts.map +1 -0
  36. package/dist/config/schema.js +12 -0
  37. package/dist/config/schema.js.map +1 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +16 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/orchestrator/aggregator.d.ts +7 -0
  43. package/dist/orchestrator/aggregator.d.ts.map +1 -0
  44. package/dist/orchestrator/aggregator.js +59 -0
  45. package/dist/orchestrator/aggregator.js.map +1 -0
  46. package/dist/orchestrator/complexity.d.ts +8 -0
  47. package/dist/orchestrator/complexity.d.ts.map +1 -0
  48. package/dist/orchestrator/complexity.js +87 -0
  49. package/dist/orchestrator/complexity.js.map +1 -0
  50. package/dist/orchestrator/executor.d.ts +17 -0
  51. package/dist/orchestrator/executor.d.ts.map +1 -0
  52. package/dist/orchestrator/executor.js +53 -0
  53. package/dist/orchestrator/executor.js.map +1 -0
  54. package/dist/orchestrator/parallel.d.ts +11 -0
  55. package/dist/orchestrator/parallel.d.ts.map +1 -0
  56. package/dist/orchestrator/parallel.js +30 -0
  57. package/dist/orchestrator/parallel.js.map +1 -0
  58. package/dist/orchestrator/verifier.d.ts +16 -0
  59. package/dist/orchestrator/verifier.d.ts.map +1 -0
  60. package/dist/orchestrator/verifier.js +42 -0
  61. package/dist/orchestrator/verifier.js.map +1 -0
  62. package/dist/resources/agent-status.d.ts +3 -0
  63. package/dist/resources/agent-status.d.ts.map +1 -0
  64. package/dist/resources/agent-status.js +23 -0
  65. package/dist/resources/agent-status.js.map +1 -0
  66. package/dist/resources/session-history.d.ts +3 -0
  67. package/dist/resources/session-history.d.ts.map +1 -0
  68. package/dist/resources/session-history.js +29 -0
  69. package/dist/resources/session-history.js.map +1 -0
  70. package/dist/resources/sessions-list.d.ts +3 -0
  71. package/dist/resources/sessions-list.d.ts.map +1 -0
  72. package/dist/resources/sessions-list.js +13 -0
  73. package/dist/resources/sessions-list.js.map +1 -0
  74. package/dist/server.d.ts +3 -0
  75. package/dist/server.d.ts.map +1 -0
  76. package/dist/server.js +45 -0
  77. package/dist/server.js.map +1 -0
  78. package/dist/session/store.d.ts +11 -0
  79. package/dist/session/store.d.ts.map +1 -0
  80. package/dist/session/store.js +72 -0
  81. package/dist/session/store.js.map +1 -0
  82. package/dist/session/types.d.ts +19 -0
  83. package/dist/session/types.d.ts.map +1 -0
  84. package/dist/session/types.js +2 -0
  85. package/dist/session/types.js.map +1 -0
  86. package/dist/tools/agent-health.d.ts +3 -0
  87. package/dist/tools/agent-health.d.ts.map +1 -0
  88. package/dist/tools/agent-health.js +40 -0
  89. package/dist/tools/agent-health.js.map +1 -0
  90. package/dist/tools/ask-agent.d.ts +3 -0
  91. package/dist/tools/ask-agent.d.ts.map +1 -0
  92. package/dist/tools/ask-agent.js +63 -0
  93. package/dist/tools/ask-agent.js.map +1 -0
  94. package/dist/tools/ask-all.d.ts +3 -0
  95. package/dist/tools/ask-all.d.ts.map +1 -0
  96. package/dist/tools/ask-all.js +54 -0
  97. package/dist/tools/ask-all.js.map +1 -0
  98. package/dist/tools/collaborate.d.ts +3 -0
  99. package/dist/tools/collaborate.d.ts.map +1 -0
  100. package/dist/tools/collaborate.js +56 -0
  101. package/dist/tools/collaborate.js.map +1 -0
  102. package/dist/tools/debug-with.d.ts +3 -0
  103. package/dist/tools/debug-with.d.ts.map +1 -0
  104. package/dist/tools/debug-with.js +51 -0
  105. package/dist/tools/debug-with.js.map +1 -0
  106. package/dist/tools/delegate.d.ts +3 -0
  107. package/dist/tools/delegate.d.ts.map +1 -0
  108. package/dist/tools/delegate.js +87 -0
  109. package/dist/tools/delegate.js.map +1 -0
  110. package/dist/tools/explain-with.d.ts +3 -0
  111. package/dist/tools/explain-with.d.ts.map +1 -0
  112. package/dist/tools/explain-with.js +53 -0
  113. package/dist/tools/explain-with.js.map +1 -0
  114. package/dist/tools/generate-test.d.ts +3 -0
  115. package/dist/tools/generate-test.d.ts.map +1 -0
  116. package/dist/tools/generate-test.js +64 -0
  117. package/dist/tools/generate-test.js.map +1 -0
  118. package/dist/tools/list-agents.d.ts +3 -0
  119. package/dist/tools/list-agents.d.ts.map +1 -0
  120. package/dist/tools/list-agents.js +28 -0
  121. package/dist/tools/list-agents.js.map +1 -0
  122. package/dist/tools/list-models.d.ts +3 -0
  123. package/dist/tools/list-models.d.ts.map +1 -0
  124. package/dist/tools/list-models.js +43 -0
  125. package/dist/tools/list-models.js.map +1 -0
  126. package/dist/tools/refactor-with.d.ts +3 -0
  127. package/dist/tools/refactor-with.d.ts.map +1 -0
  128. package/dist/tools/refactor-with.js +62 -0
  129. package/dist/tools/refactor-with.js.map +1 -0
  130. package/dist/tools/review-code.d.ts +3 -0
  131. package/dist/tools/review-code.d.ts.map +1 -0
  132. package/dist/tools/review-code.js +67 -0
  133. package/dist/tools/review-code.js.map +1 -0
  134. package/dist/tools/verify.d.ts +3 -0
  135. package/dist/tools/verify.d.ts.map +1 -0
  136. package/dist/tools/verify.js +63 -0
  137. package/dist/tools/verify.js.map +1 -0
  138. package/dist/utils/detect.d.ts +4 -0
  139. package/dist/utils/detect.d.ts.map +1 -0
  140. package/dist/utils/detect.js +44 -0
  141. package/dist/utils/detect.js.map +1 -0
  142. package/dist/utils/logger.d.ts +7 -0
  143. package/dist/utils/logger.d.ts.map +1 -0
  144. package/dist/utils/logger.js +24 -0
  145. package/dist/utils/logger.js.map +1 -0
  146. package/package.json +43 -0
@@ -0,0 +1,56 @@
1
+ import { z } from "zod";
2
+ import { getAgent } from "../agents/registry.js";
3
+ import { addEntry, getOrCreateActiveSession } from "../session/store.js";
4
+ const SCHEMA = {
5
+ agent: z.enum(["claude", "codex", "gemini", "copilot"]).describe("Agent to collaborate with"),
6
+ prompt: z.string().describe("The question or analysis request"),
7
+ context: z.string().optional().describe("Additional context (code, docs, etc.)"),
8
+ timeout: z.number().optional().describe("Timeout in ms"),
9
+ };
10
+ export function registerCollaborateTool(server) {
11
+ server.tool("collaborate", "Collaborate with an agent for analysis. Sends prompt, gets response, and provides guidance for comparison.", SCHEMA, async (params) => {
12
+ const agent = getAgent(params.agent);
13
+ if (!agent) {
14
+ return {
15
+ content: [
16
+ {
17
+ type: "text",
18
+ text: `Agent '${params.agent}' is not available.`,
19
+ },
20
+ ],
21
+ };
22
+ }
23
+ const response = await agent.execute({
24
+ prompt: params.prompt,
25
+ context: params.context,
26
+ timeout: params.timeout,
27
+ });
28
+ const sessionId = getOrCreateActiveSession();
29
+ addEntry(sessionId, {
30
+ tool: "collaborate",
31
+ agent: response.agent,
32
+ model: response.model,
33
+ prompt: params.prompt,
34
+ response: response.content,
35
+ durationMs: response.durationMs,
36
+ exitCode: response.exitCode,
37
+ error: response.error,
38
+ });
39
+ const sections = [
40
+ `## Collaboration with ${agent.displayName}\n`,
41
+ `### ${agent.displayName}'s Response (${response.model}, ${response.durationMs}ms)`,
42
+ response.error ? `Error: ${response.error}` : response.content,
43
+ "",
44
+ "### Analysis Guide",
45
+ "Compare the above response with your own analysis:",
46
+ "1. **Agreements**: Points where both analyses align",
47
+ "2. **Differences**: Areas of divergent opinion",
48
+ "3. **Synthesis**: Combine the best insights from both perspectives",
49
+ "4. **Recommendation**: Select the optimal approach based on the comparison",
50
+ ];
51
+ return {
52
+ content: [{ type: "text", text: sections.join("\n") }],
53
+ };
54
+ });
55
+ }
56
+ //# sourceMappingURL=collaborate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collaborate.js","sourceRoot":"","sources":["../../src/tools/collaborate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,MAAM,GAAG;IACd,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC7F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAChF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;CACxD,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACxD,MAAM,CAAC,IAAI,CACV,aAAa,EACb,4GAA4G,EAC5G,MAAM,EACN,KAAK,EAAE,MAAM,EAAE,EAAE;QAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,qBAAqB;qBACjD;iBACD;aACD,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YACpC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,wBAAwB,EAAE,CAAC;QAC7C,QAAQ,CAAC,SAAS,EAAE;YACnB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,QAAQ,CAAC,OAAO;YAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG;YAChB,yBAAyB,KAAK,CAAC,WAAW,IAAI;YAC9C,OAAO,KAAK,CAAC,WAAW,gBAAgB,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,UAAU,KAAK;YACnF,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO;YAC9D,EAAE;YACF,oBAAoB;YACpB,oDAAoD;YACpD,qDAAqD;YACrD,gDAAgD;YAChD,oEAAoE;YACpE,4EAA4E;SAC5E,CAAC;QAEF,OAAO;YACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAC/D,CAAC;IACH,CAAC,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerDebugWithTool(server: McpServer): void;
3
+ //# sourceMappingURL=debug-with.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-with.d.ts","sourceRoot":"","sources":["../../src/tools/debug-with.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8C7D"}
@@ -0,0 +1,51 @@
1
+ import { z } from "zod";
2
+ import { getAgent } from "../agents/registry.js";
3
+ import { addEntry, getOrCreateActiveSession } from "../session/store.js";
4
+ const SCHEMA = {
5
+ agent: z.enum(["claude", "codex", "gemini", "copilot"]).describe("Agent to debug with"),
6
+ error: z.string().describe("Error message or description"),
7
+ code: z.string().optional().describe("Relevant code context"),
8
+ context: z.string().optional().describe("Additional context (stack trace, logs, etc.)"),
9
+ timeout: z.number().optional().describe("Timeout in ms"),
10
+ };
11
+ export function registerDebugWithTool(server) {
12
+ server.tool("debug_with", "Debug an error using a specific agent. Provide the error and optional code context.", SCHEMA, async (params) => {
13
+ const agent = getAgent(params.agent);
14
+ if (!agent) {
15
+ return {
16
+ content: [{ type: "text", text: `Agent '${params.agent}' is not available.` }],
17
+ };
18
+ }
19
+ let prompt = `Debug this error:\n\nError: ${params.error}\n`;
20
+ if (params.code)
21
+ prompt += `\nRelevant code:\n\`\`\`\n${params.code}\n\`\`\`\n`;
22
+ if (params.context)
23
+ prompt += `\nAdditional context:\n${params.context}\n`;
24
+ prompt +=
25
+ "\nProvide:\n1. Root cause analysis\n2. Step-by-step fix\n3. Prevention recommendations";
26
+ const response = await agent.execute({
27
+ prompt,
28
+ timeout: params.timeout,
29
+ });
30
+ const sessionId = getOrCreateActiveSession();
31
+ addEntry(sessionId, {
32
+ tool: "debug_with",
33
+ agent: response.agent,
34
+ model: response.model,
35
+ prompt,
36
+ response: response.content,
37
+ durationMs: response.durationMs,
38
+ exitCode: response.exitCode,
39
+ error: response.error,
40
+ });
41
+ return {
42
+ content: [
43
+ {
44
+ type: "text",
45
+ text: `## Debug Analysis by ${agent.displayName}\n\n${response.content}`,
46
+ },
47
+ ],
48
+ };
49
+ });
50
+ }
51
+ //# sourceMappingURL=debug-with.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-with.js","sourceRoot":"","sources":["../../src/tools/debug-with.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,MAAM,GAAG;IACd,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC1D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC7D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACvF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;CACxD,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACtD,MAAM,CAAC,IAAI,CACV,YAAY,EACZ,qFAAqF,EACrF,MAAM,EACN,KAAK,EAAE,MAAM,EAAE,EAAE;QAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,qBAAqB,EAAE,CAAC;aACvF,CAAC;QACH,CAAC;QAED,IAAI,MAAM,GAAG,+BAA+B,MAAM,CAAC,KAAK,IAAI,CAAC;QAC7D,IAAI,MAAM,CAAC,IAAI;YAAE,MAAM,IAAI,6BAA6B,MAAM,CAAC,IAAI,YAAY,CAAC;QAChF,IAAI,MAAM,CAAC,OAAO;YAAE,MAAM,IAAI,0BAA0B,MAAM,CAAC,OAAO,IAAI,CAAC;QAC3E,MAAM;YACL,wFAAwF,CAAC;QAE1F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YACpC,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,wBAAwB,EAAE,CAAC;QAC7C,QAAQ,CAAC,SAAS,EAAE;YACnB,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM;YACN,QAAQ,EAAE,QAAQ,CAAC,OAAO;YAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,OAAO;YACN,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,wBAAwB,KAAK,CAAC,WAAW,OAAO,QAAQ,CAAC,OAAO,EAAE;iBACxE;aACD;SACD,CAAC;IACH,CAAC,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerDelegateTaskTool(server: McpServer): void;
3
+ //# sourceMappingURL=delegate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../src/tools/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4CzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAehE"}
@@ -0,0 +1,87 @@
1
+ import { z } from "zod";
2
+ import { getAgent, getAvailableAgents } from "../agents/registry.js";
3
+ import { formatParallelResult, formatSingleResponse } from "../orchestrator/aggregator.js";
4
+ import { analyzeComplexity } from "../orchestrator/complexity.js";
5
+ import { executeParallel } from "../orchestrator/parallel.js";
6
+ import { addEntry, getOrCreateActiveSession } from "../session/store.js";
7
+ const SCHEMA = {
8
+ task: z.string().describe("The task to delegate"),
9
+ agent: z
10
+ .enum(["claude", "codex", "gemini", "copilot"])
11
+ .optional()
12
+ .describe("Preferred agent (auto-selected if omitted)"),
13
+ allowParallel: z
14
+ .boolean()
15
+ .default(true)
16
+ .describe("Allow splitting large tasks across multiple agents"),
17
+ context: z.string().optional().describe("Additional context"),
18
+ timeout: z.number().optional().describe("Timeout in ms"),
19
+ };
20
+ function recordEntry(sessionId, task, response) {
21
+ addEntry(sessionId, {
22
+ tool: "delegate_task",
23
+ agent: response.agent,
24
+ model: response.model,
25
+ prompt: task,
26
+ response: response.content,
27
+ durationMs: response.durationMs,
28
+ exitCode: response.exitCode,
29
+ error: response.error,
30
+ });
31
+ }
32
+ function formatHeader(complexity, suffix) {
33
+ let header = `**Complexity**: ${complexity.level} (score: ${complexity.score})\n`;
34
+ header += `**Reasons**: ${complexity.reasons.join(", ")}\n`;
35
+ if (suffix)
36
+ header += suffix;
37
+ return `${header}\n`;
38
+ }
39
+ export function registerDelegateTaskTool(server) {
40
+ server.tool("delegate_task", "Delegate a task to agent(s). Automatically analyzes complexity and routes to single or parallel execution.", SCHEMA, async (params) => {
41
+ const complexity = analyzeComplexity(params.task);
42
+ const sessionId = getOrCreateActiveSession();
43
+ if (complexity.level !== "large" || !params.allowParallel) {
44
+ return handleSingle(params, complexity, sessionId);
45
+ }
46
+ return handleParallel(params, complexity, sessionId);
47
+ });
48
+ }
49
+ async function handleSingle(params, complexity, sessionId) {
50
+ let agent;
51
+ if (params.agent) {
52
+ agent = getAgent(params.agent);
53
+ }
54
+ else {
55
+ const available = await getAvailableAgents();
56
+ agent = available[0];
57
+ }
58
+ if (!agent) {
59
+ return { content: [{ type: "text", text: "No agents available for delegation." }] };
60
+ }
61
+ const extendedTimeout = complexity.level === "complex" ? (params.timeout ?? 120_000) * 2 : params.timeout;
62
+ const response = await agent.execute({
63
+ prompt: params.task,
64
+ context: params.context,
65
+ timeout: extendedTimeout,
66
+ });
67
+ recordEntry(sessionId, params.task, response);
68
+ const header = formatHeader(complexity);
69
+ return { content: [{ type: "text", text: header + formatSingleResponse(response) }] };
70
+ }
71
+ async function handleParallel(params, complexity, sessionId) {
72
+ const agents = await getAvailableAgents();
73
+ if (agents.length === 0) {
74
+ return { content: [{ type: "text", text: "No agents available for delegation." }] };
75
+ }
76
+ const result = await executeParallel(agents, {
77
+ prompt: params.task,
78
+ context: params.context,
79
+ timeout: params.timeout ? params.timeout * 2 : 240_000,
80
+ });
81
+ for (const response of result.responses) {
82
+ recordEntry(sessionId, params.task, response);
83
+ }
84
+ const header = formatHeader(complexity, `**Mode**: Parallel delegation to ${agents.length} agents\n`);
85
+ return { content: [{ type: "text", text: header + formatParallelResult(result) }] };
86
+ }
87
+ //# sourceMappingURL=delegate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../src/tools/delegate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerExplainWithTool(server: McpServer): void;
3
+ //# sourceMappingURL=explain-with.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain-with.d.ts","sourceRoot":"","sources":["../../src/tools/explain-with.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqD/D"}
@@ -0,0 +1,53 @@
1
+ import { z } from "zod";
2
+ import { getAgent } from "../agents/registry.js";
3
+ import { addEntry, getOrCreateActiveSession } from "../session/store.js";
4
+ const SCHEMA = {
5
+ agent: z.enum(["claude", "codex", "gemini", "copilot"]).describe("Agent to explain with"),
6
+ code: z.string().describe("Code to explain"),
7
+ detail: z.enum(["brief", "detailed"]).optional().default("detailed").describe("Level of detail"),
8
+ timeout: z.number().optional().describe("Timeout in ms"),
9
+ };
10
+ export function registerExplainWithTool(server) {
11
+ server.tool("explain_with", "Get code explanation from a specific agent. Choose brief or detailed level.", SCHEMA, async (params) => {
12
+ const agent = getAgent(params.agent);
13
+ if (!agent) {
14
+ return {
15
+ content: [{ type: "text", text: `Agent '${params.agent}' is not available.` }],
16
+ };
17
+ }
18
+ const detailInstruction = params.detail === "brief"
19
+ ? "Provide a concise summary (2-3 sentences) of what this code does."
20
+ : [
21
+ "Provide a detailed explanation including:",
22
+ "1. Overall purpose",
23
+ "2. Key logic flow",
24
+ "3. Important patterns or techniques used",
25
+ "4. Dependencies and side effects",
26
+ ].join("\n");
27
+ const prompt = `Explain this code:\n\n\`\`\`\n${params.code}\n\`\`\`\n\n${detailInstruction}`;
28
+ const response = await agent.execute({
29
+ prompt,
30
+ timeout: params.timeout,
31
+ });
32
+ const sessionId = getOrCreateActiveSession();
33
+ addEntry(sessionId, {
34
+ tool: "explain_with",
35
+ agent: response.agent,
36
+ model: response.model,
37
+ prompt,
38
+ response: response.content,
39
+ durationMs: response.durationMs,
40
+ exitCode: response.exitCode,
41
+ error: response.error,
42
+ });
43
+ return {
44
+ content: [
45
+ {
46
+ type: "text",
47
+ text: `## Explanation by ${agent.displayName}\n\n${response.content}`,
48
+ },
49
+ ],
50
+ };
51
+ });
52
+ }
53
+ //# sourceMappingURL=explain-with.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain-with.js","sourceRoot":"","sources":["../../src/tools/explain-with.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,MAAM,GAAG;IACd,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACzF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAChG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;CACxD,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACxD,MAAM,CAAC,IAAI,CACV,cAAc,EACd,6EAA6E,EAC7E,MAAM,EACN,KAAK,EAAE,MAAM,EAAE,EAAE;QAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,qBAAqB,EAAE,CAAC;aACvF,CAAC;QACH,CAAC;QAED,MAAM,iBAAiB,GACtB,MAAM,CAAC,MAAM,KAAK,OAAO;YACxB,CAAC,CAAC,mEAAmE;YACrE,CAAC,CAAC;gBACA,2CAA2C;gBAC3C,oBAAoB;gBACpB,mBAAmB;gBACnB,0CAA0C;gBAC1C,kCAAkC;aAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhB,MAAM,MAAM,GAAG,iCAAiC,MAAM,CAAC,IAAI,eAAe,iBAAiB,EAAE,CAAC;QAE9F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YACpC,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,wBAAwB,EAAE,CAAC;QAC7C,QAAQ,CAAC,SAAS,EAAE;YACnB,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM;YACN,QAAQ,EAAE,QAAQ,CAAC,OAAO;YAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,OAAO;YACN,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,qBAAqB,KAAK,CAAC,WAAW,OAAO,QAAQ,CAAC,OAAO,EAAE;iBACrE;aACD;SACD,CAAC;IACH,CAAC,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerGenerateTestTool(server: McpServer): void;
3
+ //# sourceMappingURL=generate-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-test.d.ts","sourceRoot":"","sources":["../../src/tools/generate-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4DhE"}
@@ -0,0 +1,64 @@
1
+ import { z } from "zod";
2
+ import { getAgent } from "../agents/registry.js";
3
+ import { addEntry, getOrCreateActiveSession } from "../session/store.js";
4
+ const SCHEMA = {
5
+ agent: z.enum(["claude", "codex", "gemini", "copilot"]).describe("Agent to generate tests with"),
6
+ code: z.string().describe("Code to generate tests for"),
7
+ framework: z
8
+ .enum(["jest", "vitest", "pytest", "kotest"])
9
+ .optional()
10
+ .describe("Test framework (auto-detected if omitted)"),
11
+ timeout: z.number().optional().describe("Timeout in ms"),
12
+ };
13
+ export function registerGenerateTestTool(server) {
14
+ server.tool("generate_test", "Generate tests for code using a specific agent. Auto-detects or specify test framework.", SCHEMA, async (params) => {
15
+ const agent = getAgent(params.agent);
16
+ if (!agent) {
17
+ return {
18
+ content: [{ type: "text", text: `Agent '${params.agent}' is not available.` }],
19
+ };
20
+ }
21
+ const frameworkHint = params.framework
22
+ ? `Use the ${params.framework} test framework.`
23
+ : "Auto-detect the appropriate test framework based on the code language.";
24
+ const prompt = [
25
+ "Generate comprehensive tests for the following code:",
26
+ "",
27
+ "```",
28
+ params.code,
29
+ "```",
30
+ "",
31
+ frameworkHint,
32
+ "",
33
+ "Include:",
34
+ "1. Happy path tests",
35
+ "2. Edge cases",
36
+ "3. Error handling tests",
37
+ "4. Proper test descriptions",
38
+ ].join("\n");
39
+ const response = await agent.execute({
40
+ prompt,
41
+ timeout: params.timeout,
42
+ });
43
+ const sessionId = getOrCreateActiveSession();
44
+ addEntry(sessionId, {
45
+ tool: "generate_test",
46
+ agent: response.agent,
47
+ model: response.model,
48
+ prompt,
49
+ response: response.content,
50
+ durationMs: response.durationMs,
51
+ exitCode: response.exitCode,
52
+ error: response.error,
53
+ });
54
+ return {
55
+ content: [
56
+ {
57
+ type: "text",
58
+ text: `## Tests Generated by ${agent.displayName}\n\n${response.content}`,
59
+ },
60
+ ],
61
+ };
62
+ });
63
+ }
64
+ //# sourceMappingURL=generate-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-test.js","sourceRoot":"","sources":["../../src/tools/generate-test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,MAAM,GAAG;IACd,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAChG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACvD,SAAS,EAAE,CAAC;SACV,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC5C,QAAQ,EAAE;SACV,QAAQ,CAAC,2CAA2C,CAAC;IACvD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;CACxD,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACzD,MAAM,CAAC,IAAI,CACV,eAAe,EACf,yFAAyF,EACzF,MAAM,EACN,KAAK,EAAE,MAAM,EAAE,EAAE;QAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,qBAAqB,EAAE,CAAC;aACvF,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS;YACrC,CAAC,CAAC,WAAW,MAAM,CAAC,SAAS,kBAAkB;YAC/C,CAAC,CAAC,wEAAwE,CAAC;QAE5E,MAAM,MAAM,GAAG;YACd,sDAAsD;YACtD,EAAE;YACF,KAAK;YACL,MAAM,CAAC,IAAI;YACX,KAAK;YACL,EAAE;YACF,aAAa;YACb,EAAE;YACF,UAAU;YACV,qBAAqB;YACrB,eAAe;YACf,yBAAyB;YACzB,6BAA6B;SAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YACpC,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,wBAAwB,EAAE,CAAC;QAC7C,QAAQ,CAAC,SAAS,EAAE;YACnB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM;YACN,QAAQ,EAAE,QAAQ,CAAC,OAAO;YAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,OAAO;YACN,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,yBAAyB,KAAK,CAAC,WAAW,OAAO,QAAQ,CAAC,OAAO,EAAE;iBACzE;aACD;SACD,CAAC;IACH,CAAC,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerListAgentsTool(server: McpServer): void;
3
+ //# sourceMappingURL=list-agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-agents.d.ts","sourceRoot":"","sources":["../../src/tools/list-agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmC9D"}
@@ -0,0 +1,28 @@
1
+ import { getAllRegisteredAgents } from "../agents/registry.js";
2
+ export function registerListAgentsTool(server) {
3
+ server.tool("list_agents", "List all detected agents and their availability status.", {}, async () => {
4
+ const agents = getAllRegisteredAgents();
5
+ const checks = await Promise.all(agents.map(async (agent) => ({
6
+ id: agent.id,
7
+ displayName: agent.displayName,
8
+ cliCommand: agent.cliCommand,
9
+ available: await agent.isAvailable(),
10
+ defaultModel: agent.getDefaultModel(),
11
+ modelCount: agent.getModels().length,
12
+ })));
13
+ const lines = ["## Available Agents\n"];
14
+ for (const check of checks) {
15
+ const status = check.available ? "Available" : "Not installed";
16
+ lines.push(`### ${check.displayName} (\`${check.id}\`)`);
17
+ lines.push(`- **Status**: ${status}`);
18
+ lines.push(`- **CLI**: \`${check.cliCommand}\``);
19
+ lines.push(`- **Default Model**: ${check.defaultModel}`);
20
+ lines.push(`- **Models**: ${check.modelCount} available`);
21
+ lines.push("");
22
+ }
23
+ return {
24
+ content: [{ type: "text", text: lines.join("\n") }],
25
+ };
26
+ });
27
+ }
28
+ //# sourceMappingURL=list-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-agents.js","sourceRoot":"","sources":["../../src/tools/list-agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACV,aAAa,EACb,yDAAyD,EACzD,EAAE,EACF,KAAK,IAAI,EAAE;QACV,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;QAExC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5B,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,MAAM,KAAK,CAAC,WAAW,EAAE;YACpC,YAAY,EAAE,KAAK,CAAC,eAAe,EAAE;YACrC,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM;SACpC,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,KAAK,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,WAAW,OAAO,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,UAAU,YAAY,CAAC,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;QAED,OAAO;YACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5D,CAAC;IACH,CAAC,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerListModelsTool(server: McpServer): void;
3
+ //# sourceMappingURL=list-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-models.d.ts","sourceRoot":"","sources":["../../src/tools/list-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwC9D"}
@@ -0,0 +1,43 @@
1
+ import { z } from "zod";
2
+ import { getAgent, getAllRegisteredAgents } from "../agents/registry.js";
3
+ const SCHEMA = {
4
+ agent: z
5
+ .enum(["claude", "codex", "gemini", "copilot"])
6
+ .optional()
7
+ .describe("Specific agent to list models for (all agents if omitted)"),
8
+ };
9
+ export function registerListModelsTool(server) {
10
+ server.tool("list_models", "List available models for agents. Optionally filter by specific agent.", SCHEMA, async (params) => {
11
+ const lines = ["## Available Models\n"];
12
+ if (params.agent) {
13
+ const agent = getAgent(params.agent);
14
+ if (!agent) {
15
+ return {
16
+ content: [{ type: "text", text: `Agent '${params.agent}' is not available.` }],
17
+ };
18
+ }
19
+ lines.push(`### ${agent.displayName}`);
20
+ lines.push(`Default: **${agent.getDefaultModel()}**\n`);
21
+ for (const model of agent.getModels()) {
22
+ const isDefault = model === agent.getDefaultModel() ? " (default)" : "";
23
+ lines.push(`- ${model}${isDefault}`);
24
+ }
25
+ }
26
+ else {
27
+ const agents = getAllRegisteredAgents();
28
+ for (const agent of agents) {
29
+ lines.push(`### ${agent.displayName} (\`${agent.id}\`)`);
30
+ lines.push(`Default: **${agent.getDefaultModel()}**\n`);
31
+ for (const model of agent.getModels()) {
32
+ const isDefault = model === agent.getDefaultModel() ? " (default)" : "";
33
+ lines.push(`- ${model}${isDefault}`);
34
+ }
35
+ lines.push("");
36
+ }
37
+ }
38
+ return {
39
+ content: [{ type: "text", text: lines.join("\n") }],
40
+ };
41
+ });
42
+ }
43
+ //# sourceMappingURL=list-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-models.js","sourceRoot":"","sources":["../../src/tools/list-models.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEzE,MAAM,MAAM,GAAG;IACd,KAAK,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;SAC9C,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;CACvE,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACV,aAAa,EACb,wEAAwE,EACxE,MAAM,EACN,KAAK,EAAE,MAAM,EAAE,EAAE;QAChB,MAAM,KAAK,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAExC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,qBAAqB,EAAE,CAAC;iBACvF,CAAC;YACH,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YACxD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,KAAK,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,SAAS,EAAE,CAAC,CAAC;YACtC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;YACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,WAAW,OAAO,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;gBACzD,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBACxD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;oBACvC,MAAM,SAAS,GAAG,KAAK,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,SAAS,EAAE,CAAC,CAAC;gBACtC,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC;QACF,CAAC;QAED,OAAO;YACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5D,CAAC;IACH,CAAC,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerRefactorWithTool(server: McpServer): void;
3
+ //# sourceMappingURL=refactor-with.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refactor-with.d.ts","sourceRoot":"","sources":["../../src/tools/refactor-with.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0DhE"}
@@ -0,0 +1,62 @@
1
+ import { z } from "zod";
2
+ import { getAgent } from "../agents/registry.js";
3
+ import { addEntry, getOrCreateActiveSession } from "../session/store.js";
4
+ const SCHEMA = {
5
+ agent: z.enum(["claude", "codex", "gemini", "copilot"]).describe("Agent to refactor with"),
6
+ code: z.string().describe("Code to refactor"),
7
+ goal: z
8
+ .enum(["performance", "readability", "modularity"])
9
+ .optional()
10
+ .describe("Refactoring goal"),
11
+ timeout: z.number().optional().describe("Timeout in ms"),
12
+ };
13
+ export function registerRefactorWithTool(server) {
14
+ server.tool("refactor_with", "Refactor code using a specific agent. Optionally specify a goal: performance, readability, or modularity.", SCHEMA, async (params) => {
15
+ const agent = getAgent(params.agent);
16
+ if (!agent) {
17
+ return {
18
+ content: [{ type: "text", text: `Agent '${params.agent}' is not available.` }],
19
+ };
20
+ }
21
+ const goalInstruction = params.goal
22
+ ? `Refactor with a focus on: ${params.goal}`
23
+ : "Refactor for overall code quality improvement";
24
+ const prompt = [
25
+ goalInstruction,
26
+ "",
27
+ "Original code:",
28
+ "```",
29
+ params.code,
30
+ "```",
31
+ "",
32
+ "Provide:",
33
+ "1. Refactored code",
34
+ "2. List of changes made",
35
+ "3. Explanation of improvements",
36
+ ].join("\n");
37
+ const response = await agent.execute({
38
+ prompt,
39
+ timeout: params.timeout,
40
+ });
41
+ const sessionId = getOrCreateActiveSession();
42
+ addEntry(sessionId, {
43
+ tool: "refactor_with",
44
+ agent: response.agent,
45
+ model: response.model,
46
+ prompt,
47
+ response: response.content,
48
+ durationMs: response.durationMs,
49
+ exitCode: response.exitCode,
50
+ error: response.error,
51
+ });
52
+ return {
53
+ content: [
54
+ {
55
+ type: "text",
56
+ text: `## Refactoring by ${agent.displayName}\n\n${response.content}`,
57
+ },
58
+ ],
59
+ };
60
+ });
61
+ }
62
+ //# sourceMappingURL=refactor-with.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refactor-with.js","sourceRoot":"","sources":["../../src/tools/refactor-with.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,MAAM,GAAG;IACd,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC1F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC7C,IAAI,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;SAClD,QAAQ,EAAE;SACV,QAAQ,CAAC,kBAAkB,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;CACxD,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACzD,MAAM,CAAC,IAAI,CACV,eAAe,EACf,2GAA2G,EAC3G,MAAM,EACN,KAAK,EAAE,MAAM,EAAE,EAAE;QAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,qBAAqB,EAAE,CAAC;aACvF,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI;YAClC,CAAC,CAAC,6BAA6B,MAAM,CAAC,IAAI,EAAE;YAC5C,CAAC,CAAC,+CAA+C,CAAC;QAEnD,MAAM,MAAM,GAAG;YACd,eAAe;YACf,EAAE;YACF,gBAAgB;YAChB,KAAK;YACL,MAAM,CAAC,IAAI;YACX,KAAK;YACL,EAAE;YACF,UAAU;YACV,oBAAoB;YACpB,yBAAyB;YACzB,gCAAgC;SAChC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YACpC,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,wBAAwB,EAAE,CAAC;QAC7C,QAAQ,CAAC,SAAS,EAAE;YACnB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM;YACN,QAAQ,EAAE,QAAQ,CAAC,OAAO;YAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,OAAO;YACN,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,qBAAqB,KAAK,CAAC,WAAW,OAAO,QAAQ,CAAC,OAAO,EAAE;iBACrE;aACD;SACD,CAAC;IACH,CAAC,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerReviewCodeTool(server: McpServer): void;
3
+ //# sourceMappingURL=review-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-code.d.ts","sourceRoot":"","sources":["../../src/tools/review-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+D9D"}