diff options
| author | ryanwyler <[email protected]> | 2026-01-09 10:42:55 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-01-09 11:42:55 -0600 |
| commit | a5edf3a31184543cffae0fe0045323915b88ce62 (patch) | |
| tree | f61e5d03447b1f8649b95d891d544773020ccaa0 | |
| parent | 7c2907cbb448b267643bbcf46ef9ba184d338698 (diff) | |
| download | opencode-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.ts | 9 |
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) { |
