dap-mcp-server 0.1.10 → 0.1.12

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.
@@ -21,6 +21,7 @@
21
21
  */
22
22
  import { spawn } from "node:child_process";
23
23
  import { EventEmitter } from "node:events";
24
+ import { createConnection } from "node:net";
24
25
  import { encodeMessage, MessageParser } from "./protocol.js";
25
26
  export class DAPClientError extends Error {
26
27
  constructor(message) {
@@ -32,18 +33,50 @@ export class DAPClient extends EventEmitter {
32
33
  runtime;
33
34
  executable;
34
35
  args;
36
+ transport;
37
+ portMatcher;
38
+ tcpConnectTimeout;
35
39
  process;
36
- parser;
37
- seq = 1;
38
- pending = new Map();
40
+ conns = [];
41
+ /** Index into `conns` of the connection that handles user-sent requests. */
42
+ activeIdx = -1;
43
+ /** TCP target host (set during spawn for tcp mode). */
44
+ tcpHost;
45
+ /** TCP target port (set during spawn for tcp mode). */
46
+ tcpPort;
47
+ /**
48
+ * While a startDebugging handler is bootstrapping a new child session
49
+ * (initialize + launch), user-issued `sendRequest` calls await this so they
50
+ * don't race the in-progress handshake.
51
+ */
52
+ transitionLock;
53
+ /**
54
+ * Last setBreakpoints arguments per source path. Replayed onto new child
55
+ * sessions when startDebugging causes the active connection to change —
56
+ * adapters like vscode-js-debug spawn a child for the actual debuggee
57
+ * AFTER the parent has accepted setBreakpoints, so the child wouldn't know
58
+ * about them otherwise.
59
+ */
60
+ bpHistory = new Map();
61
+ excBpHistory;
62
+ configurationDoneSent = false;
39
63
  stderrOutput = [];
64
+ stdoutPreamble = "";
40
65
  _exited = false;
41
66
  _exitCode;
42
- constructor(runtime, executable, args = []) {
67
+ constructor(runtime, executable, args = [], options = {}) {
43
68
  super();
44
69
  this.runtime = runtime;
45
70
  this.executable = executable;
46
71
  this.args = args;
72
+ this.transport = options.transport ?? "stdio";
73
+ if (this.transport === "tcp") {
74
+ if (!options.portMatcher) {
75
+ throw new DAPClientError("portMatcher is required when transport is 'tcp'");
76
+ }
77
+ this.portMatcher = new RegExp(options.portMatcher);
78
+ }
79
+ this.tcpConnectTimeout = options.tcpConnectTimeout ?? 10000;
47
80
  }
48
81
  async spawn() {
49
82
  return new Promise((resolve, reject) => {
@@ -58,10 +91,6 @@ export class DAPClient extends EventEmitter {
58
91
  // Detached child must be unref'd so the parent Node process can exit
59
92
  // even if the adapter is still running (cleanup happens via dispose()).
60
93
  this.process.unref();
61
- this.parser = new MessageParser((msg) => this.handleMessage(msg));
62
- this.process.stdout.on("data", (data) => {
63
- this.parser.feed(data);
64
- });
65
94
  this.process.stderr.on("data", (data) => {
66
95
  this.stderrOutput.push(data.toString());
67
96
  });
@@ -75,38 +104,172 @@ export class DAPClient extends EventEmitter {
75
104
  this.process.on("exit", (code, signal) => {
76
105
  this._exited = true;
77
106
  this._exitCode = code ?? undefined;
78
- for (const [, req] of this.pending) {
79
- if (req.timer)
80
- clearTimeout(req.timer);
81
- req.reject(new DAPClientError(`Adapter exited (code=${code}, signal=${signal}). stderr: ${this.stderrOutput.join("")}`));
107
+ // Reject pending across all connections.
108
+ for (const conn of this.conns) {
109
+ for (const [, req] of conn.pending) {
110
+ if (req.timer)
111
+ clearTimeout(req.timer);
112
+ req.reject(new DAPClientError(`Adapter exited (code=${code}, signal=${signal}). stderr: ${this.stderrOutput.join("")}`));
113
+ }
114
+ conn.pending.clear();
82
115
  }
83
- this.pending.clear();
84
116
  this.emit("exit", code, signal);
85
117
  });
86
- // Resolve once the process is spawned (use flag to prevent double-resolve)
87
- let resolved = false;
88
- this.process.stdout.once("readable", () => {
89
- if (!resolved) {
90
- resolved = true;
91
- resolve();
92
- }
118
+ if (this.transport === "stdio") {
119
+ // DAP messages flow over the adapter's stdin/stdout. Single connection
120
+ // (no startDebugging support over stdio).
121
+ const conn = this.makeConn("parent", this.process.stdin, this.process.stdout);
122
+ this.conns.push(conn);
123
+ this.activeIdx = 0;
124
+ // Resolve once the process is spawned (use flag to prevent double-resolve)
125
+ let resolved = false;
126
+ this.process.stdout.once("readable", () => {
127
+ if (!resolved) {
128
+ resolved = true;
129
+ resolve();
130
+ }
131
+ });
132
+ setTimeout(() => {
133
+ if (!resolved) {
134
+ resolved = true;
135
+ resolve();
136
+ }
137
+ }, 100);
138
+ }
139
+ else {
140
+ // TCP transport: read the adapter's stdout banner to discover the
141
+ // port, then connect via TCP and route DAP messages over the socket.
142
+ let portFound = false;
143
+ const connectTimer = setTimeout(() => {
144
+ if (!portFound) {
145
+ reject(new DAPClientError(`Timed out waiting for adapter to announce TCP port. ` +
146
+ `Pattern: ${this.portMatcher.source}. ` +
147
+ `Stdout so far: ${this.stdoutPreamble.slice(0, 500)}`));
148
+ }
149
+ }, this.tcpConnectTimeout);
150
+ this.process.stdout.on("data", (data) => {
151
+ this.stdoutPreamble += data.toString();
152
+ if (portFound)
153
+ return;
154
+ const m = this.portMatcher.exec(this.stdoutPreamble);
155
+ if (m) {
156
+ portFound = true;
157
+ clearTimeout(connectTimer);
158
+ const port = Number(m[1]);
159
+ if (!Number.isFinite(port) || port <= 0) {
160
+ reject(new DAPClientError(`Invalid port matched from adapter stdout: '${m[1]}'`));
161
+ return;
162
+ }
163
+ this.tcpHost = "127.0.0.1";
164
+ this.tcpPort = port;
165
+ this.openTcpConnection("parent")
166
+ .then((conn) => {
167
+ this.conns.push(conn);
168
+ this.activeIdx = 0;
169
+ resolve();
170
+ })
171
+ .catch(reject);
172
+ }
173
+ });
174
+ }
175
+ });
176
+ }
177
+ /**
178
+ * Record session-shaping requests so we can replay them on child sessions.
179
+ * `setBreakpoints` and `setExceptionBreakpoints` need to be re-sent because
180
+ * each DAP session has its own breakpoint state. `configurationDone` is
181
+ * tracked so we know whether the parent has already finished its
182
+ * configuration phase — if so, child sessions need the same signal.
183
+ */
184
+ trackOutgoing(command, args) {
185
+ if (command === "setBreakpoints" && args) {
186
+ const src = args.source?.path;
187
+ if (src) {
188
+ this.bpHistory.set(src, args);
189
+ }
190
+ }
191
+ else if (command === "setExceptionBreakpoints" && args) {
192
+ this.excBpHistory = args;
193
+ }
194
+ else if (command === "configurationDone") {
195
+ this.configurationDoneSent = true;
196
+ }
197
+ }
198
+ /** Build a Conn around a writable/readable stream pair. */
199
+ makeConn(kind, writeStream, dataStream) {
200
+ const conn = {
201
+ kind,
202
+ writeStream,
203
+ parser: new MessageParser((msg) => this.handleMessage(msg, conn)),
204
+ pending: new Map(),
205
+ seq: 1,
206
+ closed: false,
207
+ };
208
+ dataStream.on("data", (data) => conn.parser.feed(data));
209
+ return conn;
210
+ }
211
+ /** Open a fresh TCP connection to the adapter's DAP server. */
212
+ openTcpConnection(kind) {
213
+ return new Promise((resolve, reject) => {
214
+ if (this.tcpHost === undefined || this.tcpPort === undefined) {
215
+ reject(new DAPClientError("TCP target host/port not set"));
216
+ return;
217
+ }
218
+ const sock = createConnection({ host: this.tcpHost, port: this.tcpPort }, () => {
219
+ const conn = this.makeConn(kind, sock, sock);
220
+ conn.socket = sock;
221
+ sock.on("close", () => this.onConnClose(conn));
222
+ sock.on("error", (err) => {
223
+ this.stderrOutput.push(`socket error (${kind}): ${err.message}\n`);
224
+ });
225
+ resolve(conn);
226
+ });
227
+ sock.once("error", (err) => {
228
+ reject(new DAPClientError(`Failed to connect to adapter TCP port ${this.tcpPort}: ${err.message}`));
93
229
  });
94
- setTimeout(() => {
95
- if (!resolved) {
96
- resolved = true;
97
- resolve();
98
- }
99
- }, 100);
100
230
  });
101
231
  }
232
+ onConnClose(conn) {
233
+ if (conn.closed)
234
+ return;
235
+ conn.closed = true;
236
+ for (const [, req] of conn.pending) {
237
+ if (req.timer)
238
+ clearTimeout(req.timer);
239
+ req.reject(new DAPClientError(`DAP ${conn.kind} connection closed before response. stderr: ${this.stderrOutput.join("")}`));
240
+ }
241
+ conn.pending.clear();
242
+ // If the active connection just closed, fall back to the most recent
243
+ // non-closed one. If none remain, leave activeIdx pointing at the closed
244
+ // conn — sendRequest will fail with "transport is not writable".
245
+ if (this.conns[this.activeIdx] === conn) {
246
+ for (let i = this.conns.length - 1; i >= 0; i--) {
247
+ if (!this.conns[i].closed) {
248
+ this.activeIdx = i;
249
+ break;
250
+ }
251
+ }
252
+ }
253
+ }
102
254
  async sendRequest(command, args, timeout = 10000) {
103
255
  if (this._exited) {
104
256
  throw new DAPClientError(`Adapter has exited (code=${this._exitCode}). stderr: ${this.stderrOutput.join("")}`);
105
257
  }
106
- if (!this.process?.stdin?.writable) {
107
- throw new DAPClientError("Adapter stdin is not writable");
258
+ // Wait for any in-progress session transition (e.g. handleStartDebugging
259
+ // setting up a child session) before sending. Otherwise the request would
260
+ // race the handshake or land on a half-initialized child connection.
261
+ if (this.transitionLock) {
262
+ await this.transitionLock;
263
+ }
264
+ return this.sendRequestOn(this.conns[this.activeIdx], command, args, timeout);
265
+ }
266
+ /** Internal: send a request on a specific connection. */
267
+ sendRequestOn(conn, command, args, timeout) {
268
+ if (!conn || conn.closed || !conn.writeStream.writable) {
269
+ throw new DAPClientError("Adapter transport is not writable");
108
270
  }
109
- const seq = this.seq++;
271
+ this.trackOutgoing(command, args);
272
+ const seq = conn.seq++;
110
273
  const request = {
111
274
  seq,
112
275
  type: "request",
@@ -117,41 +280,40 @@ export class DAPClient extends EventEmitter {
117
280
  const pending = { resolve, reject };
118
281
  if (timeout > 0) {
119
282
  pending.timer = setTimeout(() => {
120
- this.pending.delete(seq);
283
+ conn.pending.delete(seq);
121
284
  reject(new DAPClientError(`Request '${command}' timeout after ${timeout}ms`));
122
285
  }, timeout);
123
286
  }
124
- this.pending.set(seq, pending);
287
+ conn.pending.set(seq, pending);
125
288
  try {
126
- this.process.stdin.write(encodeMessage(request), (err) => {
289
+ conn.writeStream.write(encodeMessage(request), (err) => {
127
290
  if (err) {
128
- // Write failed (e.g. EPIPE); clean up and reject
129
- const p = this.pending.get(seq);
291
+ const p = conn.pending.get(seq);
130
292
  if (p) {
131
293
  if (p.timer)
132
294
  clearTimeout(p.timer);
133
- this.pending.delete(seq);
295
+ conn.pending.delete(seq);
134
296
  p.reject(new DAPClientError(`Write to adapter failed: ${err.message}`));
135
297
  }
136
298
  }
137
299
  });
138
300
  }
139
301
  catch (err) {
140
- this.pending.delete(seq);
302
+ conn.pending.delete(seq);
141
303
  if (pending.timer)
142
304
  clearTimeout(pending.timer);
143
305
  reject(new DAPClientError(`Write to adapter failed: ${err.message}`));
144
306
  }
145
307
  });
146
308
  }
147
- handleMessage(msg) {
309
+ handleMessage(msg, conn) {
148
310
  if (msg.type === "response") {
149
311
  const response = msg;
150
- const pending = this.pending.get(response.request_seq);
312
+ const pending = conn.pending.get(response.request_seq);
151
313
  if (pending) {
152
314
  if (pending.timer)
153
315
  clearTimeout(pending.timer);
154
- this.pending.delete(response.request_seq);
316
+ conn.pending.delete(response.request_seq);
155
317
  if (response.success) {
156
318
  pending.resolve(response);
157
319
  }
@@ -161,23 +323,21 @@ export class DAPClient extends EventEmitter {
161
323
  }
162
324
  }
163
325
  else if (msg.type === "request") {
164
- // Reverse request from the adapter (e.g. runInTerminal).
165
- // We reject all reverse requests — the MCP server has no terminal.
166
326
  const req = msg;
167
- const errorResponse = {
168
- seq: this.seq++,
169
- type: "response",
170
- request_seq: req.seq,
171
- command: req.command,
327
+ if (req.command === "startDebugging" && this.transport === "tcp") {
328
+ // The active session is asking us to open a child session for a
329
+ // newly-spawned target (vscode-js-debug does this for every node
330
+ // process it attaches to). Handle natively rather than rejecting.
331
+ this.handleStartDebugging(req, conn).catch((err) => {
332
+ this.stderrOutput.push(`startDebugging handler failed: ${err.message}\n`);
333
+ });
334
+ return;
335
+ }
336
+ // Reject other reverse requests — the MCP server has no terminal etc.
337
+ this.replyToReverseRequest(conn, req, {
172
338
  success: false,
173
339
  message: `Reverse request '${req.command}' is not supported by this client`,
174
- };
175
- try {
176
- this.process?.stdin?.write(encodeMessage(errorResponse));
177
- }
178
- catch {
179
- // ignore — process may have exited
180
- }
340
+ });
181
341
  }
182
342
  else if (msg.type === "event") {
183
343
  const event = msg;
@@ -185,6 +345,109 @@ export class DAPClient extends EventEmitter {
185
345
  this.emit("event", event);
186
346
  }
187
347
  }
348
+ /** Reply to a reverse request, on the connection that sent it. */
349
+ replyToReverseRequest(conn, req, result) {
350
+ const response = {
351
+ seq: conn.seq++,
352
+ type: "response",
353
+ request_seq: req.seq,
354
+ command: req.command,
355
+ success: result.success,
356
+ message: result.message,
357
+ body: result.body,
358
+ };
359
+ try {
360
+ conn.writeStream.write(encodeMessage(response));
361
+ }
362
+ catch {
363
+ // ignore — transport may have closed
364
+ }
365
+ }
366
+ /**
367
+ * Handle a `startDebugging` reverse request from an active session.
368
+ *
369
+ * Per the DAP startDebugging protocol, the client should open a new DAP
370
+ * session for the supplied configuration and run the launch/attach
371
+ * handshake against the SAME adapter. For TCP-server adapters like
372
+ * vscode-js-debug, we open a fresh TCP connection to the same port, run
373
+ * initialize + launch (or attach) using the request's configuration, and
374
+ * make that new connection the active one for subsequent user requests.
375
+ *
376
+ * The `transitionLock` prevents user `sendRequest` calls from racing the
377
+ * handshake.
378
+ */
379
+ async handleStartDebugging(req, fromConn) {
380
+ let resolveLock;
381
+ this.transitionLock = new Promise((r) => { resolveLock = r; });
382
+ try {
383
+ const argsObj = (req.arguments ?? {});
384
+ const childConfig = argsObj.configuration ?? {};
385
+ const childRequest = argsObj.request ?? "launch";
386
+ const childConn = await this.openTcpConnection("child");
387
+ this.conns.push(childConn);
388
+ const newIdx = this.conns.length - 1;
389
+ // Make it active so the silent handshake calls below go to the child.
390
+ this.activeIdx = newIdx;
391
+ // Run initialize on the child. The adapterID is taken from the supplied
392
+ // configuration when present (vscode-js-debug uses "pwa-node").
393
+ await this.sendRequestOn(childConn, "initialize", {
394
+ adapterID: childConfig.type ?? "child",
395
+ clientID: "dap-mcp-server",
396
+ clientName: "DAP MCP Server",
397
+ linesStartAt1: true,
398
+ columnsStartAt1: true,
399
+ pathFormat: "path",
400
+ }, 10000);
401
+ // Run launch/attach with the provided configuration. The configuration
402
+ // typically carries adapter-specific fields like __pendingTargetId that
403
+ // bind the new session to a specific target. Fire-and-forget — the
404
+ // adapter blocks the response until configurationDone, which we issue
405
+ // ourselves below after replaying breakpoints.
406
+ const childLaunchPromise = this.sendRequestOn(childConn, childRequest, childConfig, 30000);
407
+ childLaunchPromise.catch(() => { });
408
+ // Replay configuration state established on the previous active
409
+ // connection so the new child session honors the same breakpoints.
410
+ // Without this, vscode-js-debug-style adapters (where the parent
411
+ // accepts setBreakpoints but the child is what actually runs the
412
+ // debuggee) would never pause at user-set breakpoints.
413
+ for (const args of this.bpHistory.values()) {
414
+ try {
415
+ await this.sendRequestOn(childConn, "setBreakpoints", args, 10000);
416
+ }
417
+ catch {
418
+ // Best-effort replay — keep going.
419
+ }
420
+ }
421
+ if (this.excBpHistory) {
422
+ try {
423
+ await this.sendRequestOn(childConn, "setExceptionBreakpoints", this.excBpHistory, 10000);
424
+ }
425
+ catch {
426
+ // ignore
427
+ }
428
+ }
429
+ if (this.configurationDoneSent) {
430
+ try {
431
+ await this.sendRequestOn(childConn, "configurationDone", undefined, 10000);
432
+ }
433
+ catch {
434
+ // ignore
435
+ }
436
+ }
437
+ // Acknowledge the reverse request so the parent can proceed.
438
+ this.replyToReverseRequest(fromConn, req, { success: true });
439
+ }
440
+ catch (err) {
441
+ this.replyToReverseRequest(fromConn, req, {
442
+ success: false,
443
+ message: `Failed to start child debug session: ${err.message}`,
444
+ });
445
+ }
446
+ finally {
447
+ resolveLock?.();
448
+ this.transitionLock = undefined;
449
+ }
450
+ }
188
451
  get exited() {
189
452
  return this._exited;
190
453
  }
@@ -192,6 +455,14 @@ export class DAPClient extends EventEmitter {
192
455
  return this.stderrOutput.join("");
193
456
  }
194
457
  async dispose() {
458
+ for (const conn of this.conns) {
459
+ if (conn.socket && !conn.socket.destroyed) {
460
+ try {
461
+ conn.socket.destroy();
462
+ }
463
+ catch { /* ignore */ }
464
+ }
465
+ }
195
466
  if (this.process && !this._exited) {
196
467
  this.process.stdin?.end();
197
468
  this.process.kill("SIGTERM");
@@ -1 +1 @@
1
- {"version":3,"file":"dap-client.js","sourceRoot":"","sources":["../../src/dap/dap-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dap-client.js","sourceRoot":"","sources":["../../src/dap/dap-client.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,15 @@
20
20
  * SOFTWARE.
21
21
  */
22
22
  export type SessionState = "idle" | "configuring" | "running" | "stopped" | "terminated";
23
+ export interface Variable {
24
+ name: string;
25
+ value: string;
26
+ type?: string;
27
+ hasChildren: boolean;
28
+ variablesReference: number;
29
+ /** Populated when getVariables is called with depth > 1 and this variable has children. */
30
+ children?: Variable[];
31
+ }
23
32
  export interface StoppedState {
24
33
  status: "stopped";
25
34
  reason: string;
@@ -43,13 +52,7 @@ export interface StoppedState {
43
52
  }>;
44
53
  scopes: Array<{
45
54
  name: string;
46
- variables: Array<{
47
- name: string;
48
- value: string;
49
- type?: string;
50
- hasChildren: boolean;
51
- variablesReference: number;
52
- }>;
55
+ variables: Variable[];
53
56
  }>;
54
57
  output?: string[];
55
58
  }
@@ -66,8 +69,27 @@ export interface AdapterConfig {
66
69
  args?: string[];
67
70
  launchDefaults?: Record<string, unknown>;
68
71
  installHint?: string;
72
+ /**
73
+ * Transport mode for the adapter:
74
+ * - "stdio" (default): DAP messages flow over the adapter's stdin/stdout.
75
+ * - "tcp": the adapter is a TCP DAP server. After spawning, the client reads
76
+ * the listening address from the adapter's stdout (matched with
77
+ * `portMatcher`) and connects to it via a TCP socket. DAP messages then
78
+ * flow over that socket. Use this for adapters like `dlv dap` or
79
+ * vscode-js-debug's `dapDebugServer.js` that don't speak DAP on stdio.
80
+ */
81
+ transport?: "stdio" | "tcp";
82
+ /**
83
+ * Regular expression with a single capture group that yields the TCP port the
84
+ * adapter is listening on. Matched against the adapter's stdout output.
85
+ * Required (and only used) when `transport` is "tcp".
86
+ * Example for delve: "DAP server listening at:\\s*\\S+:(\\d+)"
87
+ */
88
+ portMatcher?: string;
69
89
  }
70
90
  export interface OutputEntry {
91
+ /** Monotonic per-session sequence number assigned at push time. Survives ring-buffer eviction. */
92
+ seq: number;
71
93
  category: string;
72
94
  text: string;
73
95
  timestamp: string;