From 2b3d027e3b4b3cf306d1762db5be2bc64123487f Mon Sep 17 00:00:00 2001 From: LukeParkerDev <10430890+Hona@users.noreply.github.com> Date: Mon, 20 Apr 2026 16:19:44 +1000 Subject: [PATCH] fix: resolve compiled binary crashes from circular dep and Bun CJS splitting bug --- packages/opencode/src/cli/cmd/serve.ts | 4 +++- packages/opencode/src/server/routes/instance/experimental.ts | 4 +++- packages/opencode/src/session/session.ts | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/opencode/src/cli/cmd/serve.ts b/packages/opencode/src/cli/cmd/serve.ts index 4323a4a96e..6240899159 100644 --- a/packages/opencode/src/cli/cmd/serve.ts +++ b/packages/opencode/src/cli/cmd/serve.ts @@ -13,7 +13,8 @@ import { Installation } from "../../installation" import { PushRelay } from "../../server/push-relay" import { Log } from "../../util" import { Global } from "../../global" -import * as QRCode from "qrcode" +// dynamic import: static `import * as` of CJS package triggers Bun bundler splitting bug +import type * as QRCodeType from "qrcode" const log = Log.create({ service: "serve" }) @@ -184,6 +185,7 @@ async function printPairQR(pair: PairPayload) { linkLength: link.length, qr: qrConfig, }) + const QRCode: typeof QRCodeType = await import("qrcode") const code = await QRCode.toString(link, { ...qrConfig, }) diff --git a/packages/opencode/src/server/routes/instance/experimental.ts b/packages/opencode/src/server/routes/instance/experimental.ts index d4071e1d58..e0f984847b 100644 --- a/packages/opencode/src/server/routes/instance/experimental.ts +++ b/packages/opencode/src/server/routes/instance/experimental.ts @@ -17,7 +17,8 @@ import { errors } from "../../error" import { lazy } from "@/util/lazy" import { Effect, Option } from "effect" import { PushRelay } from "../../push-relay" -import * as QRCode from "qrcode" +// dynamic import: static `import * as` of CJS package triggers Bun bundler splitting bug +import type * as QRCodeType from "qrcode" import { Agent } from "@/agent/agent" import { jsonRequest, runRequest } from "./trace" @@ -60,6 +61,7 @@ function pushPairLink(input: { relaySecret: string; hosts: string[] }) { } async function pushPairQRCode(input: { relaySecret: string; hosts: string[] }) { + const QRCode: typeof QRCodeType = await import("qrcode") return QRCode.toDataURL(pushPairLink(input), pushPairQROptions) } diff --git a/packages/opencode/src/session/session.ts b/packages/opencode/src/session/session.ts index 5168b80b56..ba144da9f0 100644 --- a/packages/opencode/src/session/session.ts +++ b/packages/opencode/src/session/session.ts @@ -246,7 +246,8 @@ export const Event = { "session.error", z.object({ sessionID: SessionID.zod.optional(), - error: MessageV2.Assistant.shape.error, + // z.lazy defers access to break circular dep: session → message-v2 → provider → plugin → session + error: z.lazy(() => MessageV2.Assistant.shape.error), }), ), }