#!/usr/bin/env node import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { spawn } from "node:child_process"; const real = process.env.CODEX_REAL || "codex-real"; const dir = process.env.CODEX_TRACE_DIR || path.join(os.homedir(), ".omp", "codex-bridge", "traces"); fs.mkdirSync(dir, { recursive: true, mode: 0o700 }); const stamp = new Date().toISOString().replaceAll(":", "-"); const base = path.join(dir, `${stamp}-${process.pid}`); fs.writeFileSync(`${base}.meta.json`, JSON.stringify({ argv: process.argv.slice(2), cwd: process.cwd(), pid: process.pid }, null, 2), { mode: 0o600 }); const inputLog = fs.createWriteStream(`${base}.stdin.bin`, { mode: 0o600 }); const outputLog = fs.createWriteStream(`${base}.stdout.bin`, { mode: 0o600 }); const errorLog = fs.createWriteStream(`${base}.stderr.bin`, { mode: 0o600 }); const child = spawn(real, process.argv.slice(2), { stdio: ["pipe", "pipe", "pipe"], env: process.env }); process.stdin.on("data", (chunk) => { inputLog.write(chunk); child.stdin.write(chunk); }); process.stdin.on("end", () => child.stdin.end()); child.stdout.on("data", (chunk) => { outputLog.write(chunk); process.stdout.write(chunk); }); child.stderr.on("data", (chunk) => { errorLog.write(chunk); process.stderr.write(chunk); }); child.on("exit", (code, signal) => { inputLog.end(); outputLog.end(); errorLog.end(); process.exitCode = code ?? (signal ? 1 : 0); });