@visulima/vis 4.2.0 → 4.3.1

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 (215) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/LICENSE.md +55 -129
  3. package/dist/bin.js +1 -1
  4. package/dist/binx.js +1 -1
  5. package/dist/config/index.d.ts +96 -0
  6. package/dist/packem_chunks/CONFIG_FILES.js +3 -3
  7. package/dist/packem_chunks/bloom-status.js +1 -1
  8. package/dist/packem_chunks/bloom-sync.js +1 -1
  9. package/dist/packem_chunks/cargo-plan.js +3 -0
  10. package/dist/packem_chunks/catalog.js +51 -48
  11. package/dist/packem_chunks/cli-exec.js +1 -1
  12. package/dist/packem_chunks/cli-main.js +164 -164
  13. package/dist/packem_chunks/composer-projects.js +2 -0
  14. package/dist/packem_chunks/dart-plan.js +1 -0
  15. package/dist/packem_chunks/dart-projects.js +1 -0
  16. package/dist/packem_chunks/dispatch.js +1 -1
  17. package/dist/packem_chunks/fix.js +8 -8
  18. package/dist/packem_chunks/gem-plan.js +2 -0
  19. package/dist/packem_chunks/gem-projects.js +1 -0
  20. package/dist/packem_chunks/git.js +5 -5
  21. package/dist/packem_chunks/go-plan.js +1 -0
  22. package/dist/packem_chunks/go-projects.js +2 -0
  23. package/dist/packem_chunks/gradle-plan.js +1 -0
  24. package/dist/packem_chunks/handler.js +1 -1
  25. package/dist/packem_chunks/handler10.js +3 -3
  26. package/dist/packem_chunks/handler11.js +1 -1
  27. package/dist/packem_chunks/handler12.js +2 -2
  28. package/dist/packem_chunks/handler13.js +1 -1
  29. package/dist/packem_chunks/handler14.js +1 -1
  30. package/dist/packem_chunks/handler15.js +1 -1
  31. package/dist/packem_chunks/handler16.js +1 -1
  32. package/dist/packem_chunks/handler17.js +1 -1
  33. package/dist/packem_chunks/handler18.js +1 -1
  34. package/dist/packem_chunks/handler19.js +1 -1
  35. package/dist/packem_chunks/handler2.js +1 -1
  36. package/dist/packem_chunks/handler20.js +2 -2
  37. package/dist/packem_chunks/handler21.js +1 -1
  38. package/dist/packem_chunks/handler22.js +1 -1
  39. package/dist/packem_chunks/handler23.js +1 -1
  40. package/dist/packem_chunks/handler24.js +1 -1
  41. package/dist/packem_chunks/handler26.js +1 -1
  42. package/dist/packem_chunks/handler27.js +1 -1
  43. package/dist/packem_chunks/handler28.js +1 -1
  44. package/dist/packem_chunks/handler29.js +1 -1
  45. package/dist/packem_chunks/handler3.js +1 -1
  46. package/dist/packem_chunks/handler30.js +1 -1
  47. package/dist/packem_chunks/handler39.js +6 -6
  48. package/dist/packem_chunks/handler4.js +3 -3
  49. package/dist/packem_chunks/handler5.js +2 -2
  50. package/dist/packem_chunks/handler50.js +1 -1
  51. package/dist/packem_chunks/handler51.js +1 -1
  52. package/dist/packem_chunks/handler53.js +1 -1
  53. package/dist/packem_chunks/handler54.js +2 -2
  54. package/dist/packem_chunks/handler55.js +1 -1
  55. package/dist/packem_chunks/handler58.js +2 -2
  56. package/dist/packem_chunks/handler59.js +1 -1
  57. package/dist/packem_chunks/handler6.js +7 -7
  58. package/dist/packem_chunks/handler60.js +8 -8
  59. package/dist/packem_chunks/handler61.js +1 -1
  60. package/dist/packem_chunks/handler62.js +16 -16
  61. package/dist/packem_chunks/handler63.js +2 -2
  62. package/dist/packem_chunks/handler64.js +1 -1
  63. package/dist/packem_chunks/handler65.js +3 -3
  64. package/dist/packem_chunks/handler66.js +2 -2
  65. package/dist/packem_chunks/handler67.js +3 -3
  66. package/dist/packem_chunks/handler68.js +4 -4
  67. package/dist/packem_chunks/handler69.js +3 -3
  68. package/dist/packem_chunks/handler7.js +1 -1
  69. package/dist/packem_chunks/handler70.js +5 -5
  70. package/dist/packem_chunks/handler71.js +5 -5
  71. package/dist/packem_chunks/handler72.js +2 -2
  72. package/dist/packem_chunks/handler73.js +87 -86
  73. package/dist/packem_chunks/handler74.js +1 -1
  74. package/dist/packem_chunks/handler75.js +23 -23
  75. package/dist/packem_chunks/handler76.js +6 -6
  76. package/dist/packem_chunks/handler77.js +2 -2
  77. package/dist/packem_chunks/handler78.js +19 -19
  78. package/dist/packem_chunks/handler8.js +1 -1
  79. package/dist/packem_chunks/handler9.js +1 -1
  80. package/dist/packem_chunks/heal-accept.js +1 -1
  81. package/dist/packem_chunks/heal.js +1 -1
  82. package/dist/packem_chunks/help-command.js +7 -7
  83. package/dist/packem_chunks/hex-plan.js +3 -0
  84. package/dist/packem_chunks/hex-projects.js +1 -0
  85. package/dist/packem_chunks/index2.js +52 -42
  86. package/dist/packem_chunks/index4.js +58 -802
  87. package/dist/packem_chunks/index5.js +802 -7
  88. package/dist/packem_chunks/index6.js +7 -58
  89. package/dist/packem_chunks/keys-refresh.js +1 -1
  90. package/dist/packem_chunks/lean.js +1 -1
  91. package/dist/packem_chunks/list.js +2 -2
  92. package/dist/packem_chunks/loader.js +1 -1
  93. package/dist/packem_chunks/maven-plan.js +1 -0
  94. package/dist/packem_chunks/maven-projects.js +1 -0
  95. package/dist/packem_chunks/nuget-plan.js +1 -0
  96. package/dist/packem_chunks/nuget-projects.js +1 -0
  97. package/dist/packem_chunks/orchestrator.js +33 -33
  98. package/dist/packem_chunks/prune.js +1 -1
  99. package/dist/packem_chunks/python-plan.js +3 -0
  100. package/dist/packem_chunks/python-projects.js +1 -0
  101. package/dist/packem_chunks/run.js +1 -1
  102. package/dist/packem_chunks/security.js +1 -1
  103. package/dist/packem_chunks/snapshot.js +2 -2
  104. package/dist/packem_chunks/status.js +1 -1
  105. package/dist/packem_chunks/swift-projects.js +1 -0
  106. package/dist/packem_chunks/sync.js +3 -2
  107. package/dist/packem_chunks/sync2.js +1 -1
  108. package/dist/packem_chunks/tripwire.js +2 -2
  109. package/dist/packem_chunks/ts-loader.js +5 -5
  110. package/dist/packem_chunks/verify-lockfile.js +2 -2
  111. package/dist/packem_chunks/version-resolver.js +3 -3
  112. package/dist/packem_chunks/zig-plan.js +1 -0
  113. package/dist/packem_chunks/zig-projects.js +1 -0
  114. package/dist/packem_shared/{affected-selection-M7riOi5-.js → affected-selection-D4giBK2X.js} +1 -1
  115. package/dist/packem_shared/{affected-shas-CAwpSPmP.js → affected-shas-B2V84O0g.js} +1 -1
  116. package/dist/packem_shared/{ai-analysis-DSQQDFU9.js → ai-analysis-pldoS_N4.js} +2 -2
  117. package/dist/packem_shared/{ai-fix-BTm1Z5og.js → ai-fix-BC6aIRJT.js} +4 -4
  118. package/dist/packem_shared/{augment-CBv1hwMR.js → augment-B9kSZuvW.js} +1 -1
  119. package/dist/packem_shared/{bin-Cbs_ix6l.js → bin-C1XKj-O-.js} +1 -1
  120. package/dist/packem_shared/build-scripts-CEDx_nJp.js +1 -0
  121. package/dist/packem_shared/{command-runtime-BD-4UmPB.js → command-runtime-p4IXiIf6.js} +1 -1
  122. package/dist/packem_shared/composer-DR3D-Psb.js +1 -0
  123. package/dist/packem_shared/dart-pubspec-BK_cK2EP.js +2 -0
  124. package/dist/packem_shared/dependency-scan-B8jroa1D.js +1 -0
  125. package/dist/packem_shared/{docker-1jgKW5Wd.js → docker-DXqV-07f.js} +3 -3
  126. package/dist/packem_shared/ecosystem-gate-ddru_hOg.js +6 -0
  127. package/dist/packem_shared/failure-log-D2x5BT8S.js +2 -0
  128. package/dist/packem_shared/formatBytes-BHAzNIrn-CrusHOew.js +4 -0
  129. package/dist/packem_shared/gemspec-K7N05xxc.js +3 -0
  130. package/dist/packem_shared/go-modules-BsVqtyeC.js +1 -0
  131. package/dist/packem_shared/gradle-build-CHZDHyjI.js +8 -0
  132. package/dist/packem_shared/index-BzhrR_iC.js +22 -0
  133. package/dist/packem_shared/index-Chje3u9v.js +1 -0
  134. package/dist/packem_shared/{index-Cq-J2MdB.js → index-DQ2GJzmy.js} +1 -1
  135. package/dist/packem_shared/{isAccessibleSync-DYKTrrvc-K2xhg6sV.js → isAccessibleSync-DYKTrrvc-C-_5cgwu.js} +1 -1
  136. package/dist/packem_shared/lifecycle-D6PMPor-.js +2 -0
  137. package/dist/packem_shared/lockfile-CiUtEbnt.js +1 -0
  138. package/dist/packem_shared/manifests-Du4yKlf_.js +1 -0
  139. package/dist/packem_shared/maven-pom-B0KG9kJQ.js +1 -0
  140. package/dist/packem_shared/{min-release-age-Da4V046o.js → min-release-age-JViyQuBM.js} +7 -7
  141. package/dist/packem_shared/missing-package-json-Cu5YVAot.js +1 -0
  142. package/dist/packem_shared/mix-project-RYvdZp3_.js +2 -0
  143. package/dist/packem_shared/multi-eco-lockfiles-B2X3yhyo.js +1 -0
  144. package/dist/packem_shared/{native-config-sync-CEB0rWlk.js → native-config-sync-TdTWjVgI.js} +1 -1
  145. package/dist/packem_shared/nuget-project-RApYSW_y.js +4 -0
  146. package/dist/packem_shared/{osv-bloom-BRacgzs7.js → osv-bloom-BCAX5ARR.js} +1 -1
  147. package/dist/packem_shared/package-version-Dxirp-UO.js +4 -0
  148. package/dist/packem_shared/packument-BQv4je9m.js +1 -0
  149. package/dist/packem_shared/pm-runner-CMSml1Bj.js +1 -0
  150. package/dist/packem_shared/{project-name-filter-zrdrEQbu.js → project-name-filter-D6tXD8gd.js} +1 -1
  151. package/dist/packem_shared/{provenance-CFPT_FQA.js → provenance-DNyVMxNv.js} +1 -1
  152. package/dist/packem_shared/readJsonSync-CbryXYxN-EWl7_7KX.js +1 -0
  153. package/dist/packem_shared/registry-keys-DwB3ZXS_.js +1 -0
  154. package/dist/packem_shared/{resolve-explicit-opfIkxoY.js → resolve-explicit-BPsdmuty.js} +1 -1
  155. package/dist/packem_shared/resolve-runtime-CNiHcVtx.js +1 -0
  156. package/dist/packem_shared/run-file-UBukWaha.js +1 -0
  157. package/dist/packem_shared/runtime-check-1U8HrQd9.js +1 -0
  158. package/dist/packem_shared/s1ngularity-QD2LD1sO.js +1 -0
  159. package/dist/packem_shared/{scan-progress-BGB9hIrD.js → scan-progress-CkumcBG-.js} +2 -2
  160. package/dist/packem_shared/{selectors-CjIZ3gy2.js → selectors-edwcgNl3.js} +1 -1
  161. package/dist/packem_shared/{signatures-DpqZVmmU.js → signatures-t8LbOaqr.js} +1 -1
  162. package/dist/packem_shared/spinner-ukDEdGvp.js +1 -0
  163. package/dist/packem_shared/swift-package-B6X5kzQE.js +1 -0
  164. package/dist/packem_shared/tabs--uxJGL8N.js +1 -0
  165. package/dist/packem_shared/{target-merge-hsawesT4.js → target-merge-DVJl-7Qz.js} +1 -1
  166. package/dist/packem_shared/target-options-DsHFmRZH.js +1 -0
  167. package/dist/packem_shared/toolchain-BRdpaAC4.js +5 -0
  168. package/dist/packem_shared/typosquats-8u0drCqQ.js +1 -0
  169. package/dist/packem_shared/use-measured-height-DUZyyias.js +1 -0
  170. package/dist/packem_shared/verify-B_MblU_Q.js +1 -0
  171. package/dist/packem_shared/{vis-update-app-D9KWJ9Ir.js → vis-update-app-BCIccZfA.js} +1 -1
  172. package/dist/packem_shared/{vis-user-error-Bdg9NRuJ.js → vis-user-error-75VtCwMv.js} +15 -15
  173. package/dist/packem_shared/watch-CcTketln.js +1 -0
  174. package/dist/packem_shared/watch-loop-qRn0IHPG.js +11 -0
  175. package/dist/packem_shared/{writeFileSync-DJoHk3Ks-O9zOKqeM.js → writeFileSync-DJoHk3Ks-BPRoepNw.js} +1 -1
  176. package/dist/packem_shared/zig-manifest-P7ydLEOa.js +7 -0
  177. package/dist/release/plugin-sdk.d.ts +1 -1
  178. package/dist/release/types.d.ts +133 -7
  179. package/dist/runtime/preload.js +1 -1
  180. package/index.d.ts +204 -204
  181. package/index.js +52 -52
  182. package/package.json +11 -11
  183. package/schemas/vis-config.schema.json +265 -5
  184. package/schemas/vis-release-config.schema.json +132 -5
  185. package/dist/packem_shared/advisories-BSpzRIXP.js +0 -1
  186. package/dist/packem_shared/build-scripts-BIgkWVgY.js +0 -1
  187. package/dist/packem_shared/cyclonedx-CT1rtKxV.js +0 -4
  188. package/dist/packem_shared/dependency-scan-W9b2X0a1.js +0 -1
  189. package/dist/packem_shared/failure-log-B91LvYWw.js +0 -2
  190. package/dist/packem_shared/formatBytes-BHAzNIrn-CLYsxlUj.js +0 -4
  191. package/dist/packem_shared/index-CVBR-Kit.js +0 -22
  192. package/dist/packem_shared/index-onibYJkv.js +0 -1
  193. package/dist/packem_shared/lifecycle-DDJzp-4H.js +0 -2
  194. package/dist/packem_shared/lockfile-Bi1mw9jJ.js +0 -1
  195. package/dist/packem_shared/manifests-D671Sb1T.js +0 -1
  196. package/dist/packem_shared/missing-package-json-CMoHdvmj.js +0 -1
  197. package/dist/packem_shared/package-version-C5EPMgRw.js +0 -4
  198. package/dist/packem_shared/packument-DuEV-qSE.js +0 -1
  199. package/dist/packem_shared/path-CxEa27Rz-pjheKk6v.js +0 -1
  200. package/dist/packem_shared/pm-runner-9L6ocnu2.js +0 -1
  201. package/dist/packem_shared/readJsonSync-CbryXYxN-BxKjDZnF.js +0 -1
  202. package/dist/packem_shared/registry-keys-C3EsP_s4.js +0 -1
  203. package/dist/packem_shared/resolve-runtime-lJ5L9gU4.js +0 -1
  204. package/dist/packem_shared/run-file-DZff6GqY.js +0 -1
  205. package/dist/packem_shared/runtime-check-DAbveBr_.js +0 -1
  206. package/dist/packem_shared/s1ngularity-DTvrfWIM.js +0 -1
  207. package/dist/packem_shared/spinner-BVCEMm3G.js +0 -1
  208. package/dist/packem_shared/tabs-Dz6xVpfX.js +0 -1
  209. package/dist/packem_shared/target-options-Bxb0Y5qa.js +0 -1
  210. package/dist/packem_shared/toolchain-887JoquG.js +0 -5
  211. package/dist/packem_shared/typosquats-Xv6dN4sr.js +0 -1
  212. package/dist/packem_shared/use-measured-height-BPQg2q_p.js +0 -1
  213. package/dist/packem_shared/verify-BLoaI7En.js +0 -1
  214. package/dist/packem_shared/watch-BTZw2Y8Q.js +0 -1
  215. package/dist/packem_shared/watch-loop-Cjh2wlUl.js +0 -11
