Skip to content

Commit b0601c4

Browse files
committed
fix(core): attach hook metadata only where the hook payload is built
1 parent 1599fa0 commit b0601c4

3 files changed

Lines changed: 12 additions & 18 deletions

File tree

‎packages/core/src/session/model-request.ts‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,15 @@ export const baseTranscript = (input: {
124124
metadata: { experimental: { instructions: input.initial } },
125125
},
126126
].filter((part) => part.text.length > 0),
127-
messages: toLLMMessages(input.messages, input.model.ref, providerMetadataKey),
127+
// Hooks read each stored message's metadata on the messages built from it; `prepare` strips it before the request.
128+
messages: input.messages.flatMap((message) =>
129+
toLLMMessages([message], input.model.ref, providerMetadataKey).map(
130+
(item): SessionRequestMessage =>
131+
message.metadata === undefined || item.id !== message.id
132+
? item
133+
: Object.assign(item, { metadata: message.metadata }),
134+
),
135+
),
128136
}
129137
}
130138

‎packages/core/src/session/runner/to-llm-message.ts‎

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import { SessionMessage } from "../message.js"
1616
import { SessionHistory } from "../history.js"
1717
import { SessionRecentText } from "../recent-text.js"
1818
import type { FileAttachment } from "@opencode/schema/prompt"
19-
import type { SessionRequestMessage } from "@opencode/plugin/effect/session"
2019

2120
const imageMimes = new Set(["image/png", "image/jpeg", "image/gif", "image/webp"])
2221

@@ -313,20 +312,9 @@ function toLLMMessage(message: SessionMessage.Info, model: Model.Ref, providerMe
313312
}
314313
}
315314

316-
/**
317-
* Translate projected Session history into canonical @opencode/ai context. Messages built from a stored message carry
318-
* its metadata for plugin hooks; SessionModelRequest strips it before the model request.
319-
*/
315+
/** Translate projected Session history into canonical @opencode/ai context. */
320316
export const toLLMMessages = (
321317
messages: readonly SessionMessage.Info[],
322318
model: Model.Ref,
323319
providerMetadataKey: string = model.providerID,
324-
) =>
325-
messages.flatMap((message) =>
326-
toLLMMessage(message, model, providerMetadataKey).map(
327-
(item): SessionRequestMessage =>
328-
message.metadata === undefined || item.id !== message.id
329-
? item
330-
: Object.assign(item, { metadata: message.metadata }),
331-
),
332-
)
320+
) => messages.flatMap((message) => toLLMMessage(message, model, providerMetadataKey))

‎packages/core/test/session-runner-message.test.ts‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,7 @@ describe("toLLMMessages", () => {
4848
})
4949
expect(toLLMMessages([completed], model)).toEqual([])
5050
expect(toLLMMessages([completed, notification], model)).toEqual([
51-
Object.assign(Message.make({ id: notification.id, role: "user", content: notification.text }), {
52-
metadata: notification.metadata,
53-
}),
51+
Message.make({ id: notification.id, role: "user", content: notification.text }),
5452
])
5553
})
5654

0 commit comments

Comments
 (0)