@vzn/vx 0.0.392 → 0.0.394

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vzn/vx",
3
- "version": "0.0.392",
3
+ "version": "0.0.394",
4
4
  "description": "The fastest task runner and build cache for JavaScript monorepos.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -21,10 +21,10 @@
21
21
  "node": ">=18"
22
22
  },
23
23
  "optionalDependencies": {
24
- "@vzn/vx-linux-x64": "0.0.392",
25
- "@vzn/vx-linux-arm64": "0.0.392",
26
- "@vzn/vx-darwin-x64": "0.0.392",
27
- "@vzn/vx-darwin-arm64": "0.0.392"
24
+ "@vzn/vx-linux-x64": "0.0.394",
25
+ "@vzn/vx-linux-arm64": "0.0.394",
26
+ "@vzn/vx-darwin-x64": "0.0.394",
27
+ "@vzn/vx-darwin-arm64": "0.0.394"
28
28
  },
29
29
  "dependencies": {
30
30
  "@anthropic-ai/sandbox-runtime": "^0.0.76"
@@ -420,6 +420,23 @@ async function executePersistentTask(args: ExecuteArgs): Promise<TaskOutcome> {
420
420
  // reader looks for why a task failed, and a run with a custom logger
421
421
  // (an embedder, the MCP server) never saw a bare stderr write at all.
422
422
  log.taskStderr(node, `\n[vx] ${node.id}: persistent task failed to become ready: ${message}\n`)
423
+ // A server is never traced, so the sandbox's refusals reach no report:
424
+ // a dev server that died on a file outside its grants read only as the
425
+ // tool's own "not found" (2026-10-03). Said for a sandboxed server that
426
+ // exited failing, which is the shape a refusal takes.
427
+ if (
428
+ step.sandbox !== undefined &&
429
+ err instanceof PersistentReadyError &&
430
+ err.reason === 'exited' &&
431
+ err.exitCode !== 0
432
+ ) {
433
+ log.taskStderr(
434
+ node,
435
+ `[vx] ${node.id} ran in the sandbox, which reports nothing for a server: a path outside ` +
436
+ `its grants reads as missing (ENOENT), a refused write as read-only (EROFS). Check ` +
437
+ `exec.sandbox.allow, or run the command as a one-shot sandboxed task to see what it was refused.\n`,
438
+ )
439
+ }
423
440
  // The server is dead or being torn down, so the sweep on its exit may
424
441
  // already be running: ask the shared one rather than starting a second.
425
442
  for (const p of await sweptUntouched()) {