Aiden Cline 5 месяцев назад
Родитель
Сommit
5d95846df1

+ 5 - 0
packages/opencode/src/session/message-v2.ts

@@ -115,6 +115,7 @@ export namespace MessageV2 {
         end: z.number().optional(),
       })
       .optional(),
+    metadata: z.record(z.string(), z.any()).optional(),
   }).meta({
     ref: "TextPart",
   })
@@ -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")
@@ -546,6 +550,7 @@ export namespace MessageV2 {
                     toolCallId: part.callID,
                     input: part.state.input,
                     errorText: part.state.error,
+                    callProviderMetadata: part.metadata,
                   },
                 ]
             }

+ 6 - 0
packages/opencode/src/session/prompt.ts

@@ -892,6 +892,7 @@ export namespace SessionPrompt {
                   time: {
                     start: Date.now(),
                   },
+                  metadata: value.providerMetadata,
                 }
                 break
 
@@ -913,6 +914,7 @@ export namespace SessionPrompt {
                     ...part.time,
                     end: Date.now(),
                   }
+                  if (value.providerMetadata) part.metadata = value.providerMetadata
                   await Session.updatePart(part)
                   delete reasoningMap[value.id]
                 }
@@ -952,6 +954,7 @@ export namespace SessionPrompt {
                         start: Date.now(),
                       },
                     },
+                    metadata: value.providerMetadata,
                   })
                   toolcalls[value.toolCallId] = part as MessageV2.ToolPart
                 }
@@ -1054,12 +1057,14 @@ export namespace SessionPrompt {
                   time: {
                     start: Date.now(),
                   },
+                  metadata: value.providerMetadata,
                 }
                 break
 
               case "text-delta":
                 if (currentText) {
                   currentText.text += value.text
+                  if (value.providerMetadata) currentText.metadata = value.providerMetadata
                   if (currentText.text) await Session.updatePart(currentText)
                 }
                 break
@@ -1071,6 +1076,7 @@ export namespace SessionPrompt {
                     start: Date.now(),
                     end: Date.now(),
                   }
+                  if (value.providerMetadata) currentText.metadata = value.providerMetadata
                   await Session.updatePart(currentText)
                 }
                 currentText = undefined