autonomy-labs / codex_agent.mjs
ArunKr's picture
Upload folder using huggingface_hub
2c613b3 verified
import { Codex } from "@openai/codex-sdk";
import { spawnSync } from "child_process";
function readStdin() {
return new Promise((resolve, reject) => {
let data = "";
process.stdin.setEncoding("utf8");
process.stdin.on("data", (chunk) => (data += chunk));
process.stdin.on("end", () => resolve(data));
process.stdin.on("error", reject);
});
}
async function main() {
const raw = await readStdin();
const payload = raw ? JSON.parse(raw) : {};
const message = typeof payload.message === "string" ? payload.message : "";
const threadId = typeof payload.threadId === "string" ? payload.threadId : null;
const model = typeof payload.model === "string" ? payload.model : undefined;
const sandboxMode = payload.sandboxMode || "read-only";
const approvalPolicy = payload.approvalPolicy || "never";
const workingDirectory = payload.workingDirectory || process.cwd();
const modelReasoningEffort =
payload.modelReasoningEffort || "minimal";
const apiKey =
(typeof payload.apiKey === "string" && payload.apiKey) ||
process.env.CODEX_API_KEY ||
process.env.OPENAI_API_KEY ||
process.env.OPENAI_KEY ||
undefined;
const baseUrl =
(typeof payload.baseUrl === "string" && payload.baseUrl) ||
process.env.OPENAI_BASE_URL ||
process.env.OPENAI_API_BASE ||
undefined;
const codexPathOverride = (() => {
const override = process.env.CODEX_PATH_OVERRIDE;
if (override) return override;
const probe = spawnSync("codex", ["--version"], { stdio: "ignore" });
return probe.status === 0 ? "codex" : undefined;
})();
const codex = new Codex({
codexPathOverride,
apiKey,
baseUrl,
});
const thread = threadId
? codex.resumeThread(threadId, {
model,
sandboxMode,
approvalPolicy,
modelReasoningEffort,
workingDirectory,
skipGitRepoCheck: true,
})
: codex.startThread({
model,
sandboxMode,
approvalPolicy,
modelReasoningEffort,
workingDirectory,
skipGitRepoCheck: true,
});
const turn = await thread.run(message);
process.stdout.write(
JSON.stringify({
threadId: thread.id,
finalResponse: turn.finalResponse,
usage: turn.usage,
}),
);
}
main().catch((err) => {
process.stderr.write(String(err?.stack || err));
process.exit(1);
});