From 3e5d86384e7f767c872dd7414fd4d693c7d2ee46 Mon Sep 17 00:00:00 2001 From: Tak Hoffman <781889+Takhoffman@users.noreply.github.com> Date: Thu, 26 Mar 2026 21:08:57 -0500 Subject: [PATCH] fix: initialize reset transcript files --- ...r.sessions.gateway-server-sessions-a.test.ts | 1 + src/gateway/session-reset-service.ts | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) 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 2879602699b..93af5ddfb03 100644 --- a/src/gateway/server.sessions.gateway-server-sessions-a.test.ts +++ b/src/gateway/server.sessions.gateway-server-sessions-a.test.ts @@ -1111,6 +1111,7 @@ describe("gateway server sessions", () => { expect(reset.payload?.entry.modelProvider).toBe("openai"); expect(reset.payload?.entry.model).toBe("gpt-test-a"); expect(reset.payload?.entry.contextTokens).toBeUndefined(); + await expect(fs.stat(reset.payload?.entry.sessionFile as string)).resolves.toBeTruthy(); ws.close(); }); diff --git a/src/gateway/session-reset-service.ts b/src/gateway/session-reset-service.ts index 5877f84f0b7..0c6441c4d1d 100644 --- a/src/gateway/session-reset-service.ts +++ b/src/gateway/session-reset-service.ts @@ -1,4 +1,7 @@ import { randomUUID } from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import { CURRENT_SESSION_VERSION } from "@mariozechner/pi-coding-agent"; import { getAcpSessionManager } from "../acp/control-plane/manager.js"; import { resolveDefaultAgentId } from "../agents/agent-scope.js"; import { clearBootstrapSnapshot } from "../agents/bootstrap-cache.js"; @@ -387,6 +390,20 @@ export async function performGatewaySessionReset(params: { agentId: target.agentId, reason: "reset", }); + fs.mkdirSync(path.dirname(next.sessionFile as string), { recursive: true }); + if (!fs.existsSync(next.sessionFile as string)) { + const header = { + type: "session", + version: CURRENT_SESSION_VERSION, + id: next.sessionId, + timestamp: new Date().toISOString(), + cwd: process.cwd(), + }; + fs.writeFileSync(next.sessionFile as string, `${JSON.stringify(header)}\n`, { + encoding: "utf-8", + mode: 0o600, + }); + } if (hadExistingEntry) { await emitSessionUnboundLifecycleEvent({ targetSessionKey: target.canonicalKey ?? params.key,