summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--packages/opencode/src/session/prompt.ts25
-rw-r--r--packages/opencode/src/util/fn.ts3
2 files changed, 28 insertions, 0 deletions
diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts
index bf939c7e2..27a379daa 100644
--- a/packages/opencode/src/session/prompt.ts
+++ b/packages/opencode/src/session/prompt.ts
@@ -1318,6 +1318,31 @@ export namespace SessionPrompt {
},
)
+ const parsedInfo = MessageV2.Info.safeParse(info)
+ if (!parsedInfo.success) {
+ log.error("invalid user message before save", {
+ sessionID: input.sessionID,
+ messageID: info.id,
+ agent: info.agent,
+ model: info.model,
+ issues: parsedInfo.error.issues,
+ })
+ }
+
+ parts.forEach((part, index) => {
+ const parsedPart = MessageV2.Part.safeParse(part)
+ if (parsedPart.success) return
+ log.error("invalid user part before save", {
+ sessionID: input.sessionID,
+ messageID: info.id,
+ partID: part.id,
+ partType: part.type,
+ index,
+ issues: parsedPart.error.issues,
+ part,
+ })
+ })
+
await Session.updateMessage(info)
for (const part of parts) {
await Session.updatePart(part)
diff --git a/packages/opencode/src/util/fn.ts b/packages/opencode/src/util/fn.ts
index 19c60265b..c75fc1bb5 100644
--- a/packages/opencode/src/util/fn.ts
+++ b/packages/opencode/src/util/fn.ts
@@ -7,6 +7,9 @@ export function fn<T extends z.ZodType, Result>(schema: T, cb: (input: z.infer<T
parsed = schema.parse(input)
} catch (e) {
console.trace("schema validation failure stack trace:")
+ if (e instanceof z.ZodError) {
+ console.error("schema validation issues:", JSON.stringify(e.issues, null, 2))
+ }
throw e
}