From 8e9b4e57941d5d432beb4843356b48dbfdbdda04 Mon Sep 17 00:00:00 2001 From: Jon <57672422+jtbnz@users.noreply.github.com> Date: Thu, 7 May 2026 09:53:28 +1200 Subject: [PATCH] feat(session): expose LLM response headers on assistant messages --- packages/opencode/src/session/message-v2.ts | 1 + packages/opencode/src/session/processor.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index 237fb527c078..e329d14de9b8 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -578,6 +578,7 @@ export const Assistant = Schema.Struct({ structured: Schema.optional(Schema.Any), variant: Schema.optional(Schema.String), finish: Schema.optional(Schema.String), + responseHeaders: Schema.optional(Schema.Record(Schema.String, Schema.String)), }) .annotate({ identifier: "AssistantMessage" }) .pipe(withStatics((s) => ({ zod: zod(s) }))) diff --git a/packages/opencode/src/session/processor.ts b/packages/opencode/src/session/processor.ts index f22da92927d2..c05b318cc0e9 100644 --- a/packages/opencode/src/session/processor.ts +++ b/packages/opencode/src/session/processor.ts @@ -471,6 +471,8 @@ export const layer: Layer.Layer< ctx.assistantMessage.finish = value.finishReason ctx.assistantMessage.cost += usage.cost ctx.assistantMessage.tokens = usage.tokens + if (value.response.headers && Object.keys(value.response.headers).length > 0) + ctx.assistantMessage.responseHeaders = value.response.headers yield* session.updatePart({ id: PartID.ascending(), reason: value.finishReason,