#!/usr/bin/env bun import { readFileSync } from "node:fs"; import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; const __dirname = dirname(fileURLToPath(import.meta.url)); const pkg = JSON.parse(readFileSync(join(__dirname, "../package.json"), "utf8")) as { version?: string }; const VERSION = pkg.version || "0.0.0"; const HELP = ` agent-relay-codex Codex lifecycle is owned by the unified Agent Relay runner. Usage: codex-relay [--headless] [--cwd PATH] [--relay-url URL] [-- CODEx_ARGS...] agent-relay provider wrap codex agent-relay provider unwrap codex agent-relay-codex upgrade [--dry-run] `.trim(); export function shouldBypassRelay(args: string[], env: Record = process.env): boolean { if (env.AGENT_RELAY_DISABLED === "1") return true; if (args.some((arg) => arg === "--help" || arg === "-h" || arg === "--version" || arg === "-V")) return true; const commands = args.filter((arg) => !arg.startsWith("-")); return [ "exec", "e", "review", "login", "logout", "mcp", "plugin", "mcp-server", "app-server", "remote-control", "completion", "update", "sandbox", "debug", "apply", "a", "cloud", "exec-server", "features", "help", ].includes(commands[0] ?? ""); } export function removeAgentRelaySessionStartToml(input: string): string { const blocks = input.split(/\n(?=\[\[hooks\.)/g); return blocks .filter((block) => !/\.agent-relay\/codex\/package\/hooks\//.test(block) && !/agent-relay-codex.*hook/i.test(block) && !/agent-relay.*(SessionStart|UserPromptSubmit|Stop).*hook/i.test(block) ) .join("\n") .trimEnd() + "\n"; } async function main(args = process.argv.slice(2)): Promise { const command = args[0] ?? "help"; if (command === "--version" || command === "-v") { console.log(VERSION); return; } if (command === "help" || command === "--help" || command === "-h") { console.log(HELP); return; } if (command === "upgrade") { const proc = Bun.spawn(["agent-relay", "upgrade", "--providers", "codex", ...args.slice(1)], { stdin: "inherit", stdout: "inherit", stderr: "inherit", }); process.exit(await proc.exited); } if (command === "install") { console.log("Codex relay lifecycle now ships in agent-relay-runner. Use: agent-relay provider wrap codex"); return; } if (command === "uninstall") { console.log("Use: agent-relay provider unwrap codex"); return; } throw new Error("codex-relay is provided by agent-relay-runner; run `codex-relay --help`."); } if (import.meta.main) { await main(); }