@vzn/vx 0.0.635 → 0.0.637

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 (141) hide show
  1. package/README.md +47 -19
  2. package/docs/caching.md +222 -210
  3. package/docs/cli.md +699 -664
  4. package/docs/execution.md +67 -75
  5. package/docs/features.md +44 -40
  6. package/docs/patterns.md +31 -32
  7. package/docs/schema.md +418 -202
  8. package/docs/security.md +76 -39
  9. package/launcher.sh +43 -0
  10. package/package.json +5 -5
  11. package/schemas/cache.json +41 -19
  12. package/schemas/info.json +23 -11
  13. package/schemas/last.json +48 -2
  14. package/schemas/lock.json +1 -1
  15. package/schemas/plan.json +2 -2
  16. package/schemas/show.json +13 -4
  17. package/schemas/why.json +15 -1
  18. package/skills/vx/SKILL.md +16 -12
  19. package/src/bin.ts +17 -2
  20. package/src/cache/archive.ts +11 -0
  21. package/src/cache/cache.ts +105 -53
  22. package/src/cache/git-inputs.ts +277 -63
  23. package/src/cache/index.ts +7 -1
  24. package/src/cache/inputs.ts +125 -35
  25. package/src/cache/key-fold.ts +8 -7
  26. package/src/cache/layer.ts +8 -17
  27. package/src/cache/layered-cache.ts +16 -102
  28. package/src/cache/policy.ts +25 -29
  29. package/src/cache/run-history.ts +36 -14
  30. package/src/cache/schema.ts +21 -23
  31. package/src/cache/scoped-cache.ts +224 -0
  32. package/src/cli/cache.ts +150 -28
  33. package/src/cli/completions.ts +2 -2
  34. package/src/cli/core-alias.ts +1 -1
  35. package/src/cli/foreign-flags.ts +13 -12
  36. package/src/cli/help.ts +94 -61
  37. package/src/cli/index.ts +42 -13
  38. package/src/cli/info.ts +38 -23
  39. package/src/cli/init.ts +115 -406
  40. package/src/cli/last.ts +145 -4
  41. package/src/cli/lock.ts +333 -111
  42. package/src/cli/plan-format.ts +2 -2
  43. package/src/cli/plugin-commands.ts +5 -9
  44. package/src/cli/plugin-templates.ts +10 -10
  45. package/src/cli/run.ts +123 -144
  46. package/src/cli/select.ts +33 -39
  47. package/src/cli/show.ts +17 -19
  48. package/src/cli/task-verb.ts +2 -9
  49. package/src/cli/upgrade.ts +402 -145
  50. package/src/cli/watch-cycle.ts +9 -2
  51. package/src/cli/watch-filter.ts +33 -60
  52. package/src/cli/watch-fs.ts +29 -16
  53. package/src/cli/watch-judge.ts +12 -3
  54. package/src/cli/watch-set.ts +16 -42
  55. package/src/cli/watch.ts +188 -215
  56. package/src/cli/why.ts +28 -17
  57. package/src/cli/workspace-config.ts +31 -68
  58. package/src/config.ts +191 -71
  59. package/src/exec/env.ts +1 -31
  60. package/src/exec/executor.ts +1 -5
  61. package/src/exec/kill-tree.ts +2 -1
  62. package/src/exec/sandbox-runtime.ts +12 -1
  63. package/src/exec/sandbox-violations.ts +9 -1
  64. package/src/graph/dependency-spec.ts +1 -1
  65. package/src/graph/index.ts +1 -0
  66. package/src/graph/priorities.ts +1 -1
  67. package/src/graph/scheduler.ts +19 -7
  68. package/src/graph/task-graph.ts +44 -20
  69. package/src/handoff.ts +169 -0
  70. package/src/index.ts +25 -57
  71. package/src/orchestrator/affected-tasks.ts +7 -5
  72. package/src/orchestrator/command-windows.ts +44 -0
  73. package/src/orchestrator/deferred-outputs.ts +12 -10
  74. package/src/orchestrator/doctor.ts +98 -110
  75. package/src/orchestrator/download-policy.ts +3 -3
  76. package/src/orchestrator/events.ts +19 -3
  77. package/src/orchestrator/excluded-keys.ts +0 -2
  78. package/src/orchestrator/execute-task.ts +192 -70
  79. package/src/orchestrator/fingerprint-watch.ts +18 -15
  80. package/src/orchestrator/forecast.ts +10 -2
  81. package/src/orchestrator/framed-output.ts +8 -3
  82. package/src/orchestrator/graph-stage.ts +5 -5
  83. package/src/orchestrator/history.ts +70 -30
  84. package/src/orchestrator/hit-restore.ts +15 -3
  85. package/src/orchestrator/index.ts +18 -4
  86. package/src/orchestrator/local-shortcircuit.ts +2 -1
  87. package/src/orchestrator/lockfile-claim.ts +79 -20
  88. package/src/orchestrator/logger.ts +71 -39
  89. package/src/orchestrator/metrics.ts +71 -6
  90. package/src/orchestrator/miss-save.ts +3 -0
  91. package/src/orchestrator/options.ts +43 -28
  92. package/src/orchestrator/output-host.ts +72 -0
  93. package/src/orchestrator/plan.ts +6 -8
  94. package/src/orchestrator/plugin-host.ts +87 -63
  95. package/src/orchestrator/plugin.ts +94 -60
  96. package/src/orchestrator/prepare.ts +114 -73
  97. package/src/orchestrator/projects.ts +102 -99
  98. package/src/orchestrator/remote-prefetch.ts +2 -1
  99. package/src/orchestrator/run-context.ts +25 -6
  100. package/src/orchestrator/run-failures.ts +17 -8
  101. package/src/orchestrator/run-lock.ts +1 -1
  102. package/src/orchestrator/run-report.ts +9 -9
  103. package/src/orchestrator/run-settings.ts +48 -0
  104. package/src/orchestrator/run.ts +127 -88
  105. package/src/orchestrator/sandbox-fix.ts +39 -20
  106. package/src/orchestrator/sandbox-request.ts +84 -13
  107. package/src/orchestrator/signals.ts +1 -1
  108. package/src/orchestrator/stable-keys.ts +13 -11
  109. package/src/orchestrator/status-line.ts +48 -6
  110. package/src/orchestrator/summary.ts +46 -62
  111. package/src/orchestrator/task-hash.ts +12 -83
  112. package/src/orchestrator/telemetry.ts +3 -3
  113. package/src/settings.ts +417 -0
  114. package/src/util/errors.ts +1 -1
  115. package/src/util/essential-env.ts +31 -0
  116. package/src/util/hide-env.ts +107 -0
  117. package/src/util/index.ts +8 -2
  118. package/src/util/paths.ts +10 -0
  119. package/src/util/settle.ts +49 -30
  120. package/src/util/size.ts +23 -4
  121. package/src/util/timing.ts +3 -2
  122. package/src/util/ulid.ts +1 -1
  123. package/src/util/verbs.ts +0 -15
  124. package/src/workspace/affected.ts +77 -222
  125. package/src/workspace/config-eval.ts +15 -20
  126. package/src/workspace/config-imports.ts +78 -3
  127. package/src/workspace/config-schema.ts +251 -241
  128. package/src/workspace/dependency-rules.ts +57 -0
  129. package/src/workspace/filter.ts +2 -2
  130. package/src/workspace/fingerprint.ts +11 -121
  131. package/src/workspace/index.ts +22 -27
  132. package/src/workspace/load-reads.ts +4 -4
  133. package/src/workspace/lockfile.ts +96 -140
  134. package/src/workspace/migration.ts +242 -146
  135. package/src/workspace/package-graph.ts +30 -216
  136. package/src/workspace/project-loader.ts +80 -285
  137. package/src/workspace/repo-id.ts +2 -1
  138. package/src/workspace/workspace.ts +362 -831
  139. package/src/cache/config-evals.ts +0 -130
  140. package/src/workspace/config-cache.ts +0 -661
  141. package/src/workspace/migrate-scripts.ts +0 -1121
