open-agents-ai 0.185.45 → 0.185.47

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 +33 -9
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -41474,6 +41474,11 @@ function detectPersonaPlexCapability() {
41474
41474
  return fail("No NVIDIA GPU detected (nvidia-smi not found)");
41475
41475
  }
41476
41476
  }
41477
+ function fileLink2(filePath, label) {
41478
+ const url = `file://${filePath.replace(/\\/g, "/")}`;
41479
+ const text = label ?? filePath;
41480
+ return `\x1B]8;;${url}\x1B\\${text}\x1B]8;;\x1B\\`;
41481
+ }
41477
41482
  function isPersonaPlexRunning() {
41478
41483
  if (!existsSync37(PID_FILE))
41479
41484
  return false;
@@ -41995,7 +42000,7 @@ print('Converted')
41995
42000
  if (child.pid)
41996
42001
  process.kill(child.pid, 0);
41997
42002
  } catch {
41998
- log(`PersonaPlex daemon exited unexpectedly. Check ${LOG_FILE}`);
42003
+ log(`PersonaPlex daemon exited unexpectedly. Check ${fileLink2(LOG_FILE, "daemon.log")}`);
41999
42004
  return null;
42000
42005
  }
42001
42006
  try {
@@ -42014,7 +42019,7 @@ print('Converted')
42014
42019
  if (elapsed % 10 === 0)
42015
42020
  log(`Still loading... (${elapsed}s)`);
42016
42021
  }
42017
- log(`PersonaPlex daemon failed to start within 120s. Check ${LOG_FILE}`);
42022
+ log(`PersonaPlex daemon failed to start within 120s. Check ${fileLink2(LOG_FILE, "daemon.log")}`);
42018
42023
  return null;
42019
42024
  }
