From 7b9220777f6dcb546e8cf0edbb7aaba4085e7aea Mon Sep 17 00:00:00 2001 From: Vincent Koc <25068+vincentkoc@users.noreply.github.com> Date: Sat, 11 Jul 2026 16:45:12 -0700 Subject: [PATCH] test(codex): keep fingerprint backport focused --- .../thread-lifecycle.user-mcp-servers.test.ts | 103 ------------------ 1 file changed, 103 deletions(-) diff --git a/extensions/codex/src/app-server/thread-lifecycle.user-mcp-servers.test.ts b/extensions/codex/src/app-server/thread-lifecycle.user-mcp-servers.test.ts index b1a3617f8034..e04acb196ab7 100644 --- a/extensions/codex/src/app-server/thread-lifecycle.user-mcp-servers.test.ts +++ b/extensions/codex/src/app-server/thread-lifecycle.user-mcp-servers.test.ts @@ -527,109 +527,6 @@ describe("startOrResumeThread — user mcp.servers projection (regression: #8081 expect(startParams?.config?.mcp_servers).toBeUndefined(); }); - it("starts a new thread when a user MCP Authorization bearer changes without storing the bearer", async () => { - const sessionFile = path.join(tempDir, "session.jsonl"); - registerCodexTestSessionIdentity(sessionFile, "session-1", "agent:main:session-1"); - const workspaceDir = path.join(tempDir, "workspace"); - const createConfig = (authorization: string) => - ({ - mcp: { - servers: { - ducktape: { - transport: "streamable-http", - url: "https://agents.ducktape.xyz/mcp", - headers: { - Authorization: authorization, - "x-tenant": "keep", - }, - }, - }, - }, - }) as unknown as EmbeddedRunAttemptParams["config"]; - const request = vi.fn(async (method: string, _params: unknown) => { - if (method === "thread/start") { - return threadStartResult("thread-with-current-bearer"); - } - if (method === "thread/resume") { - return threadResumeResult("thread-with-stale-bearer"); - } - throw new Error(`unexpected method: ${method}`); - }); - - await startOrResumeThread({ - client: { request } as never, - params: createParams(sessionFile, workspaceDir, createConfig("Bearer access-token-one")), - cwd: workspaceDir, - dynamicTools: [], - appServer: createAppServerOptions(), - }); - const firstBinding = await readCodexAppServerBinding(sessionFile); - expect(firstBinding?.userMcpServersFingerprint).toMatch(/^sha256:[a-f0-9]{64}$/); - expect(firstBinding?.userMcpServersFingerprint).not.toContain("access-token-one"); - - request.mockClear(); - - await startOrResumeThread({ - client: { request } as never, - params: createParams(sessionFile, workspaceDir, createConfig("Bearer access-token-two")), - cwd: workspaceDir, - dynamicTools: [], - appServer: createAppServerOptions(), - }); - - expect(request.mock.calls.map(([method]) => method)).toEqual(["thread/start"]); - const startParams = request.mock.calls[0]?.[1] as { - config?: { mcp_servers?: Record }> }; - }; - expect(startParams?.config?.mcp_servers?.ducktape?.http_headers?.Authorization).toBe( - "Bearer access-token-two", - ); - const secondBinding = await readCodexAppServerBinding(sessionFile); - expect(secondBinding?.userMcpServersFingerprint).toMatch(/^sha256:[a-f0-9]{64}$/); - expect(secondBinding?.userMcpServersFingerprint).not.toContain("access-token-two"); - expect(secondBinding?.userMcpServersFingerprint).not.toBe( - firstBinding?.userMcpServersFingerprint, - ); - }); - - it("omits MCP OAuth servers instead of sending bearers to a remote app-server", async () => { - const sessionFile = path.join(tempDir, "session.jsonl"); - const workspaceDir = path.join(tempDir, "workspace"); - const request = vi.fn(async (method: string, _params: unknown) => { - if (method === "thread/start") { - return threadStartResult("thread-without-oauth-mcp"); - } - throw new Error(`unexpected method: ${method}`); - }); - - await startOrResumeThread({ - client: { request } as never, - params: createParams(sessionFile, workspaceDir, { - mcp: { - servers: { - ducktape: { - transport: "streamable-http", - url: "https://agents.ducktape.xyz/mcp", - auth: "oauth", - oauth: { authProfileId: "ducktape:mcp" }, - }, - }, - }, - } as unknown as EmbeddedRunAttemptParams["config"]), - cwd: workspaceDir, - dynamicTools: [], - appServer: { - ...createAppServerOptions(), - connectionClass: "remote", - }, - }); - - const startParams = request.mock.calls[0]?.[1] as { - config?: { mcp_servers?: Record }; - }; - expect(startParams?.config?.mcp_servers).toBeUndefined(); - }); - it("resends user MCP config when resuming a thread with the matching fingerprint", async () => { const sessionFile = path.join(tempDir, "session.jsonl"); const workspaceDir = path.join(tempDir, "workspace");