package/docs/patterns.md CHANGED
@@ -27,24 +27,25 @@ restore. Everything else lines up with Turbo or Nx by design.
27
27
 
28
28
  ### Cache key composition
29
29
 
30
- The set of bytes fed into the hash mirrors Turbo's key recipe with one
31
- Nx-borrowed extension.
32
-
33
- | Component | Turbo | Nx | vx | vx source |
34
- | -------------------------------------- | ------------ | ---------------------- | ---------- | --------------------------------------------- |
35
- | Task identity (`project#task`) | yes | yes | yes | `src/cache/layer.ts` (`CacheKeyInput.taskId`) |
36
- | Resolved command + env declarations | yes | yes | yes | `src/cache/layer.ts` (`taskConfigHash`) |
37
- | Declared input file contents | yes | yes | yes | `src/cache/layer.ts` (`inputFiles`) |
38
- | Declared env-var **values** at runtime | yes | yes | yes | `src/cache/layer.ts` (`envValues`) |
39
- | Upstream task hashes (cascade) | yes | yes | yes | `src/cache/layer.ts` (`upstreamHashes`) |
40
- | Workspace lockfile fingerprint | yes | yes | yes | `src/cache/layer.ts` (`workspaceFingerprint`) |
41
- | Forwarded CLI args (after `--`) | yes | yes | yes | `src/cache/layer.ts` (`forwardArgs`) |
42
- | Project `package.json` bytes (direct) | via lockfile | `externalDependencies` | **direct** | `src/cache/layer.ts` ("Turbo / Nx parity") |
43
-
44
- The `package.json` fold is the Nx-borrowed move (Turbo gets it
45
- transitively through the lockfile; Nx's `externalDependencies` does it
46
- explicitly). We fold the bytes directly so narrow `cache.inputs.files`
47
- like `['src/**']` doesn't miss a `package.json` dep bump.
30
+ The set of bytes fed into the hash mirrors Turbo's key recipe; the
31
+ package-manager parts come from a plugin.
32
+
33
+ | Component | Turbo | Nx | vx | vx source |
34
+ | -------------------------------------- | ------------ | ---------------------- | ------ | --------------------------------------------- |
35
+ | Task identity (`project#task`) | yes | yes | yes | `src/cache/layer.ts` (`CacheKeyInput.taskId`) |
36
+ | Resolved command + env declarations | yes | yes | yes | `src/cache/layer.ts` (`taskConfigHash`) |
37
+ | Declared input file contents | yes | yes | yes | `src/cache/layer.ts` (`inputFiles`) |
38
+ | Declared env-var **values** at runtime | yes | yes | yes | `src/cache/layer.ts` (`envValues`) |
39
+ | Upstream task hashes (cascade) | yes | yes | yes | `src/cache/layer.ts` (`upstreamHashes`) |
40
+ | Workspace lockfile | yes | yes | plugin | `@vzn/vx-lockfile` (`VxPlugin.fingerprint`) |
41
+ | Forwarded CLI args (after `--`) | yes | yes | yes | `src/cache/layer.ts` (`forwardArgs`) |
42
+ | Project `package.json` bytes | via lockfile | `externalDependencies` | plugin | `@vzn/vx-lockfile` (an input file) |
43
+
44
+ Core keys no package file (2026-10-14): the lockfile and each
45
+ project's `package.json` key a task through `@vzn/vx-lockfile`, which
46
+ claims the lockfile and adds `package.json` to every cached task's
47
+ inputs, so narrow `cache.inputs.files` like `['src/**']` doesn't miss a
48
+ `package.json` dep bump.
48
49
 
