fix: handle missing rpc subagent transcripts

This commit is contained in:
Kormákur
2026-06-10 00:44:08 +00:00
committed by can1357
parent 6f75b34efd
commit 61d6b351fc
2 changed files with 32 additions and 1 deletions
@@ -1,4 +1,5 @@
import * as fs from "node:fs/promises";
import { isEnoent } from "@oh-my-pi/pi-utils";
import type { FileEntry, SessionMessageEntry } from "../../session/session-manager";
import { parseSessionEntries } from "../../session/session-manager";
import {
@@ -44,7 +45,20 @@ function isTerminalLifecycleStatus(status: SubagentLifecyclePayload["status"]):
export async function readRpcSubagentTranscript(sessionFile: string, fromByte = 0): Promise<RpcSubagentMessagesResult> {
let startByte = Number.isFinite(fromByte) ? Math.max(0, Math.trunc(fromByte)) : 0;
const file = Bun.file(sessionFile);
const { size } = await fs.stat(sessionFile);
let size: number;
try {
({ size } = await fs.stat(sessionFile));
} catch (err) {
if (!isEnoent(err)) throw err;
return {
sessionFile,
fromByte: startByte,
nextByte: startByte,
reset: false,
entries: [],
messages: [],
};
}
let reset = false;
if (startByte > size) {
startByte = 0;
@@ -336,6 +336,23 @@ describe("readRpcSubagentTranscript", () => {
expect(result.nextByte).toBe(Buffer.byteLength(`${headerLine}${messageLine}`, "utf8"));
expect(result.reset).toBe(false);
});
test("returns empty cursor result for missing transcript files", async () => {
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "omp-rpc-subagent-transcript-missing-"));
tempPaths.push(dir);
const sessionFile = path.join(dir, "missing.jsonl");
const result = await readRpcSubagentTranscript(sessionFile, 42);
expect(result).toEqual({
sessionFile,
fromByte: 42,
nextByte: 42,
reset: false,
entries: [],
messages: [],
});
});
});
describe("RpcClient subagent frames", () => {