DEBUG LOGGING STUFF

pull/19223/head
Aiden Cline 2026-03-25 13:53:19 -05:00
parent 33ac63f5b8
commit cea7b7e182
2 changed files with 40 additions and 2 deletions

View File

@ -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<string, string>): Promise<WebSocket> {
if (ws?.readyState === WebSocket.OPEN && !busy) {
log.debug("reusing websocket", { url })
return Promise.resolve(ws)
}
if (connecting && !busy) return connecting
connecting = new Promise<WebSocket>((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
}
}

View File

@ -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<string, any>): void
info(message?: any, extra?: Record<string, any>): 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<string, any>) {
if (!shouldServiceLog(tags?.["service"])) return
const prefix = Object.entries({
...tags,
...extra,