@vzn/vx 0.0.16 → 0.0.18
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 +66 -89
- package/index.ts +10 -0
- package/launcher.mjs +10 -11
- package/package.json +19 -5
- package/plugins/local-cache/index.ts +2 -0
- package/plugins/local-executor/index.ts +2 -0
- package/plugins/schedule-history/index.ts +2 -0
- package/src/bin.ts +2 -2
- package/src/cache/archive.ts +557 -0
- package/src/cache/cache.ts +929 -250
- package/src/cache/cas-backend.ts +20 -2
- package/src/cache/chained-cache.ts +202 -0
- package/src/cache/digest.ts +0 -15
- package/src/cache/index.ts +13 -3
- package/src/cache/inputs.ts +445 -41
- package/src/cache/layered-cache.ts +88 -30
- package/src/cache/tar-stream.ts +358 -0
- package/src/cli/cache.ts +36 -10
- package/src/cli/help.ts +167 -128
- package/src/cli/index.ts +74 -43
- package/src/cli/info.ts +30 -0
- package/src/cli/last.ts +140 -0
- package/src/cli/migrate-emit.ts +21 -0
- package/src/cli/migrate-nx.ts +23 -0
- package/src/cli/migrate-scripts.ts +127 -0
- package/src/cli/migrate-turbo.ts +43 -6
- package/src/cli/migrate.ts +119 -33
- package/src/cli/plan-format.ts +58 -3
- package/src/cli/plugin-commands.ts +96 -0
- package/src/cli/prune.ts +291 -0
- package/src/cli/run.ts +272 -80
- package/src/cli/upgrade.ts +7 -6
- package/src/cli/watch.ts +259 -61
- package/src/cli/why.ts +193 -0
- package/src/config.ts +40 -23
- package/src/exec/env.ts +7 -1
- package/src/exec/executor.ts +239 -0
- package/src/exec/index.ts +19 -1
- package/src/exec/runner.ts +116 -29
- package/src/exec/sandbox-runtime.ts +194 -24
- package/src/graph/index.ts +3 -1
- package/src/graph/scheduler.ts +92 -18
- package/src/graph/task-graph.ts +220 -6
- package/src/index.ts +82 -84
- package/src/orchestrator/deferred-outputs.ts +144 -0
- package/src/orchestrator/download-policy.ts +171 -0
- package/src/orchestrator/events.ts +30 -0
- package/src/orchestrator/execute-task.ts +328 -94
- package/src/orchestrator/failure-mode.ts +61 -0
- package/src/orchestrator/framed-output.ts +87 -35
- package/src/orchestrator/history.ts +78 -31
- package/src/orchestrator/index.ts +43 -90
- package/src/orchestrator/local-shortcircuit.ts +22 -0
- package/src/orchestrator/logger.ts +196 -14
- package/src/orchestrator/metrics.ts +57 -1376
- package/src/orchestrator/missing-plugin.ts +9 -0
- package/src/orchestrator/options.ts +22 -4
- package/src/orchestrator/plan.ts +144 -1
- package/src/orchestrator/plugin-host.ts +199 -119
- package/src/orchestrator/plugin.ts +144 -57
- package/src/orchestrator/prepare.ts +220 -69
- package/src/orchestrator/remote-prefetch.ts +12 -8
- package/src/orchestrator/resources.ts +20 -34
- package/src/orchestrator/run-artifacts.ts +41 -16
- package/src/orchestrator/run-context.ts +167 -29
- package/src/orchestrator/run-report.ts +73 -46
- package/src/orchestrator/run.ts +590 -122
- package/src/orchestrator/stable-keys.ts +74 -33
- package/src/orchestrator/status-line.ts +47 -8
- package/src/orchestrator/summary.ts +22 -1
- package/src/orchestrator/tally.ts +78 -35
- package/src/orchestrator/task-hash.ts +105 -11
- package/src/orchestrator/task-log-buffer.ts +291 -0
- package/src/orchestrator/telemetry-host.ts +24 -6
- package/src/orchestrator/telemetry.ts +181 -21
- package/src/orchestrator/upstream.ts +72 -31
- package/src/orchestrator/verify.ts +12 -2
- package/src/plugins/local-cache/index.ts +11 -0
- package/src/plugins/local-executor/index.ts +45 -0
- package/src/plugins/schedule-history/index.ts +109 -0
- package/src/util/edit-distance.ts +21 -0
- package/src/util/errors.ts +15 -1
- package/src/util/index.ts +7 -2
- package/src/util/num.ts +37 -0
- package/src/util/paths.ts +43 -0
- package/src/util/settle.ts +48 -0
- package/src/util/size.ts +5 -1
- package/src/util/tail.ts +66 -0
- package/src/util/timing.ts +63 -0
- package/src/workspace/affected.ts +142 -15
- package/src/workspace/config-cache.ts +304 -0
- package/src/workspace/config-eval.ts +210 -0
- package/src/workspace/config-imports.ts +161 -0
- package/src/workspace/filter.ts +22 -4
- package/src/workspace/fingerprint.ts +16 -1
- package/src/workspace/index.ts +15 -3
- package/src/workspace/lockfile.ts +13 -2
- package/src/workspace/nested-dirs.ts +21 -7
- package/src/workspace/package-graph.ts +23 -20
- package/src/workspace/project-loader.ts +503 -59
- package/src/workspace/workspace.ts +213 -72
- package/src/cache/tar.ts +0 -343
- package/src/cli/backend.ts +0 -23
- package/src/cli/mcp-rpc.ts +0 -292
- package/src/cli/mcp.ts +0 -92
- package/src/orchestrator/devframe-surface.ts +0 -74
- package/src/orchestrator/predict.ts +0 -106
- package/src/orchestrator/protocol.ts +0 -156
- package/src/orchestrator/run-state.ts +0 -145
- package/src/orchestrator/wire-render.ts +0 -92
- package/src/orchestrator/wire.ts +0 -212
package/README.md
CHANGED
|
@@ -3,9 +3,13 @@
|
|
|
3
3
|
**The fastest way to build a monorepo.**
|
|
4
4
|
|
|
5
5
|
vx runs your task graph, remembers every result, and never does the
|
|
6
|
-
same work twice. Fully cached runs finish in milliseconds —
|
|
7
|
-
across
|
|
8
|
-
|
|
6
|
+
same work twice. Fully cached runs finish in milliseconds — 76 ms
|
|
7
|
+
across 46 packages, 559 ms across a 1,090-package graph of 3,270 tasks,
|
|
8
|
+
where Turborepo takes 760 ms and Nx 3.59 s on the identical workspace —
|
|
9
|
+
and a cold build of that graph burns 34 s of CPU in vx, 73 s in Turborepo
|
|
10
|
+
and 114 minutes in Nx.
|
|
11
|
+
Measured, reproducible, on hardware you own
|
|
12
|
+
([benchmarks](docs/benchmarks.md)).
|
|
9
13
|
|
|
10
14
|
One binary. No daemon. No Node. Nothing to babysit.
|
|
11
15
|
|
|
@@ -42,6 +46,7 @@ export default defineProject({
|
|
|
42
46
|
```
|
|
43
47
|
|
|
44
48
|
```sh
|
|
49
|
+
vx init # scaffold vx.workspace.ts + a vx.config.ts per package from scripts
|
|
45
50
|
vx run build # cwd project + its workspace deps
|
|
46
51
|
vx run test --all # every project that declares `test`
|
|
47
52
|
vx run ci --affected # only what changed since origin/HEAD
|
|
@@ -125,23 +130,43 @@ resolution that bridges packages without the task · multi-task runs
|
|
|
125
130
|
with one shared graph · pnpm-style filters and `--affected` ·
|
|
126
131
|
watch mode · `--dry` / `--graph` plans · persistent dev servers ·
|
|
127
132
|
retries, timeouts, `--continue` modes · per-layer cache control
|
|
128
|
-
(`--cache=local:r,remote:`) · `vx
|
|
129
|
-
|
|
130
|
-
`vx
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
133
|
+
(`--cache=local:r,remote:`) · `vx why` explains a re-run from the
|
|
134
|
+
persisted input fingerprints · `vx last` replays a recorded run ·
|
|
135
|
+
`vx prune` cuts a Docker-ready workspace subset · `vx info`,
|
|
136
|
+
`--summarize`, `--profile` Chrome traces, `--report` · `vx cache prune`
|
|
137
|
+
with TTL and size caps · `vx migrate` from turbo.json or an Nx graph.
|
|
138
|
+
|
|
139
|
+
## A pipeline with seams — plugins decide what happens
|
|
140
|
+
|
|
141
|
+
Core is the pipeline: discover projects, evaluate configs, build the
|
|
142
|
+
task graph, derive keys, schedule, execute, cache, observe. Plugins
|
|
143
|
+
declared in `vx.workspace.ts` hook each stage, Vite-style, on one
|
|
144
|
+
`VxPlugin` object:
|
|
145
|
+
|
|
146
|
+
| Stage | Hook | A plugin can… |
|
|
147
|
+
| --------- | -------------------------- | ----------------------------------------------------------- |
|
|
148
|
+
| workspace | `config(ws, ctx)` | edit the workspace config before it is used |
|
|
149
|
+
| project | `project(config, ctx)` | add, remove or rewrite a project's tasks (keyed like yours) |
|
|
150
|
+
| graph | `graph(nodes, ctx)` | add or drop edges, mark tasks requested |
|
|
151
|
+
| key | `key(task, ctx)` | fold extra material into the cache key (named in `vx why`) |
|
|
152
|
+
| schedule | `schedule(nodes, ctx)` | decide which ready task runs first |
|
|
153
|
+
| execute | `executor(ctx)` | decide WHERE a task's command runs (local, a REAPI worker) |
|
|
154
|
+
| store | `cache(ctx)` | decide where artifacts live (local, a shared remote) |
|
|
155
|
+
| observe | `telemetry(ctx)` / `setup` | receive every run record, or the raw event bus |
|
|
156
|
+
| cli | `commands` | add verbs to `vx` |
|
|
157
|
+
|
|
158
|
+
Core applies **no plugin by default** — even its own local executor and
|
|
159
|
+
cache are plugins your workspace declares, which is what makes "replace
|
|
160
|
+
any part" real rather than promised. First-party plugins:
|
|
161
|
+
[`@vzn/vx-reapi`](packages/vx-reapi) (Bazel Remote Execution API —
|
|
162
|
+
remote cache and remote execution against NativeLink, BuildBuddy,
|
|
163
|
+
Buildbarn or bazel-remote), [`@vzn/vx-otel`](packages/vx-otel)
|
|
164
|
+
(OpenTelemetry traces + metrics + logs, zero SDK deps),
|
|
165
|
+
[`@vzn/vx-github`](packages/vx-github) (Actions job summary + Checks
|
|
166
|
+
API), [`@vzn/vx-mcp`](packages/vx-mcp) (`vx mcp` — a read-only Model
|
|
167
|
+
Context Protocol server for AI coding agents, no SDK), and
|
|
168
|
+
`@vzn/vx/plugins/schedule-history` (order by learned critical path). Nothing distributed ships in this repo; the seams are how you
|
|
169
|
+
build it.
|
|
145
170
|
|
|
146
171
|
## How it compares
|
|
147
172
|
|
|
@@ -154,17 +179,13 @@ and the same seams are open to anyone.
|
|
|
154
179
|
| Daemon required for speed | **No** | Optional | Yes |
|
|
155
180
|
| Per-task sandbox | **Yes** — kernel-level, opt-in | No | No |
|
|
156
181
|
| Provable cache safety | **Yes** — `--verify` (determinism) + `--verify=inputs` (completeness) | No | No |
|
|
157
|
-
|
|
|
158
|
-
| Plugin API | **Yes** — backend / cache / telemetry seams | No | Yes (TS-tied) |
|
|
159
|
-
| Predictive scheduling | **Yes** (opt-in: `predictive: true`) | No | No |
|
|
182
|
+
| Plugin API | **Yes** — executor / cache / telemetry seams | No | Yes (TS-tied) |
|
|
160
183
|
| OTel CI/CD spans | **Yes** — `otel()` plugin, zero OTel-SDK deps | No | Paid |
|
|
161
|
-
| Self-hosted platform² | **Yes** — dashboard, distributed CI, remote cache; Docker compose | Vercel-only cache | Paid (Nx Cloud) |
|
|
162
184
|
| Install | **Single binary** — npm or 1 curl line, no Node/Bun needed | npm + Node | npm + Node |
|
|
163
185
|
|
|
164
186
|
¹ Wall-clock, direct binaries, same machine and workspace — full
|
|
165
187
|
methodology and more scenarios in
|
|
166
|
-
[`docs/benchmarks.md`](docs/benchmarks.md).
|
|
167
|
-
OSS — see [vx Cloud](#vx-cloud).
|
|
188
|
+
[`docs/benchmarks.md`](docs/benchmarks.md).
|
|
168
189
|
|
|
169
190
|
## Switching from another runner
|
|
170
191
|
|
|
@@ -214,50 +235,6 @@ Differences to know:
|
|
|
214
235
|
|
|
215
236
|
Side-by-side feature matrix + every known gap: [`docs/comparison.md`](./docs/comparison.md).
|
|
216
237
|
|
|
217
|
-
## vx Cloud
|
|
218
|
-
|
|
219
|
-
An **optional, self-hosted CI platform** — the first-party service you
|
|
220
|
-
run yourself. It is a fully independent app (accounts, roles,
|
|
221
|
-
organizations, teams, multiple workspaces), with **Postgres** as the
|
|
222
|
-
system of record and an **S3-compatible bucket** for artifacts; the
|
|
223
|
-
controller keeps zero artifact bytes at rest. Core `vx` never depends
|
|
224
|
-
on it — it connects to a deployment through the plugin seams above.
|
|
225
|
-
|
|
226
|
-
What a connected platform adds:
|
|
227
|
-
|
|
228
|
-
- **Dashboard.** Runs, flamegraphs, a live run cockpit with the task
|
|
229
|
-
DAG, per-task logs + artifacts, cache-key diffs ("why did this
|
|
230
|
-
re-run?"), and flaky-task detection with the concrete fix.
|
|
231
|
-
- **Remote cache.** The vx-native `/v1/cache` wire, tenant-partitioned
|
|
232
|
-
per org/workspace, with **trusted / untrusted tiers derived from the
|
|
233
|
-
token** — a fork-PR artifact can never feed a trusted build — and an
|
|
234
|
-
always-on integrity digest the client verifies.
|
|
235
|
-
- **Distributed CI (DTE).** Agents form a session-keyed pool; a
|
|
236
|
-
`vx run` fans tasks out across same-commit agents, outputs propagate
|
|
237
|
-
through the shared artifact store, and a standing pool multiplexes
|
|
238
|
-
concurrent runs with fair scheduling.
|
|
239
|
-
- **MCP over the platform.** `POST /mcp` (Postgres-backed, behind the
|
|
240
|
-
token) exposes the analytics as typed tools for AI agents — alongside
|
|
241
|
-
the core `vx mcp` stdio server that reads your local cache.
|
|
242
|
-
|
|
243
|
-
Deploy the stack (app + Postgres + object storage) with Docker
|
|
244
|
-
Compose, then connect any workspace with one URL and a minted token:
|
|
245
|
-
|
|
246
|
-
```sh
|
|
247
|
-
# Deploy — open the URL, register the first admin, mint a CI token under Admin → Tokens:
|
|
248
|
-
VX_CLOUD_SECRET=$(openssl rand -hex 32) \
|
|
249
|
-
docker compose -f packages/cloud/deploy/docker-compose.yml up
|
|
250
|
-
|
|
251
|
-
# Connect a workspace (remote cache + analytics + distribution):
|
|
252
|
-
vx-cloud connect https://ci.acme.dev --token vxc_…
|
|
253
|
-
# …or set VX_CLOUD_URL + VX_CLOUD_TOKEN in the environment.
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
Install the platform CLI with `npm i -g @vzn/vx-cloud` (a standalone
|
|
257
|
-
binary, or the `ghcr.io/vznjs/vx-cloud` image). Full setup, RBAC,
|
|
258
|
-
distributed CI, and the wire protocol live in the **vx Cloud** section
|
|
259
|
-
of the [documentation site](https://vznjs.github.io/vx/).
|
|
260
|
-
|
|
261
238
|
## Architecture (one paragraph)
|
|
262
239
|
|
|
263
240
|
`bin.ts → cli/index.ts` dispatches subcommands.
|
|
@@ -290,43 +267,43 @@ Full technical docs live under [`docs/`](./docs/) and on the
|
|
|
290
267
|
- [`docs/cli.md`](./docs/cli.md) — every flag
|
|
291
268
|
- [`docs/comparison.md`](./docs/comparison.md) — Turbo / Nx / vite-task feature matrix
|
|
292
269
|
- [`docs/modules/`](./docs/modules/) — one reference page per source module
|
|
293
|
-
- The **vx Cloud** section of the [docs site](https://vznjs.github.io/vx/) — deploy, RBAC, dashboard, distributed CI, wire protocol
|
|
294
270
|
|
|
295
|
-
The
|
|
296
|
-
|
|
271
|
+
The design record lives under [`docs/design/`](./docs/design/); the
|
|
272
|
+
maintainers' handoff is [`docs/STATUS.md`](./docs/STATUS.md).
|
|
297
273
|
|
|
298
274
|
## Status
|
|
299
275
|
|
|
300
276
|
**Pre-alpha.** The schema is settling; we bump `CACHE_VERSION` rather
|
|
301
|
-
than maintain back-compat.
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
277
|
+
than maintain back-compat. **~2,500 core tests plus the package suites; CI green on every commit**;
|
|
278
|
+
the project dogfoods itself (`vx run ci`). Published on npm:
|
|
279
|
+
[`@vzn/vx`](https://www.npmjs.com/package/@vzn/vx) (a prebuilt standalone
|
|
280
|
+
binary).
|
|
305
281
|
|
|
306
282
|
Production readiness for the **core task runner**: the semantics are
|
|
307
283
|
solid; it is dogfooded continuously. The main operational rough edge
|
|
308
284
|
is Windows (unsupported).
|
|
309
285
|
|
|
310
|
-
| Surface
|
|
311
|
-
|
|
|
312
|
-
| Core task runner + caching
|
|
313
|
-
| `vx run --verify` (provable cache correctness)
|
|
314
|
-
| `
|
|
315
|
-
|
|
|
316
|
-
|
|
|
317
|
-
| OTel export (`@vzn/vx-otel`)
|
|
318
|
-
|
|
|
286
|
+
| Surface | Maturity | Notes |
|
|
287
|
+
| ------------------------------------------------ | -------------------- | ---------------------------------------------------------------------------- |
|
|
288
|
+
| Core task runner + caching | **production-ready** | dogfooded continuously; ~2,500 core tests + the package suites, green |
|
|
289
|
+
| `vx run --verify` (provable cache correctness) | **shippable** | determinism + input-completeness proofs; CI-gate recipe in docs |
|
|
290
|
+
| Plugin pipeline (9 hooks, `commands` included) | **shippable** | crash-isolated, re-validated; core's own executor + cache are plugins |
|
|
291
|
+
| `vx init` / `vx migrate` (scripts, Turbo, Nx) | **shippable** | one config per package, TODOs where a source cannot say |
|
|
292
|
+
| REAPI remote cache + execution (`@vzn/vx-reapi`) | **shippable** | Bazel AC + CAS + Execute; NativeLink / BuildBuddy / Buildbarn / bazel-remote |
|
|
293
|
+
| OTel export (`@vzn/vx-otel`) | **shippable** | OTLP traces + metrics + logs, zero SDK deps |
|
|
294
|
+
| GitHub Actions (`@vzn/vx-github`) | **shippable** | job summary + Checks API run |
|
|
295
|
+
| MCP server (`@vzn/vx-mcp`) | **shippable** | `vx mcp` — read-only tools for AI agents, no SDK |
|
|
319
296
|
|
|
320
297
|
## Development
|
|
321
298
|
|
|
322
299
|
```sh
|
|
323
300
|
git clone https://github.com/vznjs/vx && cd vx
|
|
324
301
|
bun install
|
|
325
|
-
bun src/bin.ts run ci
|
|
326
|
-
bun src/bin.ts run build
|
|
302
|
+
bun packages/vx/src/bin.ts run ci --all # lint + test + docs build, every package
|
|
303
|
+
bun packages/vx/src/bin.ts run build --filter @vzn/vx # cross-target binaries → packages/vx/dist/
|
|
327
304
|
```
|
|
328
305
|
|
|
329
|
-
vx is self-hosted: every dev task routes through `bun src/bin.ts run <task>` per
|
|
306
|
+
vx is self-hosted: every dev task routes through `bun packages/vx/src/bin.ts run <task>` per each package's own `vx.config.ts`. No `package.json` scripts; CI invokes vx directly. Start with [`docs/STATUS.md`](docs/STATUS.md) — the living handoff — and `CLAUDE.md`.
|
|
330
307
|
|
|
331
308
|
## License
|
|
332
309
|
|
package/index.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Root entry shim. Bun 1.4.0's `--compile` binaries resolve an on-disk
|
|
2
|
+
// package by directory convention (`<pkg>/index.ts`, `<pkg>/<subpath>/index.ts`)
|
|
3
|
+
// and ignore package.json `exports` / `main` (measured 2026-09-03: an
|
|
4
|
+
// entry of `./src/index.ts` resolved to the root `index.ts` regardless of the
|
|
5
|
+
// manifest, and a package with no root file was "not found"). Without this
|
|
6
|
+
// file every `import … from '@vzn/vx'` in a workspace config fails under the
|
|
7
|
+
// standalone binary. The exports map still wins everywhere else and points
|
|
8
|
+
// at the same module, so this is one extra hop for the binary and nothing
|
|
9
|
+
// for anyone else.
|
|
10
|
+
export * from './src/index.js'
|
package/launcher.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// npm launcher for a vx command — the entry a published package's `bin` points
|
|
3
3
|
// at. It execs the prebuilt standalone binary shipped as a per-platform
|
|
4
|
-
// optionalDependency, so end users get the command WITHOUT installing Bun.
|
|
5
|
-
//
|
|
6
|
-
//
|
|
4
|
+
// optionalDependency, so end users get the command WITHOUT installing Bun.
|
|
5
|
+
// Everything is derived from this package's OWN name, read from the
|
|
6
|
+
// package.json sitting beside this file, so any package built by
|
|
7
|
+
// scripts/build-npm.ts can carry it:
|
|
7
8
|
//
|
|
8
|
-
// @vzn/vx
|
|
9
|
-
// @vzn/vx-cloud → platform pkg @vzn/vx-cloud-<key>, binary `vx-cloud`
|
|
9
|
+
// @vzn/vx → platform pkg @vzn/vx-<key>, binary `vx`
|
|
10
10
|
//
|
|
11
11
|
// Resolution order:
|
|
12
12
|
// 1. the matching <name>-<platform> optionalDependency's binary (the normal
|
|
@@ -26,11 +26,10 @@ const require = createRequire(import.meta.url)
|
|
|
26
26
|
const here = dirname(fileURLToPath(import.meta.url))
|
|
27
27
|
const pkg = require('./package.json')
|
|
28
28
|
|
|
29
|
-
// Derive the platform-package prefix + binary basename from this package's
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
// entry: `src/bin.ts` for vx, `src/cli/bin.ts` for vx-cloud.
|
|
29
|
+
// Derive the platform-package prefix + binary basename from this package's
|
|
30
|
+
// name. `base` is the unscoped name — the command AND the binary filename
|
|
31
|
+
// inside the platform package. `vxSourceEntry` (a package.json field) is the
|
|
32
|
+
// source-mode entry, `src/bin.ts` by default.
|
|
34
33
|
const name = pkg.name
|
|
35
34
|
const base = name.replace(/^@[^/]+\//, '')
|
|
36
35
|
const sourceEntry = pkg.vxSourceEntry ?? 'src/bin.ts'
|
|
@@ -86,7 +85,7 @@ process.stderr.write(
|
|
|
86
85
|
`${base}: no prebuilt binary for ${key}.\n` +
|
|
87
86
|
` Supported platforms: ${supported}.\n` +
|
|
88
87
|
` If your platform should be supported, reinstall so npm fetches the\n` +
|
|
89
|
-
` matching ${name}-${key} optionalDependency, or install Bun (>=1.
|
|
88
|
+
` matching ${name}-${key} optionalDependency, or install Bun (>=1.4) to\n` +
|
|
90
89
|
` run ${base} from source.\n`,
|
|
91
90
|
)
|
|
92
91
|
process.exit(1)
|
package/package.json
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vzn/vx",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.18",
|
|
4
4
|
"description": "An open, extensible monorepo task runner.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
8
8
|
"types": "./src/index.ts",
|
|
9
9
|
"import": "./src/index.ts"
|
|
10
|
+
},
|
|
11
|
+
"./plugins/local-executor": {
|
|
12
|
+
"types": "./src/plugins/local-executor/index.ts",
|
|
13
|
+
"import": "./src/plugins/local-executor/index.ts"
|
|
14
|
+
},
|
|
15
|
+
"./plugins/local-cache": {
|
|
16
|
+
"types": "./src/plugins/local-cache/index.ts",
|
|
17
|
+
"import": "./src/plugins/local-cache/index.ts"
|
|
18
|
+
},
|
|
19
|
+
"./plugins/schedule-history": {
|
|
20
|
+
"types": "./src/plugins/schedule-history/index.ts",
|
|
21
|
+
"import": "./src/plugins/schedule-history/index.ts"
|
|
10
22
|
}
|
|
11
23
|
},
|
|
12
24
|
"types": "./src/index.ts",
|
|
@@ -17,15 +29,17 @@
|
|
|
17
29
|
"node": ">=18"
|
|
18
30
|
},
|
|
19
31
|
"optionalDependencies": {
|
|
20
|
-
"@vzn/vx-linux-x64": "0.0.
|
|
21
|
-
"@vzn/vx-linux-arm64": "0.0.
|
|
22
|
-
"@vzn/vx-darwin-x64": "0.0.
|
|
23
|
-
"@vzn/vx-darwin-arm64": "0.0.
|
|
32
|
+
"@vzn/vx-linux-x64": "0.0.18",
|
|
33
|
+
"@vzn/vx-linux-arm64": "0.0.18",
|
|
34
|
+
"@vzn/vx-darwin-x64": "0.0.18",
|
|
35
|
+
"@vzn/vx-darwin-arm64": "0.0.18"
|
|
24
36
|
},
|
|
25
37
|
"dependencies": {
|
|
26
38
|
"@anthropic-ai/sandbox-runtime": "^0.0.56"
|
|
27
39
|
},
|
|
28
40
|
"files": [
|
|
41
|
+
"index.ts",
|
|
42
|
+
"plugins",
|
|
29
43
|
"src",
|
|
30
44
|
"launcher.mjs",
|
|
31
45
|
"README.md",
|
package/src/bin.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
import { run } from './cli/index.js'
|
|
3
|
-
import {
|
|
3
|
+
import { isUserError } from './util/index.js'
|
|
4
4
|
|
|
5
5
|
// Wrapped in an explicit async main so `bun build --compile` accepts
|
|
6
6
|
// the file. The compile target doesn't allow top-level await.
|
|
@@ -12,7 +12,7 @@ async function main(): Promise<void> {
|
|
|
12
12
|
// print the message only; the stack is noise the user can't act
|
|
13
13
|
// on. Everything else gets the full stack so internal bugs are
|
|
14
14
|
// debuggable.
|
|
15
|
-
if (err
|
|
15
|
+
if (isUserError(err)) {
|
|
16
16
|
process.stderr.write(`vx: ${err.message}\n`)
|
|
17
17
|
} else {
|
|
18
18
|
const message = err instanceof Error ? (err.stack ?? err.message) : String(err)
|