dnd-mcp 0.1.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 (100) hide show
  1. package/bin/ClrDebug.dll +0 -0
  2. package/bin/DnD.Core.dll +0 -0
  3. package/bin/DnD.Core.pdb +0 -0
  4. package/bin/DnD.Host.deps.json +440 -0
  5. package/bin/DnD.Host.dll +0 -0
  6. package/bin/DnD.Host.exe +0 -0
  7. package/bin/DnD.Host.pdb +0 -0
  8. package/bin/DnD.Host.runtimeconfig.json +13 -0
  9. package/bin/DnD.Protocol.dll +0 -0
  10. package/bin/DnD.Protocol.pdb +0 -0
  11. package/bin/MessagePack.Annotations.dll +0 -0
  12. package/bin/MessagePack.dll +0 -0
  13. package/bin/Microsoft.NET.StringTools.dll +0 -0
  14. package/bin/Microsoft.VisualStudio.Threading.dll +0 -0
  15. package/bin/Microsoft.VisualStudio.Validation.dll +0 -0
  16. package/bin/Nerdbank.MessagePack.dll +0 -0
  17. package/bin/Nerdbank.Streams.dll +0 -0
  18. package/bin/Newtonsoft.Json.dll +0 -0
  19. package/bin/PolyType.dll +0 -0
  20. package/bin/StreamJsonRpc.dll +0 -0
  21. package/bin/System.Collections.Immutable.dll +0 -0
  22. package/bin/System.IO.Pipelines.dll +0 -0
  23. package/bin/System.Reflection.Metadata.dll +0 -0
  24. package/bin/cs/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  25. package/bin/cs/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  26. package/bin/cs/StreamJsonRpc.resources.dll +0 -0
  27. package/bin/de/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  28. package/bin/de/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  29. package/bin/de/StreamJsonRpc.resources.dll +0 -0
  30. package/bin/es/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  31. package/bin/es/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  32. package/bin/es/StreamJsonRpc.resources.dll +0 -0
  33. package/bin/fr/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  34. package/bin/fr/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  35. package/bin/fr/StreamJsonRpc.resources.dll +0 -0
  36. package/bin/it/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  37. package/bin/it/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  38. package/bin/it/StreamJsonRpc.resources.dll +0 -0
  39. package/bin/ja/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  40. package/bin/ja/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  41. package/bin/ja/StreamJsonRpc.resources.dll +0 -0
  42. package/bin/ko/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  43. package/bin/ko/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  44. package/bin/ko/StreamJsonRpc.resources.dll +0 -0
  45. package/bin/pl/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  46. package/bin/pl/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  47. package/bin/pl/StreamJsonRpc.resources.dll +0 -0
  48. package/bin/pt-BR/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  49. package/bin/pt-BR/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  50. package/bin/pt-BR/StreamJsonRpc.resources.dll +0 -0
  51. package/bin/ru/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  52. package/bin/ru/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  53. package/bin/ru/StreamJsonRpc.resources.dll +0 -0
  54. package/bin/runtimes/win-x64/native/dbgshim.dll +0 -0
  55. package/bin/tr/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  56. package/bin/tr/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  57. package/bin/tr/StreamJsonRpc.resources.dll +0 -0
  58. package/bin/zh-Hans/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  59. package/bin/zh-Hans/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  60. package/bin/zh-Hans/StreamJsonRpc.resources.dll +0 -0
  61. package/bin/zh-Hant/Microsoft.VisualStudio.Threading.resources.dll +0 -0
  62. package/bin/zh-Hant/Microsoft.VisualStudio.Validation.resources.dll +0 -0
  63. package/bin/zh-Hant/StreamJsonRpc.resources.dll +0 -0
  64. package/dist/client-manager.d.ts +39 -0
  65. package/dist/client-manager.d.ts.map +1 -0
  66. package/dist/client-manager.js +150 -0
  67. package/dist/client-manager.js.map +1 -0
  68. package/dist/debugger-client.d.ts +39 -0
  69. package/dist/debugger-client.d.ts.map +1 -0
  70. package/dist/debugger-client.js +135 -0
  71. package/dist/debugger-client.js.map +1 -0
  72. package/dist/index.d.ts +3 -0
  73. package/dist/index.d.ts.map +1 -0
  74. package/dist/index.js +31 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/tools/breakpoints.d.ts +4 -0
  77. package/dist/tools/breakpoints.d.ts.map +1 -0
  78. package/dist/tools/breakpoints.js +108 -0
  79. package/dist/tools/breakpoints.js.map +1 -0
  80. package/dist/tools/execution.d.ts +18 -0
  81. package/dist/tools/execution.d.ts.map +1 -0
  82. package/dist/tools/execution.js +215 -0
  83. package/dist/tools/execution.js.map +1 -0
  84. package/dist/tools/inspection.d.ts +4 -0
  85. package/dist/tools/inspection.d.ts.map +1 -0
  86. package/dist/tools/inspection.js +123 -0
  87. package/dist/tools/inspection.js.map +1 -0
  88. package/dist/tools/process.d.ts +4 -0
  89. package/dist/tools/process.d.ts.map +1 -0
  90. package/dist/tools/process.js +114 -0
  91. package/dist/tools/process.js.map +1 -0
  92. package/dist/types/protocol.d.ts +133 -0
  93. package/dist/types/protocol.d.ts.map +1 -0
  94. package/dist/types/protocol.js +3 -0
  95. package/dist/types/protocol.js.map +1 -0
  96. package/dist/types/rpc-methods.d.ts +24 -0
  97. package/dist/types/rpc-methods.d.ts.map +1 -0
  98. package/dist/types/rpc-methods.js +25 -0
  99. package/dist/types/rpc-methods.js.map +1 -0
  100. package/package.json +47 -0
