summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2025-09-17 09:45:13 -0500
committerGitHub <[email protected]>2025-09-17 09:45:13 -0500
commit8c2aec43b800f0a460c31acf698e3a42b289162f (patch)
treea9714f7f29098b7e7e8255893a57286a995c7121
parent2564801bdeeb6a12874f951bf133d2f6b56c711d (diff)
downloadopencode-8c2aec43b800f0a460c31acf698e3a42b289162f.tar.gz
opencode-8c2aec43b800f0a460c31acf698e3a42b289162f.zip
fix: type 'reasoning' was provided without its required following item (#2633)
-rw-r--r--packages/opencode/src/session/message-v2.ts4
-rw-r--r--packages/opencode/src/session/prompt.ts6
2 files changed, 9 insertions, 1 deletions
diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts
index 2d850e0a4..e4239cadd 100644
--- a/packages/opencode/src/session/message-v2.ts
+++ b/packages/opencode/src/session/message-v2.ts
@@ -109,6 +109,7 @@ export namespace MessageV2 {
type: z.literal("text"),
text: z.string(),
synthetic: z.boolean().optional(),
+ metadata: z.record(z.string(), z.any()).optional(),
time: z
.object({
start: z.number(),
@@ -138,6 +139,7 @@ export namespace MessageV2 {
callID: z.string(),
tool: z.string(),
state: ToolState,
+ metadata: z.record(z.string(), z.any()).optional(),
}).meta({
ref: "ToolPart",
})
@@ -519,6 +521,7 @@ export namespace MessageV2 {
{
type: "text",
text: part.text,
+ providerMetadata: part.metadata,
},
]
if (part.type === "step-start")
@@ -536,6 +539,7 @@ export namespace MessageV2 {
toolCallId: part.callID,
input: part.state.input,
output: part.state.time.compacted ? "[Old tool result content cleared]" : part.state.output,
+ callProviderMetadata: part.metadata,
},
]
if (part.state.status === "error")
diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts
index c61403259..c46939952 100644
--- a/packages/opencode/src/session/prompt.ts
+++ b/packages/opencode/src/session/prompt.ts
@@ -873,7 +873,6 @@ export namespace SessionPrompt {
if (value.id in reasoningMap) {
const part = reasoningMap[value.id]
part.text = part.text.trimEnd()
-
part.time = {
...part.time,
end: Date.now(),
@@ -891,6 +890,7 @@ export namespace SessionPrompt {
type: "tool",
tool: value.toolName,
callID: value.id,
+ metadata: value.providerMetadata,
state: {
status: "pending",
},
@@ -910,6 +910,7 @@ export namespace SessionPrompt {
const part = await Session.updatePart({
...match,
tool: value.toolName,
+ metadata: match.metadata,
state: {
status: "running",
input: value.input,
@@ -1016,6 +1017,7 @@ export namespace SessionPrompt {
sessionID: assistantMsg.sessionID,
type: "text",
text: "",
+ metadata: value.providerMetadata,
time: {
start: Date.now(),
},
@@ -1025,6 +1027,7 @@ export namespace SessionPrompt {
case "text-delta":
if (currentText) {
currentText.text += value.text
+ if (value.providerMetadata) currentText.metadata = value.providerMetadata
if (currentText.text) await Session.updatePart(currentText)
}
break
@@ -1032,6 +1035,7 @@ export namespace SessionPrompt {
case "text-end":
if (currentText) {
currentText.text = currentText.text.trimEnd()
+ if (value.providerMetadata) currentText.metadata = value.providerMetadata
currentText.time = {
start: Date.now(),
end: Date.now(),