49
50
  The two **divergences** from Turbo's recipe — TypeScript-resolved
50
51
  config hash and per-task forwarded-args fold — are documented in
@@ -91,12 +92,12 @@ parser's docblock marks them (`src/graph/dependency-spec.ts`).
91
92
 
92
93
  ### Workspace discovery
93
94
 
94
- | Capability | Source | vx source |
95
- | ----------------------------------------------------- | ------------ | -------------------------------- |
96
- | Read `pnpm-workspace.yaml` | pnpm + Turbo | `src/workspace/workspace.ts` |
97
- | Read `package.json` `workspaces` (npm/yarn/bun) | Turbo | `src/workspace/workspace.ts` |
98
- | Build package-dep graph from workspace `dependencies` | Turbo + Nx | `src/workspace/package-graph.ts` |
99
- | Lockfile fingerprint at workspace level | Turbo + Nx | `src/workspace/fingerprint.ts` |
95
+ | Capability | Source | vx source |
96
+ | ----------------------------------------------------- | ------------ | --------------------------------- |
97
+ | Read `pnpm-workspace.yaml` (adoption) | pnpm + Turbo | `@vzn/vx-migrate`'s `packages.ts` |
98
+ | Read `package.json` `workspaces` (adoption) | Turbo | `@vzn/vx-migrate`'s `packages.ts` |
99
+ | Build package-dep graph from workspace `dependencies` | Turbo + Nx | `src/workspace/package-graph.ts` |
100
+ | Lockfile fingerprint at workspace level | Turbo + Nx | `src/workspace/fingerprint.ts` |
100
101
 
