@visulima/vis 4.1.20 → 4.3.0

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 (197) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE.md +804 -360
  3. package/dist/bin.js +1 -1
  4. package/dist/binx.js +1 -1
  5. package/dist/config/index.d.ts +117 -0
  6. package/dist/packem_chunks/CONFIG_FILES.js +1 -1
  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 +50 -50
  11. package/dist/packem_chunks/cli-exec.js +1 -1
  12. package/dist/packem_chunks/cli-main.js +146 -142
  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 +1 -1
  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 +1 -1
  26. package/dist/packem_chunks/handler11.js +1 -1
  27. package/dist/packem_chunks/handler12.js +1 -1
  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 +2 -2
  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 +1 -1
  50. package/dist/packem_chunks/handler50.js +1 -1
  51. package/dist/packem_chunks/handler51.js +1 -1
  52. package/dist/packem_chunks/handler52.js +3 -3
  53. package/dist/packem_chunks/handler53.js +1 -1
  54. package/dist/packem_chunks/handler54.js +2 -2
  55. package/dist/packem_chunks/handler55.js +1 -1
  56. package/dist/packem_chunks/handler58.js +3 -3
  57. package/dist/packem_chunks/handler59.js +1 -1
  58. package/dist/packem_chunks/handler6.js +5 -5
  59. package/dist/packem_chunks/handler60.js +1 -1
  60. package/dist/packem_chunks/handler61.js +1 -1
  61. package/dist/packem_chunks/handler62.js +1 -1
  62. package/dist/packem_chunks/handler63.js +1 -1
  63. package/dist/packem_chunks/handler64.js +1 -1
  64. package/dist/packem_chunks/handler65.js +4 -4
  65. package/dist/packem_chunks/handler66.js +1 -1
  66. package/dist/packem_chunks/handler67.js +10 -10
  67. package/dist/packem_chunks/handler68.js +1 -1
  68. package/dist/packem_chunks/handler69.js +1 -1
  69. package/dist/packem_chunks/handler7.js +1 -1
  70. package/dist/packem_chunks/handler70.js +4 -4
  71. package/dist/packem_chunks/handler71.js +6 -6
  72. package/dist/packem_chunks/handler72.js +1 -1
  73. package/dist/packem_chunks/handler73.js +87 -86
  74. package/dist/packem_chunks/handler74.js +1 -1
  75. package/dist/packem_chunks/handler75.js +31 -31
  76. package/dist/packem_chunks/handler76.js +4 -4
  77. package/dist/packem_chunks/handler77.js +1 -1
  78. package/dist/packem_chunks/handler78.js +64 -64
  79. package/dist/packem_chunks/handler8.js +1 -1
  80. package/dist/packem_chunks/handler9.js +1 -1
  81. package/dist/packem_chunks/heal-accept.js +1 -1
  82. package/dist/packem_chunks/heal.js +1 -1
  83. package/dist/packem_chunks/help-command.js +7 -7
  84. package/dist/packem_chunks/hex-plan.js +3 -0
  85. package/dist/packem_chunks/hex-projects.js +1 -0
  86. package/dist/packem_chunks/index2.js +52 -42
  87. package/dist/packem_chunks/index4.js +58 -802
  88. package/dist/packem_chunks/index5.js +802 -7
  89. package/dist/packem_chunks/index6.js +7 -59
  90. package/dist/packem_chunks/keys-refresh.js +1 -1
  91. package/dist/packem_chunks/lean.js +1 -1
  92. package/dist/packem_chunks/list.js +1 -1
  93. package/dist/packem_chunks/loader.js +1 -1
  94. package/dist/packem_chunks/maven-plan.js +1 -0
  95. package/dist/packem_chunks/maven-projects.js +1 -0
  96. package/dist/packem_chunks/nuget-plan.js +1 -0
  97. package/dist/packem_chunks/nuget-projects.js +1 -0
  98. package/dist/packem_chunks/orchestrator.js +33 -33
  99. package/dist/packem_chunks/prune.js +1 -1
  100. package/dist/packem_chunks/python-plan.js +3 -0
  101. package/dist/packem_chunks/python-projects.js +1 -0
  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 +1 -1
  109. package/dist/packem_chunks/ts-loader.js +5 -5
  110. package/dist/packem_chunks/verify-lockfile.js +1 -1
  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/Table-BB8xHTU5-BLPS917D.js +11 -0
  115. package/dist/packem_shared/affected-selection-BzIbfpA1.js +1 -0
  116. package/dist/packem_shared/{affected-shas-Dd0P7fGD.js → affected-shas-B2V84O0g.js} +1 -1
  117. package/dist/packem_shared/{ai-analysis-DSQQDFU9.js → ai-analysis-Cfj24UAy.js} +1 -1
  118. package/dist/packem_shared/{ai-fix-BHyx1F1j.js → ai-fix-DeRUtT-s.js} +1 -1
  119. package/dist/packem_shared/{augment-COAiXSIx.js → augment-B9kSZuvW.js} +1 -1
  120. package/dist/packem_shared/{bin-Bq3tJmvE.js → bin-D9TsVhq2.js} +1 -1
  121. package/dist/packem_shared/{build-scripts-pdVmqXRm.js → build-scripts-CEDx_nJp.js} +1 -1
  122. package/dist/packem_shared/{command-runtime-CiLVo4ED.js → command-runtime-p4IXiIf6.js} +1 -1
  123. package/dist/packem_shared/composer-DR3D-Psb.js +1 -0
  124. package/dist/packem_shared/dart-pubspec-BK_cK2EP.js +2 -0
  125. package/dist/packem_shared/{dependency-scan-DBH2Qo4I.js → dependency-scan-B8jroa1D.js} +1 -1
  126. package/dist/packem_shared/{docker-Dy-X_BuM.js → docker-DXqV-07f.js} +1 -1
  127. package/dist/packem_shared/ecosystem-gate-1M3wnsTr.js +6 -0
  128. package/dist/packem_shared/{failure-log-3R522Vb5.js → failure-log-D2x5BT8S.js} +1 -1
  129. package/dist/packem_shared/{formatBytes-BHAzNIrn-XohRrPdt.js → formatBytes-BHAzNIrn-CrusHOew.js} +1 -1
  130. package/dist/packem_shared/gemspec-K7N05xxc.js +3 -0
  131. package/dist/packem_shared/glob-Cyk1H9ZL-Dxlf9Swz.js +1 -0
  132. package/dist/packem_shared/go-modules-BsVqtyeC.js +1 -0
  133. package/dist/packem_shared/gradle-build-CHZDHyjI.js +8 -0
  134. package/dist/packem_shared/index-BO8qIogg.js +1 -0
  135. package/dist/packem_shared/index-BzhrR_iC.js +22 -0
  136. package/dist/packem_shared/{index-Vm90Te96.js → index-CNYv9D8g.js} +1 -1
  137. package/dist/packem_shared/{isAccessibleSync-DYKTrrvc-CSnBISfV.js → isAccessibleSync-DYKTrrvc-C-_5cgwu.js} +1 -1
  138. package/dist/packem_shared/{lifecycle-CAIJbxIa.js → lifecycle-D6PMPor-.js} +1 -1
  139. package/dist/packem_shared/{lockfile-DVFySxTS.js → lockfile-CiUtEbnt.js} +1 -1
  140. package/dist/packem_shared/{manifests-BNSmpPF_.js → manifests-Du4yKlf_.js} +1 -1
  141. package/dist/packem_shared/maven-pom-B0KG9kJQ.js +1 -0
  142. package/dist/packem_shared/{min-release-age-ChzTC7_I.js → min-release-age-JViyQuBM.js} +1 -1
  143. package/dist/packem_shared/missing-package-json-DnHMxRnG.js +1 -0
  144. package/dist/packem_shared/mix-project-RYvdZp3_.js +2 -0
  145. package/dist/packem_shared/multi-eco-lockfiles-CUUxUjHK.js +1 -0
  146. package/dist/packem_shared/{native-config-sync-BSzU4qUO.js → native-config-sync-TdTWjVgI.js} +2 -2
  147. package/dist/packem_shared/nuget-project-RApYSW_y.js +4 -0
  148. package/dist/packem_shared/{osv-bloom-JYIWcH3F.js → osv-bloom-BCAX5ARR.js} +1 -1
  149. package/dist/packem_shared/package-version-DUcG-b7S.js +4 -0
  150. package/dist/packem_shared/{packument-DyuhH1Gz.js → packument-CyGSNquL.js} +1 -1
  151. package/dist/packem_shared/{pm-runner-d93_73O6.js → pm-runner-CMSml1Bj.js} +1 -1
  152. package/dist/packem_shared/{project-name-filter-CC5FF49q.js → project-name-filter--bq-FL2f.js} +1 -1
  153. package/dist/packem_shared/{provenance-BH80RHXx.js → provenance-DyF0b6KX.js} +1 -1
  154. package/dist/packem_shared/{readJsonSync-CbryXYxN-B2aSeDpC.js → readJsonSync-CbryXYxN-EWl7_7KX.js} +1 -1
  155. package/dist/packem_shared/{registry-keys-BWHRFWbb.js → registry-keys-DwB3ZXS_.js} +1 -1
  156. package/dist/packem_shared/{resolve-explicit-DuJ3mbzt.js → resolve-explicit-BjCEm0s-.js} +1 -1
  157. package/dist/packem_shared/resolve-runtime-CNiHcVtx.js +1 -0
  158. package/dist/packem_shared/{run-file-jMngGQhs.js → run-file-UBukWaha.js} +1 -1
  159. package/dist/packem_shared/{runtime-check-BklgEMkC.js → runtime-check-1U8HrQd9.js} +1 -1
  160. package/dist/packem_shared/{s1ngularity-BJ5j2vbJ.js → s1ngularity-YfmkD_AH.js} +1 -1
  161. package/dist/packem_shared/scan-progress-C_zaZjyY.js +2 -0
  162. package/dist/packem_shared/{selectors-B7lSFz7l.js → selectors-edwcgNl3.js} +1 -1
  163. package/dist/packem_shared/{signatures-BP042BlB.js → signatures-CL3ckp_Y.js} +1 -1
  164. package/dist/packem_shared/{spinner-BM_0Bj6x.js → spinner-DuB0K0Am.js} +1 -1
  165. package/dist/packem_shared/swift-package-B6X5kzQE.js +1 -0
  166. package/dist/packem_shared/{tabs-UDYQ3tqt.js → tabs-RZd_e1M0.js} +1 -1
  167. package/dist/packem_shared/{target-merge-B4No-LHM.js → target-merge-DVJl-7Qz.js} +1 -1
  168. package/dist/packem_shared/{target-options-d_rIrLyq.js → target-options-DsHFmRZH.js} +1 -1
  169. package/dist/packem_shared/{toolchain-DY11tPCw.js → toolchain-BRdpaAC4.js} +1 -1
  170. package/dist/packem_shared/{typosquats-CSkIFgF5.js → typosquats-8u0drCqQ.js} +1 -1
  171. package/dist/packem_shared/{use-measured-height-BPQg2q_p.js → use-measured-height-DWkDV9Dj.js} +1 -1
  172. package/dist/packem_shared/verify-B_MblU_Q.js +1 -0
  173. package/dist/packem_shared/{vis-update-app-CR21zyht.js → vis-update-app-D73C__fx.js} +1 -1
  174. package/dist/packem_shared/{vis-user-error-qqqhLoF6.js → vis-user-error-Cpg2FqA4.js} +15 -15
  175. package/dist/packem_shared/{watch-Dswvj6Zp.js → watch-CcTketln.js} +1 -1
  176. package/dist/packem_shared/{watch-loop-COWvvSbR.js → watch-loop-qRn0IHPG.js} +1 -1
  177. package/dist/packem_shared/{writeFileSync-DJoHk3Ks-CgQ-VNNT.js → writeFileSync-DJoHk3Ks-BPRoepNw.js} +1 -1
  178. package/dist/packem_shared/zig-manifest-P7ydLEOa.js +7 -0
  179. package/dist/release/plugin-sdk.d.ts +1 -1
  180. package/dist/release/types.d.ts +133 -7
  181. package/dist/runtime/preload.js +1 -1
  182. package/index.js +52 -52
  183. package/package.json +12 -12
  184. package/schemas/vis-config.schema.json +279 -5
  185. package/schemas/vis-release-config.schema.json +132 -5
  186. package/dist/packem_shared/Table-kgZ-Cd21-DdNsp69H.js +0 -9
  187. package/dist/packem_shared/advisories-0ScpWAHV.js +0 -1
  188. package/dist/packem_shared/affected-selection-Bt4qkPUb.js +0 -1
  189. package/dist/packem_shared/cyclonedx-CX2fFvDi.js +0 -4
  190. package/dist/packem_shared/glob-Cyk1H9ZL-ox19CSsT.js +0 -1
  191. package/dist/packem_shared/index-Czrll7SU.js +0 -1
  192. package/dist/packem_shared/index-DHD8wb6Z.js +0 -22
  193. package/dist/packem_shared/missing-package-json-C0keIt78.js +0 -1
  194. package/dist/packem_shared/package-version-DFlytdgJ.js +0 -4
  195. package/dist/packem_shared/resolve-runtime-C7NBCA1C.js +0 -1
  196. package/dist/packem_shared/scan-progress-DRIGQRMr.js +0 -2
  197. package/dist/packem_shared/verify-D8wYvB85.js +0 -1
