@madarco/agentbox 0.10.1 → 0.11.0

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 (41) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/{_cloud-attach-2DGI6FUA.js → _cloud-attach-6C5NMOHD.js} +4 -4
  3. package/dist/{chunk-M2UWJKFA.js → chunk-D4Q2RUQI.js} +5 -5
  4. package/dist/chunk-D4Q2RUQI.js.map +1 -0
  5. package/dist/{chunk-MTVI44DW.js → chunk-ECLLV5JH.js} +6 -3
  6. package/dist/chunk-ECLLV5JH.js.map +1 -0
  7. package/dist/{chunk-CDKVD6UO.js → chunk-GUNUBIRB.js} +69 -66
  8. package/dist/chunk-GUNUBIRB.js.map +1 -0
  9. package/dist/{chunk-I7NOGCL4.js → chunk-NVSRGC5W.js} +23 -11
  10. package/dist/chunk-NVSRGC5W.js.map +1 -0
  11. package/dist/{chunk-I24B6AXR.js → chunk-R5XIDQFR.js} +6 -3
  12. package/dist/chunk-R5XIDQFR.js.map +1 -0
  13. package/dist/{chunk-PWUVHPN6.js → chunk-SNTHHWKY.js} +7 -3
  14. package/dist/chunk-SNTHHWKY.js.map +1 -0
  15. package/dist/{chunk-LEV3KICD.js → chunk-ZGVMN54V.js} +6 -3
  16. package/dist/{chunk-LEV3KICD.js.map → chunk-ZGVMN54V.js.map} +1 -1
  17. package/dist/{dist-BNI5PQYK.js → dist-4SUIXKSD.js} +5 -5
  18. package/dist/{dist-SJHY3HYN.js → dist-HT2YV6PB.js} +5 -5
  19. package/dist/{dist-BD5QJRDC.js → dist-PJFJNXO2.js} +5 -5
  20. package/dist/{dist-SBCQVFCE.js → dist-ZEGIMYWZ.js} +3 -3
  21. package/dist/index.js +618 -545
  22. package/dist/index.js.map +1 -1
  23. package/dist/{prepared-state-MQHD3M5F-O5M4NIN4.js → prepared-state-MQHD3M5F-KE4DT3GX.js} +2 -2
  24. package/package.json +6 -6
  25. package/runtime/docker/packages/ctl/dist/bin.cjs +5 -2
  26. package/runtime/hetzner/ctl.cjs +5 -2
  27. package/runtime/relay/bin.cjs +5 -2
  28. package/runtime/vercel/ctl.cjs +5 -2
  29. package/runtime/vercel/scripts/provision.sh +20 -0
  30. package/dist/chunk-CDKVD6UO.js.map +0 -1
  31. package/dist/chunk-I24B6AXR.js.map +0 -1
  32. package/dist/chunk-I7NOGCL4.js.map +0 -1
  33. package/dist/chunk-M2UWJKFA.js.map +0 -1
  34. package/dist/chunk-MTVI44DW.js.map +0 -1
  35. package/dist/chunk-PWUVHPN6.js.map +0 -1
  36. /package/dist/{_cloud-attach-2DGI6FUA.js.map → _cloud-attach-6C5NMOHD.js.map} +0 -0
  37. /package/dist/{dist-BNI5PQYK.js.map → dist-4SUIXKSD.js.map} +0 -0
  38. /package/dist/{dist-SJHY3HYN.js.map → dist-HT2YV6PB.js.map} +0 -0
  39. /package/dist/{dist-BD5QJRDC.js.map → dist-PJFJNXO2.js.map} +0 -0
  40. /package/dist/{dist-SBCQVFCE.js.map → dist-ZEGIMYWZ.js.map} +0 -0
  41. /package/dist/{prepared-state-MQHD3M5F-O5M4NIN4.js.map → prepared-state-MQHD3M5F-KE4DT3GX.js.map} +0 -0
@@ -6,7 +6,7 @@ import {
6
6
  readPreparedDockerState,
7
7
  resolveContextFiles,
8
8
  writePreparedDockerState
9
- } from "./chunk-PWUVHPN6.js";
9
+ } from "./chunk-SNTHHWKY.js";
10
10
  export {
11
11
  DOCKERFILE_PATH,
12
12
  computeDockerContextFingerprint,
@@ -15,4 +15,4 @@ export {
15
15
  resolveContextFiles,
16
16
  writePreparedDockerState
17
17
  };
18
- //# sourceMappingURL=prepared-state-MQHD3M5F-O5M4NIN4.js.map
18
+ //# sourceMappingURL=prepared-state-MQHD3M5F-KE4DT3GX.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@madarco/agentbox",
3
- "version": "0.10.1",
3
+ "version": "0.11.0",
4
4
  "description": "Launch Claude Code, Codex, and other coding agents in isolated sandboxes",
5
5
  "license": "MIT",
6
6
  "author": "Marco D'Alia",
@@ -59,15 +59,15 @@
59
59
  "typescript": "^5.7.2",
60
60
  "vitest": "^2.1.8",
61
61
  "@agentbox/config": "0.0.0",
62
- "@agentbox/core": "0.0.0",
63
62
  "@agentbox/ctl": "0.0.0",
64
- "@agentbox/relay": "0.0.0",
63
+ "@agentbox/core": "0.0.0",
65
64
  "@agentbox/sandbox-cloud": "0.0.0",
65
+ "@agentbox/relay": "0.0.0",
66
66
  "@agentbox/sandbox-core": "0.0.0",
67
- "@agentbox/sandbox-hetzner": "0.0.0",
68
- "@agentbox/sandbox-daytona": "0.0.0",
69
67
  "@agentbox/sandbox-docker": "0.0.0",
70
- "@agentbox/sandbox-vercel": "0.0.0"
68
+ "@agentbox/sandbox-hetzner": "0.0.0",
69
+ "@agentbox/sandbox-vercel": "0.0.0",
70
+ "@agentbox/sandbox-daytona": "0.0.0"
71
71
  },