@@ -50,6 +50,16 @@
50
50
  "$ref": "#/$defs/CodeownersConfig",
51
51
  "description": "Code ownership configuration. Controls how `vis sync codeowners` renders the generated CODEOWNERS file."
52
52
  },
53
+ "composer": {
54
+ "type": "object",
55
+ "properties": {
56
+ "discover": {
57
+ "type": "boolean"
58
+ }
59
+ },
60
+ "additionalProperties": false,
61
+ "description": "Composer packages as task projects. Off by default: a `composer.json` in a subdirectory gets validate and, when its scripts define them, test and lint targets."
62
+ },
53
63
  "constraints": {
54
64
  "type": "object",
55
65
  "properties": {
@@ -185,6 +195,16 @@
185
195
  "additionalProperties": false,
186
196
  "description": "Configuration for the `vis create` scaffolding command. Controls template downloads (via giget), default options, and post-creation behavior."
187
197
  },
198
+ "dart": {
199
+ "type": "object",
200
+ "properties": {
201
+ "discover": {
202
+ "type": "boolean"
203
+ }
204
+ },
205
+ "additionalProperties": false,
206
+ "description": "Dart pub workspace members as task projects. Off by default: each member listed under the root `pubspec.yaml`'s `workspace:` gets analyze, test and format-check targets only when this is set."
207
+ },
188
208
  "defaultBase": {
189
209
  "type": "string",
190
210
  "description": "Default base branch used by `vis affected`, `vis ci`, and `vis run --affected` when no explicit `--base` is passed and no CI smart-resolver fires.\n\nResolved as `origin/<defaultBase>` against the local clone; should be a branch name (not a fully-qualified ref) such as `main`, `master`, or `trunk`. Falls back to `main` when omitted.\n\nMigrated automatically from `nx.json#affected.defaultBase` / `nx.json#defaultBase` by `vis migrate nx`.",
@@ -265,6 +285,16 @@
265
285
  "additionalProperties": false,
266
286
  "description": "Configuration for `vis fmt` — the formatter orchestrator.\n\nTunes adapter detection precedence, per-extension routing, and per-adapter overrides. Flags on the CLI always win over config.\n\nThe default fmt precedence is `oxfmt → biome → dprint → prettier → deno-fmt`. When multiple adapters claim the same extension, the first in this order owns it unless overridden here."
267
287
  },
288
+ "gem": {
289
+ "type": "object",
290
+ "properties": {
291
+ "discover": {
292
+ "type": "boolean"
293
+ }
294
+ },
295
+ "additionalProperties": false,
296
+ "description": "Gems as task projects. Off by default: each `*.gemspec` directory (except `vendor`, `node_modules` and `.bundle`) gets build, test and lint targets when this is set. The root directory is not a task project. POSIX only: the inferred commands are not verified on Windows."
297
+ },
268
298
  "generator": {
269
299
  "type": "object",
270
300
  "properties": {
@@ -288,6 +318,36 @@
288
318
  "additionalProperties": false,
289
319
  "description": "Configuration for the `vis generate` in-repo scaffolding command. Points at additional template directories beyond the defaults (`.vis/templates/` and `.moon/templates/`)."
290
320
  },
321
+ "go": {
322
+ "type": "object",
323
+ "properties": {
324
+ "discover": {
325
+ "type": "boolean"
326
+ }
327
+ },
328
+ "additionalProperties": false,
329
+ "description": "Go modules (the `use` entries of `go.work`) as task projects. Off by default. The root module is not a task project."
330
+ },
331
+ "gradle": {
332
+ "type": "object",
333
+ "properties": {
334
+ "discover": {
335
+ "type": "boolean"
336
+ }
337
+ },
338
+ "additionalProperties": false,
339
+ "description": "Gradle projects as task projects. Off by default: a `settings.gradle(.kts)` with a build script for each module gets build and test targets only when this is set."
340
+ },
341
+ "hex": {
342
+ "type": "object",
343
+ "properties": {
344
+ "discover": {
345
+ "type": "boolean"
346
+ }
347
+ },
348
+ "additionalProperties": false,
349
+ "description": "Hex apps as task projects. Off by default: each `<apps_path>/*` app of an umbrella `mix.exs` gets build, test and format-check targets when this is set. The root project is not a task project. POSIX only: the inferred commands are not verified on Windows."
350
+ },
291
351
  "inferTargets": {
292
352
  "anyOf": [
293
353
  {
@@ -380,6 +440,16 @@
380
440
  "additionalProperties": false,
381
441
  "description": "Configuration for `vis lint` — the linter orchestrator.\n\nTunes adapter detection precedence and per-adapter overrides. Flags on the CLI always win over config.\n\nThe default lint precedence is `oxlint → biome → eslint → stylelint → deno-lint`. Override with `order` to e.g. let biome fire before oxlint when the workspace standardises on biome."
382
442
  },
443
+ "maven": {
444
+ "type": "object",
445
+ "properties": {
446
+ "discover": {
447
+ "type": "boolean"
448
+ }
449
+ },
450
+ "additionalProperties": false,
451
+ "description": "Maven modules as task projects. Off by default: a directory with a `pom.xml` (and a project-root `artifactId`) gets build and test targets only when this is set."
452
+ },
383
453
  "mcpPromote": {
384
454
  "type": "object",
385
455
  "properties": {
@@ -493,6 +563,16 @@
493
563
  },
494
564
  "description": "Named input patterns inherited by every project target. Equivalent to task-runner's `namedInputs` but configurable from the vis config."
495
565
  },
566
+ "nuget": {
567
+ "type": "object",
568
+ "properties": {
569
+ "discover": {
570
+ "type": "boolean"
571
+ }
572
+ },
573
+ "additionalProperties": false,
574
+ "description": "NuGet projects as task projects. Off by default: each directory with one `*.csproj` or `*.fsproj` (outside `bin`, `obj` and `node_modules`) gets build, test and format:check targets when this is set. POSIX only: the inferred commands are not verified on Windows."
575
+ },
496
576
  "overrides": {
497
577
  "type": "object",
498
578
  "additionalProperties": {
@@ -846,6 +926,16 @@
846
926
  "additionalProperties": false,
847
927
  "description": "Pre-flight checks fired before `vis run` starts the orchestrator. Each check is opt-out (`false`) — defaults are sensible for the common monorepo case."
848
928
  },
929
+ "python": {
930
+ "type": "object",
931
+ "properties": {
932
+ "discover": {
933
+ "type": "boolean"
934
+ }
935
+ },
936
+ "additionalProperties": false,
937
+ "description": "Python projects as task projects. Off by default: a directory with a `pyproject.toml` (and `[project]`) gets an inferred build target only when this is set."
938
+ },
849
939
  "release": {
850
940
  "$ref": "#/$defs/VisReleaseConfig",
851
941
  "description": "Configuration for the `vis release` subsystem. Controls change-file authoring, version computation, channel routing, publish behavior, and CI integration. See `packages/tooling/vis/rfc/design-release-manager.md`."
@@ -887,6 +977,29 @@
887
977
  "$ref": "#/$defs/RuntimeId",
888
978
  "description": "Target JS runtime for this workspace/project — `\"node\"` (default) or `\"bun\"`. Overridden by the `--runtime` flag and the `VIS_RUNTIME` env var; falls back to lockfile detection when unset. Part of the cross-runtime multi-tool (see `rfc/design-runtime-multitool.md`)."
889
979
  },
980
+ "sbom": {
981
+ "type": "object",
982
+ "properties": {
983
+ "ecosystems": {
984
+ "type": "array",
985
+ "items": {
986
+ "type": "string",
987
+ "enum": [
988
+ "dart",
989
+ "go",
990
+ "gradle",
991
+ "hex",
992
+ "maven",
993
+ "nuget",
994
+ "swift",
995
+ "zig"
996
+ ]
997
+ }
998
+ }
999
+ },
1000
+ "additionalProperties": false,
1001
+ "description": "Options for `vis sbom`. `ecosystems` opts in ecosystems that the BOM otherwise leaves out: Maven, Gradle, Hex, Go, Dart, Swift, NuGet and Zig. An ecosystem is also included when its discover key (`maven.discover`, `go.discover`, ...) is on. Presence of a lock file or manifest alone does not include it; `vis sbom` reports such ecosystems on stderr instead."
1002
+ },
890
1003
  "scopedTasks": {
891
1004
  "type": "array",
892
1005
  "items": {
@@ -1872,6 +1985,16 @@
1872
1985
  "description": "When `true`, every task command is scanned for `${VAR}` / `$VAR` references before spawn. If a referenced var is unset in the task's effective env (envFile + service env + per-task `env` + `process.env`), the task fails with an actionable error naming the missing variable, instead of letting the shell silently substitute an empty string.\n\nOverride per run with `--strict-env` / `--no-strict-env`. Override per target with `options.strictEnv`.",
1873
1986
  "default": false
1874
1987
  },
1988
+ "swift": {
1989
+ "type": "object",
1990
+ "properties": {
1991
+ "discover": {
1992
+ "type": "boolean"
1993
+ }
1994
+ },
1995
+ "additionalProperties": false,
1996
+ "description": "Swift packages (a `Package.swift` directory under the root) as task projects. Off by default. Commands are `swift build`, `swift test`, and a `swift-format lint --strict` check."
1997
+ },
1875
1998
  "taskGroups": {
1876
1999
  "type": "object",
1877
2000
  "additionalProperties": {
@@ -3627,6 +3750,16 @@
3627
3750
  "examples": [
3628
3751
  ">=1.0.0"
3629
3752
  ]
3753
+ },
3754
+ "zig": {
3755
+ "type": "object",
3756
+ "properties": {
3757
+ "discover": {
3758
+ "type": "boolean"
3759
+ }
3760
+ },
3761
+ "additionalProperties": false,
3762
+ "description": "Zig packages as task projects. Off by default: the workspace root's `build.zig.zon` and its in-workspace `.path` dependencies get build, test and format-check targets only when this is set. The root itself is not a task project."
3630
3763
  }
3631
3764
  },
3632
3765
  "additionalProperties": false,
@@ -4024,6 +4157,16 @@
4024
4157
  "type": "boolean",
4025
4158
  "description": "Companion to `bumpMinorPreMajor` — also demote `minor` bumps to `patch` for pre-1.0 versions. Maps to release-please's `bump-patch-for-minor-pre-major`. No-op without `bumpMinorPreMajor`. Default `false`."
4026
4159
  },
4160
+ "cargo": {
4161
+ "type": "object",
4162
+ "properties": {
4163
+ "discover": {
4164
+ "type": "boolean"
4165
+ }
4166
+ },
4167
+ "additionalProperties": false,
4168
+ "description": "Cargo crates as release packages. Off by default: a repo with Rust crates sees no change until `discover` is set. When on, every crate in the root `Cargo.toml`'s `[workspace].members` (minus `exclude`) is a release package, unless a JS package already claims its manifest."
4169
+ },
4027
4170
  "changedFilePatterns": {
4028
4171
  "type": "array",
4029
4172
  "items": {
@@ -4068,6 +4211,16 @@
4068
4211
  },
4069
4212
  "description": "Per-channel routing config (semantic-release-style)."
4070
4213
  },
4214
+ "composer": {
4215
+ "type": "object",
4216
+ "properties": {
4217
+ "discover": {
4218
+ "type": "boolean"
4219
+ }
4220
+ },
4221
+ "additionalProperties": false,
4222
+ "description": "Composer packages as release packages. Off by default. When on, the root `composer.json` with a `name` is a release package. The version is the highest `vX.Y.Z` git tag, and the release creates the next tag. Nested packages and a `\"version\"` key are refused."
4223
+ },
4071
4224
  "currentVersionResolver": {
4072
4225
  "type": "string",
4073
4226
  "enum": [
@@ -4077,6 +4230,16 @@
4077
4230
  ],
4078
4231
  "description": "Source of truth for \"what is the current version of this package?\", controlling how `oldVersion` is resolved when building the release plan.\n\n `\"disk\"` (default) — read `package.json#version` (or the equivalent manifest field for non-npm versionActions). Preserves vis's historical behaviour and is the right choice when the manifest on disk is the canonical source. `\"registry\"` — query the package registry via the package's `versionActions.readPublishedVersion()`. Useful when the manifest drifts between repo and registry (e.g. teams that publish out-of-band) and you want the registry to win. `\"git-tag\"` — find the highest `releaseTagPattern`-matching tag in the current commit's ancestry and parse the version out of it. Matches nx's `git-tag` resolver and release-please's tag-based lookup.\n\n`\"registry\"` and `\"git-tag\"` fall back to the manifest version when their primary source cannot produce a valid semver (e.g. registry 404 on a freshly-added package, no matching tag yet, etc.) and surface a plan warning so the operator sees what happened.\n\nOverridable per-package via `packages.<name>.currentVersionResolver`.\n\nThe `--first-release` CLI flag is the bootstrap shortcut for this setting — it forces `\"disk\"` regardless of config and additionally skips remote-tag collision checks, so the very first run on a greenfield monorepo can't trip over missing tags or registry 404s."
4079
4232
  },
4233
+ "dart": {
4234
+ "type": "object",
4235
+ "properties": {
4236
+ "discover": {
4237
+ "type": "boolean"
4238
+ }
4239
+ },
4240
+ "additionalProperties": false,
4241
+ "description": "Dart packages as release packages. Off by default. When on, the root `pubspec.yaml` (when it sets a version) and each member of its `workspace:` list is a release package named by its `name:`. The version must be a `version:` literal in that pubspec. Publishes to pub.dev with `dart pub publish`."
4242
+ },
4080
4243
  "defaultManaged": {
4081
4244
  "type": "boolean",
4082
4245
  "description": "Default `release.managed` for unconfigured packages. Default: `false`."
@@ -4104,6 +4267,16 @@
4104
4267
  "type": "boolean",
4105
4268
  "description": "Run the project's Prettier over the files the version step writes (package.json bumps + CHANGELOG.md entries) before committing them (RFC §14 step 7). Scoped to the changed files only — never the whole tree. Resolves the project's own Prettier from the workspace root; soft-fails if Prettier isn't installed.\n\nDefault: `false` (opt-in — a project that doesn't use Prettier, or whose Prettier config conflicts with how vis writes JSON, leaves this off)."
4106
4269
  },
4270
+ "gem": {
4271
+ "type": "object",
4272
+ "properties": {
4273
+ "discover": {
4274
+ "type": "boolean"
4275
+ }
4276
+ },
4277
+ "additionalProperties": false,
4278
+ "description": "Gems as release packages. Off by default. Every `*.gemspec` under the root (skipping `vendor`, `node_modules` and `.bundle`) is a release package named by its `spec.name` literal. The version is `spec.version = \"…\"`, or `Name::VERSION` with `VERSION = \"…\"` in `lib/<name>/version.rb`. Publish runs `gem build` and `gem push` (POSIX only)."
4279
+ },
4107
4280
  "githubHost": {
4108
4281
  "type": "string",
4109
4282
  "description": "Self-hosted GitHub Enterprise host (e.g. `\"github.acme.com\"` — no scheme). Translates to the `GH_HOST` env var that the `gh` CLI consumes natively, so all adapter calls land on the right instance. Operators can also export `GH_HOST` directly; this config knob is the typed, vis.config.ts-discoverable equivalent. Ignored when `provider` resolves to anything other than `github`."
@@ -4120,6 +4293,26 @@
4120
4293
  "$ref": "#/$defs/GitUserConfig",
4121
4294
  "description": "Git committer identity used by CI workflows."
4122
4295
  },
4296
+ "go": {
4297
+ "type": "object",
4298
+ "properties": {
4299
+ "discover": {
4300
+ "type": "boolean"
4301
+ }
4302
+ },
4303
+ "additionalProperties": false,
4304
+ "description": "Go modules as release packages. Off by default. When on, every `use` entry of `go.work` (or the root `go.mod` without one) is a release package named by its module path. The version is the highest git tag for the module, and the release creates the next tag. A `/vN` major needs a matching module path."
4305
+ },
4306
+ "gradle": {
4307
+ "type": "object",
4308
+ "properties": {
4309
+ "discover": {
4310
+ "type": "boolean"
4311
+ }
4312
+ },
4313
+ "additionalProperties": false,
4314
+ "description": "Gradle modules as release packages. Off by default. When on, the root build and every module in `settings.gradle(.kts)` is a release package named `group:artifact`. The version must be a string literal in the module's script or the root script's allprojects / subprojects block; a group or version the release cannot read fails it."
4315
+ },
4123
4316
  "groupPreVersionCommands": {
4124
4317
  "type": "object",
4125
4318
  "additionalProperties": {
@@ -4127,6 +4320,16 @@
4127
4320
  },
4128
4321
  "description": "Group-scoped preVersion command. Runs once before any package in the group is versioned. `groupName` matches a `fixed`/`linked` array's index (group-0, group-1, …) or a named entry (future)."
4129
4322
  },
4323
+ "hex": {
4324
+ "type": "object",
4325
+ "properties": {
4326
+ "discover": {
4327
+ "type": "boolean"
4328
+ }
4329
+ },
4330
+ "additionalProperties": false,
4331
+ "description": "Hex packages as release packages. Off by default. The root `mix.exs` is a package, and so is each `<apps_path>/*` app of an umbrella. The name is the `package: [name: \"…\"]` string, or the `app:` atom. The version is a `version: \"…\"` literal, or `version: \\@version` with a literal `\\@version \"…\"` attribute; a `mix.exs` with no `version:` key is an aggregate and is skipped. Publish runs `mix hex.publish --yes` (POSIX only), with the key in `HEX_API_KEY`."
4332
+ },
4130
4333
  "httpProxy": {
4131
4334
  "type": "string",
4132
4335
  "description": "HTTPS proxy URL (e.g. `\"http://proxy.acme.com:8080\"`) for enterprise networks that route outbound HTTPS through a proxy.\n\nWired through to two surfaces:\n\n 1. `gh` / `glab` CLI subprocesses get `HTTPS_PROXY` and `HTTP_PROXY` set on their env so they tunnel through the proxy exactly as if the operator had exported the vars manually.\n\n 2. Every internal `fetch()` call (registry probes in version-actions/{cargo,python,maven,container}.ts and the shared `safeFetchVersionMetadata` helper) attaches an undici `ProxyAgent` via the `dispatcher` option, so Node's built-in fetch routes through the proxy as well.\n\nNode 22's bundled undici handles the proxy plumbing — no `https-proxy-agent` dep needed."
@@ -4170,13 +4373,33 @@
4170
4373
  },
4171
4374
  "description": "Linked groups: members share bump levels but only changed members publish. Accepts the same dual-shape format as `fixed` — see the `ReleaseGroupConfig` doc comment for details."
4172
4375
  },
4376
+ "maven": {
4377
+ "type": "object",
4378
+ "properties": {
4379
+ "discover": {
4380
+ "type": "boolean"
4381
+ }
4382
+ },
4383
+ "additionalProperties": false,
4384
+ "description": "Maven modules as release packages. Off by default. When on, the root `pom.xml` and every module reachable through `<modules>` is a release package named `groupId:artifactId`. A version the release cannot rewrite (no literal, no resolvable parent or property) fails the release."
4385
+ },
4173
4386
  "notifications": {
4174
4387
  "$ref": "#/$defs/NotificationsConfig",
4175
4388
  "description": "Notifications — post-release fan-out to chat / webhook destinations. See {@link NotificationsConfig } . Each channel runs in parallel; per-channel failures log a warning but do NOT fail the publish."
4176
4389
  },
4390
+ "nuget": {
4391
+ "type": "object",
4392
+ "properties": {
4393
+ "discover": {
4394
+ "type": "boolean"
4395
+ }
4396
+ },
4397
+ "additionalProperties": false,
4398
+ "description": "NuGet projects as release packages. Off by default. Every `*.csproj` / `*.fsproj` under the root (skipping `bin`, `obj`, `node_modules` and claimed JS directories) is a release package named by its lowercased package id. The version is a plain `<Version>` literal in the project file, or in the nearest `Directory.Build.props`, which releases its inheriting projects in lockstep. Publish runs `dotnet pack` and `dotnet nuget push` (POSIX only)."
4399
+ },
4177
4400
  "oneCommitPerPackage": {
4178
4401
  "type": "boolean",
4179
- "description": "Emit one release commit per package (a `release(channel): pkg@version [skip ci]` message) instead of a single aggregate commit for the whole wave (RFC §19.5). Mirrors the per-package commit history that multi-semantic-release produced — useful for projects migrating off it that want to preserve `git log` shape. Only honoured when `aggregateRelease` is falsy. Shared artifacts (lockfile + consumed change-file deletions) ride along in the final package's commit.\n\nDefault: `false` (one aggregate commit per wave)."
4402
+ "description": "Emit one release commit per package (a `release(channel): pkg\\@version [skip ci]` message) instead of a single aggregate commit for the whole wave (RFC §19.5). Mirrors the per-package commit history that multi-semantic-release produced — useful for projects migrating off it that want to preserve `git log` shape. Only honoured when `aggregateRelease` is falsy. Shared artifacts (lockfile + consumed change-file deletions) ride along in the final package's commit.\n\nDefault: `false` (one aggregate commit per wave)."
4180
4403
  },
4181
4404
  "packages": {
4182
4405
  "type": "object",
@@ -4190,7 +4413,7 @@
4190
4413
  "items": {
4191
4414
  "$ref": "#/$defs/ReleasePlugin"
4192
4415
  },
4193
- "description": "Lifecycle plugins (tegami-style hooks: `applyDraft` / `willPublish` / `afterPublish` / `afterPublishAll`)."
4416
+ "description": "Lifecycle plugins (hooks: `applyDraft` / `willPublish` / `afterPublish` / `afterPublishAll`)."
4194
4417
  },
4195
4418
  "postPublishCommand": {
4196
4419
  "type": "string",
@@ -4238,6 +4461,16 @@
4238
4461
  "$ref": "#/$defs/PublishConfig",
4239
4462
  "description": "Publish-related config."
4240
4463
  },
4464
+ "python": {
4465
+ "type": "object",
4466
+ "properties": {
4467
+ "discover": {
4468
+ "type": "boolean"
4469
+ }
4470
+ },
4471
+ "additionalProperties": false,
4472
+ "description": "Python projects as release packages. Off by default. When on, the root `pyproject.toml` (with `[project]`) and every `[tool.uv.workspace].members` entry (minus `exclude`) is a release package. A dynamic or missing version fails the release instead of being skipped."
4473
+ },
4241
4474
  "releaseNoteTemplate": {
4242
4475
  "type": "object",
4243
4476
  "properties": {
@@ -4284,6 +4517,16 @@
4284
4517
  "$ref": "#/$defs/SuccessWalkConfig",
4285
4518
  "description": "Post-release notification walk. Configures the \"🎉 This is included in version X.Y.Z\" comment + `released` label pass that runs after a successful publish wave.\n\n**Default OFF.** Leave undefined and the walk never runs — vis will not touch third-party PRs referenced in changelog bodies. Set to `{}` to opt in with defaults, or pass an object to override the comment template / labels / prerelease behaviour."
4286
4519
  },
4520
+ "swift": {
4521
+ "type": "object",
4522
+ "properties": {
4523
+ "discover": {
4524
+ "type": "boolean"
4525
+ }
4526
+ },
4527
+ "additionalProperties": false,
4528
+ "description": "Swift packages as release packages. Off by default. Every directory under the root with a `Package.swift` is a release package named by its `Package(name: \"…\")` literal. The version comes from Git tags, and the release creates the tag."
4529
+ },
4287
4530
  "updateInternalDependencies": {
4288
4531
  "$ref": "#/$defs/UpdateInternalDependenciesMode",
4289
4532
  "description": "Dep-propagation mode. Default: `\"out-of-range\"`."
@@ -4312,6 +4555,16 @@
4312
4555
  }
4313
4556
  ],
4314
4557
  "description": "Workspace-level changelog config (RFC §6.1 / nx parity). When set, renders one CHANGELOG.md at the workspace root in addition to per-package files."
4558
+ },
4559
+ "zig": {
4560
+ "type": "object",
4561
+ "properties": {
4562
+ "discover": {
4563
+ "type": "boolean"
4564
+ }
4565
+ },
4566
+ "additionalProperties": false,
4567
+ "description": "Zig packages as release packages. Off by default. When on, the workspace root's `build.zig.zon` and each in-workspace `.path` dependency that has one is a release package named by its `.name`. The version must be a `.version` string literal; a package with no `.version` is an aggregate and is skipped. Release is a git tag: Zig has no registry, so nothing is uploaded."
4315
4568
  }
4316
4569
  },
4317
4570
  "additionalProperties": false
@@ -4464,7 +4717,7 @@
4464
4717
  },
4465
4718
  "syncGitTag": {
4466
4719
  "type": "boolean",
4467
- "description": "Emit a single shared git tag (and one aggregate GitHub/GitLab release) for the whole group instead of one tag + release per member (tegami parity). Default `false`."
4720
+ "description": "Emit a single shared git tag (and one aggregate GitHub/GitLab release) for the whole group instead of one tag + release per member. Default `false`."
4468
4721
  },
4469
4722
  "tagPattern": {
4470
4723
  "type": "string",
@@ -4870,6 +5123,13 @@
4870
5123
  "versionActions": {
4871
5124
  "type": "string",
4872
5125
  "description": "Built-in id (`\"npm\"`, `\"native-addon\"`, `\"private\"`, `\"shell\"`, `\"cargo\"`, `\"python\"`, `\"maven\"`, `\"container\"`, `\"jsr\"`) or a path to a custom implementation module."
5126
+ },
5127
+ "versionFiles": {
5128
+ "type": "array",
5129
+ "items": {
5130
+ "type": "string"
5131
+ },
5132
+ "description": "Non-JS version manifests to bump alongside `package.json`, relative to the package directory. Supported basenames: `Cargo.toml` (`[package]` and `[workspace.package]`) and `tauri.conf.json` (Tauri v1 `package.version` and v2 top-level `version`). Unlike `extraFiles` no regex is needed, and an unsupported basename fails the release instead of being skipped."
4873
5133
  }
4874
5134
  },
4875
5135
  "additionalProperties": false
@@ -4957,7 +5217,7 @@
4957
5217
  "name"
4958
5218
  ],