@@ -5,6 +5,20 @@
5
5
  "description": "Workspace configuration for @visulima/vis. Used by defineConfig() in vis.config.ts. This schema is for non-TypeScript editors; TypeScript users get autocomplete from defineConfig() types.",
6
6
  "type": "object",
7
7
  "properties": {
8
+ "affectedIgnore": {
9
+ "type": "array",
10
+ "items": {
11
+ "type": "string"
12
+ },
13
+ "description": "Workspace-relative glob patterns for changed files outside every project that `vis affected`, `vis run --affected`, `vis ci` and `vis ci ignore` should not count as a change.\n\nBy default a changed file that belongs to no project (a root `tsconfig.json`, `package.json`, …) is a global change and marks every project affected. A changed file matching one of these patterns is skipped instead. The patterns are only checked for files that belong to NO project: a file inside a project root is never filtered, so a broad pattern like `*.md` cannot hide a real package change.\n\nPatterns use `path.matchesGlob` syntax, where `*` does not cross `/`: `*.md` matches `README.md` but not `docs/guide.md`.\n\nDo NOT list paths whose changes really do affect projects, such as bundler-inlined shared source or the root `tsconfig.json`: an edit there would then run nothing.",
14
+ "examples": [
15
+ [
16
+ "api-snapshots/**",
17
+ "plans/**",
18
+ "*.md"
19
+ ]
20
+ ]
21
+ },
8
22
  "ai": {
9
23
  "type": "object",
10
24
  "properties": {
@@ -36,6 +50,16 @@
36
50
  "$ref": "#/$defs/CodeownersConfig",
37
51
  "description": "Code ownership configuration. Controls how `vis sync codeowners` renders the generated CODEOWNERS file."
38
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
+ },
39
63
  "constraints": {
40
64
  "type": "object",
41
65
  "properties": {
@@ -171,6 +195,16 @@
171
195
  "additionalProperties": false,
172
196
  "description": "Configuration for the `vis create` scaffolding command. Controls template downloads (via giget), default options, and post-creation behavior."
173
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
+ },
174
208
  "defaultBase": {
175
209
  "type": "string",
176
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`.",
@@ -251,6 +285,16 @@
251
285
  "additionalProperties": false,
252
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."
253
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
+ },
254
298
  "generator": {
255
299
  "type": "object",
256
300
  "properties": {
@@ -274,6 +318,36 @@
274
318
  "additionalProperties": false,
275
319
  "description": "Configuration for the `vis generate` in-repo scaffolding command. Points at additional template directories beyond the defaults (`.vis/templates/` and `.moon/templates/`)."
276
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
+ },
277
351
  "inferTargets": {
278
352
  "anyOf": [
279
353
  {
@@ -366,6 +440,16 @@
366
440
  "additionalProperties": false,
367
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."
368
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
+ },
369
453
  "mcpPromote": {
370
454
  "type": "object",
371
455
  "properties": {
@@ -479,6 +563,16 @@
479
563
  },
480
564
  "description": "Named input patterns inherited by every project target. Equivalent to task-runner's `namedInputs` but configurable from the vis config."
481
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
+ },
482
576
  "overrides": {
483
577
  "type": "object",
484
578
  "additionalProperties": {
@@ -832,6 +926,16 @@
832
926
  "additionalProperties": false,
833
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."
834
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
+ },
835
939
  "release": {
836
940
  "$ref": "#/$defs/VisReleaseConfig",
837
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`."
@@ -873,6 +977,29 @@
873
977
  "$ref": "#/$defs/RuntimeId",
874
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`)."
875
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
+ },
876
1003
  "scopedTasks": {
877
1004
  "type": "array",
878
1005
  "items": {
@@ -1858,6 +1985,16 @@
1858
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`.",
1859
1986
  "default": false
1860
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
+ },
1861
1998
  "taskGroups": {
1862
1999
  "type": "object",
1863
2000
  "additionalProperties": {
@@ -3613,6 +3750,16 @@
3613
3750
  "examples": [
3614
3751
  ">=1.0.0"
3615
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."
3616
3763
  }
3617
3764
  },
3618
3765
  "additionalProperties": false,
@@ -4010,6 +4157,16 @@
4010
4157
  "type": "boolean",
4011
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`."
4012
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
+ },
4013
4170
  "changedFilePatterns": {
4014
4171
  "type": "array",
4015
4172
  "items": {
@@ -4054,6 +4211,16 @@
4054
4211
  },
4055
4212
  "description": "Per-channel routing config (semantic-release-style)."
4056
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
+ },
4057
4224
  "currentVersionResolver": {
4058
4225
  "type": "string",
4059
4226
  "enum": [
@@ -4063,6 +4230,16 @@
4063
4230
  ],
4064
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."
4065
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
+ },
4066
4243
  "defaultManaged": {
4067
4244
  "type": "boolean",
4068
4245
  "description": "Default `release.managed` for unconfigured packages. Default: `false`."
@@ -4090,6 +4267,16 @@
4090
4267
  "type": "boolean",
4091
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)."
4092
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
+ },
4093
4280
  "githubHost": {
4094
4281
  "type": "string",
4095
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`."
@@ -4106,6 +4293,26 @@
4106
4293
  "$ref": "#/$defs/GitUserConfig",
4107
4294
  "description": "Git committer identity used by CI workflows."
4108
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
+ },
4109
4316
  "groupPreVersionCommands": {
4110
4317
  "type": "object",
4111
4318
  "additionalProperties": {
@@ -4113,6 +4320,16 @@
4113
4320
  },
4114
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)."
4115
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
+ },
4116
4333
  "httpProxy": {
4117
4334
  "type": "string",
4118
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."
@@ -4156,13 +4373,33 @@
4156
4373
  },
4157
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."
4158
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
+ },
4159
4386
  "notifications": {
4160
4387
  "$ref": "#/$defs/NotificationsConfig",
4161
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."
4162
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
+ },
4163
4400
  "oneCommitPerPackage": {
4164
4401
  "type": "boolean",
4165
- "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)."
4166
4403
  },
4167
4404
  "packages": {
4168
4405
  "type": "object",
@@ -4176,7 +4413,7 @@
4176
4413
  "items": {
4177
4414
  "$ref": "#/$defs/ReleasePlugin"
4178
4415
  },
4179
- "description": "Lifecycle plugins (tegami-style hooks: `applyDraft` / `willPublish` / `afterPublish` / `afterPublishAll`)."
4416
+ "description": "Lifecycle plugins (hooks: `applyDraft` / `willPublish` / `afterPublish` / `afterPublishAll`)."
4180
4417
  },
4181
4418
  "postPublishCommand": {
4182
4419
  "type": "string",
@@ -4224,6 +4461,16 @@
4224
4461
  "$ref": "#/$defs/PublishConfig",
4225
4462
  "description": "Publish-related config."
4226
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
+ },
4227
4474
  "releaseNoteTemplate": {
4228
4475
  "type": "object",
4229
4476
  "properties": {
@@ -4270,6 +4517,16 @@
4270
4517
  "$ref": "#/$defs/SuccessWalkConfig",
4271
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."
4272
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
+ },
4273
4530
  "updateInternalDependencies": {
4274
4531
  "$ref": "#/$defs/UpdateInternalDependenciesMode",
4275
4532
  "description": "Dep-propagation mode. Default: `\"out-of-range\"`."
@@ -4298,6 +4555,16 @@
4298
4555
  }
4299
4556
  ],
4300
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."
4301
4568
  }
4302
4569
  },
4303
4570
  "additionalProperties": false
@@ -4450,7 +4717,7 @@
4450
4717
  },
4451
4718
  "syncGitTag": {
4452
4719
  "type": "boolean",
4453
- "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`."
4454
4721
  },
4455
4722
  "tagPattern": {
4456
4723
  "type": "string",
@@ -4856,6 +5123,13 @@
4856
5123
  "versionActions": {
4857
5124
  "type": "string",
4858
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."
4859
5133
  }
4860
5134
  },
4861
5135
  "additionalProperties": false
@@ -4943,7 +5217,7 @@
4943
5217
  "name"
4944
5218
  ],
4945
5219
  "additionalProperties": true,
4946
- "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\"."
4947
5221
  },
4948
5222
  "PublishConfig": {
4949
5223
  "type": "object",
@@ -4996,7 +5270,7 @@
4996
5270
  },
4997
5271
  "lockInGit": {
4998
5272
  "type": "boolean",
4999
- "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."
5000
5274
  },
5001
5275
  "noRelease": {
5002
5276
  "type": "boolean",