fix(discovery): load project .opencode config files

This commit is contained in:
can1357
2026-08-13 01:14:48 +02:00
parent 5ef7a2b0ac
commit bfd9b6efec
2 changed files with 47 additions and 5 deletions
@@ -88,6 +88,42 @@ describe("OpenCode MCP discovery", () => {
);
});
test("loads project .opencode config after project-root config", async () => {
const projectDir = path.join(tempDir, "project");
const projectConfigDir = path.join(projectDir, ".opencode");
await fs.mkdir(projectConfigDir, { recursive: true });
await fs.writeFile(
path.join(projectDir, "opencode.json"),
JSON.stringify({
model: "root-model",
mcp: { shared: { type: "local", command: ["root-server"] } },
}),
);
await fs.writeFile(
path.join(projectConfigDir, "opencode.jsonc"),
`{
// Project .opencode config has higher precedence.
"model": "dotdir-model",
"mcp": { "shared": { "command": ["dotdir-server"] } }
}`,
);
const [servers, discoveredSettings] = await Promise.all([
loadOpenCodeMcpConfig(projectDir),
loadOpenCodeSettings(projectDir),
]);
expect(servers.filter(server => server.name === "shared")).toEqual([
expect.objectContaining({ command: "dotdir-server", transport: "stdio" }),
]);
expect(discoveredSettings.at(-1)).toMatchObject({
path: path.join(projectConfigDir, "opencode.jsonc"),
level: "project",
data: expect.objectContaining({ model: "dotdir-model" }),
});
});
test("resolves same-named MCP servers by OpenCode precedence", async () => {
const projectDir = path.join(tempDir, "project");
const userConfigDir = path.join(tempDir, ".config", "opencode");