@sandbank.dev/boxlite 0.3.1 → 0.3.3

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.
package/README.md CHANGED
@@ -63,6 +63,15 @@ const { stdout } = await sandbox.exec('echo hello')
63
63
  await provider.destroy(sandbox.id)
64
64
  ```
65
65
 
66
+ ### Local OCI rootfs (skip registry pull)
67
+
68
+ If `image` is an absolute path, it is treated as a local OCI layout directory:
69
+
70
+ ```typescript
71
+ // Export image: skopeo copy docker-daemon:myimage:latest oci:~/.boxlite/myimage-oci:latest
72
+ const sandbox = await provider.create({ image: '/Users/you/.boxlite/myimage-oci' })
73
+ ```
74
+
66
75
  ### OAuth2 authentication (remote mode)
67
76
 
68
77
  ```typescript
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,YAAY,EAGZ,UAAU,EACV,cAAc,EACd,WAAW,EAIZ,MAAM,oBAAoB,CAAA;AAI3B,OAAO,KAAK,EAAE,oBAAoB,EAA6B,MAAM,YAAY,CAAA;AAoKjF,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,CAAC,IAAI,aAAY;IACzB,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IAE9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyC;gBAEtD,MAAM,EAAE,oBAAoB;IAalC,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAuC5D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAW/C,aAAa,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA0B1D,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,8EAA8E;IACxE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,YAAY,EAGZ,UAAU,EACV,cAAc,EACd,WAAW,EAIZ,MAAM,oBAAoB,CAAA;AAI3B,OAAO,KAAK,EAAE,oBAAoB,EAA6B,MAAM,YAAY,CAAA;AAoKjF,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,CAAC,IAAI,aAAY;IACzB,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IAE9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyC;gBAEtD,MAAM,EAAE,oBAAoB;IAalC,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAgD5D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAW/C,aAAa,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA0B1D,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,8EAA8E;IACxE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
package/dist/adapter.js CHANGED
@@ -162,14 +162,23 @@ export class BoxLiteAdapter {
162
162
  }
