From cea7b7e182110fa564575a3b0221500a061a7d55 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Wed, 25 Mar 2026 13:53:19 -0500 Subject: [PATCH] DEBUG LOGGING STUFF --- .../opencode/src/plugin/openai/websocket.ts | 31 +++++++++++++++++++ packages/opencode/src/util/log.ts | 11 +++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/plugin/openai/websocket.ts b/packages/opencode/src/plugin/openai/websocket.ts index 4c97c956b9..cd2e222944 100644 --- a/packages/opencode/src/plugin/openai/websocket.ts +++ b/packages/opencode/src/plugin/openai/websocket.ts @@ -1,4 +1,7 @@ import WebSocket from "ws" +import { Log } from "@/util/log" + +const log = Log.create({ service: "plugin.openai.websocket" }) export interface CreateWebSocketFetchOptions { /** @@ -41,20 +44,30 @@ export function createWebSocketFetch(options?: CreateWebSocketFetchOptions) { function getConnection(url: string, headers: Record): Promise { if (ws?.readyState === WebSocket.OPEN && !busy) { + log.debug("reusing websocket", { url }) return Promise.resolve(ws) } if (connecting && !busy) return connecting connecting = new Promise((resolve, reject) => { + log.debug("connecting websocket", { + url, + headers: Object.keys(headers).sort().join(","), + }) const socket = new WebSocket(url, { headers }) socket.on("open", () => { ws = socket connecting = null + log.debug("websocket connected", { url }) resolve(socket) }) socket.on("error", (err) => { + log.debug("websocket connect error", { + url, + error: err.message, + }) if (connecting) { connecting = null reject(err) @@ -62,6 +75,7 @@ export function createWebSocketFetch(options?: CreateWebSocketFetchOptions) { }) socket.on("close", () => { + log.debug("websocket closed", { url }) if (ws === socket) ws = null }) }) @@ -90,6 +104,12 @@ export function createWebSocketFetch(options?: CreateWebSocketFetchOptions) { const wsUrl = getWebSocketURL(url, options?.url) const headers = getWebSocketHeaders(init.headers) + log.debug("intercepting responses request", { + url, + wsUrl, + stream: true, + }) + const connection = await getConnection(wsUrl, headers) busy = true @@ -107,6 +127,7 @@ export function createWebSocketFetch(options?: CreateWebSocketFetchOptions) { function onMessage(data: WebSocket.RawData) { const text = data.toString() + log.debug("websocket event", { event: pretty(text), url: wsUrl }) controller.enqueue(encoder.encode(`data: ${text}\n\n`)) try { @@ -122,11 +143,13 @@ export function createWebSocketFetch(options?: CreateWebSocketFetchOptions) { } function onError(err: Error) { + log.debug("websocket stream error", { url: wsUrl, error: err.message }) cleanup() controller.error(err) } function onClose() { + log.debug("websocket stream close", { url: wsUrl }) cleanup() try { controller.close() @@ -215,3 +238,11 @@ function getWebSocketURL(url: string, fallback?: string) { parsed.protocol = parsed.protocol === "https:" ? "wss:" : "ws:" return parsed.toString() } + +function pretty(text: string) { + try { + return JSON.stringify(JSON.parse(text), null, 2) + } catch { + return text + } +} diff --git a/packages/opencode/src/util/log.ts b/packages/opencode/src/util/log.ts index 2ca4c0a3de..28c7f5b754 100644 --- a/packages/opencode/src/util/log.ts +++ b/packages/opencode/src/util/log.ts @@ -22,6 +22,10 @@ export namespace Log { return levelPriority[input] >= levelPriority[level] } + function shouldServiceLog(service: unknown) { + return service === "plugin.openai.websocket" + } + export type Logger = { debug(message?: any, extra?: Record): void info(message?: any, extra?: Record): void @@ -62,8 +66,10 @@ export namespace Log { cleanup(Global.Path.log) if (options.print) return logpath = path.join( - Global.Path.log, - options.dev ? "dev.log" : new Date().toISOString().split(".")[0].replace(/:/g, "") + ".log", + // TODO: STOP DOING THIS!!!!! + "dev.log", + // Global.Path.log, + // options.dev ? "dev.log" : new Date().toISOString().split(".")[0].replace(/:/g, "") + ".log", ) await fs.truncate(logpath).catch(() => {}) const stream = createWriteStream(logpath, { flags: "a" }) @@ -109,6 +115,7 @@ export namespace Log { } function build(message: any, extra?: Record) { + if (!shouldServiceLog(tags?.["service"])) return const prefix = Object.entries({ ...tags, ...extra,