@visulima/task-runner 1.0.0-alpha.1 → 1.0.0-alpha.11

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 (140) hide show
  1. package/CHANGELOG.md +213 -0
  2. package/README.md +196 -52
  3. package/dist/index.d.ts +3200 -34
  4. package/dist/index.js +1 -20
  5. package/dist/packem_chunks/index.js +11 -0
  6. package/dist/packem_shared/Cache-C540ZPYk.js +2 -0
  7. package/dist/packem_shared/CompositeLifeCycle-D0zWvAXJ.js +1 -0
  8. package/dist/packem_shared/FileAccessTracker-DSNf03JW.js +47 -0
  9. package/dist/packem_shared/FingerprintManager-CYW2EwLc.js +2 -0
  10. package/dist/packem_shared/HttpRemoteCache-Ch-_9ejF.js +1 -0
  11. package/dist/packem_shared/INPUT_URI_SCHEMES-Csrd0tlg.js +1 -0
  12. package/dist/packem_shared/IncrementalFileHasher-CdLXVB5F.js +1 -0
  13. package/dist/packem_shared/LogReporter-BUPWiXAq.js +13 -0
  14. package/dist/packem_shared/ReapiRemoteCache-B3uQuVqP.js +251 -0
  15. package/dist/packem_shared/TaskOrchestrator-C-I6WsBx.js +2 -0
  16. package/dist/packem_shared/TerminalBuffer-BtZy7TpT.js +3 -0
  17. package/dist/packem_shared/TrackedTaskExecutor-D3-LNT_d.js +2 -0
  18. package/dist/packem_shared/V2_ROOT-injxWBrl.js +1 -0
  19. package/dist/packem_shared/actionDigestForTaskHash-BOL4fZ9v.js +1 -0
  20. package/dist/packem_shared/archive-CDfGy5Lm.js +1 -0
  21. package/dist/packem_shared/buildForwardDependencyMap-w1FVPFdv.js +3 -0
  22. package/dist/packem_shared/collectFiles-W4bnBRpb.js +1 -0
  23. package/dist/packem_shared/computeTaskHash-DtCdMJFf.js +1 -0
  24. package/dist/packem_shared/containsBlob-DBWgvkM_.js +1 -0
  25. package/dist/packem_shared/createInputHandler-CkDCpPYy.js +1 -0
  26. package/dist/packem_shared/createTaskGraph-CEYYI-DL.js +1 -0
  27. package/dist/packem_shared/defaultTaskRunner-CARb5zK7.js +2 -0
  28. package/dist/packem_shared/detectFrameworks-WVZJOPgN.js +1 -0
  29. package/dist/packem_shared/detectScriptShell-CaTDk5cW.js +1 -0
  30. package/dist/packem_shared/digestBuffer-g11aCaDx.js +1 -0
  31. package/dist/packem_shared/enforceProjectConstraints-dNc1SwRi.js +1 -0
  32. package/dist/packem_shared/expandArguments-4mab7-Ds.js +1 -0
  33. package/dist/packem_shared/expandShortcut-BErNHNXZ.js +1 -0
  34. package/dist/packem_shared/expandTokensInString-Cyx0qSFA.js +1 -0
  35. package/dist/packem_shared/expandWildcard-DE0dOOZF.js +1 -0
  36. package/dist/packem_shared/extractPackageName-BeL6Gc3a.js +1 -0
  37. package/dist/packem_shared/findCycle-BY8-jmzB.js +1 -0
  38. package/dist/packem_shared/formatTimingTable-CP3rsDwf.js +7 -0
  39. package/dist/packem_shared/generateRunSummary-DXhnX83W.js +1 -0
  40. package/dist/packem_shared/getCurrentBranch-D-qoZByx.js +1 -0
  41. package/dist/packem_shared/getMainWorktreeRoot-DRN_i8jA.js +1 -0
  42. package/dist/packem_shared/isNativeAvailable-BOavFPX1.js +1 -0
  43. package/dist/packem_shared/parseCommands-b1K2vIxj.js +1 -0
  44. package/dist/packem_shared/parsePartition-uzPNgtPp.js +1 -0
  45. package/dist/packem_shared/projectGraphToDot-FN6oHDGH.js +250 -0
  46. package/dist/packem_shared/resolveCacheMode-XhD7mg7G.js +1 -0
  47. package/dist/packem_shared/resolveOutputs-BBjdaraf.js +1 -0
  48. package/dist/packem_shared/runConcurrentFallback-Dpqxuyv-.js +3 -0
  49. package/dist/packem_shared/runConcurrently-CxyC5yGT.js +1 -0
  50. package/dist/packem_shared/runTeardown-DBBpBAyb.js +1 -0
  51. package/dist/packem_shared/shell-quote-CksLqyXK.js +1 -0
  52. package/dist/packem_shared/stripQuotes-jkZb0CL9.js +1 -0
  53. package/dist/packem_shared/toChromeTrace-DxN5NQIU.js +1 -0
  54. package/dist/packem_shared/utils-BH2W5Wml.js +1 -0
  55. package/dist/packem_shared/withRestart-CWO6BKv_.js +1 -0
  56. package/index.js +602 -0
  57. package/package.json +30 -18
  58. package/binding.js +0 -204
  59. package/dist/affected.d.ts +0 -48
  60. package/dist/cache.d.ts +0 -103
  61. package/dist/default-task-runner.d.ts +0 -44
  62. package/dist/file-access-tracker.d.ts +0 -53
  63. package/dist/fingerprint.d.ts +0 -45
  64. package/dist/framework-inference.d.ts +0 -35
  65. package/dist/graph-visualizer.d.ts +0 -74
  66. package/dist/incremental-hasher.d.ts +0 -58
  67. package/dist/life-cycle.d.ts +0 -36
  68. package/dist/lockfile-hasher.d.ts +0 -73
  69. package/dist/native-binding.d.ts +0 -64
  70. package/dist/packem_shared/Cache-IYpTYVUC.js +0 -298
  71. package/dist/packem_shared/CompositeLifeCycle-7AtYw1dv.js +0 -112
  72. package/dist/packem_shared/FileAccessTracker-CrtBAt5D.js +0 -239
  73. package/dist/packem_shared/FingerprintManager-D6Y0erg-.js +0 -227
  74. package/dist/packem_shared/IncrementalFileHasher-Ds3J6dgb.js +0 -151
  75. package/dist/packem_shared/RemoteCache-BDqrnDEi.js +0 -179
  76. package/dist/packem_shared/TaskOrchestrator-BvYs3ONw.js +0 -342
  77. package/dist/packem_shared/TaskScheduler-CJilHDta.js +0 -111
  78. package/dist/packem_shared/TrackedTaskExecutor-BGUKFE-7.js +0 -164
  79. package/dist/packem_shared/collectFiles-ClXHnHhg.js +0 -22
  80. package/dist/packem_shared/computeTaskHash-BoCnnvIJ.js +0 -356
  81. package/dist/packem_shared/createTaskGraph-CcsFaSrz.js +0 -164
  82. package/dist/packem_shared/defaultTaskRunner-CrW4v5Ye.js +0 -79
  83. package/dist/packem_shared/detectFrameworks-CeFzKE6J.js +0 -101
  84. package/dist/packem_shared/extractPackageName-CbVNW-dr.js +0 -189
  85. package/dist/packem_shared/filterAffectedTasks-I-18zPg6.js +0 -135
  86. package/dist/packem_shared/findCycle-DF4_BRdO.js +0 -212
  87. package/dist/packem_shared/generateRunSummary-qn-_jKwt.js +0 -134
  88. package/dist/packem_shared/isNativeAvailable-BWhnZ4ES.js +0 -19
  89. package/dist/packem_shared/projectGraphToDot-VdTjHcVp.js +0 -202
  90. package/dist/packem_shared/utils-zO0ZRgtf.js +0 -390
  91. package/dist/remote-cache.d.ts +0 -55
  92. package/dist/run-summary.d.ts +0 -89
  93. package/dist/task-graph-utils.d.ts +0 -39
  94. package/dist/task-graph.d.ts +0 -22
  95. package/dist/task-hasher.d.ts +0 -67
  96. package/dist/task-orchestrator.d.ts +0 -38
  97. package/dist/task-scheduler.d.ts +0 -18
  98. package/dist/tracked-executor.d.ts +0 -46
  99. package/dist/types.d.ts +0 -385
  100. package/dist/utils.d.ts +0 -39
  101. package/npm/darwin-arm64/LICENSE.md +0 -21
  102. package/npm/darwin-arm64/node_modules/.bin/semantic-release +0 -21
  103. package/npm/darwin-arm64/package.json +0 -39
  104. package/npm/darwin-arm64/task-runner-native.darwin-arm64.node +0 -0
  105. package/npm/darwin-x64/LICENSE.md +0 -21
  106. package/npm/darwin-x64/node_modules/.bin/semantic-release +0 -21
  107. package/npm/darwin-x64/package.json +0 -39
  108. package/npm/darwin-x64/task-runner-native.darwin-x64.node +0 -0
  109. package/npm/linux-arm64-gnu/LICENSE.md +0 -21
  110. package/npm/linux-arm64-gnu/node_modules/.bin/semantic-release +0 -21
  111. package/npm/linux-arm64-gnu/package.json +0 -42
  112. package/npm/linux-arm64-gnu/task-runner-native.linux-arm64-gnu.node +0 -0
  113. package/npm/linux-arm64-musl/LICENSE.md +0 -21
  114. package/npm/linux-arm64-musl/node_modules/.bin/semantic-release +0 -21
  115. package/npm/linux-arm64-musl/package.json +0 -42
  116. package/npm/linux-arm64-musl/task-runner-native.linux-arm64-musl.node +0 -0
  117. package/npm/linux-x64-gnu/LICENSE.md +0 -21
  118. package/npm/linux-x64-gnu/node_modules/.bin/semantic-release +0 -21
  119. package/npm/linux-x64-gnu/package.json +0 -42
  120. package/npm/linux-x64-gnu/task-runner-native.linux-x64-gnu.node +0 -0
  121. package/npm/linux-x64-musl/LICENSE.md +0 -21
  122. package/npm/linux-x64-musl/node_modules/.bin/semantic-release +0 -21
  123. package/npm/linux-x64-musl/package.json +0 -42
  124. package/npm/linux-x64-musl/task-runner-native.linux-x64-musl.node +0 -0
  125. package/npm/win32-arm64-msvc/LICENSE.md +0 -21
  126. package/npm/win32-arm64-msvc/node_modules/.bin/semantic-release +0 -21
  127. package/npm/win32-arm64-msvc/package.json +0 -39
  128. package/npm/win32-arm64-msvc/task-runner-native.win32-arm64-msvc.node +0 -0
  129. package/npm/win32-x64-msvc/LICENSE.md +0 -21
  130. package/npm/win32-x64-msvc/node_modules/.bin/semantic-release +0 -21
  131. package/npm/win32-x64-msvc/package.json +0 -39
  132. package/npm/win32-x64-msvc/task-runner-native.win32-x64-msvc.node +0 -0
  133. package/task-runner-native.darwin-arm64.node +0 -0
  134. package/task-runner-native.darwin-x64.node +0 -0
  135. package/task-runner-native.linux-arm64-gnu.node +0 -0
  136. package/task-runner-native.linux-arm64-musl.node +0 -0
  137. package/task-runner-native.linux-x64-gnu.node +0 -0
  138. package/task-runner-native.linux-x64-musl.node +0 -0
  139. package/task-runner-native.win32-arm64-msvc.node +0 -0
  140. package/task-runner-native.win32-x64-msvc.node +0 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,216 @@
