fix(opencode): recover expired MCP sessions (#32088)
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
import path from "node:path"
|
||||
import { describe, expect, test } from "bun:test"
|
||||
|
||||
describe("mcp session recovery", () => {
|
||||
test("reinitializes and retries once after a session-bound POST returns 404", async () => {
|
||||
const child = Bun.spawn([process.execPath, path.join(import.meta.dir, "../fixture/mcp-session-recovery.ts")], {
|
||||
cwd: path.join(import.meta.dir, "../.."),
|
||||
stdout: "pipe",
|
||||
stderr: "pipe",
|
||||
})
|
||||
const [code, stdout, stderr] = await Promise.all([
|
||||
child.exited,
|
||||
Bun.readableStreamToText(child.stdout),
|
||||
Bun.readableStreamToText(child.stderr),
|
||||
])
|
||||
|
||||
expect(code, stderr).toBe(0)
|
||||
expect(JSON.parse(stdout)).toEqual([
|
||||
{ method: "initialize", session: null },
|
||||
{ method: "notifications/initialized", session: "expired" },
|
||||
{ method: "ping", session: "expired" },
|
||||
{ method: "initialize", session: null },
|
||||
{ method: "notifications/initialized", session: "replacement" },
|
||||
{ method: "ping", session: "replacement" },
|
||||
])
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user