summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorryanwyler <[email protected]>2026-01-09 10:42:55 -0700
committerGitHub <[email protected]>2026-01-09 11:42:55 -0600
commita5edf3a31184543cffae0fe0045323915b88ce62 (patch)
treef61e5d03447b1f8649b95d891d544773020ccaa0
parent7c2907cbb448b267643bbcf46ef9ba184d338698 (diff)
downloadopencode-a5edf3a31184543cffae0fe0045323915b88ce62.tar.gz
opencode-a5edf3a31184543cffae0fe0045323915b88ce62.zip
fix: resolve broken forked sessions with compactions due to missing parent-child message references (#6445)
-rw-r--r--packages/opencode/src/session/index.ts9
1 files changed, 8 insertions, 1 deletions
diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts
index 0776590d6..a204913f7 100644
--- a/packages/opencode/src/session/index.ts
+++ b/packages/opencode/src/session/index.ts
@@ -151,12 +151,19 @@ export namespace Session {
directory: Instance.directory,
})
const msgs = await messages({ sessionID: input.sessionID })
+ const idMap = new Map<string, string>()
+
for (const msg of msgs) {
if (input.messageID && msg.info.id >= input.messageID) break
+ const newID = Identifier.ascending("message")
+ idMap.set(msg.info.id, newID)
+
+ const parentID = msg.info.role === "assistant" && msg.info.parentID ? idMap.get(msg.info.parentID) : undefined
const cloned = await updateMessage({
...msg.info,
sessionID: session.id,
- id: Identifier.ascending("message"),
+ id: newID,
+ ...(parentID && { parentID }),
})
for (const part of msg.parts) {