diff --git a/packages/coding-agent/src/dap/config.ts b/packages/coding-agent/src/dap/config.ts index c09375346..bb5748fd7 100644 --- a/packages/coding-agent/src/dap/config.ts +++ b/packages/coding-agent/src/dap/config.ts @@ -171,6 +171,19 @@ export function getAdapterConfigs(cwd?: string): Record, @@ -178,7 +191,7 @@ function resolveAdapterFromConfig( ): DapResolvedAdapter | null { const config = configs[adapterName]; if (!config) return null; - const resolvedCommand = resolveCommand(config.command, cwd); + const resolvedCommand = resolveCommand(normalizeCommandForCwd(config.command, cwd), cwd); if (!resolvedCommand) return null; return { name: adapterName, diff --git a/packages/coding-agent/test/debug/dap-config.test.ts b/packages/coding-agent/test/debug/dap-config.test.ts index 333ed9806..a4940403e 100644 --- a/packages/coding-agent/test/debug/dap-config.test.ts +++ b/packages/coding-agent/test/debug/dap-config.test.ts @@ -121,6 +121,31 @@ describe("DAP adapter configuration", () => { expect(selected?.launchDefaults).toEqual({ request: "launch", projectRoot: "." }); }); + it("resolves relative adapter commands from the debug cwd", async () => { + const cwd = await makeTempDir("omp-dap-config-relative-command-"); + const command = path.join(cwd, "tools", process.platform === "win32" ? "debug-adapter.cmd" : "debug-adapter"); + await fs.mkdir(path.dirname(command), { recursive: true }); + await fs.writeFile(command, ""); + await fs.chmod(command, 0o755); + await fs.writeFile( + path.join(cwd, "dap.json"), + JSON.stringify({ + adapters: { + relative: { + command: process.platform === "win32" ? ".\\tools\\debug-adapter.cmd" : "./tools/debug-adapter", + fileTypes: [".rel"], + }, + }, + }), + ); + + const adapter = resolveAdapter("relative", cwd); + expect(adapter?.command).toBe( + process.platform === "win32" ? ".\\tools\\debug-adapter.cmd" : "./tools/debug-adapter", + ); + expect(adapter?.resolvedCommand).toBe(command); + }); + it("loads plugin DAP adapters from plugin config files", async () => { const cwd = await makeTempDir("omp-dap-config-plugin-"); const pluginRoot = path.join(cwd, "plugins", "acme-debug");