open-agents-ai 0.187.338 → 0.187.340

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +71 -19
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -299783,12 +299783,19 @@ sleep 1
299783
299783
  onEnter: (item, { done }) => {
299784
299784
  (async () => {
299785
299785
  if (item.key === "__kill__") {
299786
- const resp = await doFetch("/v1/scheduled/kill", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({}) });
299786
+ renderInfo2("Scorched earth: removing all scheduled tasks, timers, crons, and killing processes...");
299787
299787
  try {
299788
+ const delResp = await doFetch("/v1/scheduled/all", { method: "DELETE", headers: { "Content-Type": "application/json" } });
299789
+ const delJ = await delResp.json();
299790
+ renderInfo2(`Deleted ${delJ.deleted || 0} tasks, ${delJ.timers_disabled || 0} timers, ${delJ.cron_lines_removed || 0} cron entries.`);
299791
+ } catch {
299792
+ }
299793
+ try {
299794
+ const resp = await doFetch("/v1/scheduled/kill", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({}) });
299788
299795
  const j = await resp.json();
299789
299796
  const kb = Array.isArray(j.killed) ? j.killed.length : 0;
299790
299797
  const ka = Array.isArray(j.additionally) ? j.additionally.length : 0;
299791
- renderInfo2(`Killed ${kb + ka} processes (schedulers + active runs).`);
299798
+ renderInfo2(`Killed ${kb + ka} processes.`);
299792
299799
  const before = j.gpu_before?.[0];
299793
299800
  const after = j.gpu_after?.[0];
299794
299801
  if (before && after) {
@@ -299796,19 +299803,18 @@ sleep 1
299796
299803
  }
299797
299804
  const rem = Array.isArray(j.procs_after) ? j.procs_after.length : 0;
299798
299805
  if (rem > 0) {
299799
- renderWarning2(`Remaining matched processes: ${rem}. Escalating with sudo...`);
299800
- const script = `systemctl disable --now "oa-*".timer 2>/dev/null || true; systemctl disable --now "oa-*".service 2>/dev/null || true; crontab -l 2>/dev/null | sed '/OPEN-AGENTS-SCHEDULED/d' | crontab - || true; pkill -f 'OPEN-AGENTS-SCHEDULED|oa-sched-|nexus|ollama' || true; sleep 1`;
299806
+ renderWarning2(`${rem} processes remain. Escalating with sudo...`);
299807
+ const script = [
299808
+ `for u in $(systemctl list-unit-files 'oa-*.timer' --no-legend 2>/dev/null | awk '{print $1}'); do systemctl disable --now "$u" 2>/dev/null; done`,
299809
+ `for u in $(systemctl list-unit-files 'oa-*.service' --no-legend 2>/dev/null | awk '{print $1}'); do systemctl disable --now "$u" 2>/dev/null; done`,
299810
+ `crontab -l 2>/dev/null | sed '/OPEN-AGENTS-SCHEDULED/d' | crontab - || true`,
299811
+ `pkill -f 'OPEN-AGENTS-SCHEDULED|oa-sched-' || true`,
299812
+ `sleep 1`,
299813
+ `pkill -9 -f 'OPEN-AGENTS-SCHEDULED|oa-sched-' || true`
299814
+ ].join("; ");
299801
299815
  await runSudoScript(ctx3, script);
299802
- try {
299803
- const r22 = await doFetch("/v1/scheduled/kill", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({}) });
299804
- const j2 = await r22.json();
299805
- const rem2 = Array.isArray(j2.procs_after) ? j2.procs_after.length : 0;
299806
- if (rem2 > 0) renderWarning2(`Remaining after escalation: ${rem2}`);
299807
- else renderInfo2("No remaining matched processes after escalation.");
299808
- } catch {
299809
- }
299810
299816
  } else {
299811
- renderInfo2("No remaining matched processes.");
299817
+ renderInfo2("All clear — no remaining processes.");
299812
299818
  }
299813
299819
  } catch {
299814
299820
  renderInfo2("Kill signal sent.");
@@ -325574,9 +325580,24 @@ function textResponse(res, status, body, contentType = "text/plain") {
325574
325580
  }
325575
325581
  function isOriginAllowed(origin) {
325576
325582
  if (!origin) return true;
325577
- if (_corsOrigins.includes("*")) return true;
325578
- if (_corsLocalOnly) return /^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/.test(origin);
325579
- return _corsOrigins.some((p2) => origin === p2 || p2.includes("*") && new RegExp("^" + p2.replace(/\*/g, ".*") + "$").test(origin));
325583
+ const accessMode = (process.env["OA_ACCESS"] || "").toLowerCase().trim();
325584
+ if (accessMode === "any") return true;
325585
+ if (accessMode === "lan") {
325586
+ try {
325587
+ const u = new URL(origin);
325588
+ const host = u.hostname;
325589
+ if (/^(localhost|127\.\d+\.\d+\.\d+|::1|\[::1\])$/.test(host)) return true;
325590
+ if (/^(10\.|192\.168\.|172\.(1[6-9]|2\d|3[01])\.|169\.254\.)/.test(host)) return true;
325591
+ if (/^f[cd][0-9a-f]{2}:/i.test(host) || /^fe[89ab][0-9a-f]:/i.test(host)) return true;
325592
+ } catch {
325593
+ }
325594
+ }
325595
+ const corsOrigins = (process.env["OA_CORS_ORIGINS"] || "").split(",").filter(Boolean);
325596
+ if (corsOrigins.includes("*")) return true;
325597
+ if (corsOrigins.length > 0) {
325598
+ return corsOrigins.some((p2) => origin === p2 || p2.includes("*") && new RegExp("^" + p2.replace(/\*/g, ".*") + "$").test(origin));
325599
+ }
325600
+ return /^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/.test(origin);
325580
325601
  }
325581
325602
  function corsHeaders(req2, res) {
325582
325603
  const origin = req2.headers["origin"];
@@ -328163,6 +328184,39 @@ async function handleRequest(req2, res, ollamaUrl, verbose) {
328163
328184
  jsonResponse(res, ok2 ? 200 : 404, ok2 ? { id, enabled: enabled2 } : { error: "Not found" });
328164
328185
  return;
328165
328186
  }
328187
+ if (pathname === "/v1/scheduled/all" && method === "DELETE") {
328188
+ let deleted = 0;
328189
+ try {
328190
+ const tasks = listScheduledTasks();
328191
+ for (let i2 = tasks.length - 1; i2 >= 0; i2--) {
328192
+ try {
328193
+ deleteScheduledById(tasks[i2].id);
328194
+ deleted++;
328195
+ } catch {
328196
+ }
328197
+ }
328198
+ } catch {
328199
+ }
328200
+ const timersDisabled = disableAllOaTimers();
328201
+ const cronRemoved = removeAllOaCrons();
328202
+ try {
328203
+ const tasks = listScheduledTasks();
328204
+ const seenFiles = /* @__PURE__ */ new Set();
328205
+ for (const t2 of tasks) {
328206
+ if (t2.file && t2.file !== "(systemd)") seenFiles.add(t2.file);
328207
+ }
328208
+ for (const f2 of seenFiles) {
328209
+ try {
328210
+ writeFileSync45(f2, JSON.stringify({ tasks: [] }, null, 2));
328211
+ deleted++;
328212
+ } catch {
328213
+ }
328214
+ }
328215
+ } catch {
328216
+ }
328217
+ jsonResponse(res, 200, { deleted, timers_disabled: timersDisabled, cron_lines_removed: cronRemoved });
328218
+ return;
328219
+ }
328166
328220
  if (pathname === "/v1/scheduled/kill" && method === "POST") {
328167
328221
  const body = await parseJsonBody(req2);
328168
328222
  const pids = Array.isArray(body?.pids) ? body.pids.filter((n2) => Number.isInteger(n2)) : void 0;
@@ -330397,7 +330451,7 @@ function setTimerEnabled(name11, enabled2) {
330397
330451
  return false;
330398
330452
  }
330399
330453
  }
330400
- var endpointRegistry, modelRouteMap, endpointUsage, metrics, startedAt, _corsOrigins, _corsLocalOnly, runningProcesses, perKeyUsage, CRON_MARKER2;
330454
+ var endpointRegistry, modelRouteMap, endpointUsage, metrics, startedAt, runningProcesses, perKeyUsage, CRON_MARKER2;
330401
330455
  var init_serve = __esm({
330402
330456
  "packages/cli/src/api/serve.ts"() {
330403
330457
  "use strict";
@@ -330430,8 +330484,6 @@ var init_serve = __esm({
330430
330484
  totalErrors: 0
330431
330485
  };
330432
330486
  startedAt = Date.now();
330433
- _corsOrigins = (process.env["OA_CORS_ORIGINS"] || "").split(",").filter(Boolean);
330434
- _corsLocalOnly = _corsOrigins.length === 0;
330435
330487
  runningProcesses = /* @__PURE__ */ new Map();
330436
330488
  perKeyUsage = /* @__PURE__ */ new Map();
330437
330489
  CRON_MARKER2 = "# OPEN-AGENTS-SCHEDULED:";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.187.338",
3
+ "version": "0.187.340",
4
4
  "description": "AI coding agent powered by open-source models (Ollama/vLLM) — interactive TUI with agentic tool-calling loop",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",