@@ -0,0 +1,215 @@
1
+ import { z } from "zod";
2
+ const DEFAULT_TIMEOUT_MS = 30_000;
3
+ export function waitForStopOrExit(client, timeoutMs = DEFAULT_TIMEOUT_MS) {
4
+ return new Promise((resolve, reject) => {
5
+ let resolved = false;
6
+ const cleanup = () => {
7
+ resolved = true;
8
+ client.removeListener("stopped", onStopped);
9
+ client.removeListener("exited", onExited);
10
+ };
11
+ const onStopped = (params) => {
12
+ if (resolved)
13
+ return;
14
+ cleanup();
15
+ resolve({ type: "stopped", params });
16
+ };
17
+ const onExited = (params) => {
18
+ if (resolved)
19
+ return;
20
+ cleanup();
21
+ resolve({ type: "exited", params });
22
+ };
23
+ client.on("stopped", onStopped);
24
+ client.on("exited", onExited);
25
+ setTimeout(() => {
26
+ if (resolved)
27
+ return;
28
+ cleanup();
29
+ reject(new Error(`Timed out waiting for stop/exit after ${timeoutMs}ms`));
30
+ }, timeoutMs);
31
+ });
32
+ }
33
+ async function fetchTopFrame(client, threadId) {
34
+ try {
35
+ const { stackFrames } = await client.getStackTrace({ threadId });
36
+ return stackFrames.length > 0 ? stackFrames[0] : null;
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ export function formatStoppedResponse(params, topFrame) {
43
+ const bpId = params.breakpointId != null ? ` #${params.breakpointId}` : "";
44
+ let text = `Stopped: ${params.reason}${bpId}${params.description ? ` — ${params.description}` : ""} (thread ${params.threadId})`;
45
+ if (topFrame) {
46
+ const loc = topFrame.file
47
+ ? ` (${topFrame.file}:${topFrame.line ?? "?"})`
48
+ : "";
49
+ const mod = topFrame.moduleId
50
+ ? ` [${topFrame.moduleId.split(/[/\\]/).pop()}]`
51
+ : "";
52
+ text += `\n at ${topFrame.name}${loc}${mod}`;
53
+ }
54
+ return text;
55
+ }
56
+ export function formatExitedResponse(params) {
57
+ return `Process exited with code ${params.exitCode}`;
58
+ }
59
+ async function handleExecution(client, action, clientManager) {
60
+ const waitPromise = waitForStopOrExit(client);
61
+ await action();
62
+ clientManager.markRunning();
63
+ const event = await waitPromise;
64
+ if (event.type === "stopped") {
65
+ const topFrame = await fetchTopFrame(client, event.params.threadId);
66
+ return {
67
+ content: [
68
+ {
69
+ type: "text",
70
+ text: formatStoppedResponse(event.params, topFrame),
71
+ },
72
+ ],
73
+ };
74
+ }
75
+ // Process exited — dispose client so next launch spawns a fresh host
76
+ await clientManager.dispose();
77
+ return {
78
+ content: [
79
+ { type: "text", text: formatExitedResponse(event.params) },
80
+ ],
81
+ };
82
+ }
83
+ export function registerExecutionTools(server, clientManager) {
84
+ server.tool("pause", "Pause (break) the running process. Use this when the process is running and you need to inspect its state.", async () => {
85
+ const client = clientManager.getClient();
86
+ // Register listener BEFORE calling pause — the stopped notification
87
+ // arrives during the RPC response, so we must not miss it.
88
+ const waitPromise = waitForStopOrExit(client, 5_000);
89
+ await client.pause();
90
+ const event = await waitPromise;
91
+ if (event.type === "stopped") {
92
+ const topFrame = await fetchTopFrame(client, event.params.threadId);
93
+ return {
94
+ content: [
95
+ {
96
+ type: "text",
97
+ text: formatStoppedResponse(event.params, topFrame),
98
+ },
99
+ ],
100
+ };
101
+ }
102
+ await clientManager.dispose();
103
+ return {
104
+ content: [
105
+ { type: "text", text: formatExitedResponse(event.params) },
106
+ ],
107
+ };
108
+ });
109
+ server.tool("continue", "Continue execution until the next breakpoint or program exit.", {
110
+ threadId: z.coerce
111
+ .number()
112
+ .optional()
113
+ .describe("Thread ID to continue (default: all threads)"),
114
+ }, async (params) => {
115
+ const client = clientManager.getClient();
116
+ await client.continue(params);
117
+ clientManager.markRunning();
118
+ return {
119
+ content: [{ type: "text", text: "Process running" }],
120
+ };
121
+ });
122
+ server.tool("waitForStop", "Wait until the process stops (breakpoint, exception, pause) or exits. Use after 'continue' when you need to wait for the next stop. Returns immediately if the process is already stopped or exited.", {
123
+ timeout: z.coerce
124
+ .number()
125
+ .optional()
126
+ .describe("Timeout in milliseconds (default: 30000). Returns a timeout error if no stop occurs within this period."),
127
+ }, async (params) => {
128
+ const snap = clientManager.getStateSnapshot();
129
+ if (snap.state === "stopped") {
130
+ const client = clientManager.getClient();
131
+ const topFrame = snap.threadId
132
+ ? await fetchTopFrame(client, snap.threadId)
133
+ : null;
134
+ return {
135
+ content: [
136
+ {
137
+ type: "text",
138
+ text: formatStoppedResponse({
139
+ reason: snap.stopReason ?? "pause",
140
+ threadId: snap.threadId ?? 0,
141
+ description: snap.stopDescription,
142
+ breakpointId: snap.breakpointId,
143
+ }, topFrame),
144
+ },
145
+ ],
146
+ };
147
+ }
148
+ if (snap.state === "exited") {
149
+ return {
150
+ content: [
151
+ {
152
+ type: "text",
153
+ text: formatExitedResponse({
154
+ exitCode: snap.exitCode ?? 0,
155
+ }),
156
+ },
157
+ ],
158
+ };
159
+ }
160
+ if (snap.state === "not-started") {
161
+ return {
162
+ content: [
163
+ {
164
+ type: "text",
165
+ text: "No process running. Call launch or attach first.",
166
+ },
167
+ ],
168
+ isError: true,
169
+ };
170
+ }
171
+ // state === "running" — wait for stop or exit
172
+ const client = clientManager.getClient();
173
+ const timeoutMs = params.timeout ?? DEFAULT_TIMEOUT_MS;
174
+ const event = await waitForStopOrExit(client, timeoutMs);
175
+ if (event.type === "stopped") {
176
+ const topFrame = await fetchTopFrame(client, event.params.threadId);
177
+ return {
178
+ content: [
179
+ {
180
+ type: "text",
181
+ text: formatStoppedResponse(event.params, topFrame),
182
+ },
183
+ ],
184
+ };
185
+ }
186
+ await clientManager.dispose();
187
+ return {
188
+ content: [
189
+ {
190
+ type: "text",
191
+ text: formatExitedResponse(event.params),
192
+ },
193
+ ],
194
+ };
195
+ });
196
+ server.tool("stepIn", "Step into the next function call. If the current line has no function call, behaves like stepOver (advances to the next line).", {
197
+ threadId: z.coerce.number().optional().describe("Thread ID"),
198
+ }, async (params) => {
199
+ const client = clientManager.getClient();
200
+ return handleExecution(client, () => client.stepIn(params), clientManager);
201
+ });
202
+ server.tool("stepOver", "Step over the current line, executing any function calls without stopping inside them.", {
203
+ threadId: z.coerce.number().optional().describe("Thread ID"),
204
+ }, async (params) => {
205
+ const client = clientManager.getClient();
206
+ return handleExecution(client, () => client.stepOver(params), clientManager);
207
+ });
208
+ server.tool("stepOut", "Step out of the current function, continuing until it returns to the caller.", {
209
+ threadId: z.coerce.number().optional().describe("Thread ID"),
210
+ }, async (params) => {
211
+ const client = clientManager.getClient();
212
+ return handleExecution(client, () => client.stepOut(params), clientManager);
213
+ });
214
+ }
215
+ //# sourceMappingURL=execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/tools/execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ClientManager } from "../client-manager.js";
3
+ export declare function registerInspectionTools(server: McpServer, clientManager: ClientManager): void;
4
+ //# sourceMappingURL=inspection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection.d.ts","sourceRoot":"","sources":["../../src/tools/inspection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,aAAa,QAwJ7B"}
@@ -0,0 +1,123 @@
1
+ import { z } from "zod";
2
+ export function registerInspectionTools(server, clientManager) {
3
+ server.tool("getThreads", "List all threads in the debugged process. Shows thread IDs and marks the current (stopped) thread.", async () => {
4
+ const client = clientManager.getClient();
5
+ const result = await client.getThreads();
6
+ if (result.threads.length === 0) {
7
+ return { content: [{ type: "text", text: "No threads" }] };
8
+ }
9
+ const lines = result.threads.map((t) => {
10
+ const marker = t.current ? " *" : "";
11
+ const name = t.name ? ` "${t.name}"` : "";
12
+ return ` Thread ${t.id}${name}${marker}`;
13
+ });
14
+ return {
15
+ content: [
16
+ {
17
+ type: "text",
18
+ text: `Threads (* = current):\n${lines.join("\n")}`,
19
+ },
20
+ ],
21
+ };
22
+ });
23
+ server.tool("getException", "Get the current exception when stopped at an exception. Returns the exception type, message, stack trace, and inner exception if present.", {
24
+ threadId: z.coerce
25
+ .number()
26
+ .optional()
27
+ .describe("Thread ID (default: stopped thread)"),
28
+ }, async (params) => {
29
+ const client = clientManager.getClient();
30
+ const result = await client.getException(params);
31
+ let text = `${result.type}`;
32
+ if (result.message) {
33
+ text += `: ${result.message}`;
34
+ }
35
+ if (result.stackTrace) {
36
+ text += `\n\nStack trace:\n${result.stackTrace}`;
37
+ }
38
+ if (result.innerException) {
39
+ text += `\n\nInner exception: ${result.innerException.type}`;
40
+ if (result.innerException.message) {
41
+ text += `: ${result.innerException.message}`;
42
+ }
43
+ }
44
+ return {
45
+ content: [{ type: "text", text }],
46
+ };
47
+ });
48
+ server.tool("getStackTrace", "Get the current call stack. The process must be stopped at a breakpoint or step.", {
49
+ threadId: z.coerce
50
+ .number()
51
+ .optional()
52
+ .describe("Thread ID (default: stopped thread)"),
53
+ }, async (params) => {
54
+ const client = clientManager.getClient();
55
+ const result = await client.getStackTrace(params);
56
+ if (result.stackFrames.length === 0) {
57
+ return {
58
+ content: [{ type: "text", text: "No stack frames" }],
59
+ };
60
+ }
61
+ const lines = result.stackFrames.map((frame) => {
62
+ const loc = frame.file ? ` at ${frame.file}:${frame.line ?? "?"}` : "";
63
+ const mod = frame.moduleId
64
+ ? ` [${frame.moduleId.split(/[/\\]/).pop()}]`
65
+ : "";
66
+ return ` #${frame.id} ${frame.name}${loc}${mod}`;
67
+ });
68
+ return {
69
+ content: [
70
+ { type: "text", text: `Stack trace:\n${lines.join("\n")}` },
71
+ ],
72
+ };
73
+ });
74
+ server.tool("getVariables", "Get variables for a given scope. Use variablesReference=0 for top-frame locals. To expand an object or array, pass the (ref: N) number shown in the output as variablesReference.", {
75
+ variablesReference: z.coerce
76
+ .number()
77
+ .describe("Variables reference (0 for top-frame locals)"),
78
+ }, async (params) => {
79
+ const client = clientManager.getClient();
80
+ const result = await client.getVariables(params);
81
+ if (result.variables.length === 0) {
82
+ return {
83
+ content: [
84
+ {
85
+ type: "text",
86
+ text: "No variables in the current scope",
87
+ },
88
+ ],
89
+ };
90
+ }
91
+ const lines = result.variables.map((v) => ` ${v.name}: ${v.type ?? ""} = ${v.value}${v.variablesReference ? ` (ref: ${v.variablesReference})` : ""}`);
92
+ return {
93
+ content: [
94
+ { type: "text", text: `Variables:\n${lines.join("\n")}` },
95
+ ],
96
+ };
97
+ });
98
+ server.tool("evaluate", "Evaluate an expression in the context of the current stopped frame. Supports variable names, property access, method calls, and arithmetic.", {
99
+ expression: z
100
+ .string()
101
+ .describe("Expression to evaluate (e.g., 'x', 'obj.Name', 'a + b')"),
102
+ frameId: z.coerce
103
+ .number()
104
+ .optional()
105
+ .describe("Stack frame ID (default: top frame)"),
106
+ }, async (params) => {
107
+ const client = clientManager.getClient();
108
+ const result = await client.evaluate(params);
109
+ const typeStr = result.type ? ` (${result.type})` : "";
110
+ const refStr = result.variablesReference
111
+ ? ` (ref: ${result.variablesReference})`
112
+ : "";
113
+ return {
114
+ content: [
115
+ {
116
+ type: "text",
117
+ text: `${result.result}${typeStr}${refStr}`,
118
+ },
119
+ ],
120
+ };
121
+ });
122
+ }
123
+ //# sourceMappingURL=inspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection.js","sourceRoot":"","sources":["../../src/tools/inspection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ClientManager } from "../client-manager.js";
3
+ export declare function registerProcessTools(server: McpServer, clientManager: ClientManager): void;
4
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/tools/process.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAO1D,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,aAAa,QA0I7B"}
@@ -0,0 +1,114 @@
1
+ import { z } from "zod";
2
+ import { waitForStopOrExit, formatStoppedResponse, formatExitedResponse, } from "./execution.js";
3
+ export function registerProcessTools(server, clientManager) {
4
+ server.tool("launch", "Launch a .NET program under the debugger. Must be called before any other debugging operation. The response includes the path to a log file containing all program output (stdout/stderr) — use the Read tool to view it.", {
5
+ program: z
6
+ .string()
7
+ .describe("Path to the .NET executable or DLL to debug"),
8
+ args: z.array(z.string()).optional().describe("Command-line arguments"),
9
+ cwd: z.string().optional().describe("Working directory"),
10
+ env: z
11
+ .record(z.string(), z.string())
12
+ .optional()
13
+ .describe("Environment variables"),
14
+ stopAtEntry: z.boolean().optional().describe("Stop at the entry point"),
15
+ }, async (params) => {
16
+ const client = await clientManager.ensureClient();
17
+ const waitPromise = waitForStopOrExit(client);
18
+ const result = await client.launch(params);
19
+ clientManager.markRunning();
20
+ const event = await waitPromise;
21
+ const hostPidLine = clientManager.hostPid
22
+ ? `\nDebugger host PID: ${clientManager.hostPid}`
23
+ : "";
24
+ const outputLine = clientManager.outputFile
25
+ ? `\nOutput file: ${clientManager.outputFile}`
26
+ : "";
27
+ if (event.type === "stopped") {
28
+ const { stackFrames } = await client.getStackTrace({
29
+ threadId: event.params.threadId,
30
+ });
31
+ const topFrame = stackFrames.length > 0 ? stackFrames[0] : null;
32
+ return {
33
+ content: [
34
+ {
35
+ type: "text",
36
+ text: formatStoppedResponse(event.params, topFrame) +
37
+ hostPidLine +
38
+ outputLine,
39
+ },
40
+ ],
41
+ };
42
+ }
43
+ // Process ran to completion without stopping
44
+ const exitText = formatExitedResponse(event.params) + hostPidLine + outputLine;
45
+ await clientManager.dispose();
46
+ return {
47
+ content: [{ type: "text", text: exitText }],
48
+ };
49
+ });
50
+ server.tool("attach", "Attach the debugger to a running .NET process. The response includes the path to a log file containing all program output (stdout/stderr) — use the Read tool to view it.", {
51
+ processId: z.coerce.number().describe("Process ID to attach to"),
52
+ }, async (params) => {
53
+ const client = await clientManager.ensureClient();
54
+ const result = await client.attach(params);
55
+ clientManager.markRunning();
56
+ const hostPidLine = clientManager.hostPid
57
+ ? `\nDebugger host PID: ${clientManager.hostPid}`
58
+ : "";
59
+ const outputLine = clientManager.outputFile
60
+ ? `\nOutput file: ${clientManager.outputFile}`
61
+ : "";
62
+ return {
63
+ content: [
64
+ {
65
+ type: "text",
66
+ text: `Attached to process ${result.processId}${hostPidLine}${outputLine}`,
67
+ },
68
+ ],
69
+ };
70
+ });
71
+ server.tool("detach", "Detach the debugger from the process without killing it.", async () => {
72
+ const client = clientManager.getClient();
73
+ const hostPid = clientManager.hostPid;
74
+ await client.detach();
75
+ await clientManager.dispose();
76
+ const pidInfo = hostPid ? ` (host PID was ${hostPid})` : "";
77
+ return {
78
+ content: [
79
+ { type: "text", text: `Detached from process${pidInfo}` },
80
+ ],
81
+ };
82
+ });
83
+ server.tool("terminate", "Terminate the debugged process.", async () => {
84
+ const client = clientManager.getClient();
85
+ await client.terminate();
86
+ await clientManager.dispose();
87
+ return {
88
+ content: [{ type: "text", text: "Process terminated" }],
89
+ };
90
+ });
91
+ server.tool("getState", "Get the current debugger state: not-started, running, stopped, or exited. Includes stop reason and output file path when applicable.", async () => {
92
+ const snap = clientManager.getStateSnapshot();
93
+ let text = `State: ${snap.state}`;
94
+ if (snap.state === "stopped") {
95
+ text += ` (${snap.stopReason ?? "unknown"})`;
96
+ if (snap.stopDescription) {
97
+ text += ` — ${snap.stopDescription}`;
98
+ }
99
+ if (snap.threadId != null) {
100
+ text += ` (thread ${snap.threadId})`;
101
+ }
102
+ }
103
+ if (snap.state === "exited" && snap.exitCode != null) {
104
+ text += ` (exit code ${snap.exitCode})`;
105
+ }
106
+ if (snap.outputFile) {
107
+ text += `\nOutput file: ${snap.outputFile}`;
108
+ }
109
+ return {
110
+ content: [{ type: "text", text }],
111
+ };
112
+ });
113
+ }
114
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/tools/process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ export interface Breakpoint {
2
+ id: number;
3
+ file: string;
4
+ line: number;
5
+ verified: boolean;
6
+ condition?: string | null;
7
+ hitCount?: number | null;
8
+ }
9
+ export interface StackFrame {
10
+ id: number;
11
+ name: string;
12
+ file?: string | null;
13
+ line?: number | null;
14
+ column?: number | null;
15
+ moduleId?: string | null;
16
+ }
17
+ export interface Variable {
18
+ name: string;
19
+ value: string;
20
+ type?: string | null;
21
+ variablesReference: number;
22
+ }
23
+ export interface ThreadInfo {
24
+ id: number;
25
+ name?: string | null;
26
+ current: boolean;
27
+ }
28
+ export interface ExceptionInfo {
29
+ type: string;
30
+ message?: string | null;
31
+ }
32
+ export type StopReason = "breakpoint" | "step" | "pause" | "exception" | "entry";
33
+ export type OutputCategory = "stdout" | "stderr" | "console";
34
+ export interface LaunchParams {
35
+ program: string;
36
+ args?: string[];
37
+ cwd?: string;
38
+ env?: Record<string, string>;
39
+ stopAtEntry?: boolean;
40
+ }
41
+ export interface AttachParams {
42
+ processId: number;
43
+ }
44
+ export interface ContinueParams {
45
+ threadId?: number;
46
+ }
47
+ export interface StepInParams {
48
+ threadId?: number;
49
+ }
50
+ export interface StepOverParams {
51
+ threadId?: number;
52
+ }
53
+ export interface StepOutParams {
54
+ threadId?: number;
55
+ }
56
+ export interface SetBreakpointParams {
57
+ file: string;
58
+ line: number;
59
+ condition?: string;
60
+ hitCount?: number;
61
+ }
62
+ export interface SetExceptionBreakpointsParams {
63
+ thrown?: boolean;
64
+ uncaught?: boolean;
65
+ types?: string[];
66
+ }
67
+ export interface SetExceptionBreakpointsResult {
68
+ thrown: boolean;
69
+ uncaught: boolean;
70
+ types?: string[] | null;
71
+ }
72
+ export interface RemoveBreakpointParams {
73
+ breakpointId: number;
74
+ }
75
+ export interface GetStackTraceParams {
76
+ threadId?: number;
77
+ }
78
+ export interface GetVariablesParams {
79
+ variablesReference: number;
80
+ }
81
+ export interface EvaluateParams {
82
+ expression: string;
83
+ frameId?: number;
84
+ }
85
+ export interface GetExceptionParams {
86
+ threadId?: number;
87
+ }
88
+ export interface LaunchResult {
89
+ processId: number;
90
+ }
91
+ export interface AttachResult {
92
+ processId: number;
93
+ }
94
+ export interface SetBreakpointResult {
95
+ breakpoint: Breakpoint;
96
+ }
97
+ export interface GetBreakpointsResult {
98
+ breakpoints: Breakpoint[];
99
+ }
100
+ export interface GetStackTraceResult {
101
+ stackFrames: StackFrame[];
102
+ }
103
+ export interface GetVariablesResult {
104
+ variables: Variable[];
105
+ }
106
+ export interface EvaluateResult {
107
+ result: string;
108
+ type?: string | null;
109
+ variablesReference: number;
110
+ }
111
+ export interface GetThreadsResult {
112
+ threads: ThreadInfo[];
113
+ }
114
+ export interface GetExceptionResult {
115
+ type: string;
116
+ message?: string | null;
117
+ stackTrace?: string | null;
118
+ innerException?: ExceptionInfo | null;
119
+ }
120
+ export interface StoppedParams {
121
+ reason: StopReason;
122
+ threadId: number;
123
+ description?: string;
124
+ breakpointId?: number;
125
+ }
126
+ export interface ExitedParams {
127
+ exitCode: number;
128
+ }
129
+ export interface OutputParams {
130
+ category: OutputCategory;
131
+ output: string;
132
+ }
133
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/types/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // === Shared Models ===
2
+ export {};
3
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/types/protocol.ts"],"names":[],"mappings":"AAAA,wBAAwB"}