101
102
  ### Cache topology
102
103
 
@@ -140,7 +141,7 @@ Turbo-aware cache server can transit our blobs unchanged.
140
141
  | Independent siblings continue past failure | Turbo `--continue=dependencies-successful` | `src/graph/scheduler.ts` |
141
142
  | Persistent / long-running tasks (dev servers) | Turbo `persistent`, Nx `continuous` | `src/exec/runner.ts` (`runPersistent`) + `src/orchestrator/execute-task.ts` |
142
143
  | Project-local `node_modules/.bin` on PATH | Turbo + pnpm | `src/exec/env.ts` (`binPaths`) |
143
- | Implicit project-`package.json` invalidation | Turbo (via lockfile) + Nx (`externalDependencies`) | `src/orchestrator/task-hash.ts` ("Matches Turbo and Nx") |
144
+ | Project-`package.json` invalidation, by a plugin | Turbo (via lockfile) + Nx (`externalDependencies`) | `@vzn/vx-lockfile` (its `project` stage lists it as an input) |
144
145
 
145
146
  ### Output handling
146
147
 
@@ -183,17 +184,15 @@ Sharing the patterns doesn't mean sharing the overhead. On the
183
184
  476-package / 1,428-node synthetic workspace
184
185
  (`packages/vx-bench/compare.ts 20 25 1`, 2026-09-02):
185
186
 
186
- | Runner | Warm (no restore) | Warm (restore) |
187
- | ------ | ----------------------- | ----------------------- |
188
- | **vx** | **297 ms** | **416 ms** |
189
- | Turbo | 342 ms (vx 15% faster) | 612 ms (vx 47% faster) |
190
- | Nx | 1.38 s (vx 4.6× faster) | 1.33 s (vx 3.2× faster) |
187
+ | Runner | Warm (no restore) | Warm (restore) |
188
+ | ------ | ----------------- | -------------- |
189
+ | **vx** | **297 ms** | **416 ms** |
190
+ | Turbo | 342 ms | 612 ms |
191
+ | Nx | 1.38 s | 1.33 s |
191
192
 
192
193
  A cached run is all runner overhead. Cold builds are compared by the
193
194
  time the runner adds, on [`benchmarks.md`](./benchmarks.md).
194
195
 
195
- vx N% faster: that tool takes N% longer than vx; N× faster: N times as long.
196
-
197
196
  Full breakdown + methodology in [`benchmarks.md`](./benchmarks.md).
198
197
 
199
198
  ## Where the lineage diverges