diff --git a/src/gateway/server-methods/sessions.ts b/src/gateway/server-methods/sessions.ts index 8684a6ce8a1..19f67af45cb 100644 --- a/src/gateway/server-methods/sessions.ts +++ b/src/gateway/server-methods/sessions.ts @@ -739,12 +739,31 @@ export const sessionsHandlers: GatewayRequestHandlers = { return; } + const createdEntry = + created.entry.sessionFile === ensured.transcriptPath + ? created.entry + : { + ...created.entry, + sessionFile: ensured.transcriptPath, + }; + if (createdEntry !== created.entry) { + await updateSessionStore(target.storePath, (store) => { + const existing = store[target.canonicalKey]; + if (existing) { + store[target.canonicalKey] = { + ...existing, + sessionFile: ensured.transcriptPath, + }; + } + }); + } + const initialMessage = resolveOptionalInitialSessionMessage(p); let runPayload: Record | undefined; let runError: unknown; let runMeta: Record | undefined; const messageSeq = initialMessage - ? readSessionMessages(created.entry.sessionId, target.storePath, created.entry.sessionFile) + ? readSessionMessages(createdEntry.sessionId, target.storePath, createdEntry.sessionFile) .length + 1 : undefined; @@ -782,8 +801,8 @@ export const sessionsHandlers: GatewayRequestHandlers = { { ok: true, key: target.canonicalKey, - sessionId: created.entry.sessionId, - entry: created.entry, + sessionId: createdEntry.sessionId, + entry: createdEntry, runStarted, ...(runPayload ? runPayload : {}), ...(runStarted && typeof messageSeq === "number" ? { messageSeq } : {}), diff --git a/src/gateway/server.sessions.gateway-server-sessions-a.test.ts b/src/gateway/server.sessions.gateway-server-sessions-a.test.ts index 1c240c76a1c..be2eeb2284f 100644 --- a/src/gateway/server.sessions.gateway-server-sessions-a.test.ts +++ b/src/gateway/server.sessions.gateway-server-sessions-a.test.ts @@ -304,6 +304,7 @@ describe("gateway server sessions", () => { providerOverride?: string; modelOverride?: string; parentSessionKey?: string; + sessionFile?: string; }; }>(ws, "sessions.create", { agentId: "ops", @@ -318,6 +319,7 @@ describe("gateway server sessions", () => { expect(created.payload?.entry?.providerOverride).toBe("openai"); expect(created.payload?.entry?.modelOverride).toBe("gpt-test-a"); expect(created.payload?.entry?.parentSessionKey).toBe("agent:main:main"); + expect(created.payload?.entry?.sessionFile).toBeTruthy(); expect(created.payload?.sessionId).toMatch( /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/, ); @@ -330,6 +332,7 @@ describe("gateway server sessions", () => { providerOverride?: string; modelOverride?: string; parentSessionKey?: string; + sessionFile?: string; } >; const key = created.payload?.key as string; @@ -340,6 +343,7 @@ describe("gateway server sessions", () => { modelOverride: "gpt-test-a", parentSessionKey: "agent:main:main", }); + expect(created.payload?.entry?.sessionFile).toBe(rawStore[key]?.sessionFile); const transcriptPath = path.join(dir, `${created.payload?.sessionId}.jsonl`); const transcript = await fs.readFile(transcriptPath, "utf-8");