summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-10-22 15:01:13 -0400
committerDax Raad <[email protected]>2025-10-22 15:01:13 -0400
commit28d8af48a0d3753e0f844704b8834dcb7bda061d (patch)
treee5e05e0c77fac874a64936d6c1dfbcddd406b926 /packages
parent10ff6e9830f0ee8d6abe00212929872b33fe9028 (diff)
downloadopencode-28d8af48a0d3753e0f844704b8834dcb7bda061d.tar.gz
opencode-28d8af48a0d3753e0f844704b8834dcb7bda061d.zip
add parent id to assistant messages
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/session/compaction.ts1
-rw-r--r--packages/opencode/src/session/message-v2.ts2
-rw-r--r--packages/opencode/src/session/prompt.ts11
3 files changed, 10 insertions, 4 deletions
diff --git a/packages/opencode/src/session/compaction.ts b/packages/opencode/src/session/compaction.ts
index e3041b40a..2209fda56 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 1c56cef37..1b17764a5 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 fa9d7f633..717fbc241 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,