From 3fc49952f05d471e4ad85742c04d92a5693dbb29 Mon Sep 17 00:00:00 2001 From: lyon Date: Fri, 19 Jun 2026 13:06:37 +0800 Subject: [PATCH] fix: reuse workbench trace session lookup --- internal/cloud/server-agent-chat.test.ts | 2 +- internal/cloud/workbench-facts-store.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/cloud/server-agent-chat.test.ts b/internal/cloud/server-agent-chat.test.ts index 3f46999f..49454210 100644 --- a/internal/cloud/server-agent-chat.test.ts +++ b/internal/cloud/server-agent-chat.test.ts @@ -2481,7 +2481,7 @@ test("cloud api turn status reuses request session lookup without loading persis const body = await response.json(); assert.equal(body.status, "unknown"); assert.equal(body.projectionStatus, "unknown"); - assert.equal(sessionLookupCount, 2); + assert.equal(sessionLookupCount, 1); assert.equal(calls.filter((call) => call.path === `/api/v1/runs/${runId}/events`).length, 0); } finally { await new Promise((resolve, reject) => { diff --git a/internal/cloud/workbench-facts-store.ts b/internal/cloud/workbench-facts-store.ts index 9f04a07a..9f029d6d 100644 --- a/internal/cloud/workbench-facts-store.ts +++ b/internal/cloud/workbench-facts-store.ts @@ -11,6 +11,7 @@ const terminalDurableTraceCache = new Map(); export function createWorkbenchFactsStore(options = {}, actor = null) { const accessStore = options.accessController?.store ?? options.accessController ?? null; + const traceSessionCache = options.codeAgentTraceSessionCache instanceof Map ? options.codeAgentTraceSessionCache : null; const traceStore = options.traceStore ?? defaultCodeAgentTraceStore; const runtimeStore = options.runtimeStore ?? null; const results = options.codeAgentChatResults ?? null; @@ -45,7 +46,12 @@ export function createWorkbenchFactsStore(options = {}, actor = null) { async function getSessionByTraceId(traceId) { const safeId = safeTraceId(traceId); if (!safeId) return null; + if (traceSessionCache?.has(safeId)) { + const cached = traceSessionCache.get(safeId) ?? null; + return canActorReadSession(cached, actor) ? cached : null; + } const session = await accessStore?.getAgentSessionByTraceId?.(safeId) ?? null; + traceSessionCache?.set(safeId, session); return canActorReadSession(session, actor) ? session : null; }