From 28d8af48a0d3753e0f844704b8834dcb7bda061d Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Wed, 22 Oct 2025 15:01:13 -0400 Subject: [PATCH] add parent id to assistant messages --- packages/opencode/src/session/compaction.ts | 1 + packages/opencode/src/session/message-v2.ts | 2 ++ packages/opencode/src/session/prompt.ts | 11 +++++++---- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/opencode/src/session/compaction.ts b/packages/opencode/src/session/compaction.ts index e3041b40..2209fda5 100644 --- a/packages/opencode/src/session/compaction.ts +++ b/packages/opencode/src/session/compaction.ts @@ -109,6 +109,7 @@ export namespace SessionCompaction { const msg = (await Session.updateMessage({ id: Identifier.ascending("message"), role: "assistant", + parentID: toSummarize.findLast((m) => m.info.role === "user")?.info.id!, sessionID: input.sessionID, system, mode: "build", diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index 1c56cef3..1b17764a 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -278,6 +278,7 @@ export namespace MessageV2 { ]) .optional(), system: z.string().array(), + parentID: z.string(), modelID: z.string(), providerID: z.string(), mode: z.string(), @@ -346,6 +347,7 @@ export namespace MessageV2 { if (v1.role === "assistant") { const info: Assistant = { id: v1.id, + parentID: "", sessionID: v1.metadata.sessionID, role: "assistant", time: { diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index fa9d7f63..717fbc24 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -235,7 +235,7 @@ export namespace SessionPrompt { modelID: model.info.id, }) step++ - await processor.next() + await processor.next(msgs.findLast((m) => m.info.role === "user")?.info.id!) await using _ = defer(async () => { await processor.end() }) @@ -900,9 +900,10 @@ export namespace SessionPrompt { let snapshot: string | undefined let blocked = false - async function createMessage() { + async function createMessage(parentID: string) { const msg: MessageV2.Info = { id: Identifier.ascending("message"), + parentID, role: "assistant", system: input.system, mode: input.agent, @@ -938,11 +939,11 @@ export namespace SessionPrompt { assistantMsg = undefined } }, - async next() { + async next(parentID: string) { if (assistantMsg) { throw new Error("end previous assistant message first") } - assistantMsg = await createMessage() + assistantMsg = await createMessage(parentID) return assistantMsg }, get message() { @@ -1424,6 +1425,7 @@ export namespace SessionPrompt { const msg: MessageV2.Assistant = { id: Identifier.ascending("message"), sessionID: input.sessionID, + parentID: userMsg.id, system: [], mode: input.agent, cost: 0, @@ -1696,6 +1698,7 @@ export namespace SessionPrompt { const assistantMsg: MessageV2.Assistant = { id: Identifier.ascending("message"), sessionID: input.sessionID, + parentID: userMsg.id, system: [], mode: agentName, cost: 0,