#!/usr/bin/env node function parseBoolean(value) { return String(value || "").trim().toLowerCase() === "true"; } function sanitizeRefreshEvent(data) { return { eventId: data?.eventId, eventType: data?.eventType, receivedAt: data?.receivedAt, targetThreadRef: data?.targetThreadRef, sourceMessageId: data?.sourceMessageId, appName: data?.appName, refreshMode: data?.refreshMode, status: data?.status, deepLink: data?.deepLink, detail: data?.detail, }; } function compactUndefinedFields(value) { return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined)); } async function consumeEvents({ eventsUrl, once = false }) { const response = await fetch(eventsUrl, { headers: { Accept: "text/event-stream", }, }); if (!response.ok || !response.body) { throw new Error(`CODEX_DESKTOP_EVENTS_UNAVAILABLE status=${response.status}`); } const decoder = new TextDecoder(); const reader = response.body.getReader(); let buffer = ""; let currentEvent = {}; function finishEvent() { if (!currentEvent.event || currentEvent.event !== "codex_desktop_refresh") { currentEvent = {}; return false; } const data = currentEvent.data ? JSON.parse(currentEvent.data) : {}; process.stdout.write(`${JSON.stringify(compactUndefinedFields(sanitizeRefreshEvent(data)))}\n`); currentEvent = {}; return true; } function handleLine(line) { if (line === "") { return finishEvent(); } if (line.startsWith("event:")) { currentEvent.event = line.slice("event:".length).trim(); } else if (line.startsWith("id:")) { currentEvent.id = line.slice("id:".length).trim(); } else if (line.startsWith("data:")) { currentEvent.data = `${currentEvent.data || ""}${line.slice("data:".length).trim()}`; } return false; } while (true) { const { done, value } = await reader.read(); if (done) { break; } buffer += decoder.decode(value, { stream: true }); const lines = buffer.split(/\r?\n/); buffer = lines.pop() ?? ""; for (const line of lines) { const consumed = handleLine(line); if (consumed && once) { await reader.cancel(); return; } } } } const eventsUrl = String(process.env.BOSS_CODEX_DESKTOP_EVENTS_URL || "").trim() || "http://127.0.0.1:4318/api/v1/codex-desktop/events"; try { await consumeEvents({ eventsUrl, once: parseBoolean(process.env.BOSS_CODEX_DESKTOP_EVENTS_ONCE), }); } catch (error) { process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`); process.exit(1); }