1
+ ## @visulima/task-runner [1.0.0-alpha.11](https://github.com/visulima/visulima/compare/@visulima/task-runner@1.0.0-alpha.10...@visulima/task-runner@1.0.0-alpha.11) (2026-05-10)
2
+
3
+ ### Features
4
+
5
+ * add service and tool projectType variants ([61858ad](https://github.com/visulima/visulima/commit/61858ad4c044b5f30318f282615c83f716667053)), closes [#21](https://github.com/visulima/visulima/issues/21)
6
+ * **task-runner:** allow embedders to override the data directory ([904875a](https://github.com/visulima/visulima/commit/904875a15751c57ebafa9c137fd11c2ade1a4b6a))
7
+ * **task-runner:** surface native child pids for sigint cleanup ([3790bbd](https://github.com/visulima/visulima/commit/3790bbd5f88485f6c67c28548faf7a2a3791216c))
8
+
9
+ ### Miscellaneous Chores
10
+
11
+ * **task-runner:** bump protobufjs to 8.0.3 ([cfbd5e7](https://github.com/visulima/visulima/commit/cfbd5e783e8773db790223f7dd8baea56685c1ca))
12
+
13
+ ## @visulima/task-runner [1.0.0-alpha.10](https://github.com/visulima/visulima/compare/@visulima/task-runner@1.0.0-alpha.9...@visulima/task-runner@1.0.0-alpha.10) (2026-05-06)
14
+
15
+ ### Features
16
+
17
+ * **task-runner:** add per-target maxConcurrent and workspace concurrencyGroups ([985d5d1](https://github.com/visulima/visulima/commit/985d5d1d3a594f3b42cfa3f7735bc1bb8055563e))
18
+
19
+ ### Miscellaneous Chores
20
+
21
+ * **task-runner:** clear lint warnings ([05fa2b6](https://github.com/visulima/visulima/commit/05fa2b6fa259607933fc709dc871b5ef52294721))
22
+ * **task-runner:** fix lint errors ([0f5a6d0](https://github.com/visulima/visulima/commit/0f5a6d00bd321b98f9b4289923e151c59a5b7e58))
23
+ * **task-runner:** fix lint errors in test files ([5e7dc4f](https://github.com/visulima/visulima/commit/5e7dc4fcee277691034666a252d97503aa7be0a4))
24
+ * **task-runner:** housekeeping cleanup ([e837f11](https://github.com/visulima/visulima/commit/e837f1166b43bcfbccfdffe693248db498c0fe1d))
25
+
26
+ ### Continuous Integration
27
+
28
+ * integrate codspeed for benchmark tracking ([e758f3d](https://github.com/visulima/visulima/commit/e758f3da491cc00d3f8bbf10d7ba3fdf8deb5325))
29
+
30
+ ## @visulima/task-runner [1.0.0-alpha.9](https://github.com/visulima/visulima/compare/@visulima/task-runner@1.0.0-alpha.8...@visulima/task-runner@1.0.0-alpha.9) (2026-05-04)
31
+
32
+ ### Features
33
+
34
+ * **task-runner,vis:** cache restoration fidelity ([a15cb22](https://github.com/visulima/visulima/commit/a15cb22bde832cfe76ee017722b8b9f9102dac8f))
35
+ * **task-runner:** add REAPI gRPC backend, cacheMode, and cache doctor ([03e6da9](https://github.com/visulima/visulima/commit/03e6da97beb84f6adc4a07a1c7ca4acf28be3b33))
36
+ * **task-runner:** add URI-based input format ([050b583](https://github.com/visulima/visulima/commit/050b5838c15590a3ccba0ca99ad585cbabc36d99))
37
+ * **task-runner:** skip-on-warning incrementality ([2c79ab3](https://github.com/visulima/visulima/commit/2c79ab35d0513bf4e60f87d1ac3bc4e99296cb62)), closes [#22](https://github.com/visulima/visulima/issues/22) [rushstack#1402](https://github.com/visulima/rushstack/issues/1402)
38
+
39
+ ### Bug Fixes
40
+
41
+ * **vis:** preserve probe error on close failure and clamp formatAge ([f1d71d6](https://github.com/visulima/visulima/commit/f1d71d63a5432fc2ed8c09c9a0a87e4e59b83b0b))
42
+
43
+ ### Documentation
44
+
45
+ * **task-runner:** cover when/always, tokens, REAPI, hooks ([1515cd3](https://github.com/visulima/visulima/commit/1515cd349db41fcfe83ae86ed4d52df8dccbf985))
46
+
47
+ ### Miscellaneous Chores
48
+
49
+ * catalog refresh + task-runner binding bump to 1.0.0-alpha.8 ([ff4548a](https://github.com/visulima/visulima/commit/ff4548a5678c992048a57e73c310757733c04756))
50
+ * **deps:** bump rust crates to current majors ([3a1d9bb](https://github.com/visulima/visulima/commit/3a1d9bb7f6e2c6b2d3862e212ae62707d60815cc))
51
+
52
+ ### Code Refactoring
53
+
54
+ * **task-runner,vis:** consolidate helpers and tighten branches ([d1290d1](https://github.com/visulima/visulima/commit/d1290d1f614036902c6803d8ff51df100fdd07ab))
55
+ * **task-runner,vis:** expose worktree helpers from task-runner ([12468d7](https://github.com/visulima/visulima/commit/12468d76bb03278ec56691ba0c6d9821c9482f94))
56
+
57
+ ### Tests
58
+
59
+ * **task-runner:** split tests into unit/integration mirroring src layout ([ae78f99](https://github.com/visulima/visulima/commit/ae78f992d24626f3b23de56fa735aced47b1220e))
60
+
61
+ ## @visulima/task-runner [1.0.0-alpha.8](https://github.com/visulima/visulima/compare/@visulima/task-runner@1.0.0-alpha.7...@visulima/task-runner@1.0.0-alpha.8) (2026-04-30)
62
+
63
+ ### Features
64
+
65
+ * **task-runner:** expose worktree detection napi bindings ([3d67028](https://github.com/visulima/visulima/commit/3d670284090010616956a024a4e5465ee91bbcd4))
66
+ * **task-runner:** graceful Ctrl+Break on Windows SIGINT ([ae44b1c](https://github.com/visulima/visulima/commit/ae44b1c855839746092a91430eb49b216d1172ec))
67
+ * **task-runner:** tokens, when, and always tasks ([5ae6505](https://github.com/visulima/visulima/commit/5ae65055d97e97d7ad7ff9088996da37d964da3f))
68
+
69
+ ### Bug Fixes
70
+
71
+ * **vis:** address review findings on watch UX bundle ([edee703](https://github.com/visulima/visulima/commit/edee7038fe23a488791682dd8ce5c469b40a3e8c))
72
+
73
+ ### Miscellaneous Chores
74
+
75
+ * re-sort workspace package.json files via vis sort-package-json ([f625696](https://github.com/visulima/visulima/commit/f625696cfac974325774b3243e1a83c3d23acbd7))
76
+ * **task-runner:** upgrade packem to 2.0.0-alpha.76 ([5f59c41](https://github.com/visulima/visulima/commit/5f59c4140f89019cc3756ac917e1bda7ded0beec))
77
+
78
+ ## @visulima/task-runner [1.0.0-alpha.7](https://github.com/visulima/visulima/compare/@visulima/task-runner@1.0.0-alpha.6...@visulima/task-runner@1.0.0-alpha.7) (2026-04-22)
79
+
80
+ ### Bug Fixes
81
+
82
+ * **ci:** publish native addons via local semantic-release plugin ([974beb2](https://github.com/visulima/visulima/commit/974beb2d021e7b2afc86b958bd2137be88d2f464))
83
+ * Remove JSR configuration generation script and generated jsr.json files ([#616](https://github.com/visulima/visulima/issues/616)) ([533744b](https://github.com/visulima/visulima/commit/533744b103b74896941db5b727173e617a27a63b))
84
+
85
+ ### Miscellaneous Chores
86
+
87
+ * update the jsr.json ([864ab7e](https://github.com/visulima/visulima/commit/864ab7e71c4b5ae82f64792d1ae8debfea2c539b))
88
+
89
+
90
+ ### Dependencies
91
+
92
+ * **@visulima/humanizer:** upgraded to 3.0.0-alpha.11
93
+ * **@visulima/path:** upgraded to 3.0.0-alpha.10
94
+
95
+ ## @visulima/task-runner [1.0.0-alpha.6](https://github.com/visulima/visulima/compare/@visulima/task-runner@1.0.0-alpha.5...@visulima/task-runner@1.0.0-alpha.6) (2026-04-21)
96
+
97
+ ### Features
98
+
99
+ * **task-runner:** output globs, auto-writes, parallel cache IO ([137f53f](https://github.com/visulima/visulima/commit/137f53f7f5a4d8c16df511c9d145b2c158025a32))
100
+ * **task-runner:** vite-task parity + plugin-ready lifecycle hooks ([cfc7360](https://github.com/visulima/visulima/commit/cfc7360abf00524fbfc37b60df27970c325f91e1)), closes [pkg#task](https://github.com/visulima/pkg/issues/task)
101
+
102
+ ### Bug Fixes
103
+
104
+ * **task-runner:** resolve eslint errors in chrome-trace and task-hasher ([2cf6266](https://github.com/visulima/visulima/commit/2cf6266b8252bc24a6d900f49f97611d4d629ff3))
105
+
106
+ ### Miscellaneous Chores
107
+
108
+ * **api-platform:** apply pending lint and source updates ([3fb0043](https://github.com/visulima/visulima/commit/3fb0043a4cf35f752ca89a09a077100ae0142da8))
109
+ * bump engines.node to ^22.14.0 || >=24.10.0 ([c3d0931](https://github.com/visulima/visulima/commit/c3d0931d1504e4f21ebf50ea680cfa7ce4ba15ce))
110
+ * fixed jsr.json ([5d85e51](https://github.com/visulima/visulima/commit/5d85e5179de38e284ec433b14d77c71a1619c8d6))
111
+ * **task-runner:** apply formatter and lint fixes ([70b4641](https://github.com/visulima/visulima/commit/70b4641b394897ebfc021425b992db936e320d8a))
112
+ * **task-runner:** apply formatter and lint fixes ([aee664f](https://github.com/visulima/visulima/commit/aee664f0a03ed9c1eb8bf7a6a91e62f601a3d5ff))
113
+ * **task-runner:** apply pending changes ([9d92517](https://github.com/visulima/visulima/commit/9d92517f1a54bc28a19cb8cbdb937cdc234e152d))
114
+ * **task-runner:** apply pending lint and source updates ([c01eb39](https://github.com/visulima/visulima/commit/c01eb393f991d8fc96f8ed87bfc71d90902ee659))
115
+ * **task-runner:** enforce curly braces and apply lint fixes ([4fbd8ee](https://github.com/visulima/visulima/commit/4fbd8eefa1b56f428528b495b074d5c266fb6733))
116
+
117
+ ### Code Refactoring
118
+
119
+ * replace inline import() types with top-level imports ([4569a4c](https://github.com/visulima/visulima/commit/4569a4ca04723da069f985855dcfab292f7347e1))
120
+
121
+ ### Tests
122
+
123
+ * **task-runner:** remove native binding guard from tests ([90f0dff](https://github.com/visulima/visulima/commit/90f0dffe85f4b83e76905a26d53b917365116b45))
124
+ * **task-runner:** skip default excludes for tmpdir-backed tracker tests ([0db0620](https://github.com/visulima/visulima/commit/0db06206173f0799244fafcc578b9fb0be9d2fb6))
125
+
126
+ ## @visulima/task-runner [1.0.0-alpha.5](https://github.com/visulima/visulima/compare/@visulima/task-runner@1.0.0-alpha.4...@visulima/task-runner@1.0.0-alpha.5) (2026-04-15)
127
+
128
+ ### Features
129
+
130
+ * Add comprehensive workspace configuration and command infrastructure ([#609](https://github.com/visulima/visulima/issues/609)) ([f4347bf](https://github.com/visulima/visulima/commit/f4347bfdcdd1b228cd9d842a927e446aaf23f035))
131
+ * **vis:** add cache command for task runner cache ([#607](https://github.com/visulima/visulima/issues/607)) ([6752769](https://github.com/visulima/visulima/commit/67527692562b3dd9c03bb6a67c084ff1e694a560))
132
+
133
+ ### Bug Fixes
134
+
135
+ * **tooling:** resolve eslint and formatting issues ([399d292](https://github.com/visulima/visulima/commit/399d29282be5b29bb26b4e5b24d45e2a6cdeeca3))
136
+
137
+
138
+ ### Dependencies
139
+
140
+ * **@visulima/humanizer:** upgraded to 3.0.0-alpha.10
141
+ * **@visulima/path:** upgraded to 3.0.0-alpha.9
142
+
143
+ ## @visulima/task-runner [1.0.0-alpha.4](https://github.com/visulima/visulima/compare/@visulima/task-runner@1.0.0-alpha.3...@visulima/task-runner@1.0.0-alpha.4) (2026-04-08)
144
+
145
+ ### Features
146
+
147
+ * Add native Rust bindings for package manager operations ([#596](https://github.com/visulima/visulima/issues/596)) ([2ec22d0](https://github.com/visulima/visulima/commit/2ec22d023eade3fed67fb811696fbd8f7b52569d))
148
+ * **task-runner, vis:** project constraints, CI partitioning, affected scopes ([29295e9](https://github.com/visulima/visulima/commit/29295e989ecdfe2019469d1917a6c90a92e17bcf))
149
+ * **task-runner:** add concurrent process runner with Rust NAPI bindings ([c4f5d93](https://github.com/visulima/visulima/commit/c4f5d930e81a5eb641ceb3ab925c3b10a885bb6a))
150
+ * **vis:** expand devcontainer command with templates, validation, and config properties ([807e730](https://github.com/visulima/visulima/commit/807e730a43f0ea644d016b4f5506706972d2ff41))
151
+ * **vis:** group CLI commands into logical categories for help output ([0a4cac8](https://github.com/visulima/visulima/commit/0a4cac859c8edf7aacdacca7b9a03219967d525a))
152
+ * **vis:** replace inline TUI with full-screen Nx-style interactive task runner ([1409aad](https://github.com/visulima/visulima/commit/1409aad879c713051bba12298a3feb1d5ba852f2))
153
+
154
+ ### Bug Fixes
155
+
156
+ * **ci:** make native-binding tests work with and without compiled binary ([9a40fb4](https://github.com/visulima/visulima/commit/9a40fb40d5cba9fcd2e0176eea8b7bf8d9792c7d))
157
+ * **task-runner,tui:** guard null native events and increase CI test timeout ([e76a791](https://github.com/visulima/visulima/commit/e76a791d90043537e08be0545f706e35acaa555d))
158
+ * **task-runner:** deno.json support, Windows Job Objects, docs, and review fixes ([4fb27f0](https://github.com/visulima/visulima/commit/4fb27f081b4b50b41dbb86b5b1a962b63f7a6df3))
159
+ * **task-runner:** fix Windows cross-compilation by upgrading windows-sys to 0.61 ([b56b95e](https://github.com/visulima/visulima/commit/b56b95e2a39ca972398859e6eb87e528f4463d97))
160
+ * **task-runner:** resolve eslint errors ([f0a21a6](https://github.com/visulima/visulima/commit/f0a21a689bc9e1d8b091a513e21cb11b77103ba4))
161
+ * **task-runner:** use JS fallback for onEvent streaming, fix StaticRender ref ([1a7165c](https://github.com/visulima/visulima/commit/1a7165cd9eb71472895cd08682983fa25703dc93))
162
+ * **tsconfig:** add node types and fix implicit any parameter ([1744d82](https://github.com/visulima/visulima/commit/1744d82a07fca03f2e6ff660b918e9b2623acf69))
163
+
164
+ ### Miscellaneous Chores
165
+
166
+ * added og images ([02d9d1e](https://github.com/visulima/visulima/commit/02d9d1e47be3ce75679ea89e857dc4e4bfe4946b))
167
+ * **task-runner:** add tsconfig.eslint.json for type-aware linting ([83e0bf2](https://github.com/visulima/visulima/commit/83e0bf23511a169b801f6edf652a8be7ee968c24))
168
+ * **task-runner:** apply prettier formatting ([521afc2](https://github.com/visulima/visulima/commit/521afc22d94a2626c7246062cecfc0627f929ee4))
169
+ * **task-runner:** expand inline if-return to block syntax ([0f48a96](https://github.com/visulima/visulima/commit/0f48a96ed11d7339c62f3f147c7b2c8fcc605b03))
170
+ * **task-runner:** migrate .prettierrc.cjs to prettier.config.js ([cd1c045](https://github.com/visulima/visulima/commit/cd1c045e133f685a274924034ec70cf374edd5ba))
171
+
172
+ ### Build System
173
+
174
+ * regenerate NAPI-RS bindings as ESM ([f202caf](https://github.com/visulima/visulima/commit/f202caf3dc383a2ec24815c4935d8d68c29f33d0))
175
+ * switch NAPI-RS native builds to ESM output ([3d7cd61](https://github.com/visulima/visulima/commit/3d7cd615ad830392005915735c11771e0247ef3f))
176
+ * **task-runner:** move publish-native-addons to shared scripts/ ([73b5482](https://github.com/visulima/visulima/commit/73b5482e1ca0707aa8f191429deffbd7324a632d))
177
+
178
+
179
+ ### Dependencies
180
+
181
+ * **@visulima/humanizer:** upgraded to 3.0.0-alpha.9
182
+ * **@visulima/path:** upgraded to 3.0.0-alpha.8
183
+
184
+ ## @visulima/task-runner [1.0.0-alpha.3](https://github.com/visulima/visulima/compare/@visulima/task-runner@1.0.0-alpha.2...@visulima/task-runner@1.0.0-alpha.3) (2026-03-26)
185
+
186
+ ### Features
187
+
188
+ * **web:** auto-generate packages page from workspace metadata ([623e520](https://github.com/visulima/visulima/commit/623e5207693a7fe720f5f2f179593a3654c880e3))
189
+
190
+ ### Miscellaneous Chores
191
+
192
+ * **task-runner:** remove redundant extends from .releaserc.json ([8969dfa](https://github.com/visulima/visulima/commit/8969dfaeccf3a36e40ecb9ba659187f81dda4ce1))
193
+
194
+ ### Continuous Integration
195
+
196
+ * **task-runner:** use escaped newlines in git commit message template ([b3045b6](https://github.com/visulima/visulima/commit/b3045b6c2c5afc641c699932fbf90effe7c31563))
197
+
198
+
199
+ ### Dependencies
200
+
201
+ * **@visulima/humanizer:** upgraded to 3.0.0-alpha.8
202
+ * **@visulima/path:** upgraded to 3.0.0-alpha.7
203
+
204
+ ## @visulima/task-runner [1.0.0-alpha.2](https://github.com/visulima/visulima/compare/@visulima/task-runner@1.0.0-alpha.1...@visulima/task-runner@1.0.0-alpha.2) (2026-03-26)
205
+
206
+ ### Bug Fixes
207
+
208
+ * **task-runner:** publish native binding packages with version lockstep via exec plugin ([12e342f](https://github.com/visulima/visulima/commit/12e342f1656ad0b595eaff627d3407c61c4ea7b6))
209
+
210
+ ### Miscellaneous Chores
211
+
212
+ * **task-runner:** add project.json for all native binding packages ([eb48812](https://github.com/visulima/visulima/commit/eb48812cb87c0990b9822d9314ccc0081e41d11f))
213
+
1
214
  ## @visulima/task-runner 1.0.0-alpha.1 (2026-03-26)
2
215
 
3
216
  ### Features
package/README.md CHANGED
@@ -27,15 +27,23 @@
27
27
 
28
28
  ## Features
29
29
 
30
+ - **Concurrent process runner**: Run multiple commands in parallel with native Rust performance (NAPI bindings) and JS fallback
31
+ - **Process tree management**: Proper cleanup via setsid/killpg (Unix) and Job Objects (Windows)
32
+ - **Command parser pipeline**: `npm:build` shortcuts, `npm run watch-*` wildcard expansion, `{1}` argument placeholders
33
+ - **Flow controllers**: Restart with backoff, stdin routing, timing summaries, teardown commands
34
+ - **npm script-shell support**: Honors `npm config set script-shell` for custom shells (Git Bash, etc.)
35
+ - **Long-running process support**: Configurable stdin mode (null/pipe/inherit), bounded output buffers
30
36
  - **Two caching modes**: Nx-style explicit inputs or Vite Task-style auto-fingerprinting
31
37
  - **Smart lockfile hashing**: Only hashes resolved versions relevant to each package (like Turborepo)
32
38
  - **Framework env inference**: Auto-detects Next.js, Vite, CRA, Gatsby, Nuxt, and more
33
- - **Remote caching**: Turborepo-compatible HTTP cache protocol
34
- - **Native Rust addon**: Optional xxHash-based parallel file hashing via napi-rs
39
+ - **Remote caching**: Turborepo-compatible HTTP cache protocol, plus a Bazel REAPI gRPC backend (bazel-remote, BuildBuddy, BuildBarn, EngFlow)
40
+ - **Native Rust addon**: Parallel file hashing (xxHash), concurrent process management via tokio
35
41
  - **Dependency-aware scheduling**: Topological task ordering with priority-based batching
36
42
  - **Incremental file hashing**: mtime-based change detection for near-instant cache checks
37
43
  - **Affected detection**: Git diff-based filtering to only run tasks for changed packages
44
+ - **Conditional tasks**: `when:` predicates (`os`, `env`, `branch`, `ci`) and `always: true` finally-tasks for cleanup/notifications
38
45
  - **Graph visualization**: DOT, JSON, HTML, and ASCII output formats
46
+ - **Log reporter modes**: `interleaved`, `labeled` (per-line `[project#target]` prefix), and `grouped` (header/footer wrapping) for vite-task parity
39
47
  - **Run summaries**: Detailed JSON reports for debugging cache behavior
40
48
  - **Cache diagnostics**: Explains exactly why a cache miss occurred
41
49
  - **Output archiving**: Caches and restores build outputs (dist/ directories)
@@ -61,32 +69,144 @@ pnpm add @visulima/task-runner
61
69
  ```typescript
62
70
  import { defaultTaskRunner } from "@visulima/task-runner";
63
71
 
64
- const results = await defaultTaskRunner(tasks, {
65
- // Nx-style: explicit inputs
66
- namedInputs: {
67
- production: ["{projectRoot}/src/**/*"],
72
+ const results = await defaultTaskRunner(
73
+ tasks,
74
+ {
75
+ // Nx-style: explicit inputs
76
+ namedInputs: {
77
+ production: ["{projectRoot}/src/**/*"],
78
+ },
79
+ globalInputs: ["pnpm-lock.yaml", "tsconfig.base.json"],
80
+ globalEnv: ["NODE_ENV"],
81
+
82
+ // Or: auto-fingerprinting (Vite Task-style)
83
+ // autoFingerprint: true,
84
+
85
+ // Smart lockfile hashing (only bust cache for affected packages)
86
+ smartLockfileHashing: true,
87
+
88
+ // Auto-detect framework env vars (NEXT_PUBLIC_*, VITE_*, etc.)
89
+ frameworkInference: true,
90
+
91
+ // Remote cache (Turborepo-compatible)
92
+ remoteCache: {
93
+ url: "https://cache.example.com",
94
+ token: process.env.CACHE_TOKEN,
95
+ teamId: "my-team",
96
+ },
68
97
  },
69
- globalInputs: ["pnpm-lock.yaml", "tsconfig.base.json"],
70
- globalEnv: ["NODE_ENV"],
71
-
72
- // Or: auto-fingerprinting (Vite Task-style)
73
- // autoFingerprint: true,
98
+ context,
99
+ );
100
+ ```
74
101
 
75
- // Smart lockfile hashing (only bust cache for affected packages)
76
- smartLockfileHashing: true,
102
+ ## Concurrent Process Runner
77
103
 
78
- // Auto-detect framework env vars (NEXT_PUBLIC_*, VITE_*, etc.)
79
- frameworkInference: true,
104
+ Run multiple commands in parallel with real-time output streaming, process tree management, and automatic native acceleration.
80
105
 
81
- // Remote cache (Turborepo-compatible)
82
- remoteCache: {
83
- url: "https://cache.example.com",
84
- token: process.env.CACHE_TOKEN,
85
- teamId: "my-team",
106
+ ```typescript
107
+ import { runConcurrently } from "@visulima/task-runner";
108
+
109
+ // Basic usage
110
+ const result = await runConcurrently(["npm run build", "npm run test", "npm run lint"]);
111
+ console.log(result.success ? "All passed" : "Some failed");
112
+
113
+ // With options
114
+ const result = await runConcurrently(
115
+ [
116
+ { command: "vite dev", name: "web", stdin: "inherit" },
117
+ { command: "node api.js", name: "api" },
118
+ ],
119
+ {
120
+ maxProcesses: 4,
121
+ killOthers: ["failure"], // Kill all if one fails
122
+ successCondition: "all", // All must exit 0
123
+ onEvent: (event) => {
124
+ // Real-time streaming
125
+ if (event.kind === "stdout") {
126
+ console.log(`[${event.index}] ${event.text}`);
127
+ }
128
+ },
86
129
  },
87
- }, context);
130
+ );
131
+ ```
132
+
133
+ ### Command Parser
134
+
135
+ Use `parseCommands` to expand shortcuts and wildcards before passing to `runConcurrently`:
136
+
137
+ ```typescript
138
+ import { parseCommands, runConcurrently } from "@visulima/task-runner";
139
+
140
+ const commands = parseCommands([
141
+ "npm:build", // -> npm run build
142
+ "pnpm:test", // -> pnpm run test
143
+ '"quoted command"', // -> quoted command (quotes stripped)
144
+ "npm run watch-*", // -> expands to all matching scripts in package.json
145
+ "deno task dev-*", // -> expands from deno.json/deno.jsonc tasks
146
+ ]);
147
+
148
+ await runConcurrently(commands);
149
+ ```
150
+
151
+ ### Flow Controllers
152
+
153
+ ```typescript
154
+ import { runConcurrently } from "@visulima/task-runner";
155
+
156
+ // Restart failed commands with exponential backoff
157
+ await runConcurrently(["flaky-command"], {
158
+ restart: { tries: 3, delay: "exponential" },
159
+ });
160
+
161
+ // Print timing summary after completion
162
+ await runConcurrently(["npm run build", "npm run test"], {
163
+ timings: true,
164
+ });
165
+
166
+ // Run cleanup commands after all processes finish
167
+ await runConcurrently(["npm run dev"], {
168
+ teardown: ["docker compose down", "rm -rf .cache"],
169
+ });
88
170
  ```
89
171
 
172
+ ### Shell Configuration
173
+
174
+ The runner automatically detects `npm config set script-shell` for custom shells (e.g., Git Bash on Windows):
175
+
176
+ ```typescript
177
+ import { runConcurrently, detectScriptShell } from "@visulima/task-runner";
178
+
179
+ // Auto-detected from npm config
180
+ await runConcurrently(["echo hello"]);
181
+
182
+ // Or override explicitly
183
+ await runConcurrently(["echo hello"], {
184
+ shellPath: "/usr/bin/bash",
185
+ });
186
+ ```
187
+
188
+ ### Stdin Modes
189
+
190
+ For long-running processes like dev servers:
191
+
192
+ ```typescript
193
+ await runConcurrently([
194
+ { command: "vite dev", stdin: "inherit" }, // Child reads terminal directly
195
+ { command: "node worker.js", stdin: "null" }, // No stdin (default)
196
+ { command: "node repl.js", stdin: "pipe" }, // Programmatic stdin access
197
+ ]);
198
+ ```
199
+
200
+ ### Native vs Fallback
201
+
202
+ The runner automatically uses the Rust NAPI addon when available for:
203
+
204
+ - Process tree killing via setsid/killpg (Unix) and Job Objects (Windows)
205
+ - Async I/O multiplexing via tokio
206
+ - Signal propagation (SIGINT/SIGTERM/SIGHUP)
207
+
208
+ Falls back to a pure JavaScript implementation when the native addon is not compiled.
209
+
90
210
  ## Caching Modes
91
211
 
92
212
  ### Nx-style (explicit inputs)
@@ -94,19 +214,19 @@ const results = await defaultTaskRunner(tasks, {
94
214
  Declare which files, env vars, and runtime values should be included in the cache hash:
95
215
 
96
216
  ```typescript
97
- const results = await defaultTaskRunner(tasks, {
98
- namedInputs: {
99
- production: [
100
- "{projectRoot}/src/**/*",
101
- { env: "NODE_ENV" },
102
- { runtime: "node --version" },
103
- ],
104
- },
105
- targetDefaults: {
106
- build: { inputs: ["production"] },
107
- test: { inputs: ["production", "{projectRoot}/**/*.test.ts"] },
217
+ const results = await defaultTaskRunner(
218
+ tasks,
219
+ {
220
+ namedInputs: {
221
+ production: ["{projectRoot}/src/**/*", { env: "NODE_ENV" }, { runtime: "node --version" }],
222
+ },
223
+ targetDefaults: {
224
+ build: { inputs: ["production"] },
225
+ test: { inputs: ["production", "{projectRoot}/**/*.test.ts"] },
226
+ },
108
227
  },
109
- }, context);
228
+ context,
229
+ );
110
230
  ```
111
231
 
112
232
  ### Auto-fingerprint (Vite Task-style)
@@ -114,11 +234,15 @@ const results = await defaultTaskRunner(tasks, {
114
234
  Automatically tracks which files a task accesses during execution:
115
235
 
116
236
  ```typescript
117
- const results = await defaultTaskRunner(tasks, {
118
- autoFingerprint: true,
119
- fingerprintEnvPatterns: ["VITE_*", "NODE_ENV"],
120
- cacheDiagnostics: true, // Shows why cache misses occur
121
- }, context);
237
+ const results = await defaultTaskRunner(
238
+ tasks,
239
+ {
240
+ autoFingerprint: true,
241
+ fingerprintEnvPatterns: ["VITE_*", "NODE_ENV"],
242
+ cacheDiagnostics: true, // Shows why cache misses occur
243
+ },
244
+ context,
245
+ );
122
246
  ```
123
247
 
124
248
  ## API
@@ -127,27 +251,47 @@ const results = await defaultTaskRunner(tasks, {
127
251
 
128
252
  The main entry point. Runs tasks with caching, scheduling, and lifecycle support.
129
253
 
254
+ ### `runConcurrently(commands, options?)`
255
+
256
+ Run commands concurrently with process management and output streaming.
257
+
258
+ | Option | Type | Description |
259
+ | ------------------ | ---------------------------- | --------------------------------------------------- |
260
+ | `maxProcesses` | `number` | Max simultaneous processes (0 = unlimited) |
261
+ | `killOthers` | `("failure" \| "success")[]` | Kill others when a process exits |
262
+ | `killSignal` | `string` | Signal for killing (default: "SIGTERM") |
263
+ | `killTimeout` | `number` | Ms before SIGKILL after kill signal (default: 5000) |
264
+ | `successCondition` | `string` | "all", "first", "last", "command-\<name\>" |
265
+ | `shellPath` | `string` | Custom shell path (auto-detected from npm config) |
266
+ | `restart` | `{ tries, delay }` | Restart failed commands with backoff |
267
+ | `teardown` | `string[]` | Cleanup commands to run after completion |
268
+ | `timings` | `boolean` | Print timing summary table |
269
+ | `onEvent` | `(event) => void` | Real-time stdout/stderr/close/error events |
270
+
130
271
  ### Key Options
131
272
 
132
- | Option | Type | Description |
133
- |--------|------|-------------|
134
- | `parallel` | `number \| boolean` | Max parallel tasks (default: 3) |
135
- | `smartLockfileHashing` | `boolean` | Hash only relevant lockfile entries per package |
136
- | `frameworkInference` | `boolean` | Auto-detect framework env var prefixes |
137
- | `autoFingerprint` | `boolean` | Enable Vite Task-style auto-fingerprinting |
138
- | `globalInputs` | `string[]` | Files that invalidate all caches when changed |
139
- | `globalEnv` | `string[]` | Env vars that invalidate all caches |
140
- | `remoteCache` | `object` | Remote cache server configuration |
141
- | `dryRun` | `boolean` | Compute hashes without executing |
142
- | `summarize` | `boolean` | Generate JSON run summary |
143
- | `cacheDiagnostics` | `boolean` | Log cache miss reasons |
144
- | `maxCacheSize` | `string` | Max cache size (e.g., "1GB") |
145
- | `maxCacheAge` | `number` | Max cache entry age in ms |
273
+ | Option | Type | Description |
274
+ | ---------------------- | ------------------- | ----------------------------------------------- |
275
+ | `parallel` | `number \| boolean` | Max parallel tasks (default: 3) |
276
+ | `smartLockfileHashing` | `boolean` | Hash only relevant lockfile entries per package |
277
+ | `frameworkInference` | `boolean` | Auto-detect framework env var prefixes |
278
+ | `autoFingerprint` | `boolean` | Enable Vite Task-style auto-fingerprinting |
279
+ | `globalInputs` | `string[]` | Files that invalidate all caches when changed |
280
+ | `globalEnv` | `string[]` | Env vars that invalidate all caches |
281
+ | `remoteCache` | `object` | Remote cache server configuration |
282
+ | `dryRun` | `boolean` | Compute hashes without executing |
283
+ | `summarize` | `boolean` | Generate JSON run summary |
284
+ | `cacheDiagnostics` | `boolean` | Log cache miss reasons |
285
+ | `maxCacheSize` | `string` | Max cache size (e.g., "1GB") |
286
+ | `maxCacheAge` | `number` | Max cache entry age in ms |
146
287
 
147
288
  ### Exports
148
289
 
149
290
  The package exports many building blocks for custom task runners:
150
291
 
292
+ - **Concurrent Runner**: `runConcurrently`, `runConcurrentFallback`, `detectScriptShell`
293
+ - **Command Parser**: `parseCommands`, `expandShortcut`, `expandWildcard`, `expandArguments`, `stripQuotes`
294
+ - **Flow Controllers**: `withRestart`, `createInputHandler`, `logTimings`, `formatTimingTable`, `runTeardown`
151
295
  - **Task Graph**: `createTaskGraph`, `findCycle`, `walkTaskGraph`, `makeAcyclic`
152
296
  - **Hashing**: `InProcessTaskHasher`, `IncrementalFileHasher`, `computeTaskHash`
153
297
  - **Caching**: `Cache`, `RemoteCache`, `FingerprintManager`