72
72
  "scripts": {
73
73
  "build": "tsup",
@@ -18457,6 +18457,9 @@ function findBox(idOrName, state) {
18457
18457
  if (byContainer) return { kind: "ok", box: byContainer };
18458
18458
  return { kind: "none" };
18459
18459
  }
18460
+ function hostOpenCommand() {
18461
+ return process.platform === "linux" ? "xdg-open" : "open";
18462
+ }
18460
18463
 
18461
18464
  // ../config/dist/index.js
18462
18465
  var import_yaml = __toESM(require_dist(), 1);
@@ -19583,7 +19586,7 @@ async function runBrowserOpenMirror(action, deps) {
19583
19586
  );
19584
19587
  if (verdict.answer === "y" && !verdict.cancelled) {
19585
19588
  const { spawn: spawn52 } = await import("child_process");
19586
- const child = spawn52("open", [url], { stdio: "ignore", detached: true });
19589
+ const child = spawn52(hostOpenCommand(), [url], { stdio: "ignore", detached: true });
19587
19590
  child.unref();
19588
19591
  }
19589
19592
  } catch (err) {
@@ -20303,7 +20306,7 @@ function createRelayServer(opts) {
20303
20306
  { ttlMs: BROWSER_OPEN_PROMPT_TTL_MS }
20304
20307
  ).then((verdict) => {
20305
20308
  if (verdict.answer === "y" && !verdict.cancelled) {
20306
- void runHostCommand(["open", url2], BROWSER_OPEN_RPC_TIMEOUT_MS);
20309
+ void runHostCommand([hostOpenCommand(), url2], BROWSER_OPEN_RPC_TIMEOUT_MS);
20307
20310
  }
20308
20311
  }).catch(() => {
20309
20312
  });
@@ -18457,6 +18457,9 @@ function findBox(idOrName, state) {
18457
18457
  if (byContainer) return { kind: "ok", box: byContainer };
18458
18458
  return { kind: "none" };
18459
18459
  }
18460
+ function hostOpenCommand() {
18461
+ return process.platform === "linux" ? "xdg-open" : "open";
18462
+ }
18460
18463
 
18461
18464
  // ../config/dist/index.js
18462
18465
  var import_yaml = __toESM(require_dist(), 1);
@@ -19583,7 +19586,7 @@ async function runBrowserOpenMirror(action, deps) {
19583
19586
  );
19584
19587
  if (verdict.answer === "y" && !verdict.cancelled) {
19585
19588
  const { spawn: spawn52 } = await import("child_process");
19586
- const child = spawn52("open", [url], { stdio: "ignore", detached: true });
19589
+ const child = spawn52(hostOpenCommand(), [url], { stdio: "ignore", detached: true });
19587
19590
  child.unref();
19588
19591
  }
19589
19592
  } catch (err) {
@@ -20303,7 +20306,7 @@ function createRelayServer(opts) {
20303
20306
  { ttlMs: BROWSER_OPEN_PROMPT_TTL_MS }
20304
20307
  ).then((verdict) => {
20305
20308
  if (verdict.answer === "y" && !verdict.cancelled) {
20306
- void runHostCommand(["open", url2], BROWSER_OPEN_RPC_TIMEOUT_MS);
20309
+ void runHostCommand([hostOpenCommand(), url2], BROWSER_OPEN_RPC_TIMEOUT_MS);
20307
20310
  }
20308
20311
  }).catch(() => {
20309
20312
  });
@@ -18026,6 +18026,9 @@ function findBox(idOrName, state) {
18026
18026
  if (byContainer) return { kind: "ok", box: byContainer };
18027
18027
  return { kind: "none" };
18028
18028
  }
18029
+ function hostOpenCommand() {
18030
+ return process.platform === "linux" ? "xdg-open" : "open";
18031
+ }
18029
18032
 
18030
18033
  // src/gh.ts
18031
18034
  var import_node_child_process6 = require("child_process");
@@ -18594,7 +18597,7 @@ async function runBrowserOpenMirror(action, deps) {
18594
18597
  );
18595
18598
  if (verdict.answer === "y" && !verdict.cancelled) {
18596
18599
  const { spawn: spawn6 } = await import("child_process");
18597
- const child = spawn6("open", [url], { stdio: "ignore", detached: true });
18600
+ const child = spawn6(hostOpenCommand(), [url], { stdio: "ignore", detached: true });
18598
18601
  child.unref();
18599
18602
  }
18600
18603
  } catch (err) {
@@ -19574,7 +19577,7 @@ function createRelayServer(opts) {
19574
19577
  { ttlMs: BROWSER_OPEN_PROMPT_TTL_MS }
19575
19578
  ).then((verdict) => {
19576
19579
  if (verdict.answer === "y" && !verdict.cancelled) {
19577
- void runHostCommand(["open", url2], BROWSER_OPEN_RPC_TIMEOUT_MS);
19580
+ void runHostCommand([hostOpenCommand(), url2], BROWSER_OPEN_RPC_TIMEOUT_MS);
19578
19581
  }
19579
19582
  }).catch(() => {
19580
19583
  });
@@ -18457,6 +18457,9 @@ function findBox(idOrName, state) {
18457
18457
  if (byContainer) return { kind: "ok", box: byContainer };
18458
18458
  return { kind: "none" };
18459
18459
  }
18460
+ function hostOpenCommand() {
18461
+ return process.platform === "linux" ? "xdg-open" : "open";
18462
+ }
18460
18463
 
18461
18464
  // ../config/dist/index.js
18462
18465
  var import_yaml = __toESM(require_dist(), 1);
@@ -19583,7 +19586,7 @@ async function runBrowserOpenMirror(action, deps) {
19583
19586
  );
19584
19587
  if (verdict.answer === "y" && !verdict.cancelled) {
19585
19588
  const { spawn: spawn52 } = await import("child_process");
19586
- const child = spawn52("open", [url], { stdio: "ignore", detached: true });
19589
+ const child = spawn52(hostOpenCommand(), [url], { stdio: "ignore", detached: true });
19587
19590
  child.unref();
19588
19591
  }
19589
19592
  } catch (err) {
@@ -20303,7 +20306,7 @@ function createRelayServer(opts) {
20303
20306
  { ttlMs: BROWSER_OPEN_PROMPT_TTL_MS }
20304
20307
  ).then((verdict) => {
20305
20308
  if (verdict.answer === "y" && !verdict.cancelled) {
20306
- void runHostCommand(["open", url2], BROWSER_OPEN_RPC_TIMEOUT_MS);
20309
+ void runHostCommand([hostOpenCommand(), url2], BROWSER_OPEN_RPC_TIMEOUT_MS);
20307
20310
  }
20308
20311
  }).catch(() => {
20309
20312
  });
@@ -235,6 +235,26 @@ fi
235
235
  sudo -u vscode -H mkdir -p /home/vscode/.vnc
236
236
  done_ "VNC stack (TigerVNC + websockify + noVNC)"
237
237
 
238
+ step "X11 clipboard tools (xclip + autocutsel, built from source)"
239
+ # xclip and autocutsel are NOT in the AL2023 repos (unlike Debian/Ubuntu where
240
+ # docker + hetzner apt-install them). They are load-bearing: xclip backs the
241
+ # host->box Ctrl+V image paste (apps/cli/src/lib/paste-image.ts), and autocutsel
242
+ # keeps the VNC CLIPBOARD/PRIMARY selections in sync (agentbox-vnc-start). Build
243
+ # both from source — all deps are in the AL2023 default repos. Fail loud: a
244
+ # missing binary is a silently broken feature, not a skippable convenience.
245
+ dnf install -y -q --allowerasing \
246
+ gcc make automake autoconf git \
247
+ libX11-devel libXmu-devel libXt-devel libXaw-devel
248
+ git clone --depth 1 https://github.com/astrand/xclip /tmp/xclip
249
+ ( cd /tmp/xclip && autoreconf -i && ./configure --prefix=/usr/local && make && make install )
250
+ rm -rf /tmp/xclip
251
+ command -v xclip >/dev/null || { echo "provision.sh: xclip build failed"; exit 1; }
252
+ git clone --depth 1 https://github.com/sigmike/autocutsel /tmp/autocutsel
253
+ ( cd /tmp/autocutsel && autoreconf -i && ./configure --prefix=/usr/local && make && make install )
254
+ rm -rf /tmp/autocutsel
255
+ command -v autocutsel >/dev/null || { echo "provision.sh: autocutsel build failed"; exit 1; }
256
+ done_ "X11 clipboard tools (xclip + autocutsel, built from source)"
257
+
238
258
  step "agent CLIs (codex + opencode + agent-browser, global npm)"
239
259
  npm install -g @openai/codex opencode-ai agent-browser 2>&1 | tail -3 || \
240
260
  echo "provision.sh: one or more agent npm installs failed (continuing)"