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) }