fix(pi): accept native system messages with text blocks

This commit is contained in:
Mohamed Boudra
2026-11-02 05:26:03 +01:00
parent 017cfe861c
commit 8764ed25c1
3 changed files with 38 additions and 2 deletions
@@ -497,3 +497,33 @@ test("traverses native system and summary messages without displaying private co
userEntries: [{ id: "1", text: "question" }],
});
});
test("restores surrounding chat when native system content uses text blocks", async () => {
const records = [
{ type: "session", version: 3 },
{ type: "message", id: "u", parentId: null, message: { role: "user", content: "question" } },
{
type: "message",
id: "s",
parentId: "u",
message: { role: "system", content: [{ type: "text", text: "private instructions" }] },
},
{
type: "message",
id: "a",
parentId: "s",
message: { role: "assistant", content: [{ type: "text", text: "answer" }] },
},
];
const history = readPiTranscript(records.map((record) => JSON.stringify(record)).join("\n"));
expect(history.messages).toEqual([
{ role: "user", content: "question" },
{ role: "assistant", content: [{ type: "text", text: "answer" }] },
]);
expect(history.userEntries).toEqual([{ id: "u", text: "question" }]);
const events = await collectHistory(history.messages, history.userEntries);
expect(events.map((event) => event.item)).toEqual([
{ type: "user_message", text: "question", messageId: "u" },
{ type: "assistant_message", text: "answer", messageId: "pi-history-assistant-1" },
]);
});
@@ -13,7 +13,9 @@ const image = z
.passthrough();
const content = z.union([z.string(), z.array(z.union([text, image]))]);
const message = z.discriminatedUnion("role", [
z.object({ role: z.literal("system"), content: z.string().nullish() }).passthrough(),
z
.object({ role: z.literal("system"), content: z.union([z.string(), z.array(text)]).nullish() })
.passthrough(),
z.object({ role: z.literal("branchSummary"), summary: z.string() }).passthrough(),
z.object({ role: z.literal("compactionSummary"), summary: z.string() }).passthrough(),
z.object({ role: z.literal("user"), content }).passthrough(),
@@ -406,7 +406,11 @@ test("seeded compacted Pi history survives daemon reload, native rewind and Fork
id: "system",
parentId: null,
timestamp,
message: { role: "system", content: "private system context", timestamp: Date.now() },
message: {
role: "system",
content: [{ type: "text", text: "private system context" }],
timestamp: Date.now(),
},
},
{
type: "message",