mirror of
https://github.com/morluto/rea
synced 2026-10-25 22:08:11 -04:00
fix(setup): read an OpenCode V2 server named type as a table entry (#866)
Only a string type is the V1 entry discriminator; a native mcp.servers table may hold a server object named type. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -108,11 +108,15 @@ export const parseClientConfiguration = (
|
||||
const value = document[serversKey];
|
||||
const servers = value === undefined ? {} : objectSchema.parse(value);
|
||||
const native = servers.servers;
|
||||
// A V1 server named `servers` is an entry with a `type`; the V2 table is not.
|
||||
// A V1 server named `servers` has a string `type` discriminator; the V2
|
||||
// table may instead hold a server object named `type`.
|
||||
if (
|
||||
format !== "opencode" ||
|
||||
native === undefined ||
|
||||
(typeof native === "object" && native !== null && "type" in native)
|
||||
(typeof native === "object" &&
|
||||
native !== null &&
|
||||
"type" in native &&
|
||||
typeof native.type === "string")
|
||||
)
|
||||
return {
|
||||
document,
|
||||
|
||||
@@ -322,6 +322,33 @@ describe("OpenCode V2 native server table", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("treats a V2 table holding a server named type as native", async () => {
|
||||
const { home, client } = await openCodeClient("rea-opencode-type-server-");
|
||||
const typeServer = { type: "local", command: ["node", "type.js"] };
|
||||
await writeFile(
|
||||
client.configPath,
|
||||
`${JSON.stringify({ mcp: { servers: { type: typeServer, rea: { type: "local", command } } } })}\n`,
|
||||
);
|
||||
|
||||
expect(await readClientRegistrationStatuses(home)).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
client: "opencode",
|
||||
state: "aligned",
|
||||
command,
|
||||
}),
|
||||
]),
|
||||
);
|
||||
expect((await systemUninstallHost(home).removeClient(client)).status).toBe(
|
||||
"removed",
|
||||
);
|
||||
expect(
|
||||
parseOpenCode(await readFile(client.configPath, "utf8")).mcp,
|
||||
).toEqual({
|
||||
servers: { type: typeServer },
|
||||
});
|
||||
});
|
||||
|
||||
it("keeps a V1 server named servers in the V1 table", async () => {
|
||||
const { client } = await openCodeClient("rea-opencode-v1-servers-");
|
||||
const servers = { type: "local", command: ["node", "servers.js"] };
|
||||
|
||||
Reference in New Issue
Block a user