163
163
  async createSandbox(config) {
164
164
  try {
165
+ // If image looks like an absolute path, treat it as a local OCI rootfs
166
+ const isLocalPath = config.image.startsWith('/');
165
167
  const box = await this.client.createBox({
166
- image: config.image,
168
+ ...(isLocalPath ? { rootfs_path: config.image } : { image: config.image }),
167
169
  cpu: config.resources?.cpu,
168
170
  memory_mb: config.resources?.memory,
171
+ disk_size_gb: config.resources?.disk,
169
172
  env: config.env,
170
173
  auto_remove: false,
174
+ ports: config.ports,
171
175
  });
172
176
  const portMap = new Map();
177
+ if (config.ports) {
178
+ for (const [hostPort, guestPort] of config.ports) {
179
+ portMap.set(guestPort, hostPort);
180
+ }
181
+ }
173
182
  this.portMaps.set(box.id, portMap);
174
183
  if (box.status === 'configured' || box.status === 'stopped') {
175
184
  await this.client.startBox(box.id);
@@ -1 +1 @@
1
- {"version":3,"file":"local-client.d.ts","sourceRoot":"","sources":["../src/local-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,aAAa,EAGb,kBAAkB,EAEnB,MAAM,YAAY,CAAA;AAwRnB;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,CAgRlF"}
1
+ {"version":3,"file":"local-client.d.ts","sourceRoot":"","sources":["../src/local-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,aAAa,EAGb,kBAAkB,EAEnB,MAAM,YAAY,CAAA;AA6XnB;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,CAsRlF"}
@@ -37,36 +37,59 @@ class Bridge:
37
37
  if self._runtime is not None:
38
38
  return
39
39
 
40
- # Try BoxliteRuntime (full API)
41
- for attr in ("BoxliteRuntime", "Runtime", "runtime"):
42
- cls = getattr(boxlite, attr, None)
43
- if cls is None:
44
- continue
40
+ # Create a Boxlite runtime for the custom home_dir, then use SimpleBox
41
+ # with that runtime. SimpleBox's exec is more stable for rapid consecutive
42
+ # calls than Boxlite.create(BoxOptions).exec().
43
+ Options = getattr(boxlite, "Options", None)
44
+ Boxlite = getattr(boxlite, "Boxlite", None)
45
+ if Options and Boxlite:
45
46
  try:
46
- rt = cls(home=self._home) if callable(cls) else cls
47
- if asyncio.iscoroutinefunction(getattr(rt, "start", None)):
48
- await rt.start()
49
- self._runtime = rt
50
- return
47
+ opts = Options(home_dir=self._home)
48
+ self._boxlite_rt = Boxlite(opts)
51
49
  except Exception:
52
- continue
50
+ self._boxlite_rt = None
51
+ else:
52
+ self._boxlite_rt = None
53
53
 
54
- # Fallback: no runtime, use SimpleBox per box
54
+ # Use SimpleBox with the runtime (handles home_dir correctly)
55
55
  self._runtime = "simple_box"
56
56
 
57
57
  async def create(self, params):
58
58
  await self._ensure_runtime()
59
59
 
60
- image = params["image"]
61
- kwargs = {"image": image}
62
- for k in ("cpu", "memory_mb", "disk_size_gb", "env", "working_dir"):
63
- if params.get(k) is not None:
64
- kwargs[k] = params[k]
65
-
60
+ image = params.get("image", "")
61
+ rootfs = params.get("rootfs_path")
66
62
  now = datetime.now(timezone.utc).isoformat()
67
63
 
64
+ # Normalize env/ports
65
+ env = params.get("env")
66
+ if isinstance(env, dict):
67
+ env = list(env.items())
68
+ ports = params.get("ports")
69
+ if isinstance(ports, list):
70
+ ports = [tuple(p) for p in ports]
71
+
68
72
  if self._runtime == "simple_box":
69
- sb = boxlite.SimpleBox(**kwargs)
73
+ # SimpleBox uses: image, memory_mib, cpus, disk_size_gb, env, working_dir
74
+ # rootfs_path overrides image when provided (local OCI layout directory)
75
+ sb_kwargs = {"rootfs_path": rootfs} if rootfs else {"image": image}
76
+ if params.get("cpu") is not None:
77
+ sb_kwargs["cpus"] = params["cpu"]
78
+ if params.get("memory_mb") is not None:
79
+ sb_kwargs["memory_mib"] = params["memory_mb"]
80
+ if params.get("disk_size_gb") is not None:
81
+ sb_kwargs["disk_size_gb"] = params["disk_size_gb"]
82
+ if env is not None:
83
+ sb_kwargs["env"] = env
84
+ if params.get("working_dir") is not None:
85
+ sb_kwargs["working_dir"] = params["working_dir"]
86
+ if ports is not None:
87
+ sb_kwargs["ports"] = ports
88
+
89
+ # Pass the Boxlite runtime to SimpleBox so it uses the correct home_dir
90
+ if getattr(self, "_boxlite_rt", None) is not None:
91
+ sb_kwargs["runtime"] = self._boxlite_rt
92
+ sb = boxlite.SimpleBox(**sb_kwargs)
70
93
  box = await sb.__aenter__()
71
94
  box_id = str(getattr(box, "id", None)
72
95
  or getattr(getattr(box, "_box", None), "id", None)
@@ -74,11 +97,43 @@ class Bridge:
74
97
  self._boxes[box_id] = box
75
98
  self._simple_boxes[box_id] = sb
76
99
  else:
77
- # Try runtime.create / runtime.create_box
78
- create_fn = getattr(self._runtime, "create", None) or getattr(self._runtime, "create_box", None)
79
- if create_fn is None:
80
- raise RuntimeError("boxlite runtime has no create/create_box method")
81
- box = await create_fn(**kwargs)
100
+ # Boxlite.create(BoxOptions(...), name=None)
101
+ BoxOptions = getattr(boxlite, "BoxOptions", None)
102
+ if BoxOptions is not None:
103
+ opt_kwargs = {}
104
+ if rootfs:
105
+ opt_kwargs["rootfs_path"] = rootfs
106
+ else:
107
+ opt_kwargs["image"] = image
108
+ if params.get("cpu") is not None:
109
+ opt_kwargs["cpus"] = params["cpu"]
110
+ if params.get("memory_mb") is not None:
111
+ opt_kwargs["memory_mib"] = params["memory_mb"]
112
+ if params.get("disk_size_gb") is not None:
113
+ opt_kwargs["disk_size_gb"] = params["disk_size_gb"]
114
+ if env is not None:
115
+ opt_kwargs["env"] = env
116
+ if params.get("working_dir") is not None:
117
+ opt_kwargs["working_dir"] = params["working_dir"]
118
+ if ports is not None:
119
+ opt_kwargs["ports"] = ports
120
+ opts = BoxOptions(**opt_kwargs)
121
+ box = await self._runtime.create(opts)
122
+ else:
123
+ # Legacy fallback: pass as kwargs
124
+ kwargs = {"rootfs_path": rootfs} if rootfs else {"image": image}
125
+ for k in ("cpu", "memory_mb", "disk_size_gb", "working_dir"):
126
+ if params.get(k) is not None:
127
+ kwargs[k] = params[k]
128
+ if env is not None:
129
+ kwargs["env"] = env
130
+ if ports is not None:
131
+ kwargs["ports"] = ports
132
+ create_fn = getattr(self._runtime, "create", None) or getattr(self._runtime, "create_box", None)
133
+ if create_fn is None:
134
+ raise RuntimeError("boxlite runtime has no create/create_box method")
135
+ box = await create_fn(**kwargs)
136
+
82
137
  box_id = str(box.id)
83
138
  self._boxes[box_id] = box
84
139
 
@@ -86,8 +141,8 @@ class Bridge:
86
141
  "id": box_id,
87
142
  "status": "running",
88
143
  "image": image,
89
- "cpu": kwargs.get("cpu", 1),
90
- "memory_mb": kwargs.get("memory_mb", 512),
144
+ "cpu": params.get("cpu", 1),
145
+ "memory_mb": params.get("memory_mb", 512),
91
146
  "created_at": now,
92
147
  "name": None,
93
148
  }
@@ -144,22 +199,68 @@ class Bridge:
144
199
  # Strategy 3: box._box.exec(cmd[0], args=cmd[1:])
145
200
  if result is None and hasattr(box, "_box"):
146
201
  try:
147
- exec_obj = await box._box.exec(cmd[0], args=cmd[1:])
148
- if hasattr(exec_obj, "wait"):
149
- result = await exec_obj.wait()
150
- else:
151
- result = exec_obj
202
+ result = await box._box.exec(cmd[0], args=cmd[1:])
152
203
  except Exception as e:
153
204
  errors.append(f"box._box.exec(...): {e}")
154
205
 
155
206
  if result is None:
156
207
  raise RuntimeError(f"All exec strategies failed: {'; '.join(errors)}")
157
208
 
209
+ stdout = ""
210
+ stderr = ""
211
+ exit_code = 0
212
+
213
+ # Execution object (Boxlite runtime API): collect stdout/stderr streams, then wait
214
+ if hasattr(result, "wait") and callable(result.wait):
215
+ async def _collect(stream_fn):
216
+ try:
217
+ buf = bytearray()
218
+ async for chunk in stream_fn():
219
+ if isinstance(chunk, (bytes, bytearray)):
220
+ buf.extend(chunk)
221
+ else:
222
+ buf.extend(str(chunk).encode("utf-8"))
223
+ return buf.decode("utf-8", errors="replace")
224
+ except Exception:
225
+ return ""
226
+
227
+ # Read stdout/stderr concurrently to avoid pipe deadlocks
228
+ tasks = []
229
+ has_stdout = hasattr(result, "stdout") and callable(result.stdout)
230
+ has_stderr = hasattr(result, "stderr") and callable(result.stderr)
231
+ if has_stdout:
232
+ tasks.append(asyncio.create_task(_collect(result.stdout)))
233
+ if has_stderr:
234
+ tasks.append(asyncio.create_task(_collect(result.stderr)))
235
+
236
+ if tasks:
237
+ collected = await asyncio.gather(*tasks)
238
+ idx = 0
239
+ if has_stdout:
240
+ stdout = collected[idx]; idx += 1
241
+ if has_stderr:
242
+ stderr = collected[idx]
243
+
244
+ exec_result = await result.wait()
245
+ exit_code = int(getattr(exec_result, "exit_code",
246
+ getattr(exec_result, "returncode", 0)) or 0)
247
+ else:
248
+ # SimpleBox / legacy: result already has stdout/stderr as attributes
249
+ raw_stdout = getattr(result, "stdout", "")
250
+ raw_stderr = getattr(result, "stderr", "")
251
+ if callable(raw_stdout):
252
+ raw_stdout = raw_stdout()
253
+ if callable(raw_stderr):
254
+ raw_stderr = raw_stderr()
255
+ stdout = str(raw_stdout or "")
256
+ stderr = str(raw_stderr or "")
257
+ exit_code = int(getattr(result, "exit_code",
258
+ getattr(result, "returncode", 0)) or 0)
259
+
158
260
  return {
159
- "stdout": str(getattr(result, "stdout", "") or ""),
160
- "stderr": str(getattr(result, "stderr", "") or ""),
161
- "exit_code": int(getattr(result, "exit_code",
162
- getattr(result, "returncode", 0)) or 0),
261
+ "stdout": stdout,
262
+ "stderr": stderr,
263
+ "exit_code": exit_code,
163
264
  }
164
265
 
165
266
  async def destroy(self, box_id):
@@ -413,7 +514,13 @@ export function createBoxLiteLocalClient(config) {
413
514
  },
414
515
  async exec(boxId, req) {
415
516
  const timeoutMs = (req.timeout_seconds ?? 300) * 1000;
416
- const result = await send({ action: 'exec', box_id: boxId, cmd: req.cmd }, timeoutMs);
517
+ const result = await send({
518
+ action: 'exec',
519
+ box_id: boxId,
520
+ cmd: req.cmd,
521
+ ...(req.working_dir ? { working_dir: req.working_dir } : {}),
522
+ ...(req.timeout_seconds ? { timeout_seconds: req.timeout_seconds } : {}),
523
+ }, timeoutMs);
417
524
  return {
418
525
  stdout: result.stdout ?? '',
419
526
  stderr: result.stderr ?? '',
package/dist/types.d.ts CHANGED
@@ -90,7 +90,9 @@ export interface BoxLiteSnapshot {
90
90
  container_disk_bytes?: number;
91
91
  }
92
92
  export interface BoxLiteCreateParams {
93
- image: string;
93
+ image?: string;
94
+ /** Path to a local OCI layout directory. When set, overrides `image` (no registry pull). */
95
+ rootfs_path?: string;
94
96
  name?: string;
95
97
  cpu?: number;
96
98
  memory_mb?: number;
@@ -99,6 +101,8 @@ export interface BoxLiteCreateParams {
99
101
  env?: Record<string, string>;
100
102
  auto_remove?: boolean;
101
103
  security?: string;
104
+ /** Port mappings [hostPort, guestPort][] for local mode */
105
+ ports?: [number, number][];
102
106
  }
103
107
  export interface BoxLiteTokenResponse {
104
108
  access_token: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sandbank.dev/boxlite",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "BoxLite bare-metal sandbox adapter for Sandbank",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -32,7 +32,7 @@
32
32
  "clean": "rm -rf dist"
33
33
  },
34
34
  "dependencies": {
35
- "@sandbank.dev/core": "^0.2.1"
35
+ "@sandbank.dev/core": "^0.3.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^25.3.0",