diff options
| -rw-r--r-- | packages/opencode/src/session/prompt.ts | 25 | ||||
| -rw-r--r-- | packages/opencode/src/util/fn.ts | 3 |
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 } |