42020
42025
  function stopPersonaPlex() {
@@ -43423,6 +43428,14 @@ function detectPkgManager() {
43423
43428
  if (plat === "win32") {
43424
43429
  if (hasCmd("choco"))
43425
43430
  return "choco";
43431
+ if (hasCmd("winget"))
43432
+ return "winget";
43433
+ try {
43434
+ execSync28(`powershell -NoProfile -Command "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))"`, { stdio: "pipe", timeout: 12e4 });
43435
+ if (hasCmd("choco"))
43436
+ return "choco";
43437
+ } catch {
43438
+ }
43426
43439
  return null;
43427
43440
  }
43428
43441
  if (plat === "darwin") {
@@ -43558,10 +43571,10 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
43558
43571
  const getPassword = getSudoPassword ?? (() => Promise.resolve(null));
43559
43572
  const allDeps = [
43560
43573
  // Vision + OCR
43561
- { binary: "tesseract", label: "tesseract-ocr", pkgs: { apt: "tesseract-ocr", dnf: "tesseract", pacman: "tesseract", brew: "tesseract", choco: "tesseract" } },
43562
- { binary: "pdftotext", label: "poppler-utils", pkgs: { apt: "poppler-utils", dnf: "poppler-utils", pacman: "poppler", brew: "poppler", choco: "poppler" } },
43563
- { binary: "gs", label: "ghostscript", pkgs: { apt: "ghostscript", dnf: "ghostscript", pacman: "ghostscript", brew: "ghostscript", choco: "ghostscript" } },
43564
- { binary: "ocrmypdf", label: "ocrmypdf", pkgs: { apt: "ocrmypdf", dnf: "ocrmypdf", pacman: "ocrmypdf", brew: "ocrmypdf", choco: "ocrmypdf" } },
43574
+ { binary: "tesseract", label: "tesseract-ocr", pkgs: { apt: "tesseract-ocr", dnf: "tesseract", pacman: "tesseract", brew: "tesseract", choco: "tesseract", winget: "UB-Mannheim.TesseractOCR" } },
43575
+ { binary: "pdftotext", label: "poppler-utils", pkgs: { apt: "poppler-utils", dnf: "poppler-utils", pacman: "poppler", brew: "poppler", choco: "poppler", winget: "freedesktop.poppler" } },
43576
+ { binary: "gs", label: "ghostscript", pkgs: { apt: "ghostscript", dnf: "ghostscript", pacman: "ghostscript", brew: "ghostscript", choco: "ghostscript", winget: "ArtifexSoftware.GhostScript" } },
43577
+ { binary: "ocrmypdf", label: "ocrmypdf", pkgs: { apt: "ocrmypdf", dnf: "ocrmypdf", pacman: "ocrmypdf", brew: "ocrmypdf", choco: "ocrmypdf", winget: "" } },
43565
43578
  // Desktop interaction — screenshot + mouse control for desktop_click/desktop_describe
43566
43579
  ...process.platform === "darwin" ? [
43567
43580
  // macOS: screencapture is built-in, cliclick needed for mouse control
@@ -43587,7 +43600,7 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
43587
43600
  } else {
43588
43601
  const labels = missing.map((d) => d.label).join(", ");
43589
43602
  log(`Installing ${labels}...`);
43590
- const needsSudo = pm2 !== "brew" && pm2 !== "choco";
43603
+ const needsSudo = pm2 !== "brew" && pm2 !== "choco" && pm2 !== "winget";
43591
43604
  let batchCmd;
43592
43605
  switch (pm2) {
43593
43606
  case "apt":
@@ -43605,6 +43618,9 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
43605
43618
  case "choco":
43606
43619
  batchCmd = `choco install -y ${pkgNames.join(" ")}`;
43607
43620
  break;
43621
+ case "winget":
43622
+ batchCmd = pkgNames.map((p) => `winget install --accept-source-agreements --accept-package-agreements ${p}`).join(" && ");
43623
+ break;
43608
43624
  default:
43609
43625
  batchCmd = `echo "unsupported pm: ${pm2}" && exit 1`;
43610
43626
  break;
@@ -49835,7 +49851,11 @@ async function handleSlashCommand(input, ctx) {
49835
49851
  if (url) {
49836
49852
  renderInfo(`PersonaPlex ready at ${url} \u2014 use /call for full-duplex voice`);
49837
49853
  } else {
49838
- renderError(`PersonaPlex daemon failed to start. Check ${__require("path").join(__require("os").homedir(), ".open-agents", "voice", "personaplex", "daemon.log")}`);
49854
+ {
49855
+ const _lf = __require("path").join(__require("os").homedir(), ".open-agents", "voice", "personaplex", "daemon.log");
49856
+ const _url = `file://${_lf.replace(/\\\\/g, "/")}`;
49857
+ renderError(`PersonaPlex daemon failed to start. Check \x1B]8;;${_url}\x1B\\daemon.log\x1B]8;;\x1B\\`);
49858
+ }
49839
49859
  }
49840
49860
  }
49841
49861
  } catch (e) {
@@ -49852,7 +49872,11 @@ async function handleSlashCommand(input, ctx) {
49852
49872
  if (url) {
49853
49873
  renderInfo(`PersonaPlex ready at ${url} \u2014 use /call for full-duplex voice`);
49854
49874
  } else {
49855
- renderError(`PersonaPlex daemon failed to start. Check ${__require("path").join(__require("os").homedir(), ".open-agents", "voice", "personaplex", "daemon.log")}`);
49875
+ {
49876
+ const _lf = __require("path").join(__require("os").homedir(), ".open-agents", "voice", "personaplex", "daemon.log");
49877
+ const _url = `file://${_lf.replace(/\\\\/g, "/")}`;
49878
+ renderError(`PersonaPlex daemon failed to start. Check \x1B]8;;${_url}\x1B\\daemon.log\x1B]8;;\x1B\\`);
49879
+ }
49856
49880
  }
49857
49881
  }).catch(() => {
49858
49882
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.185.45",
3
+ "version": "0.185.47",
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",