4959
5219
  "additionalProperties": true,
4960
- "description": "A release lifecycle plugin (tegami parity). Unlike the single-purpose `defineVersionActions` / `defineChangelogFormatter` / `defineNotificationChannel` extension points, a plugin can hook arbitrary points of the version/publish lifecycle — e.g. run a build in `willPublish`, push docs in `afterPublishAll`.\n\nError semantics: `applyDraft` and `willPublish` throw-propagate (they gate the release — fail fast). `afterPublish` / `afterPublishAll` are post-effect: a throw is logged and swallowed so a side-effect hiccup can't \"unpublish\"."
5220
+ "description": "A release lifecycle plugin. Unlike the single-purpose `defineVersionActions` / `defineChangelogFormatter` / `defineNotificationChannel` extension points, a plugin can hook arbitrary points of the version/publish lifecycle — e.g. run a build in `willPublish`, push docs in `afterPublishAll`.\n\nError semantics: `applyDraft` and `willPublish` throw-propagate (they gate the release — fail fast). `afterPublish` / `afterPublishAll` are post-effect: a throw is logged and swallowed so a side-effect hiccup can't \"unpublish\"."
4961
5221
  },
4962
5222
  "PublishConfig": {
4963
5223
  "type": "object",
@@ -5010,7 +5270,7 @@
5010
5270
  },
5011
5271
  "lockInGit": {
5012
5272
  "type": "boolean",
5013
- "description": "Persist in-progress publish state to a git-TRACKED `<changesDir>/publish-lock.json` instead of the gitignored `.state.json`. Default `false`.\n\nThe tracked lock is committed (and pushed by the publish flow) so a partially-failed publish can be resumed from a *fresh checkout on a different runner* — the ephemeral-CI case where `.state.json` (untracked) never survives the clone. On full success the lock is removed and the removal committed. Mirrors tegami's `publish-lock.yaml`-in-git model."
5273
+ "description": "Persist in-progress publish state to a git-TRACKED `<changesDir>/publish-lock.json` instead of the gitignored `.state.json`. Default `false`.\n\nThe tracked lock is committed (and pushed by the publish flow) so a partially-failed publish can be resumed from a *fresh checkout on a different runner* — the ephemeral-CI case where `.state.json` (untracked) never survives the clone. On full success the lock is removed and the removal committed."
5014
5274
  },
5015
5275
  "noRelease": {
5016
5276
  "type": "boolean",