From d704110e52ad243a20733cd3c8cf8a97bf3d6dbf Mon Sep 17 00:00:00 2001 From: LukeParkerDev <10430890+Hona@users.noreply.github.com> Date: Sat, 25 Apr 2026 10:04:49 +1000 Subject: [PATCH] fix: lazy session error schema --- packages/opencode/src/session/session.ts | 3 ++- packages/opencode/src/util/effect-zod.ts | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/session/session.ts b/packages/opencode/src/session/session.ts index f4fe3bf8bd..d08ddda7ce 100644 --- a/packages/opencode/src/session/session.ts +++ b/packages/opencode/src/session/session.ts @@ -284,7 +284,8 @@ export const Event = { sessionID: Schema.optional(SessionID), // Reuses MessageV2.Assistant.fields.error (already Schema.optional) so // the derived zod keeps the same discriminated-union shape on the bus. - error: MessageV2.Assistant.fields.error, + // Schema.suspend defers access to break circular init in compiled binaries. + error: Schema.suspend(() => MessageV2.Assistant.fields.error), }), ), } diff --git a/packages/opencode/src/util/effect-zod.ts b/packages/opencode/src/util/effect-zod.ts index 332a5c76eb..1aa0cbec3b 100644 --- a/packages/opencode/src/util/effect-zod.ts +++ b/packages/opencode/src/util/effect-zod.ts @@ -256,6 +256,8 @@ function body(ast: SchemaAST.AST): z.ZodTypeAny { return array(ast) case "Declaration": return decl(ast) + case "Suspend": + return z.lazy(() => walk(ast.thunk())) default: return fail(ast) }