← back to Jevrun Runner
bin/jevrun.mjs
35 lines
#!/usr/bin/env node
// Global `jevrun` CLI — talks to the always-alive jevrun-runner service.
// jevrun health
// jevrun run <url> "<natural-language task>"
// jevrun "<task>" (no url; task runs on about:blank)
const PORT = Number(process.env.JEVRUN_PORT || 9788);
const HOST = process.env.JEVRUN_HOST || "127.0.0.1";
const base = `http://${HOST}:${PORT}`;
const [, , cmd, ...rest] = process.argv;
async function main() {
if (cmd === "health" || cmd === "--health") {
const r = await fetch(`${base}/health`).catch(() => null);
if (!r) { console.error(`jevrun-runner not reachable at ${base} — is pm2 process 'jevrun-runner' up?`); process.exit(1); }
console.log(JSON.stringify(await r.json(), null, 2));
return;
}
let url, task;
if (cmd === "run") { url = rest[0]; task = rest.slice(1).join(" "); }
else { task = [cmd, ...rest].filter(Boolean).join(" "); }
if (!task) {
console.error('usage: jevrun run <url> "<task>" | jevrun "<task>" | jevrun health');
process.exit(2);
}
const r = await fetch(`${base}/run`, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ url, task }),
}).catch((e) => { console.error(`request failed: ${e.message}`); process.exit(1); });
const body = await r.json();
console.log(JSON.stringify(body, null, 2));
process.exit(r.ok ? 0 : 1);
}
main();