




















@@ -62,11 +62,7 @@ function makeCliResult(text: string): EmbeddedPiRunResult {
6262}
63636464async function readSessionMessages(sessionFile: string) {
65-const raw = await fs.readFile(sessionFile, "utf-8");
66-return raw
67-.split(/\r?\n/)
68-.filter(Boolean)
69-.map((line) => JSON.parse(line) as { type?: string; message?: unknown })
65+return (await readSessionFileJsonLines<{ type?: string; message?: unknown }>(sessionFile))
7066.filter((entry) => entry.type === "message")
7167.map(
7268(entry) =>
@@ -75,20 +71,25 @@ async function readSessionMessages(sessionFile: string) {
7571}
76727773async function readSessionFileEntries(sessionFile: string) {
74+return await readSessionFileJsonLines<{
75+type?: string;
76+id?: string;
77+parentId?: string | null;
78+cwd?: string;
79+message?: { role?: string };
80+}>(sessionFile);
81+}
82+83+async function readSessionFileJsonLines<T>(sessionFile: string): Promise<T[]> {
7884const raw = await fs.readFile(sessionFile, "utf-8");
79-return raw
80-.split(/\r?\n/)
81-.filter(Boolean)
82-.map(
83-(line) =>
84-JSON.parse(line) as {
85-type?: string;
86-id?: string;
87-parentId?: string | null;
88-cwd?: string;
89-message?: { role?: string };
90-},
91-);
85+const entries: T[] = [];
86+for (const line of raw.split(/\r?\n/)) {
87+if (line.length === 0) {
88+continue;
89+}
90+entries.push(JSON.parse(line) as T);
91+}
92+return entries;
9293}
93949495describe("CLI attempt execution", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。