diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index b3c34539e77e..850b69ad9f75 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1350,6 +1350,14 @@ export namespace SessionPrompt { }, ) + // Ensure all part IDs are valid after plugin hooks may have mutated the parts array. + // Plugins can push parts with non-compliant IDs (e.g., missing "prt" prefix). + for (const part of parts) { + if (!part.id || typeof part.id !== "string" || !part.id.startsWith("prt")) { + ;(part as any).id = PartID.ascending() + } + } + const parsedInfo = MessageV2.Info.safeParse(info) if (!parsedInfo.success) { log.error("invalid user message before save", {