agent-debugger 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.
- package/README.md +131 -0
- package/bin/agent-debugger +2 -0
- package/dist/src/adapters/base.d.ts +45 -0
- package/dist/src/adapters/base.d.ts.map +1 -0
- package/dist/src/adapters/base.js +3 -0
- package/dist/src/adapters/base.js.map +1 -0
- package/dist/src/adapters/go.d.ts +27 -0
- package/dist/src/adapters/go.d.ts.map +1 -0
- package/dist/src/adapters/go.js +144 -0
- package/dist/src/adapters/go.js.map +1 -0
- package/dist/src/adapters/node.d.ts +27 -0
- package/dist/src/adapters/node.d.ts.map +1 -0
- package/dist/src/adapters/node.js +197 -0
- package/dist/src/adapters/node.js.map +1 -0
- package/dist/src/adapters/python.d.ts +27 -0
- package/dist/src/adapters/python.d.ts.map +1 -0
- package/dist/src/adapters/python.js +152 -0
- package/dist/src/adapters/python.js.map +1 -0
- package/dist/src/adapters/registry.d.ts +10 -0
- package/dist/src/adapters/registry.d.ts.map +1 -0
- package/dist/src/adapters/registry.js +45 -0
- package/dist/src/adapters/registry.js.map +1 -0
- package/dist/src/adapters/rust.d.ts +27 -0
- package/dist/src/adapters/rust.d.ts.map +1 -0
- package/dist/src/adapters/rust.js +149 -0
- package/dist/src/adapters/rust.js.map +1 -0
- package/dist/src/cli.d.ts +4 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +326 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/daemon.d.ts +3 -0
- package/dist/src/daemon.d.ts.map +1 -0
- package/dist/src/daemon.js +136 -0
- package/dist/src/daemon.js.map +1 -0
- package/dist/src/dap-client.d.ts +35 -0
- package/dist/src/dap-client.d.ts.map +1 -0
- package/dist/src/dap-client.js +256 -0
- package/dist/src/dap-client.js.map +1 -0
- package/dist/src/dap-types.d.ts +52 -0
- package/dist/src/dap-types.d.ts.map +1 -0
- package/dist/src/dap-types.js +3 -0
- package/dist/src/dap-types.js.map +1 -0
- package/dist/src/protocol.d.ts +253 -0
- package/dist/src/protocol.d.ts.map +1 -0
- package/dist/src/protocol.js +50 -0
- package/dist/src/protocol.js.map +1 -0
- package/dist/src/session.d.ts +30 -0
- package/dist/src/session.d.ts.map +1 -0
- package/dist/src/session.js +407 -0
- package/dist/src/session.js.map +1 -0
- package/dist/src/util/paths.d.ts +5 -0
- package/dist/src/util/paths.d.ts.map +1 -0
- package/dist/src/util/paths.js +7 -0
- package/dist/src/util/paths.js.map +1 -0
- package/dist/src/util/ports.d.ts +3 -0
- package/dist/src/util/ports.d.ts.map +1 -0
- package/dist/src/util/ports.js +19 -0
- package/dist/src/util/ports.js.map +1 -0
- package/dist/test/protocol.test.d.ts +2 -0
- package/dist/test/protocol.test.d.ts.map +1 -0
- package/dist/test/protocol.test.js +25 -0
- package/dist/test/protocol.test.js.map +1 -0
- package/package.json +55 -0
- package/skills/agent-debugger/SKILL.md +225 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/** Python debug adapter — debugpy. */
|
|
2
|
+
import { spawn as cpSpawn } from "node:child_process";
|
|
3
|
+
import { getFreePort } from "../util/ports.js";
|
|
4
|
+
export class PythonAdapter {
|
|
5
|
+
name = "python";
|
|
6
|
+
async checkInstalled(runtimePath) {
|
|
7
|
+
const python = runtimePath || "python3";
|
|
8
|
+
try {
|
|
9
|
+
await execCheck(python, ["-m", "debugpy", "--version"]);
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return `debugpy not found. Run: ${python} -m pip install debugpy`;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async spawn(opts) {
|
|
17
|
+
const python = opts.runtimePath || "python3";
|
|
18
|
+
const port = await getFreePort();
|
|
19
|
+
const proc = cpSpawn(python, ["-Xfrozen_modules=off", "-m", "debugpy.adapter", "--host", "127.0.0.1", "--port", String(port)], { stdio: ["pipe", "pipe", "pipe"] });
|
|
20
|
+
return { process: proc, port };
|
|
21
|
+
}
|
|
22
|
+
initializeArgs() {
|
|
23
|
+
return {
|
|
24
|
+
clientID: "agent-debugger",
|
|
25
|
+
clientName: "agent-debugger",
|
|
26
|
+
adapterID: "debugpy",
|
|
27
|
+
pathFormat: "path",
|
|
28
|
+
linesStartAt1: true,
|
|
29
|
+
columnsStartAt1: true,
|
|
30
|
+
supportsVariableType: true,
|
|
31
|
+
supportsRunInTerminalRequest: false,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
launchArgs(opts) {
|
|
35
|
+
const args = {
|
|
36
|
+
type: "debugpy",
|
|
37
|
+
request: "launch",
|
|
38
|
+
program: opts.program,
|
|
39
|
+
console: "internalConsole",
|
|
40
|
+
stopOnEntry: opts.stopOnEntry ?? false,
|
|
41
|
+
justMyCode: true,
|
|
42
|
+
};
|
|
43
|
+
if (opts.runtimePath) {
|
|
44
|
+
args.python = [opts.runtimePath, "-Xfrozen_modules=off"];
|
|
45
|
+
}
|
|
46
|
+
if (opts.args?.length) {
|
|
47
|
+
args.args = opts.args;
|
|
48
|
+
}
|
|
49
|
+
if (opts.cwd) {
|
|
50
|
+
args.cwd = opts.cwd;
|
|
51
|
+
}
|
|
52
|
+
return args;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* debugpy-specific init flow:
|
|
56
|
+
* 1. initialize
|
|
57
|
+
* 2. launch (async — response deferred until configurationDone)
|
|
58
|
+
* 3. wait for initialized event
|
|
59
|
+
* 4. setBreakpoints
|
|
60
|
+
* 5. setExceptionBreakpoints
|
|
61
|
+
* 6. configurationDone
|
|
62
|
+
* 7. wait for deferred launch response
|
|
63
|
+
* 8. wait for stopped event
|
|
64
|
+
*/
|
|
65
|
+
async initFlow(client, opts) {
|
|
66
|
+
// 1. Initialize
|
|
67
|
+
const initResp = await client.request("initialize", this.initializeArgs());
|
|
68
|
+
if (!initResp.success) {
|
|
69
|
+
return { error: `Initialize failed: ${initResp.message || "unknown"}` };
|
|
70
|
+
}
|
|
71
|
+
// 2. Launch (async — debugpy defers response until configurationDone)
|
|
72
|
+
const launchSeq = client.requestAsync("launch", this.launchArgs(opts));
|
|
73
|
+
// 3. Wait for initialized event
|
|
74
|
+
const initialized = await client.waitForEvent("initialized", 10000);
|
|
75
|
+
if (!initialized) {
|
|
76
|
+
return { error: "Timeout waiting for initialized event" };
|
|
77
|
+
}
|
|
78
|
+
// 4. Set breakpoints
|
|
79
|
+
const bpResults = [];
|
|
80
|
+
if (opts.breakpoints?.length) {
|
|
81
|
+
for (const bp of opts.breakpoints) {
|
|
82
|
+
const bpArgs = {
|
|
83
|
+
source: { path: bp.file },
|
|
84
|
+
breakpoints: bp.lines.map((line, i) => {
|
|
85
|
+
const entry = { line };
|
|
86
|
+
if (bp.conditions?.[i])
|
|
87
|
+
entry.condition = bp.conditions[i];
|
|
88
|
+
return entry;
|
|
89
|
+
}),
|
|
90
|
+
};
|
|
91
|
+
const resp = await client.request("setBreakpoints", bpArgs);
|
|
92
|
+
if (resp.success && resp.body) {
|
|
93
|
+
const bps = resp.body.breakpoints;
|
|
94
|
+
if (bps) {
|
|
95
|
+
for (const b of bps) {
|
|
96
|
+
bpResults.push({
|
|
97
|
+
file: bp.file,
|
|
98
|
+
line: b.line ?? 0,
|
|
99
|
+
verified: b.verified ?? false,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// 5. Exception breakpoints (empty = no exception breaking)
|
|
107
|
+
await client.request("setExceptionBreakpoints", { filters: [] });
|
|
108
|
+
// 6. configurationDone
|
|
109
|
+
await client.request("configurationDone");
|
|
110
|
+
// 7. Wait for the deferred launch response
|
|
111
|
+
const launchResp = await client.waitForResponse(launchSeq, 15000);
|
|
112
|
+
if (!launchResp.success) {
|
|
113
|
+
return { error: `Launch failed: ${launchResp.message || "unknown"}` };
|
|
114
|
+
}
|
|
115
|
+
// 8. Wait for stopped event (breakpoint hit or entry)
|
|
116
|
+
const stopped = await client.waitForEvent("stopped", 15000);
|
|
117
|
+
if (stopped) {
|
|
118
|
+
const body = (stopped.body || {});
|
|
119
|
+
return {
|
|
120
|
+
status: "paused",
|
|
121
|
+
reason: body.reason || "unknown",
|
|
122
|
+
breakpoints: bpResults,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// Program may have finished without hitting breakpoint
|
|
126
|
+
const terminated = client.drainEvents("terminated");
|
|
127
|
+
if (terminated.length) {
|
|
128
|
+
return { status: "terminated", message: "Program finished without hitting breakpoint" };
|
|
129
|
+
}
|
|
130
|
+
return { status: "running", breakpoints: bpResults };
|
|
131
|
+
}
|
|
132
|
+
isInternalFrame(frame) {
|
|
133
|
+
const path = frame.source?.path || "";
|
|
134
|
+
return path.includes("debugpy") || path.includes("pydevd") || path.includes("<frozen");
|
|
135
|
+
}
|
|
136
|
+
isInternalVariable(v) {
|
|
137
|
+
return v.name.startsWith("__") || v.name === "special variables" || v.name === "function variables";
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function execCheck(cmd, args) {
|
|
141
|
+
return new Promise((resolve, reject) => {
|
|
142
|
+
const proc = cpSpawn(cmd, args, { stdio: "pipe" });
|
|
143
|
+
proc.on("close", (code) => {
|
|
144
|
+
if (code === 0)
|
|
145
|
+
resolve();
|
|
146
|
+
else
|
|
147
|
+
reject(new Error(`${cmd} exited with code ${code}`));
|
|
148
|
+
});
|
|
149
|
+
proc.on("error", reject);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=python.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/adapters/python.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Language detection + adapter lookup. */
|
|
2
|
+
import type { AdapterConfig } from "./base.js";
|
|
3
|
+
/** Detect language from file extension. */
|
|
4
|
+
export declare function detectLanguage(filePath: string): string | null;
|
|
5
|
+
/** Get an adapter by language name. */
|
|
6
|
+
export declare function getAdapter(language: string): AdapterConfig | null;
|
|
7
|
+
/** Detect language from file and return adapter. */
|
|
8
|
+
export declare function getAdapterForFile(filePath: string): AdapterConfig | null;
|
|
9
|
+
export { type AdapterConfig } from "./base.js";
|
|
10
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAG3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AA4B/C,2CAA2C;AAC3C,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9D;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAGjE;AAED,oDAAoD;AACpD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAIxE;AAED,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Language detection + adapter lookup. */
|
|
2
|
+
import { extname } from "node:path";
|
|
3
|
+
import { PythonAdapter } from "./python.js";
|
|
4
|
+
import { NodeAdapter } from "./node.js";
|
|
5
|
+
import { GoAdapter } from "./go.js";
|
|
6
|
+
import { RustAdapter } from "./rust.js";
|
|
7
|
+
const EXTENSION_MAP = {
|
|
8
|
+
".py": "python",
|
|
9
|
+
".js": "node",
|
|
10
|
+
".mjs": "node",
|
|
11
|
+
".cjs": "node",
|
|
12
|
+
".ts": "node",
|
|
13
|
+
".mts": "node",
|
|
14
|
+
".tsx": "node",
|
|
15
|
+
".go": "go",
|
|
16
|
+
".rs": "rust",
|
|
17
|
+
".c": "rust",
|
|
18
|
+
".cpp": "rust",
|
|
19
|
+
".cc": "rust",
|
|
20
|
+
};
|
|
21
|
+
const adapters = {
|
|
22
|
+
python: () => new PythonAdapter(),
|
|
23
|
+
node: () => new NodeAdapter(),
|
|
24
|
+
go: () => new GoAdapter(),
|
|
25
|
+
rust: () => new RustAdapter(),
|
|
26
|
+
};
|
|
27
|
+
/** Detect language from file extension. */
|
|
28
|
+
export function detectLanguage(filePath) {
|
|
29
|
+
const ext = extname(filePath).toLowerCase();
|
|
30
|
+
return EXTENSION_MAP[ext] ?? null;
|
|
31
|
+
}
|
|
32
|
+
/** Get an adapter by language name. */
|
|
33
|
+
export function getAdapter(language) {
|
|
34
|
+
const factory = adapters[language];
|
|
35
|
+
return factory ? factory() : null;
|
|
36
|
+
}
|
|
37
|
+
/** Detect language from file and return adapter. */
|
|
38
|
+
export function getAdapterForFile(filePath) {
|
|
39
|
+
const lang = detectLanguage(filePath);
|
|
40
|
+
if (!lang)
|
|
41
|
+
return null;
|
|
42
|
+
return getAdapter(lang);
|
|
43
|
+
}
|
|
44
|
+
export {} from "./base.js";
|
|
45
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,aAAa,GAA2B;IAC5C,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,MAAM,QAAQ,GAAwC;IACpD,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE;IACjC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,EAAE;IAC7B,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,SAAS,EAAE;IACzB,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,EAAE;CAC9B,CAAC;AAEF,2CAA2C;AAC3C,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpC,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,OAAO,EAAsB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Rust/C++ debug adapter — CodeLLDB. */
|
|
2
|
+
import type { DAPClient } from "../dap-client.js";
|
|
3
|
+
import type { StackFrame, Variable } from "../dap-types.js";
|
|
4
|
+
import type { CommandResult } from "../protocol.js";
|
|
5
|
+
import type { AdapterConfig, SpawnResult, LaunchOpts, InitFlowOpts } from "./base.js";
|
|
6
|
+
export declare class RustAdapter implements AdapterConfig {
|
|
7
|
+
name: string;
|
|
8
|
+
checkInstalled(): Promise<string | null>;
|
|
9
|
+
spawn(opts: LaunchOpts): Promise<SpawnResult>;
|
|
10
|
+
initializeArgs(): Record<string, unknown>;
|
|
11
|
+
launchArgs(opts: LaunchOpts): Record<string, unknown>;
|
|
12
|
+
/**
|
|
13
|
+
* CodeLLDB DAP init flow (aligned with Python/debugpy pattern):
|
|
14
|
+
* 1. initialize
|
|
15
|
+
* 2. launch (async — response may be deferred)
|
|
16
|
+
* 3. wait for initialized event
|
|
17
|
+
* 4. setBreakpoints
|
|
18
|
+
* 5. setExceptionBreakpoints
|
|
19
|
+
* 6. configurationDone
|
|
20
|
+
* 7. wait for deferred launch response
|
|
21
|
+
* 8. wait for stopped event
|
|
22
|
+
*/
|
|
23
|
+
initFlow(client: DAPClient, opts: InitFlowOpts): Promise<CommandResult>;
|
|
24
|
+
isInternalFrame(frame: StackFrame): boolean;
|
|
25
|
+
isInternalVariable(v: Variable): boolean;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=rust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../src/adapters/rust.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAGzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGtF,qBAAa,WAAY,YAAW,aAAa;IAC/C,IAAI,SAAU;IAER,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAaxC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAgBnD,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAYzC,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAWrD;;;;;;;;;;OAUG;IACG,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IA4E7E,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAK3C,kBAAkB,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;CAGzC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/** Rust/C++ debug adapter — CodeLLDB. */
|
|
2
|
+
import { spawn as cpSpawn } from "node:child_process";
|
|
3
|
+
import { getFreePort } from "../util/ports.js";
|
|
4
|
+
export class RustAdapter {
|
|
5
|
+
name = "rust";
|
|
6
|
+
async checkInstalled() {
|
|
7
|
+
const codelldbPath = process.env.CODELLDB_PATH;
|
|
8
|
+
if (!codelldbPath) {
|
|
9
|
+
return "CodeLLDB not found. Set CODELLDB_PATH environment variable.";
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
await execCheck(codelldbPath, ["--version"]);
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return `CodeLLDB not found at ${codelldbPath}`;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async spawn(opts) {
|
|
20
|
+
const codelldbPath = process.env.CODELLDB_PATH;
|
|
21
|
+
if (!codelldbPath)
|
|
22
|
+
throw new Error("CODELLDB_PATH not set");
|
|
23
|
+
const port = await getFreePort();
|
|
24
|
+
const proc = cpSpawn(codelldbPath, ["--port", String(port)], {
|
|
25
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
26
|
+
cwd: opts.cwd,
|
|
27
|
+
});
|
|
28
|
+
return { process: proc, port };
|
|
29
|
+
}
|
|
30
|
+
initializeArgs() {
|
|
31
|
+
return {
|
|
32
|
+
clientID: "agent-debugger",
|
|
33
|
+
clientName: "agent-debugger",
|
|
34
|
+
adapterID: "codelldb",
|
|
35
|
+
pathFormat: "path",
|
|
36
|
+
linesStartAt1: true,
|
|
37
|
+
columnsStartAt1: true,
|
|
38
|
+
supportsVariableType: true,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
launchArgs(opts) {
|
|
42
|
+
return {
|
|
43
|
+
type: "lldb",
|
|
44
|
+
request: "launch",
|
|
45
|
+
program: opts.program,
|
|
46
|
+
stopOnEntry: opts.stopOnEntry ?? false,
|
|
47
|
+
args: opts.args || [],
|
|
48
|
+
cwd: opts.cwd,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* CodeLLDB DAP init flow (aligned with Python/debugpy pattern):
|
|
53
|
+
* 1. initialize
|
|
54
|
+
* 2. launch (async — response may be deferred)
|
|
55
|
+
* 3. wait for initialized event
|
|
56
|
+
* 4. setBreakpoints
|
|
57
|
+
* 5. setExceptionBreakpoints
|
|
58
|
+
* 6. configurationDone
|
|
59
|
+
* 7. wait for deferred launch response
|
|
60
|
+
* 8. wait for stopped event
|
|
61
|
+
*/
|
|
62
|
+
async initFlow(client, opts) {
|
|
63
|
+
// 1. Initialize
|
|
64
|
+
const initResp = await client.request("initialize", this.initializeArgs());
|
|
65
|
+
if (!initResp.success) {
|
|
66
|
+
return { error: `Initialize failed: ${initResp.message || "unknown"}` };
|
|
67
|
+
}
|
|
68
|
+
// 2. Launch (async — CodeLLDB may defer response until configurationDone)
|
|
69
|
+
const launchSeq = client.requestAsync("launch", this.launchArgs(opts));
|
|
70
|
+
// 3. Wait for initialized event
|
|
71
|
+
const initialized = await client.waitForEvent("initialized", 10000);
|
|
72
|
+
if (!initialized) {
|
|
73
|
+
return { error: "Timeout waiting for initialized event" };
|
|
74
|
+
}
|
|
75
|
+
// 4. Set breakpoints
|
|
76
|
+
const bpResults = [];
|
|
77
|
+
if (opts.breakpoints?.length) {
|
|
78
|
+
for (const bp of opts.breakpoints) {
|
|
79
|
+
const bpArgs = {
|
|
80
|
+
source: { path: bp.file },
|
|
81
|
+
breakpoints: bp.lines.map((line, i) => {
|
|
82
|
+
const entry = { line };
|
|
83
|
+
if (bp.conditions?.[i])
|
|
84
|
+
entry.condition = bp.conditions[i];
|
|
85
|
+
return entry;
|
|
86
|
+
}),
|
|
87
|
+
};
|
|
88
|
+
const resp = await client.request("setBreakpoints", bpArgs);
|
|
89
|
+
if (resp.success && resp.body) {
|
|
90
|
+
const bps = resp.body.breakpoints;
|
|
91
|
+
if (bps) {
|
|
92
|
+
for (const b of bps) {
|
|
93
|
+
bpResults.push({
|
|
94
|
+
file: bp.file,
|
|
95
|
+
line: b.line ?? 0,
|
|
96
|
+
verified: b.verified ?? false,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// 5. Exception breakpoints (empty = no exception breaking, required by spec)
|
|
104
|
+
await client.request("setExceptionBreakpoints", { filters: [] });
|
|
105
|
+
// 6. configurationDone
|
|
106
|
+
await client.request("configurationDone");
|
|
107
|
+
// 7. Wait for the deferred launch response
|
|
108
|
+
const launchResp = await client.waitForResponse(launchSeq, 15000);
|
|
109
|
+
if (!launchResp.success) {
|
|
110
|
+
return { error: `Launch failed: ${launchResp.message || "unknown"}` };
|
|
111
|
+
}
|
|
112
|
+
// 8. Wait for stopped event (breakpoint hit or entry)
|
|
113
|
+
const stopped = await client.waitForEvent("stopped", 15000);
|
|
114
|
+
if (stopped) {
|
|
115
|
+
const body = (stopped.body || {});
|
|
116
|
+
return {
|
|
117
|
+
status: "paused",
|
|
118
|
+
reason: body.reason || "unknown",
|
|
119
|
+
breakpoints: bpResults,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// Program may have finished without hitting breakpoint
|
|
123
|
+
const terminated = client.drainEvents("terminated");
|
|
124
|
+
if (terminated.length) {
|
|
125
|
+
return { status: "terminated", message: "Program finished without hitting breakpoint" };
|
|
126
|
+
}
|
|
127
|
+
return { status: "running", breakpoints: bpResults };
|
|
128
|
+
}
|
|
129
|
+
isInternalFrame(frame) {
|
|
130
|
+
const name = frame.name || "";
|
|
131
|
+
return name.startsWith("std::") || name.startsWith("core::") || name.includes("__rust_");
|
|
132
|
+
}
|
|
133
|
+
isInternalVariable(v) {
|
|
134
|
+
return v.name.startsWith("__");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function execCheck(cmd, args) {
|
|
138
|
+
return new Promise((resolve, reject) => {
|
|
139
|
+
const proc = cpSpawn(cmd, args, { stdio: "pipe" });
|
|
140
|
+
proc.on("close", (code) => {
|
|
141
|
+
if (code === 0)
|
|
142
|
+
resolve();
|
|
143
|
+
else
|
|
144
|
+
reject(new Error(`${cmd} exited with code ${code}`));
|
|
145
|
+
});
|
|
146
|
+
proc.on("error", reject);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=rust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../src/adapters/rust.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA,wEAAwE"}
|