fix: handle missing rpc subagent transcripts
This commit is contained in:
@@ -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", () => {
|
||||
|
||||
Reference in New Issue
Block a user